src\Controller\API\DashboardController.php line 102

Open in your IDE?
  1. <?php
  2. namespace App\Controller\API;
  3. use App\Entity\Admin\Dashboard;
  4. use App\Entity\Admin\User;
  5. use App\Entity\Admin\UserDashboard;
  6. use App\Entity\Admin\Header;
  7. use App\Entity\Admin\DashboardHeader;
  8. use App\Manager\Admin\DashboardManager;
  9. use App\Manager\Admin\UserDashboardManager;
  10. use App\Manager\Admin\HeaderManager;
  11. use App\Manager\Admin\DashboardHeaderManager;
  12. use App\Manager\Admin\UserManager;
  13. use App\Manager\Admin\ProduitManager;
  14. use App\Manager\Admin\SearchManager;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. use Symfony\Component\HttpFoundation\Request;
  17. use Symfony\Component\HttpFoundation\JsonResponse;
  18. /**
  19.  * @Route ("/api/dashboard", name="api_dashboard_")
  20.  */
  21. class DashboardController
  22. {
  23.     public function __construct(
  24.         private readonly DashboardManager $dashboardManager,
  25.         private readonly UserDashboardManager $userDashboardManager,
  26.         private readonly HeaderManager $headerManager,
  27.         private readonly DashboardHeaderManager $dashboardHeaderManager,
  28.         private readonly UserManager $userManager,
  29.         private readonly ProduitManager $produitManager,
  30.         private readonly SearchManager $searchManager
  31.     ) {
  32.     }
  33.     /**
  34.      * @Route ("/getpu/{produitname}/{username}", name="get_product_user")
  35.      */
  36.     function getDashboardsByProductAndUser(string $produitname, string $username): ?JsonResponse
  37.     {
  38.         $user = $this->userManager->getRepository()->findOneBy(['username' => $username, 'deletedAt' => null]);
  39.         $produit = $this->produitManager->getRepository()->findOneBy(['name' => $produitname]);
  40.         if ($user && $produit) {
  41.             $dashboards = $this->dashboardManager->getRepository()->getDashboardsByProductsAndUser($produit, $user);
  42.             if ($dashboards) {
  43.                 $datas = [];
  44.                 foreach ($dashboards as $dashboard) {
  45.                     $datas[] = $this->dashboardManager->formatDashboardDatas($dashboard, $user);
  46.                 }
  47.                 return new JsonResponse(['message' => 'ok', 'datas' => $datas]);
  48.             }
  49.             return new JsonResponse(['message' => 'Aucun dashboard'], 500);
  50.         }
  51.         return new JsonResponse(['message' => 'Utilisateur ou produit inexistant'], 500);
  52.     }
  53.     /**
  54.      * @Route ("/getdu/{dashboard}/{username}", name="get_dashboard_user")
  55.      */
  56.     function getDashboardByIdAndUser(Dashboard $dashboard, string $username): ?JsonResponse
  57.     {
  58.         $datas = [];
  59.         $user = $this->userManager->getRepository()->findOneBy(['username' => $username, 'deletedAt' => null]);
  60.         if ($dashboard && $user) {
  61.             $datas[] = $this->dashboardManager->formatDashboardDatas($dashboard, $user);
  62.             return new JsonResponse(['message' => 'ok', 'datas' => $datas]);
  63.         }
  64.         return new JsonResponse(['message' => 'Dashboard ou user inexistant'], 500);
  65.     }
  66.     /**
  67.      * @Route ("/getheader/{produitname}", name="get_header_product")
  68.      */
  69.     function getHeadersByProduct(string $produitname): ?JsonResponse
  70.     {
  71.         $produit = $this->produitManager->getRepository()->findOneBy(['name' => $produitname]);
  72.         if ($produit) {
  73.             $headers = $this->headerManager->getRepository()->findBy(['produit' => $produit]);
  74.             if ($headers) {
  75.                 $datas = [];
  76.                 foreach ($headers as $header) {
  77.                     $datas[] = [
  78.                         'id' => $header->getId(),
  79.                         'name' => $header->getName(),
  80.                         'label' => $header->getLabel(),
  81.                         'produit' => $produit->getName(),
  82.                     ];
  83.                 }
  84.                 return new JsonResponse(['message' => 'ok', 'datas' => $datas]);
  85.             }
  86.             return new JsonResponse(['message' => 'Aucun dashboard'], 500);
  87.         }
  88.         return new JsonResponse(['message' => 'Utilisateur ou produit inexistant'], 500);
  89.     }
  90.     /**
  91.      * @Route ("/manage", name="manage")
  92.      */
  93.     function manageDashboard(Request $request): ?JsonResponse
  94.     {
  95.         $errors = [];
  96.         $requestContent = json_decode($request->getContent(), true);
  97.         if (!isset($requestContent['codeGestionnaire']) || empty($requestContent['codeGestionnaire'])) {
  98.             return new JsonResponse(['message' => 'Code gestionnaire manquant'], 500);
  99.         }
  100.         if (!isset($requestContent['produit']) || empty($requestContent['produit'])) {
  101.             return new JsonResponse(['message' => 'Produit'], 500);
  102.         }
  103.         if (!isset($requestContent['dashboard']) || empty($requestContent['dashboard'])) {
  104.             return new JsonResponse(['message' => 'Dashboard manquant'], 500);
  105.         }
  106.         if (!isset($requestContent['dashboard']['headers']) || empty($requestContent['dashboard']['headers'])) {
  107.             return new JsonResponse(['message' => 'Headers manquant'], 500);
  108.         }
  109.         $user = $this->userManager->getRepository()->findOneBy(['username' => $requestContent['codeGestionnaire'], 'deletedAt' => null]);
  110.         if (!$user) {
  111.             return new JsonResponse(['message' => 'Utilisateur inexistant'], 500);
  112.         }
  113.         $produit = $this->produitManager->getRepository()->findOneBy(['name' => $requestContent['produit']]);
  114.         if (!$produit) {
  115.             return new JsonResponse(['message' => 'Produit inexistant'], 500);
  116.         }
  117.         if (isset($requestContent['dashboard']['id']) && $requestContent['dashboard']['id'] > 0) {
  118.             $dashboard = $this->dashboardManager->getRepository()->find($requestContent['dashboard']['id']);
  119.             if (!$dashboard) {
  120.                 return new JsonResponse(['message' => 'Dashboard inexistant'], 500);
  121.             }
  122.         } else {
  123.             $dashboard = new Dashboard();
  124.         }
  125.         $dashboard->setProduit($produit);
  126.         $dashboard->setName($requestContent['dashboard']['name']);
  127.         $dashboard->setAuthor($requestContent['dashboard']['author']);
  128.         $dashboard->setIsPrivate($requestContent['dashboard']['isPrivate']);
  129.         if (isset($requestContent['dashboard']['ordre'])) {
  130.             $dashboard->setOrdre($requestContent['dashboard']['ordre']);
  131.         }
  132.         $dashboard = $this->dashboardManager->update($dashboard);
  133.         $userDashboard = $this->userDashboardManager->getRepository()->findOneBy(['dashboard' => $dashboard, 'user' => $user]);
  134.         if (!$userDashboard) {
  135.             $userDashboard = new UserDashboard();
  136.             $userDashboard->setUser($user);
  137.             $userDashboard->setDashboard($dashboard);
  138.         }
  139.         if (isset($requestContent['dashboard']['searchId']) && $requestContent['dashboard']['searchId'] > 0) {
  140.             $search = $this->searchManager->getRepository()->find($requestContent['dashboard']['searchId']);
  141.             if ($search) {
  142.                 $userDashboard->setSearchId($search->getId());
  143.             } else {
  144.                 $errors[] = "Le search id #{$requestContent['dashboard']['searchId']} n'existe pas, liaison impossible.";
  145.             }
  146.         }
  147.         $userDashboard->setIconColor($requestContent['dashboard']['iconColor']);
  148.         $userDashboard->setPictogramme($requestContent['dashboard']['pictogramme']);
  149.         $userDashboard->setPrincipal($requestContent['dashboard']['principal']);
  150.         $userDashboard->setIsDefault($requestContent['dashboard']['isDefault']);
  151.         $userDashboard = $this->userDashboardManager->update($userDashboard);
  152.         if ($requestContent['dashboard']['isDefault']) {
  153.             $userDashboards = $this->userDashboardManager->getRepository()->findBy(['user' => $user]);
  154.             foreach ($userDashboards as $userDashboardTmp) {
  155.                 if ($userDashboardTmp->getIsDefault() && $userDashboardTmp->getId() != $userDashboard->getId()) {
  156.                     $userDashboardTmp->setIsDefault(0);
  157.                     $this->userDashboardManager->update($userDashboardTmp);
  158.                 }
  159.             }
  160.         }
  161.         $headerIds = [];
  162.         foreach ($requestContent['dashboard']['headers'] as $headerTmp) {
  163.             if (isset($headerTmp['id']) && $headerTmp['id'] > 0) {
  164.                 $header = $this->headerManager->getRepository()->find($headerTmp['id']);
  165.                 if (!$header) {
  166.                     $errors[] = "Les headers id #{$headerTmp['id']} n'existe pas, crĂ©ation d'une correspondance.";
  167.                     $header = new Header();
  168.                     $header->setProduit($produit);
  169.                 }
  170.             } else {
  171.                 $header = new Header();
  172.                 $header->setProduit($produit);
  173.             }
  174.             $header->setName($headerTmp['name']);
  175.             $header->setLabel($headerTmp['label']);
  176.             $header = $this->headerManager->update($header);
  177.             $headerIds[] = $header->getId();
  178.             $dashboardHeader = $this->dashboardHeaderManager->getRepository()->findOneBy(['header' => $header, 'dashboard' => $dashboard]);
  179.             if (!$dashboardHeader) {
  180.                 $dashboardHeader = new DashboardHeader();
  181.                 $dashboardHeader->setHeader($header);
  182.                 $dashboardHeader->setDashboard($dashboard);
  183.             }
  184.             $dashboardHeader->setOrdre($headerTmp['ordre']);
  185.             $dashboardHeader = $this->dashboardHeaderManager->update($dashboardHeader);
  186.         }
  187.         $dashboardHeaders = $this->dashboardHeaderManager->getRepository()->findBy(['dashboard' => $dashboard]);
  188.         if ($dashboardHeaders) {
  189.             foreach ($dashboardHeaders as $dashboardHeader) {
  190.                 if (!in_array($dashboardHeader->getHeader()->getId(), $headerIds)) {
  191.                     $this->dashboardHeaderManager->delete($dashboardHeader);
  192.                 }
  193.             }
  194.         }
  195.         return new JsonResponse(['message' => 'ok', 'errors' => $errors, 'datas' => [$this->dashboardManager->formatDashboardDatas($dashboard, $user)]]);
  196.     }
  197.     /**
  198.      * @Route ("/delete/{gesCode}/{dashboardId}", name="delete")
  199.      */
  200.     public function deleteDashboard(string $gesCode, int $dashboardId): ?JsonResponse
  201.     {
  202.         /** @var User $user */
  203.         $user = $this->userManager->getRepository()->findOneBy(['username' => $gesCode, 'deletedAt' => null]);
  204.         /** @var UserDashboard $userDashboard */
  205.         $userDashboard = $this->userDashboardManager->getRepository()->findOneBy(['user' => $user, 'dashboard' => $dashboardId]);
  206.         if ($userDashboard) {
  207.             $this->userDashboardManager->delete($userDashboard);
  208.             return new JsonResponse(['message' => 'ok', 'errors' => []]);
  209.         }
  210.         return new JsonResponse(['message' => 'ko', 'errors' => ['Aucun dashboard correspondant trouvĂ©.']], 500);
  211.     }
  212. }