src/Controller/Admin/DashboardController.php line 57

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\Persistence\ManagerRegistry;
  21. use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
  22. use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
  23. use EasyCorp\Bundle\EasyAdminBundle\Config\Assets;
  24. use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
  25. use EasyCorp\Bundle\EasyAdminBundle\Config\Dashboard;
  26. use EasyCorp\Bundle\EasyAdminBundle\Config\MenuItem;
  27. use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractDashboardController;
  28. use EasyCorp\Bundle\EasyAdminBundle\Provider\AdminContextProvider;
  29. use Flasher\SweetAlert\Prime\SweetAlertFactory;
  30. use Symfony\Component\HttpFoundation\Response;
  31. use Symfony\Component\Routing\Annotation\Route;
  32. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
  33. class DashboardController extends AbstractDashboardController
  34. {
  35.     private ManagerRegistry $manager;
  36.     private $adminContextProvider;
  37.     private SweetAlertFactory $flasher;
  38.     public function __construct(
  39.         ManagerRegistry $manager,
  40.         AdminContextProvider $adminContextProvider,
  41.         SweetAlertFactory $flasher
  42.     ) {
  43.         $this->manager = $manager;
  44.         $this->adminContextProvider = $adminContextProvider;
  45.         $this->flasher = $flasher;
  46.     }
  47.     /**
  48.      * @Security("is_granted('ROLE_SUPER_ADMIN') or is_granted('ROLE_UTILISATEUR') ")
  49.      * @Route("/admin", name="admin")
  50.      */
  51.     public function index(): Response
  52.     {
  53.         /* return parent::index(); */
  54.         $projects = $this->manager->getRepository(Projet::class)->findAll();
  55.         return $this->render('admin/index.html.twig', ['projects' => $projects,]);
  56.     }
  57.     public function configureDashboard(): Dashboard
  58.     {
  59.         return Dashboard::new()
  60.             ->setTitle('Devil It Applications');
  61.     }
  62.     public function configureMenuItems(): iterable
  63.     {
  64.         $article = false;
  65.         $page = false;
  66.         $formulaire = false;
  67.         $objet = false;
  68.         $combi = false;
  69.         $projet = false;
  70.         $param_article = false;
  71.         $utilisateur = false;
  72.         $import_export = false;
  73.         $droits = false;
  74.         $p = null;
  75.         $bool = false;
  76.         $userRoles = $this->getUser()->getUserRoles();
  77.         if (!$this->isGranted('ROLE_SUPER_ADMIN')) {
  78.             if (count($userRoles) == 0) {
  79.                 $this->getUser()->setProjet(null);
  80.                 yield MenuItem::linkToRoute(strtoupper($this->getUser()->getProjet()), 'fa fa-check', 'app_admin_change_project')->setCssClass('menu-header mb-3');
  81.             } else {
  82.                 foreach ($userRoles as $r) {
  83.                     $p = $r->getProjet();
  84.                     if ($p == $this->getUser()->getProjet()) {
  85.                         $bool = true;
  86.                     }
  87.                 }
  88.                 if ($bool) {
  89.                     yield MenuItem::linkToRoute(strtoupper($this->getUser()->getProjet()), 'fa fa-check', 'app_admin_change_project')->setCssClass('menu-header mb-3');
  90.                 } else {
  91.                     yield MenuItem::linkToRoute('', 'fa fa-check', 'app_admin_change_project')->setCssClass('menu-header mb-3');
  92.                 }
  93.             }
  94.         } else {
  95.             yield MenuItem::linkToRoute(strtoupper($this->getUser()->getProjet()), 'fa fa-check', 'app_admin_change_project')->setCssClass('menu-header mb-3');
  96.         }
  97.         yield MenuItem::linkToDashboard('Tableau de bord', 'fa fa-dashboard');
  98.         if ($this->getUser()->getProjet() != null) {
  99.             if ($this->isGranted('ROLE_SUPER_ADMIN')) {
  100.                 $article = true;
  101.                 $page = true;
  102.                 $formulaire = true;
  103.                 $objet = true;
  104.                 $combi = true;
  105.                 $projet = true;
  106.                 $param_article = true;
  107.                 $utilisateur = true;
  108.                 $import_export = true;
  109.                 $droits = true;
  110.             } else {
  111.                 $user = $this->getUser();
  112.                 $project = $user->getProjet();
  113.                 $roles = $this->manager->getRepository(UserRole::class)->findBy(['user' => $user, 'projet' => $project]);
  114.                 foreach ($roles as $role) {
  115.                     $r_user = $role->getGroupe();
  116.                     $label = $r_user->getLabel();
  117.                     if ($label == 'ROLE_ADMIN') {
  118.                         $page = true;
  119.                         $article = true;
  120.                         $formulaire = true;
  121.                         $objet = true;
  122.                         $projet = true;
  123.                         $combi = true;
  124.                         $param_article = true;
  125.                         $utilisateur = true;
  126.                         $import_export = true;
  127.                         $droits = true;
  128.                     }
  129.                     if ($r_user->getPage()) {
  130.                         $page = true;
  131.                     }
  132.                     if ($r_user->getArticle()) {
  133.                         $article = true;
  134.                     }
  135.                     if ($r_user->getFormulaire()) {
  136.                         $formulaire = true;
  137.                     }
  138.                     if ($r_user->getObjet()) {
  139.                         $objet = true;
  140.                     }
  141.                     if ($r_user->getCombi()) {
  142.                         $combi = true;
  143.                     }
  144.                     if ($r_user->getProjet()) {
  145.                         $projet = true;
  146.                     }
  147.                     if ($r_user->getParamArticle()) {
  148.                         $param_article = true;
  149.                     }
  150.                     if ($r_user->getUtilisateur()) {
  151.                         $utilisateur = true;
  152.                     }
  153.                     if ($r_user->getImportExport()) {
  154.                         $import_export = true;
  155.                     }
  156.                 }
  157.             }
  158.             /**************** Page************************************************/
  159.             if ($page) {
  160.                 yield MenuItem::section('Redaction', 'fa fa-keyboard');
  161.                 yield MenuItem::linkToCrud('Page', 'fa fa-map', Page::class);
  162.             }
  163.             /**************** Article************************************************/
  164.             $types = $this->manager->getRepository(ArticleType::class)->findBy(['projet' => $this->getUser()->getProjet()->getId()]);
  165.             if ($article) {
  166.                 if (count($types) > 0) {
  167.                     foreach ($types as $type) {
  168.                         if ($type->getIcon() != null && $type->getIcon() != '') {
  169.                             yield MenuItem::linkToCrud($type->getType(), $type->getIcon(), Article::class)->setQueryParameter('typeid', $type->getId());
  170.                         } else {
  171.                             yield MenuItem::linkToCrud($type->getType(), 'fa fa-newspaper', Article::class)->setQueryParameter('typeid', $type->getId());
  172.                         }
  173.                     }
  174.                 }
  175.             }
  176.             /**************** Paramètrage Article************************************************/
  177.             if ($param_article) {
  178.                 yield MenuItem::section('Paramétrage Article', '');
  179.                 yield MenuItem::linkToCrud('Type', 'fa fa-columns', ArticleType::class);
  180.                 if (count($types) > 0) {
  181.                     foreach ($types as $type) {
  182.                         if ($type->getIcon() != null && $type->getIcon() != '') {
  183.                             yield MenuItem::subMenu($type->getType(), $type->getIcon())->setSubItems([
  184.                                 MenuItem::linkToCrud('Categorie', 'fa fa-layer-group', ArticleCategorie::class)->setQueryParameter('typeid', $type->getId()),
  185.                                 MenuItem::linkToCrud('Critère', 'fa fa-paperclip', ArticleCritere::class)->setQueryParameter('typeid', $type->getId()),
  186.                                 MenuItem::linkToCrud('Valeur Critère', 'fa fa-hashtag', ArticleCritereValeur::class)->setQueryParameter('typeid', $type->getId()),
  187.                             ]);
  188.                         } else {
  189.                             yield MenuItem::subMenu($type->getType(), 'fa fa-pager')->setSubItems([
  190.                                 MenuItem::linkToCrud('Categorie', 'fa fa-layer-group', ArticleCategorie::class)->setQueryParameter('typeid', $type->getId()),
  191.                                 MenuItem::linkToCrud('Critère', 'fa fa-paperclip', ArticleCritere::class)->setQueryParameter('typeid', $type->getId()),
  192.                                 MenuItem::linkToCrud('Valeur Critère', 'fa fa-hashtag', ArticleCritereValeur::class)->setQueryParameter('typeid', $type->getId()),
  193.                             ]);
  194.                         }
  195.                     }
  196.                 }
  197.             }
  198.             /**************** Formulaire************************************************/
  199.             if ($formulaire) {
  200.                 yield MenuItem::section('Formulaire', '');
  201.                 yield MenuItem::linkToCrud('Formulaire', 'fa fa-file-contract', Formulaire::class);
  202.                 yield MenuItem::linkToCrud('Input', 'fa fa-bars', FormulaireInput::class);
  203.                 yield MenuItem::linkToCrud('Recap', 'fa fa-id-card', FormulaireRecap::class);
  204.                 yield MenuItem::linkToCrud('Champs', 'fa fa-clipboard-list', FormulaireChamp::class);
  205.             }
  206.             /*******************************************/
  207.             if (($objet) || ($combi)) {
  208.                 yield MenuItem::section('Contenu', '');
  209.             }
  210.             /*******************************************/
  211.             /**************** Combi************************************************/
  212.             if ($combi) {
  213.                 yield MenuItem::linkToCrud('Combi', 'fa fa-sitemap', Combi::class);
  214.             }
  215.             /****************Objet************************************************/
  216.             if ($objet) {
  217.                 // yield MenuItem::linkToDashboard('Objet', 'fa fa-object-ungroup');
  218.                 yield MenuItem::linkToCrud('Objet', 'fa fa-object-group', Objet::class);
  219.                 // yield MenuItem::linkToCrud('config Objet', 'fa fa-object-ungroup', Objet::class)->setPermission('ROLE_OBJET');
  220.                 yield MenuItem::linkToCrud('Code Section', 'fa fa-vector-square', Section::class);
  221.             }
  222.             /*******************************************/
  223.             if (($projet) || ($utilisateur) || ($import_export)) {
  224.                 yield MenuItem::section('Paramétrage', '');
  225.             }
  226.             /*******************************************/
  227.             /**************** Import--Export ************************************************/
  228.             if ($import_export) {
  229.                 yield MenuItem::linkToRoute('Import / Export', 'fa fa-file-csv', 'app_import_export');
  230.             }
  231.             /**************** Projet************************************************/
  232.             if ($projet) {
  233.                 yield MenuItem::linkToCrud('Projets', 'fa fa-lightbulb', Projet::class);
  234.             }
  235.             /**************** Utilisateurs************************************************/
  236.             if ($utilisateur) {
  237.                 yield MenuItem::linkToCrud('Utilisateurs', 'fas fa-users', User::class);
  238.             }
  239.         }
  240.         if ($droits) {
  241.             yield MenuItem::section('Droits', '');
  242.             yield MenuItem::linkToCrud('Groupe', 'fa fa-users', Groupe::class);
  243.             yield MenuItem::linkToCrud('User Role', 'fas fa-id-badge', UserRole::class);
  244.         }
  245.         yield MenuItem::section('Personnel', '');
  246.         yield MenuItem::linkToDashboard('Changer mot de passe', 'fa fa-key');
  247.         yield MenuItem::linkToLogout('Déconnecter', 'fa fa-fw fa-sign-out');
  248.     }
  249.     public function configureAssets(): Assets
  250.     {
  251.         return parent::configureAssets()
  252.             ->addCssFile('node_modules/bootstrap-icons/font/bootstrap-icons.css')
  253.             ->addCssFile('node_modules/datatables.net-dt/css/jquery.dataTables.min.css')
  254.             ->addCssFile('css/trixcss.css')
  255.             ->addJsFile('node_modules/jquery/dist/jquery.js')
  256.             ->addJsFile('node_modules/datatables.net/js/jquery.dataTables.min.js')
  257.             ->addJsFile('js/trixjs.js')
  258.             ->addCssFile('css/admin-dashboard.css');
  259.     }
  260.     public function configureActions(): Actions
  261.     {
  262.         return parent::configureActions()
  263.             ->update(Crud::PAGE_NEW, Action::SAVE_AND_ADD_ANOTHER, function (Action $action) {
  264.                 return $action->addCssClass('btn-success');
  265.             })
  266.             ->update(Crud::PAGE_EDIT, Action::SAVE_AND_CONTINUE, function (Action $action) {
  267.                 return $action->addCssClass('btn-success');
  268.             })
  269.             ->update(Crud::PAGE_INDEX, Action::EDIT, function (Action $action) {
  270.                 return $action->setLabel('Modifier');
  271.             });
  272.     }
  273. }