src/EventListener/SonataAdmin/Menu/MenuBuilderListener.php line 51

Open in your IDE?
  1. <?php
  2. namespace App\EventListener\SonataAdmin\Menu;
  3. use App\Util\Helper\StringUtils;
  4. use Knp\Menu\ItemInterface;
  5. use Sonata\AdminBundle\Event\ConfigureMenuEvent;
  6. use Symfony\Component\HttpKernel\KernelInterface;
  7. use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
  8. class MenuBuilderListener
  9. {
  10.     /**
  11.      * Contains the value of the currently loaded environment.
  12.      *
  13.      * @var string
  14.      */
  15.     private $environment;
  16.     /**
  17.      * MenuBuilderListener constructor.
  18.      *
  19.      * @param \Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface $authorizationChecker
  20.      *   The authorization service manager
  21.      * @param \Symfony\Component\HttpKernel\KernelInterface $kernel
  22.      *   The instance of the core kernel
  23.      */
  24.     public function __construct(KernelInterface $kernel)
  25.     {
  26.         $this->environment $kernel->getEnvironment();
  27.     }
  28.     /**
  29.      * Responsible for providing additional menu items to the sidebar navigation.
  30.      *
  31.      * @param \Sonata\AdminBundle\Event\ConfigureMenuEvent $event
  32.      *   The instance of the dispatched event
  33.      *
  34.      * @uses \App\EventListener\SonataAdmin\Menu\MenuBuilderListener::handleAdminProduct()
  35.      * @uses \App\EventListener\SonataAdmin\Menu\MenuBuilderListener::handleAdminSeries()
  36.      * @uses \App\EventListener\SonataAdmin\Menu\MenuBuilderListener::handleAdminProductCompany()
  37.      * @uses \App\EventListener\SonataAdmin\Menu\MenuBuilderListener::handleAdminProductPerson()
  38.      * @uses \App\EventListener\SonataAdmin\Menu\MenuBuilderListener::handleAdminAssetOffline()
  39.      * @uses \App\EventListener\SonataAdmin\Menu\MenuBuilderListener::handleAdminAssetOnlineInbox()
  40.      * @uses \App\EventListener\SonataAdmin\Menu\MenuBuilderListener::handleAdminTvSalesCustomer()
  41.      * @uses \App\EventListener\SonataAdmin\Menu\MenuBuilderListener::handleAdminTvSalesOfferMain()
  42.      * @uses \App\EventListener\SonataAdmin\Menu\MenuBuilderListener::handleAdminTvSalesOffer()
  43.      * @uses \App\EventListener\SonataAdmin\Menu\MenuBuilderListener::handleAdminVodOperator()
  44.      * @uses \App\EventListener\SonataAdmin\Menu\MenuBuilderListener::handleAdminVodPriceCampaignOperators()
  45.      */
  46.     public function addMenuItems(ConfigureMenuEvent $event)
  47.     {
  48.         $menu $event->getMenu();
  49.         $menu->removeChild("sonata_media");
  50.         $menu->getChild("sonata_classification")->removeChild("label_tags");
  51.         $menu->getChild("sonata_classification")->removeChild("label_collections");
  52.         foreach ($menu->getChildren() as $group) {
  53.             $order = [];
  54.             $doReorder false;
  55.             foreach ($group->getChildren() as $menuItem) {
  56.                 $order[] = $menuItem->getName();
  57.                 if (!($admin $menuItem->getExtra('admin'))) {
  58.                     continue;
  59.                 }
  60.                 $methodName StringUtils::camelize(sprintf(
  61.                     'handle_%s',
  62.                     str_replace('.''_'$admin->getCode())
  63.                 ));
  64.                 if (
  65.                     method_exists($this$methodName)
  66.                     && $admin->isGranted("CREATE")
  67.                     && ($items $this->{$methodName}($group))
  68.                 ) {
  69.                     $doReorder true;
  70.                     $order array_merge($order$items);
  71.                 }
  72.             }
  73.             if ($doReorder) {
  74.                 $group->reorderChildren($order);
  75.             }
  76.         }
  77.     }
  78.     /**
  79.      * Responsible for providing menu items to section "Products".
  80.      *
  81.      * @param \Knp\Menu\ItemInterface $group
  82.      *   The instance of the menu item target group
  83.      *
  84.      * @return array|string[]
  85.      *   The menu item names to include
  86.      */
  87.     protected function handleAdminProduct(ItemInterface $group): array
  88.     {
  89.         $this->addLink($group'admin_app_product_create', [
  90.             'subclass' => 'productMovie',
  91.         ], 'Add new Movie''add_product_movie');
  92.         $this->addLink($group'admin_app_product_create', [
  93.             'subclass' => 'productTVSeries',
  94.         ], 'Add new TV Series''add_product_tv_series');
  95.         return [
  96.             'add_product_movie',
  97.             'add_product_tv_series',
  98.         ];
  99.     }
  100.     /**
  101.      * Responsible for providing menu items to section "Series".
  102.      *
  103.      * @param \Knp\Menu\ItemInterface $group
  104.      *   The instance of the menu item target group
  105.      *
  106.      * @return array|string[]
  107.      *   The menu item names to include
  108.      */
  109.     protected function handleAdminSeries(ItemInterface $group): array
  110.     {
  111.         $this->addLink($group'admin_app_series_create');
  112.         return ['admin_app_series_create'];
  113.     }
  114.     /**
  115.      * Responsible for providing menu items to section "Companies".
  116.      *
  117.      * @param \Knp\Menu\ItemInterface $group
  118.      *   The instance of the menu item target group
  119.      *
  120.      * @return array|string[]
  121.      *   The menu item names to include
  122.      */
  123.     protected function handleAdminProductCompany(ItemInterface $group): array
  124.     {
  125.         $this->addLink($group'admin_app_company_create');
  126.         return ['admin_app_company_create'];
  127.     }
  128.     /**
  129.      * Responsible for providing menu items to section "Persons".
  130.      *
  131.      * @param \Knp\Menu\ItemInterface $group
  132.      *   The instance of the menu item target group
  133.      *
  134.      * @return array|string[]
  135.      *   The menu item names to include
  136.      */
  137.     protected function handleAdminProductPerson(ItemInterface $group): array
  138.     {
  139.         $this->addLink($group'admin_app_person_create');
  140.         return ['admin_app_person_create'];
  141.     }
  142.     /**
  143.      * Responsible for providing menu items to section "Offline Assets".
  144.      *
  145.      * @param \Knp\Menu\ItemInterface $group
  146.      *   The instance of the menu item target group
  147.      *
  148.      * @return array|string[]
  149.      *   The menu item names to include
  150.      */
  151.     protected function handleAdminAssetOffline(ItemInterface $group): array
  152.     {
  153.         $this->addLink($group'admin_app_assetoffline_create');
  154.         return ['admin_app_assetoffline_create'];
  155.     }
  156.     /**
  157.      * Responsible for providing menu items to section "Online Assets Inbox".
  158.      *
  159.      * @param \Knp\Menu\ItemInterface $group
  160.      *   The instance of the menu item target group
  161.      *
  162.      * @return array|string[]
  163.      *   The menu item names to include
  164.      */
  165.     protected function handleAdminAssetOnlineInbox(ItemInterface $group): array
  166.     {
  167.         $route 'prod' === $this->environment
  168.             'admin_app_assetonlineinbox_upload'
  169.             'admin_app_sonatamediamedia_multi_upload';
  170.         $this->addLink(
  171.             $group,
  172.             $route,
  173.             ['provider' => 'app.media.provider.asset_file'],
  174.             'Upload'
  175.         );
  176.         return [$route];
  177.     }
  178.     /**
  179.      * Responsible for providing menu items to section "TV Sales Customers".
  180.      *
  181.      * @param \Knp\Menu\ItemInterface $group
  182.      *   The instance of the menu item target group
  183.      *
  184.      * @return array|string[]
  185.      *   The menu item names to include
  186.      */
  187.     protected function handleAdminTvSalesCustomer(ItemInterface $group): array
  188.     {
  189.         $this->addLink($group'admin_app_customer_create');
  190.         return ['admin_app_customer_create'];
  191.     }
  192.     /**
  193.      * Responsible for providing menu items to section "TV Sales Main Offers".
  194.      *
  195.      * @param \Knp\Menu\ItemInterface $group
  196.      *   The instance of the menu item target group
  197.      *
  198.      * @return array|string[]
  199.      *   The menu item names to include
  200.      */
  201.     protected function handleAdminTvSalesOfferMain(ItemInterface $group): array
  202.     {
  203.         $this->addLink(
  204.             $group,
  205.             'admin_app_offermain_create',
  206.             [],
  207.             'Add mainoffer'
  208.         );
  209.         return ['admin_app_offermain_create'];
  210.     }
  211.     /**
  212.      * Responsible for providing menu items to section "TV Sales Offers".
  213.      *
  214.      * @param \Knp\Menu\ItemInterface $group
  215.      *   The instance of the menu item target group
  216.      *
  217.      * @return array|string[]
  218.      *   The menu item names to include
  219.      */
  220.     protected function handleAdminTvSalesOffer(ItemInterface $group): array
  221.     {
  222.         $this->addLink($group'admin_app_offer_create');
  223.         return ['admin_app_offer_create'];
  224.     }
  225.     /**
  226.      * Responsible for providing menu items to section "VOD Operators".
  227.      *
  228.      * @param \Knp\Menu\ItemInterface $group
  229.      *   The instance of the menu item target group
  230.      *
  231.      * @return array|string[]
  232.      *   The menu item names to include
  233.      */
  234.     protected function handleAdminVodOperator(ItemInterface $group): array
  235.     {
  236.         $this->addLink($group'admin_app_vod_operator_create');
  237.         return ['admin_app_vod_operator_create'];
  238.     }
  239.     /**
  240.      * Responsible for providing menu items to section "VOD Price Campaigns Operators".
  241.      *
  242.      * @param \Knp\Menu\ItemInterface $group
  243.      *   The instance of the menu item target group
  244.      *
  245.      * @return array|string[]
  246.      *   The menu item names to include
  247.      */
  248.     protected function handleAdminVodPriceCampaignOperators(ItemInterface $group): array
  249.     {
  250.         $this->addLink($group'admin_app_vod_pricecampaign_create');
  251.         return ['admin_app_vod_pricecampaign_create'];
  252.     }
  253.     private function addLink(
  254.         ItemInterface $menuItem,
  255.         string $route,
  256.         ?array $routeParameters = [],
  257.         ?string $label 'Add new',
  258.         ?string $name null
  259.     ) {
  260.         $menuItem
  261.             ->addChild(
  262.                 $name ?? $route,
  263.                 ['route' => $route'routeParameters' => $routeParameters]
  264.             )
  265.             ->setLabel($label)
  266.             ->setExtra('icon''<i class="fas fa-angle-double-right ml-4" aria-hidden="true"></i>')
  267.             ->getParent();
  268.     }
  269. }