src/Controller/Admin/DashboardController.php line 60

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