src/Aqarmap/Bundle/MainBundle/Listener/ConfigureMenuEventSubscriber.php line 38

Open in your IDE?
  1. <?php
  2. namespace Aqarmap\Bundle\MainBundle\Listener;
  3. use Aqarmap\Bundle\FeatureToggleBundle\Service\FeatureToggleManager;
  4. use Aqarmap\Bundle\MainBundle\Event\ConfigureMenuEvent;
  5. use Symfony\Component\DependencyInjection\ContainerInterface;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
  8. use Symfony\Contracts\Translation\TranslatorInterface;
  9. class ConfigureMenuEventSubscriber implements EventSubscriberInterface
  10. {
  11.     /**
  12.      * Container instance.
  13.      */
  14.     protected $container;
  15.     /**
  16.      * Translator instance.
  17.      */
  18.     protected TranslatorInterface $translator;
  19.     private AuthorizationCheckerInterface $authorizationChecker;
  20.     private FeatureToggleManager $featureToggleManager;
  21.     public function __construct(
  22.         ContainerInterface $container,
  23.         TranslatorInterface $translator,
  24.         AuthorizationCheckerInterface $authorizationChecker,
  25.         FeatureToggleManager $featureToggleManager
  26.     ) {
  27.         $this->container $container;
  28.         $this->translator $translator;
  29.         $this->authorizationChecker $authorizationChecker;
  30.         $this->featureToggleManager $featureToggleManager;
  31.     }
  32.     public function onAdminSidebarMenuConfigure(ConfigureMenuEvent $event): void
  33.     {
  34.         $menu $event->getMenu();
  35.         $userRole $this->authorizationChecker;
  36.         $menu
  37.             // Dashboard
  38.             ->addChild('dashboard', ['route' => 'admin_homepage'])
  39.             ->setLabel($this->translator->trans('layout.dashboard'))
  40.             ->setExtra('position'10)
  41.             ->setExtra('icon''home');
  42.         if ($this->checkListingRoles($userRole)) {
  43.             // Listings
  44.             $menu
  45.                 ->addChild('listings_group', ['uri' => '#'])
  46.                 ->setLabel('Listings')
  47.                 ->setExtra('position'20)
  48.                 ->setExtra('icon''th-list');
  49.         }
  50.         if ($this->checkKnowMoreRoles($userRole)) {
  51.             $menu
  52.                 ->addChild('know_more', ['uri' => '#'])
  53.                 ->setLabel('Know More')
  54.                 ->setExtra('position'70)
  55.                 ->setExtra('icon''binoculars');
  56.         }
  57.         if ($this->checkAnalysisRoles($userRole)) {
  58.             $menu
  59.                 ->addChild('analysis', ['uri' => '#'])
  60.                 ->setLabel('Analysis')
  61.                 ->setExtra('position'80)
  62.                 ->setExtra('icon''chart-bar');
  63.         }
  64.         if ($userRole->isGranted('ROLE_LOCATIONS')
  65.             || $userRole->isGranted('ROLE_WEBMASTER')
  66.         ) {
  67.             $menu
  68.                 ->addChild('structure_group', ['uri' => '#'])
  69.                 ->setLabel('Structure')
  70.                 ->setExtra('position'60)
  71.                 ->setExtra('icon''sitemap');
  72.         }
  73.         if ($userRole->isGranted('ROLE_VE')) {
  74.             $menu
  75.                 ->addChild('value_engine', ['uri' => '#'])
  76.                 ->setLabel('Value Engine')
  77.                 ->setExtra('position'81)
  78.                 ->setExtra('icon''chart-pie');
  79.         }
  80.         if ($userRole->isGranted('ROLE_VE')) {
  81.             $menu['value_engine']
  82.                 ->addChild('ve_listings', ['route' => 'aqarmap_admin_ve_listings_insights'])
  83.                 ->setLabel('Listings')
  84.                 ->setExtra('icon''list-ul');
  85.         }
  86.         if ($userRole->isGranted('ROLE_VE')) {
  87.             $menu['value_engine']
  88.                 ->addChild('ve_locations', ['route' => 'aqarmap_admin_ve_locations_insights'])
  89.                 ->setLabel('Locations')
  90.                 ->setExtra('icon''map-marker-alt');
  91.         }
  92.         if ($userRole->isGranted('ROLE_VE')) {
  93.             $menu['value_engine']
  94.                 ->addChild('ve_customers', ['route' => 'aqarmap_admin_ve_customers_insights'])
  95.                 ->setLabel('Customers')
  96.                 ->setExtra('icon''users');
  97.         }
  98.         if ($userRole->isGranted('ROLE_VE')) {
  99.             $menu['value_engine']
  100.                 ->addChild('ve_depth_products', ['route' => 'aqarmap_admin_ve_depth_product_insights'])
  101.                 ->setLabel('Depth Products')
  102.                 ->setExtra('icon''fa fa-chart-bar');
  103.         }
  104.         if ($this->checkExperimentsRoles($userRole)) {
  105.             $menu
  106.                 ->addChild('experiments', ['uri' => '#'])
  107.                 ->setLabel('Experiments')
  108.                 ->setExtra('position'90)
  109.                 ->setExtra('icon''flask');
  110.         }
  111.         if ($userRole->isGranted('ROLE_API_DEVELOPER')) {
  112.             $menu
  113.                 ->addChild('featureToggles', ['route' => 'admin_feature_toggle'])
  114.                 ->setLabel('Feature Toggles')
  115.                 ->setExtra('position'91)
  116.                 ->setExtra('icon''toggle-on');
  117.         }
  118.         if ($userRole->isGranted('ROLE_SUPPORT')) {
  119.             $menu
  120.                 ->addChild('joinUs', ['route' => 'admin_join_us'])
  121.                 ->setLabel('Join Us')
  122.                 ->setExtra('position'94)
  123.                 ->setExtra('icon''fas fa-handshake');
  124.         }
  125.         if ($userRole->isGranted('ROLE_FINANCIAL_AID')) {
  126.             $menu
  127.                 ->addChild('FinancialAids', ['route' => 'admin_financial_aid'])
  128.                 ->setLabel('Financial Aids')
  129.                 ->setExtra('icon''fas fa-dollar-sign');
  130.         }
  131.         if ($this->checkSettingsRoles($userRole)) {
  132.             $menu
  133.                 ->addChild('settings', ['uri' => '#'])
  134.                 ->setLabel('Settings')
  135.                 ->setExtra('position'100)
  136.                 ->setExtra('icon''cog');
  137.             $menu
  138.                 ->addChild('announcement', ['route' => 'aqarmap_admin_Announcement'])
  139.                 ->setLabel($this->translator->trans('layout.admin.announcement'))
  140.                 ->setExtra('position'101)
  141.                 ->setExtra('icon''bullhorn');
  142.         }
  143.         if ($userRole->isGranted('ROLE_SUPPORT')) {
  144.             $menu['users_group']
  145.                 ->addChild('feedback', ['route' => 'admin_feedback'])
  146.                 ->setLabel($this->translator->trans('layout.admin.feedback'))
  147.                 ->setExtra('position'55)
  148.                 ->setExtra('icon''weixin')
  149.                 ->setExtra('brand_icon'true);
  150.         }
  151.         if ($userRole->isGranted('ROLE_WEBMASTER')) {
  152.             $menu['settings']
  153.                 ->addChild('footermenu', ['route' => 'aqarmap_admin_menus'])
  154.                 ->setLabel($this->translator->trans('layout.admin.menu'))
  155.                 ->setExtra('position'101)
  156.                 ->setExtra('icon''align-justify');
  157.         }
  158.         if ($this->featureToggleManager->isEnabled('web.seo.custom.pragraphs')
  159.             && $userRole->isGranted('ROLE_CUSTOM_PARAGRAPH')) {
  160.             $menu
  161.                 ->addChild('customParagraphs', ['route' => 'admin_custom_paragraphs_index'])
  162.                 ->setLabel($this->translator->trans('layout.admin.custom_paragraph.title'))
  163.                 ->setExtra('position'92)
  164.                 ->setExtra('icon''align-justify');
  165.         }
  166.         if ($userRole->isGranted('ROLE_SAVED_SEARCHES')) {
  167.             $menu
  168.                 ->addChild('searchResult', ['route' => 'aqarmap_admin_saved_searches'])
  169.                 ->setLabel('Searches Log')
  170.                 ->setExtra('position'94)
  171.                 ->SetExtra('icon''search');
  172.         }
  173.         if ($userRole->isGranted('ROLE_TOP_CUSTOMER')) {
  174.             $menu
  175.             ->addChild('sponsors', ['route' => 'admin_default_top_customers_index'])
  176.             ->setLabel($this->translator->trans('layout.admin.default_top_customers.indexTitle'))
  177.             ->setExtra('position'93)
  178.             ->setExtra('icon''certificate');
  179.         }
  180.         if ($userRole->isGranted('ROLE_MOBILE_SECTION_TOGGLE')) {
  181.             $menu
  182.                 ->addChild('Mobile Sections Toggles', ['route' => 'aqarmap_admin_mobile_sections_toggles'])
  183.                 ->setLabel('Mobile Sections Toggles')
  184.                 ->setExtra('icon''certificate');
  185.         }
  186.     }
  187.     public function onMainNavbarMenuConfigure(ConfigureMenuEvent $event): void
  188.     {
  189.         $menu $event->getMenu();
  190.         $menu
  191.             // Homepage
  192.             ->addChild('home', ['route' => 'homepage'])
  193.             ->setLabel($this->translator->trans('layout.homepage'))
  194.             ->setExtra('position'10);
  195.         // Check if has admin role
  196.         if ($this->authorizationChecker->isGranted('ROLE_ADMIN')) {
  197.             $menu
  198.                 // Dashboard
  199.                 ->addChild('dashboard', ['route' => 'admin_homepage'])
  200.                 ->setLabel($this->translator->trans('layout.dashboard'))
  201.                 ->setExtra('position'20);
  202.         }
  203.     }
  204.     /**
  205.      * Check listing roles.
  206.      */
  207.     private function checkListingRoles($userRole): bool
  208.     {
  209.         return $userRole->isGranted('ROLE_FREE_LISTING')
  210.             || $userRole->isGranted('ROLE_PAID_LISTING')
  211.             || $userRole->isGranted('ROLE_INCREASING_LISTINGS')
  212.             || $userRole->isGranted('ROLE_ADMIN_ACTIVITIES')
  213.             || $userRole->isGranted('ROLE_PUBLISHED_LISTINGS_COUNT')
  214.             || $userRole->isGranted('ROLE_PENDING_FEATURING_LISTING')
  215.             || $userRole->isGranted('ROLE_ACTIVE_CUSTOMER');
  216.     }
  217.     private function checkAnalysisRoles($userRole): bool
  218.     {
  219.         return $userRole->isGranted('ROLE_ANALYSIS')
  220.             || $userRole->isGranted('ROLE_MARKETING')
  221.             || $userRole->isGranted('ROLE_CHURN_EXPIRY')
  222.             || $userRole->isGranted('ROLE_SALES_ANALYSIS');
  223.     }
  224.     private function checkKnowMoreRoles($userRole): bool
  225.     {
  226.         return $userRole->isGranted('ROLE_DISCUSSION')
  227.             || $userRole->isGranted('ROLE_MARKETING')
  228.             || $userRole->isGranted('ROLE_WEBMASTER')
  229.             || $userRole->isGranted('ROLE_ACCESS_TO_ADMIN_LEADS');
  230.     }
  231.     private function checkExperimentsRoles($userRole): bool
  232.     {
  233.         return $userRole->isGranted('ROLE_WEBMASTER')
  234.             || $userRole->isGranted('ROLE_NOTIFICATION_SETTING')
  235.             || $userRole->isGranted('ROLE_NOTIFIER')
  236.             || $userRole->isGranted('ROLE_CUSTOMER_PROFILING')
  237.             || $userRole->isGranted('ROLE_SUPER_ADMIN');
  238.     }
  239.     private function checkSettingsRoles($userRole): bool
  240.     {
  241.         return $userRole->isGranted('ROLE_ANNOUNCEMENTS')
  242.             || $userRole->isGranted('ROLE_MARKETING')
  243.             || $userRole->isGranted('ROLE_WEBMASTER')
  244.             || $userRole->isGranted('ROLE_CRM')
  245.             || $userRole->isGranted('ROLE_SUPER_ADMIN');
  246.     }
  247.     /**
  248.      * @return array<string, mixed>
  249.      */
  250.     public static function getSubscribedEvents(): array
  251.     {
  252.         return ['aqarmap.main.admin_sidebar_menu_configure' => 'onAdminSidebarMenuConfigure'];
  253.     }
  254. }