<?php
namespace App\EventListener;
use App\Entity\Config;
use App\Enum\AssessmentCycleStrategy;
use App\Service\Config\ConfigLoader;
use Doctrine\ORM\EntityManagerInterface;
use Sonata\AdminBundle\Event\ConfigureMenuEvent;
class MenuBuilderListener
{
private $em;
private $configLoader;
public function __construct(EntityManagerInterface $em, ConfigLoader $configLoader)
{
$this->em = $em;
$this->configLoader = $configLoader;
}
public function addMenuItems(ConfigureMenuEvent $event)
{
$menu = $event->getMenu();
$this->configureAssessmentMenu($menu);
$this->configureConfigMenu($menu);
$this->configureScheduledTasks($menu);
$children = $menu->getChildren();
ksort($children);
$customOrder = ["Configuration" => $children["Configuration"]] + $children;
$menu->setChildren($customOrder);
foreach ($menu->getChildren() as $menuItem) {
$children = $menuItem->getChildren();
ksort($children);
$menuItem->setChildren($children);
}
}
private function configureAssessmentMenu($menu)
{
$itemName = "Assessments";
if ($this->configLoader->getValue("core_feature_assessment")) {
$menu->getChild($itemName)
->addChild('Configuration', [
'label' => 'Configuration',
'route' => 'assessment-cycle_configure',
])->setExtras([
'icon' => '<i class="fa fa-cog"></i>',
]);
$strategy = $this->em->getRepository(Config::class)->getValueByName("assessment_cycle_strategy");
if ($strategy === AssessmentCycleStrategy::USER_DEFINED) {
$menu->getChild($itemName)->getChild("Scheduled Cycles")->setDisplay(false);
}
} else {
$menu->removeChild($itemName);
}
}
private function configureConfigMenu($menu)
{
$configMenu = $menu->getChild("Configuration");
$configMenu
->addChild("Development Plans")
->setUri("/admin/development-plan/configure");
$configMenu
->addChild("User Profile")
->setUri("/admin/user-profile/configure");
$configMenu
->getChild("Website")
->setUri("/admin/configurations/configure");
$configMenu
->setAttribute("id", "configurationMenuItem")
->setExtras([
'icon' => '<i class="fa fa-wrench"></i>',
]);
}
private function configureScheduledTasks($menu)
{
$menu->addChild('scheduled-tasks', [
'label' => 'Scheduled tasks',
'route' => 'jmose_command_scheduler_list'
])->setExtras([
'icon' => '<i class="fa fa-tasks"></i>'
]);
}
}