src/EventSubscriber/MenuBuilderSubscriber.php line 48

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\User;
  4. use App\Repository\ElementRepository;
  5. use App\Repository\NomenclatureRepository;
  6. use KevinPapst\AdminLTEBundle\Event\SidebarMenuEvent;
  7. use KevinPapst\AdminLTEBundle\Model\MenuItemModel;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. use Symfony\Component\Security\Core\Security;
  10. use Symfony\Contracts\Translation\TranslatorInterface;
  11. class MenuBuilderSubscriber implements EventSubscriberInterface
  12. {
  13.     protected $security;
  14.     protected $translator;
  15.     protected $nomenclatureRepository;
  16.     /**
  17.      * MenuBuilderSubscriber constructor.
  18.      * @param Security $security
  19.      * @param TranslatorInterface $translator
  20.      * @param NomenclatureRepository $nomenclatureRepository
  21.      */
  22.     public function __construct(Security $securityTranslatorInterface $translator,
  23.                                 NomenclatureRepository $nomenclatureRepository)
  24.     {
  25.         $this->security $security;
  26.         $this->translator $translator;
  27.         $this->nomenclatureRepository $nomenclatureRepository;
  28.     }
  29.     /**
  30.      * @return array
  31.      */
  32.     public static function getSubscribedEvents(): array
  33.     {
  34.         return [
  35.             SidebarMenuEvent::class => ['onSetupMenu'100],
  36.         ];
  37.     }
  38.     /**
  39.      * @param SidebarMenuEvent $event
  40.      */
  41.     public function onSetupMenu(SidebarMenuEvent $event)
  42.     {
  43.         /* @var $realUser User */
  44.         $realUser $this->security->getUser();
  45.         if ($realUser->isAdmin()) {
  46.             $event->addItem(new MenuItemModel('dashboard''secure.admin.dashboard''admin.home',
  47.                 [], 'fas fa-tachometer-alt'));
  48.             $event->addItem(new MenuItemModel('config-zipcode''Données codes postaux',
  49.                 'admin.config.import.zipcode', [], 'fas fa-tools'));
  50.             $event->addItem(new MenuItemModel('label.managedata''label.managedata'null));
  51.             $event->addItem(new MenuItemModel('elementsList''secure.admin.elements.list',
  52.                 'admin.elements.list', [], 'fas fa-database'));
  53.             $event->addItem(new MenuItemModel('googleSearchesList''secure.admin.googlesearches.list',
  54.                 'admin.googlesearches.list', [], 'fab fa-google'));
  55.             $event->addItem(new MenuItemModel('label.nomenclatures''label.nomenclatures'null));
  56.             /**
  57.              * Retrieving all nomenclatures
  58.              */
  59.             $nomenclatures $this->nomenclatureRepository->findAll();
  60.             if ($nomenclatures) {
  61.                 $nomenclatureBlock = new MenuItemModel('nomenclatures''secure.admin.nomenclatures.list'false,
  62.                     [], 'fas fa-book');
  63.                 foreach ($nomenclatures as $nomenclature) {
  64.                     $nomenclatureBlock->addChild(new MenuItemModel('nomenclature_' $nomenclature->getId(),
  65.                         $nomenclature->getName(), 'nomenclature.list', ['id' => $nomenclature->getId()]));
  66.                 }
  67.                 $event->addItem($nomenclatureBlock);
  68.             }
  69.             $event->addItem(new MenuItemModel('nomenclaturesImport''Importer',
  70.                 'nomenclature.import', [], 'fas fa-upload'));
  71.             /**
  72.              * TOURAINE HOTEL MENU
  73.              **/
  74.             $event->addItem(new MenuItemModel('label.tourainehotel''label.tourainehotel'null));
  75.             $event->addItem(new MenuItemModel('elementsListTh''Liste établissement TH',
  76.                 'th.list', [], 'fas fa-hotel'));
  77.             $event->addItem(new MenuItemModel('elementsThExport''Exporter',
  78.                 'th.export', [], 'fas fa-download'));
  79.             $event->addItem(new MenuItemModel('elementsThImport''Importer',
  80.                 'th.import', [], 'fas fa-upload'));
  81.             $event->addItem(new MenuItemModel('checkErrorsTh''Contrôle des données',
  82.                 'th.check', [], 'fas fa-clipboard-check'));
  83.             /**
  84.              * SMO MENU
  85.              **/
  86.             $event->addItem(new MenuItemModel('label.smo''label.smo'null));
  87.             $event->addItem(new MenuItemModel('smoDashboard''Dashboard',
  88.                 'admin.smo.dashboard', [], 'fas fa-tachometer-alt'));
  89.             $event->addItem(new MenuItemModel('terminalList''Liste des bornes',
  90.                 'admin.smo.terminals.list', [], 'fas fa-wifi'));
  91.             $event->addItem(new MenuItemModel('smoCoordinates''Liste des coordonnées',
  92.                 'admin.smo.coordinates.list', [], 'fas fa-wrench'));
  93.             $event->addItem(new MenuItemModel('terminalImport''Importer',
  94.                 'admin.smo.import', [], 'fas fa-upload'));
  95.             /**
  96.              * CONCIERGERIE MENU
  97.              **/
  98.             $event->addItem(new MenuItemModel('label.conciergerie''label.conciergerie'null));
  99.             $event->addItem(new MenuItemModel('conciergerieDashboard''Dashboard',
  100.                 'concierge.home', [], 'fas fa-tachometer-alt'));
  101.             $event->addItem(new MenuItemModel('conciergerieList''Liste des établissements',
  102.                 'concierge.list', [], 'fas fa-house-user'));
  103.         } else if ($realUser->isThAdmin()) {
  104.             $event->addItem(new MenuItemModel('dashboard''secure.admin.dashboard''th.home',
  105.                 [], 'fas fa-tachometer-alt'));
  106.             $event->addItem(new MenuItemModel('label.tourainehotel''label.tourainehotel'null));
  107.             $event->addItem(new MenuItemModel('elementsListTh''Liste établissement TH',
  108.                 'th.list', [], 'fas fa-hotel'));
  109.         } else if ($realUser->isThMember()) {
  110.             $event->addItem(new MenuItemModel('dashboard''Mes établissements''th.home',
  111.                 [], 'fas fa-hotel'));
  112.             if (count($realUser->getElement())) {
  113.                 $event->addItem(new MenuItemModel('label.manageelement''label.manageelement'null));
  114.                 foreach ($realUser->getElement() as $element) {
  115.                     $event->addItem(new MenuItemModel($element->getReference(),
  116.                         mb_strtoupper(mb_strimwidth($element->getNameFr(), 025' ...')),
  117.                         'th.element.edit', ['reference' => $element->getReference()]));
  118.                 }
  119.             }
  120.         } else if ($realUser->isConciergeAdmin()) {
  121.             $event->addItem(new MenuItemModel('dashboard''secure.admin.dashboard''concierge.home',
  122.                 [], 'fas fa-tachometer-alt'));
  123.             $event->addItem(new MenuItemModel('label.conciergerie''label.conciergerie'null));
  124.             $event->addItem(new MenuItemModel('elementsListConcierge''Liste des établissements',
  125.                 'concierge.list', [], 'fas fa-hotel'));
  126.         } else if ($realUser->isConciergeMember()) {
  127.             $event->addItem(new MenuItemModel('dashboard''Mes établissements''concierge.home',
  128.                 [], 'fas fa-hotel'));
  129.             if (count($realUser->getElement())) {
  130.                 $event->addItem(new MenuItemModel('label.manageelement''label.manageelement'null));
  131.                 foreach ($realUser->getElement() as $element) {
  132.                     $event->addItem(new MenuItemModel($element->getReference(),
  133.                         mb_strtoupper(mb_strimwidth($element->getNameFr(), 025' ...')),
  134.                         'concierge.element.edit', ['reference' => $element->getReference()]));
  135.                 }
  136.             }
  137.         } else {
  138.             $event->addItem(new MenuItemModel('dashboard''secure.manager.dashboard''manager.home',
  139.                 [], 'fas fa-tachometer-alt'));
  140.             if (count($realUser->getElement())) {
  141.                 $event->addItem(new MenuItemModel('label.manageelement''label.manageelement'null));
  142.                 foreach ($realUser->getElement() as $element) {
  143.                     $event->addItem(new MenuItemModel($element->getReference(),
  144.                         mb_strtoupper(mb_strimwidth($element->getNameFr(), 025' ...')),
  145.                         'manager.element', ['reference' => $element->getReference()]));
  146.                 }
  147.             }
  148.         }
  149.         $this->activateByRoute($event->getRequest()->get('_route'), $event->getItems());
  150.     }
  151.     /**
  152.      * @param string $route
  153.      * @param MenuItemModel[] $items
  154.      */
  155.     protected function activateByRoute($route$items)
  156.     {
  157.         foreach ($items as $item) {
  158.             if ($item->hasChildren()) {
  159.                 $this->activateByRoute($route$item->getChildren());
  160.             } elseif ($item->getRoute() == $route) {
  161.                 $item->setIsActive(true);
  162.             }
  163.         }
  164.     }
  165. }