src/Controller/Admin/DashboardController.php line 66

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Admin;
  3. use App\Entity\Article;
  4. use App\Entity\ArticleCategorie;
  5. use App\Entity\ArticleCritere;
  6. use App\Entity\ArticleCritereValeur;
  7. use App\Entity\ArticleType;
  8. use App\Entity\Formulaire;
  9. use App\Entity\FormulaireChamp;
  10. use App\Entity\FormulaireInput;
  11. use App\Entity\FormulaireRecap;
  12. use App\Entity\Page;
  13. use App\Entity\Projet;
  14. use App\Entity\User;
  15. use App\Entity\Save;
  16. use App\Entity\Combi;
  17. use App\Entity\UserRole;
  18. use App\Entity\Groupe;
  19. use App\Entity\Objet;
  20. use App\Entity\Redirection;
  21. use App\Entity\Section;
  22. use App\Entity\IAOperationType;
  23. use App\Entity\IAFournisseur;
  24. use App\Entity\IAModele;
  25. use App\Entity\IASql;
  26. use Doctrine\ORM\EntityManagerInterface;
  27. use Doctrine\Persistence\ManagerRegistry;
  28. use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
  29. use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
  30. use EasyCorp\Bundle\EasyAdminBundle\Config\Assets;
  31. use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
  32. use EasyCorp\Bundle\EasyAdminBundle\Config\Dashboard;
  33. use EasyCorp\Bundle\EasyAdminBundle\Config\MenuItem;
  34. use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractDashboardController;
  35. use EasyCorp\Bundle\EasyAdminBundle\Provider\AdminContextProvider;
  36. use Flasher\SweetAlert\Prime\SweetAlertFactory;
  37. use Symfony\Component\HttpFoundation\Response;
  38. use Symfony\Component\Routing\Annotation\Route;
  39. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
  40. class DashboardController extends AbstractDashboardController
  41. {
  42.     private ManagerRegistry $manager;
  43.     private $adminContextProvider;
  44.     private SweetAlertFactory $flasher;
  45.     private EntityManagerInterface $entityManager;
  46.     public function __construct(
  47.         ManagerRegistry $manager,
  48.         AdminContextProvider $adminContextProvider,
  49.         SweetAlertFactory $flasher,
  50.         EntityManagerInterface $entityManager
  51.     ) {
  52.         $this->manager $manager;
  53.         $this->adminContextProvider $adminContextProvider;
  54.         $this->flasher $flasher;
  55.         $this->entityManager $entityManager;
  56.     }
  57.     /**
  58.      * @Security("is_granted('ROLE_SUPER_ADMIN') or is_granted('ROLE_UTILISATEUR') ")
  59.      * @Route("/admin", name="admin")
  60.      */
  61.     public function index(): Response
  62.     {
  63.         $projects $this->manager->getRepository(Projet::class)->findAll();
  64.         if ($this->isGranted('ROLE_SUPER_ADMIN') and $this->getUser()->getProjet()) {
  65.             $projectSelected true;
  66.         } else {
  67.             $projectSelected false;
  68.             $userRoles $this->getUser()->getUserRoles();
  69.             foreach ($userRoles as $useRole) {
  70.                 if ($useRole->getProjet() == $this->getUser()->getProjet()) {
  71.                     $projectSelected true;
  72.                 }
  73.             }
  74.         }
  75.         if (!$projectSelected) {
  76.             return $this->render('admin/index.html.twig', ['projects' => $projects'projet' => null'header' => 'header-off']);
  77.         } else {
  78.             $projet $this->getUser()->getProjet();
  79.             $dataObjetscharts = [];
  80.             $dataPagecharts = [];
  81.             $mainPages $this->entityManager->getRepository(Page::class)->createQueryBuilder('p')
  82.                 ->where('p.parent is null and p.projet = :projet')
  83.                 ->setParameter('projet'$projet)
  84.                 ->getQuery()
  85.                 ->getResult();
  86.             $objetAll $this->entityManager->getRepository(Objet::class)->createQueryBuilder('o')
  87.                 ->where('o.visibility LIKE :visibilty and o.projet = :projet')
  88.                 ->setParameter('visibilty''%"visible_all"%')
  89.                 ->setParameter('projet'$projet)
  90.                 ->getQuery()
  91.                 ->getResult();
  92.             $objetByAccueil $this->entityManager->getRepository(Objet::class)->createQueryBuilder('o')
  93.                 ->where('o.visibility LIKE :visibilty and o.projet = :projet')
  94.                 ->setParameter('visibilty''%"visible_accueil"%')
  95.                 ->setParameter('projet'$projet)
  96.                 ->getQuery()
  97.                 ->getResult();
  98.             $objetByPage $this->entityManager->getRepository(Objet::class)->createQueryBuilder('o')
  99.                 ->where('o.visibility LIKE :visibilty and o.projet = :projet')
  100.                 ->setParameter('visibilty''%"visible_page"%')
  101.                 ->setParameter('projet'$projet)
  102.                 ->getQuery()
  103.                 ->getResult();
  104.             $objetByArticle $this->entityManager->getRepository(Objet::class)->createQueryBuilder('o')
  105.                 ->where('o.visibility LIKE :visibilty and o.projet = :projet')
  106.                 ->setParameter('visibilty''%"visible_article"%')
  107.                 ->setParameter('projet'$projet)
  108.                 ->getQuery()
  109.                 ->getResult();
  110.             $dataObjetscharts = [
  111.                 ["label" => "Dans tout""y" => count($objetAll), "color" => "#212529"],
  112.                 ["label" => "Accueil""y" => count($objetByAccueil), "color" => "#a033fd"],
  113.                 ["label" => "Page""y" => count($objetByPage), "color" => "#e7ccfe"],
  114.                 ["label" => "Article""y" => count($objetByArticle), "color" => "#a6a8a9"],
  115.             ];
  116.             foreach ($mainPages as $key => $mainPage) {
  117.                 $pageByParent =  $this->manager->getRepository(Page::class)->findBy(['parent' => $mainPage]);
  118.                 array_push($dataPagecharts, ["label" => $mainPage->getTitre(), "y" => count($pageByParent)]);
  119.             }
  120.             $dataObjetscharts json_encode($dataObjetschartsJSON_NUMERIC_CHECK);
  121.             $dataPagecharts json_encode($dataPagechartsJSON_NUMERIC_CHECK);
  122.             return $this->render('admin/index.html.twig', ['projects' => $projects'projet' => $projet'dataObjetscharts' => $dataObjetscharts'dataPagecharts' => $dataPagecharts'header' => 'header-off']);
  123.         }
  124.     }
  125.     public function configureDashboard(): Dashboard
  126.     {
  127.         return Dashboard::new()
  128.             ->setTitle('Devil It Applications | CMS');
  129.     }
  130.     public function configureMenuItems(): iterable
  131.     {
  132.         $import_export false;
  133.         $projet false;
  134.         $manageUsers false;
  135.         $page false;
  136.         $article false;
  137.         $param_article false;
  138.         $formulaire false;
  139.         $combi false;
  140.         $objet false;
  141.         $section false;
  142.         if ($this->isGranted('ROLE_SUPER_ADMIN') and $this->getUser()->getProjet() ) {
  143.             yield MenuItem::linkToRoute($this->getUser()->getProjet(), 'ri-check-line''app_admin_change_project');
  144.         } else {
  145.             $projectSelected false;
  146.             $userRoles $this->getUser()->getUserRoles();
  147.             foreach ($userRoles as $useRole) {
  148.                 if ($useRole->getProjet() == $this->getUser()->getProjet()) {
  149.                     $projectSelected true;
  150.                 }
  151.             }
  152.             if (!$projectSelected) {
  153.                 yield MenuItem::linkToRoute('''ri-check-line''app_admin_change_project');
  154.             } else {
  155.                 yield MenuItem::linkToRoute($this->getUser()->getProjet(), 'ri-check-line''app_admin_change_project');
  156.             }
  157.         }
  158.         if ($this->getUser()->getProjet() != null) {
  159.             if ($this->isGranted('ROLE_SUPER_ADMIN')) {
  160.                 $import_export true;
  161.                 $projet true;
  162.                 $manageUsers true;
  163.                 $page true;
  164.                 $article true;
  165.                 $param_article true;
  166.                 $formulaire true;
  167.                 $combi true;
  168.                 $objet true;
  169.                 $section true;
  170.             } else {
  171.                 $user $this->getUser();
  172.                 $project $user->getProjet();
  173.                 $roles $this->manager->getRepository(UserRole::class)->findBy(['user' => $user'projet' => $project]);
  174.                 foreach ($roles as $role) {
  175.                     $groupe $role->getGroupe();
  176.                     $label $groupe->getLabel();
  177.                     if ($label == 'ROLE_ADMIN') {
  178.                         $import_export true;
  179.                         $projet true;
  180.                         $page true;
  181.                         $article true;
  182.                         $param_article true;
  183.                         $formulaire true;
  184.                         $combi true;
  185.                         $objet true;
  186.                         $section true;
  187.                     } else {
  188.                         if ($groupe->getProjet()) {
  189.                             $projet true;
  190.                         }
  191.                         if ($groupe->getImportExport()) {
  192.                             $import_export true;
  193.                         }
  194.                         if ($groupe->getPage()) {
  195.                             $page true;
  196.                         }
  197.                         if ($groupe->getArticle()) {
  198.                             $article true;
  199.                         }
  200.                         if ($groupe->getParamArticle()) {
  201.                             $param_article true;
  202.                         }
  203.                         if ($groupe->getFormulaire()) {
  204.                             $formulaire true;
  205.                         }
  206.                         if ($groupe->getCombi()) {
  207.                             $combi true;
  208.                         }
  209.                         if ($groupe->getObjet()) {
  210.                             $objet true;
  211.                         }
  212.                         if ($groupe->getSection()) {
  213.                             $section true;
  214.                         }
  215.                     }
  216.                 }
  217.             }
  218.             /**************** Article************************************************/
  219.             $types $this->manager->getRepository(ArticleType::class)->findBy(['projet' => $this->getUser()->getProjet()->getId()]);
  220.             $yieldField = [];
  221.             if ($article) {
  222.                 if (count($types) > 0) {
  223.                     foreach ($types as $type) {
  224.                         if ($type->getIcon() != null && $type->getIcon() != '') {
  225.                             $yieldField[] = MenuItem::linkToCrud($type->getType(), $type->getIcon(), Article::class)->setQueryParameter('typeid'$type->getId());
  226.                         } else {
  227.                             $yieldField[] = MenuItem::linkToCrud($type->getType(), 'ri-article-line'Article::class)->setQueryParameter('typeid'$type->getId());
  228.                         }
  229.                     }
  230.                 }
  231.             }
  232.             yield MenuItem::section('Menu''');
  233.             yield MenuItem::linkToDashboard('Tableau de bord''ri-dashboard-2-line');
  234.             if ($projet) {
  235.                 yield MenuItem::linkToCrud('Projets''ri-apps-line'Projet::class);
  236.             }
  237.             if ($page) {
  238.                 yield MenuItem::linkToCrud('Pages''ri-pages-line'Page::class);
  239.             }
  240.             if ($yieldField) {
  241.                 yield MenuItem::subMenu('Articles''ri-article-line')->setSubItems($yieldField);
  242.             }
  243.             if ($objet) {
  244.                 yield MenuItem::linkToCrud('Objets''ri-shape-line'Objet::class);
  245.             }
  246.             if ($section) {
  247.                 yield MenuItem::linkToCrud('Code Section''ri-file-code-line'Section::class);
  248.             }
  249.             if ($formulaire) {
  250.                 yield MenuItem::subMenu('Formulaire''ri-edit-box-line')->setSubItems([
  251.                     MenuItem::linkToCrud('Formulaires''ri-subtract-fill'Formulaire::class),
  252.                     MenuItem::linkToCrud('Champs''ri-subtract-fill'FormulaireChamp::class),
  253.                     MenuItem::linkToCrud('Input''ri-subtract-fill'FormulaireInput::class),
  254.                     MenuItem::linkToCrud('Recap''ri-subtract-fill'FormulaireRecap::class)
  255.                 ]);
  256.             }
  257.             if ($combi) {
  258.                 yield MenuItem::linkToCrud('Combi''ri-organization-chart'Combi::class);
  259.             }
  260.             yield MenuItem::linkToCrud('Enregistrements''ri-archive-line'Save::class);
  261.             if ($manageUsers) {
  262.                 yield MenuItem::linkToCrud('Utilisateurs''ri-user-line'User::class);
  263.             }
  264.             /* #elements 
  265.             ================== */
  266.             if ($objet || $combi) {
  267.                 yield MenuItem::section('élements''');
  268.             }
  269.             if ($combi) {
  270.                 yield MenuItem::linkToCrud('Combi''ri-organization-chart'Combi::class);
  271.             }
  272.             if ($section) {
  273.                 yield MenuItem::linkToCrud('Code Section''ri-file-code-line'Section::class);
  274.             }
  275.             if ($formulaire) {
  276.                 yield MenuItem::linkToCrud('Formulaire''ri-edit-box-line'Formulaire::class);
  277.                 yield MenuItem::linkToCrud('Input''ri-input-cursor-move'FormulaireInput::class);
  278.                 yield MenuItem::linkToCrud('Recap''ri-clipboard-line'FormulaireRecap::class);
  279.                 yield MenuItem::linkToCrud('Champs''ri-keyboard-line'FormulaireChamp::class);
  280.             }
  281.             /*******************************************/
  282.             if ($projet || $import_export || $manageUsers) {
  283.                 yield MenuItem::section('Paramétrage''');
  284.             }
  285.             if ($import_export) {
  286.                 yield MenuItem::linkToRoute('Import / Export''ri-swap-box-line''app_import_export');
  287.             }
  288.             if ($page || $article) {
  289.                 yield MenuItem::linkToRoute('Rapports PDF''ri-file-pdf-line''app_outils_pdf');
  290.             }
  291.             yield MenuItem::linkToCrud('Enregistrements''ri-archive-line'Save::class);
  292.             yield MenuItem::linkToCrud('Redirections''ri-arrow-right-line'Redirection::class);
  293.             if ($projet) {
  294.                 yield MenuItem::linkToCrud('Projets''ri-apps-line'Projet::class);
  295.             }
  296.             if ($manageUsers) {
  297.                 yield MenuItem::linkToCrud('Utilisateurs''ri-user-line'User::class);
  298.                 yield MenuItem::linkToCrud('Groupe''ri-group-2-line'Groupe::class);
  299.             }
  300.             /**************** Formulaire************************************************/
  301.             yield MenuItem::section('Formulaire''');
  302.             if ($formulaire) {
  303.                 yield MenuItem::linkToCrud('Formulaire''ri-edit-box-line'Formulaire::class);
  304.                 yield MenuItem::linkToCrud('Input''ri-input-cursor-move'FormulaireInput::class);
  305.                 yield MenuItem::linkToCrud('Recap''ri-clipboard-line'FormulaireRecap::class);
  306.                 yield MenuItem::linkToCrud('Champs''ri-keyboard-line'FormulaireChamp::class);
  307.             }
  308.             /**************** Paramètrage Article************************************************/
  309.             if ($param_article) {
  310.                 yield MenuItem::section('Paramétrage Article''');
  311.                 yield MenuItem::linkToCrud('Type''ri-stack-line'ArticleType::class);
  312.                 if (count($types) > 0) {
  313.                     foreach ($types as $type) {
  314.                         if ($type->getIcon() != null && $type->getIcon() != '') {
  315.                             yield MenuItem::subMenu($type->getType(), $type->getIcon())->setSubItems([
  316.                                 MenuItem::linkToCrud('Categorie''ri-subtract-fill'ArticleCategorie::class)->setQueryParameter('typeid'$type->getId()),
  317.                                 MenuItem::linkToCrud('Critère''ri-subtract-fill'ArticleCritere::class)->setQueryParameter('typeid'$type->getId()),
  318.                                 MenuItem::linkToCrud('Valeur Critère''ri-subtract-fill'ArticleCritereValeur::class)->setQueryParameter('typeid'$type->getId()),
  319.                             ]);
  320.                         } else {
  321.                             yield MenuItem::subMenu($type->getType(), 'ri-article-line')->setSubItems([
  322.                                 MenuItem::linkToCrud('Categorie''ri-subtract-fill'ArticleCategorie::class)->setQueryParameter('typeid'$type->getId()),
  323.                                 MenuItem::linkToCrud('Critère''ri-subtract-fill'ArticleCritere::class)->setQueryParameter('typeid'$type->getId()),
  324.                                 MenuItem::linkToCrud('Valeur Critère''ri-subtract-fill'ArticleCritereValeur::class)->setQueryParameter('typeid'$type->getId()),
  325.                             ]);
  326.                         }
  327.                     }
  328.                 }
  329.             }
  330.         }
  331.         yield MenuItem::section('Intelligence Artificielle''');
  332.         yield MenuItem::linkToCrud('Fournisseurs''ri-robot-line'IAFournisseur::class);
  333.         yield MenuItem::linkToCrud('Modèles''ri-slideshow-line'IAModele::class);
  334.         yield MenuItem::linkToCrud('Type opérations''ri-stack-line'IAOperationType::class);
  335.         yield MenuItem::linkToCrud('Jeux SQL''ri-database-2-line'IASql::class);
  336.         yield MenuItem::section('Personnel''');
  337.         yield MenuItem::linkToRoute('Paramètres''ri-settings-3-line''app_change_password');
  338.         yield MenuItem::linkToLogout('Déconnecter''ri-logout-circle-r-line');
  339.     }
  340.     public function configureAssets(): Assets
  341.     {
  342.         return parent::configureAssets()
  343.             ->addCssFile('node_modules/bootstrap-icons/font/bootstrap-icons.css')
  344.             ->addCssFile('node_modules/datatables.net-dt/css/jquery.dataTables.min.css')
  345.             ->addCssFile('css/trixcss.css')
  346.             ->addJsFile('node_modules/jquery/dist/jquery.js')
  347.             ->addJsFile('node_modules/datatables.net/js/jquery.dataTables.min.js')
  348.             ->addJsFile('js/trixjs.js')
  349.             ->addJsFile('canvasjs/canvasjs.min.js');
  350.     }
  351.     public function configureActions(): Actions
  352.     {
  353.         return parent::configureActions()
  354.             ->update(Crud::PAGE_NEWAction::SAVE_AND_ADD_ANOTHER, function (Action $action) {
  355.                 return $action->addCssClass('btn-secondary');
  356.             })
  357.             ->update(Crud::PAGE_EDITAction::SAVE_AND_CONTINUE, function (Action $action) {
  358.                 return $action->addCssClass('btn-secondary');
  359.             })
  360.             ->update(Crud::PAGE_INDEXAction::EDIT, function (Action $action) {
  361.                 return $action->setLabel('');
  362.             })
  363.             ->remove(Crud::PAGE_DETAILAction::DELETE)
  364.             ->remove(Crud::PAGE_DETAILAction::INDEX)
  365.             ->remove(Crud::PAGE_DETAILAction::EDIT);
  366.     }
  367. }