src/EventListener/MenuBuilderListener.php line 22

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Entity\Config;
  4. use App\Enum\AssessmentCycleStrategy;
  5. use App\Service\Config\ConfigLoader;
  6. use Doctrine\ORM\EntityManagerInterface;
  7. use Sonata\AdminBundle\Event\ConfigureMenuEvent;
  8. class MenuBuilderListener
  9. {
  10.     private $em;
  11.     private $configLoader;
  12.     public function __construct(EntityManagerInterface $emConfigLoader $configLoader)
  13.     {
  14.         $this->em $em;
  15.         $this->configLoader $configLoader;
  16.     }
  17.     public function addMenuItems(ConfigureMenuEvent $event)
  18.     {
  19.         $menu $event->getMenu();
  20.         $this->configureAssessmentMenu($menu);
  21.         $this->configureConfigMenu($menu);
  22.         $this->configureScheduledTasks($menu);
  23.         $children $menu->getChildren();
  24.         ksort($children);
  25.         $customOrder = ["Configuration" => $children["Configuration"]] + $children;
  26.         $menu->setChildren($customOrder);
  27.         foreach ($menu->getChildren() as $menuItem) {
  28.             $children $menuItem->getChildren();
  29.             ksort($children);
  30.             $menuItem->setChildren($children);
  31.         }
  32.     }
  33.     private function configureAssessmentMenu($menu)
  34.     {
  35.         $itemName "Assessments";
  36.         if ($this->configLoader->getValue("core_feature_assessment")) {
  37.             $menu->getChild($itemName)
  38.                 ->addChild('Configuration', [
  39.                     'label' => 'Configuration',
  40.                     'route' => 'assessment-cycle_configure',
  41.                 ])->setExtras([
  42.                     'icon' => '<i class="fa fa-cog"></i>',
  43.                 ]);
  44.             $strategy $this->em->getRepository(Config::class)->getValueByName("assessment_cycle_strategy");
  45.             if ($strategy === AssessmentCycleStrategy::USER_DEFINED) {
  46.                 $menu->getChild($itemName)->getChild("Scheduled Cycles")->setDisplay(false);
  47.             }
  48.         } else {
  49.             $menu->removeChild($itemName);
  50.         }
  51.     }
  52.     private function configureConfigMenu($menu)
  53.     {
  54.         $configMenu $menu->getChild("Configuration");
  55.         $configMenu
  56.             ->addChild("Development Plans")
  57.             ->setUri("/admin/development-plan/configure");
  58.         $configMenu
  59.             ->addChild("User Profile")
  60.             ->setUri("/admin/user-profile/configure");
  61.         $configMenu
  62.             ->getChild("Website")
  63.             ->setUri("/admin/configurations/configure");
  64.         $configMenu
  65.             ->setAttribute("id""configurationMenuItem")
  66.             ->setExtras([
  67.                 'icon' => '<i class="fa fa-wrench"></i>',
  68.             ]);
  69.     }
  70.     private function configureScheduledTasks($menu)
  71.     {
  72.         $menu->addChild('scheduled-tasks', [
  73.             'label' => 'Scheduled tasks',
  74.             'route' => 'jmose_command_scheduler_list'
  75.         ])->setExtras([
  76.             'icon' => '<i class="fa fa-tasks"></i>'
  77.         ]);
  78.     }
  79. }