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 ($userRole->isGranted('ROLE_BULK_TOP_SELLER_LEADS_GENERATION')) {
  105.             $menu
  106.                 ->addChild('top-seller-lead-generate', ['route' => 'aqarmap_admin_bulk_generate_top_seller_leads'])
  107.                 ->setLabel($this->translator->trans('layout.admin.bulk_top_seller_leads_generate'))
  108.                 ->setExtra('position'95)
  109.                 ->setExtra('icon''align-justify');
  110.         }
  111.         if ($this->checkExperimentsRoles($userRole)) {
  112.             $menu
  113.                 ->addChild('experiments', ['uri' => '#'])
  114.                 ->setLabel('Experiments')
  115.                 ->setExtra('position'90)
  116.                 ->setExtra('icon''flask');
  117.         }
  118.         if ($userRole->isGranted('ROLE_API_DEVELOPER')) {
  119.             $menu
  120.                 ->addChild('featureToggles', ['route' => 'admin_feature_toggle'])
  121.                 ->setLabel('Feature Toggles')
  122.                 ->setExtra('position'91)
  123.                 ->setExtra('icon''toggle-on');
  124.         }
  125.         if ($userRole->isGranted('ROLE_SUPPORT')) {
  126.             $menu
  127.                 ->addChild('joinUs', ['route' => 'admin_join_us'])
  128.                 ->setLabel('Join Us')
  129.                 ->setExtra('position'94)
  130.                 ->setExtra('icon''fas fa-handshake');
  131.         }
  132.         if ($userRole->isGranted('ROLE_FINANCIAL_AID')) {
  133.             $menu
  134.                 ->addChild('FinancialAids', ['route' => 'admin_financial_aid'])
  135.                 ->setLabel('Financial Aids')
  136.                 ->setExtra('icon''fas fa-dollar-sign');
  137.         }
  138.         if ($this->checkSettingsRoles($userRole)) {
  139.             $menu
  140.                 ->addChild('settings', ['uri' => '#'])
  141.                 ->setLabel('Settings')
  142.                 ->setExtra('position'100)
  143.                 ->setExtra('icon''cog');
  144.             $menu
  145.                 ->addChild('announcement', ['route' => 'aqarmap_admin_Announcement'])
  146.                 ->setLabel($this->translator->trans('layout.admin.announcement'))
  147.                 ->setExtra('position'101)
  148.                 ->setExtra('icon''bullhorn');
  149.         }
  150.         if ($userRole->isGranted('ROLE_SUPPORT')) {
  151.             $menu['users_group']
  152.                 ->addChild('feedback', ['route' => 'admin_feedback'])
  153.                 ->setLabel($this->translator->trans('layout.admin.feedback'))
  154.                 ->setExtra('position'55)
  155.                 ->setExtra('icon''weixin')
  156.                 ->setExtra('brand_icon'true);
  157.         }
  158.         if ($userRole->isGranted('ROLE_WEBMASTER')) {
  159.             $menu['settings']
  160.                 ->addChild('footermenu', ['route' => 'aqarmap_admin_menus'])
  161.                 ->setLabel($this->translator->trans('layout.admin.menu'))
  162.                 ->setExtra('position'101)
  163.                 ->setExtra('icon''align-justify');
  164.         }
  165.         if ($userRole->isGranted('ROLE_BANNERS')) {
  166.             $menu['settings']
  167.                 ->addChild('banners', ['route' => 'aqarmap_admin_banners_index'])
  168.                 ->setLabel($this->translator->trans('layout.admin.banners'))
  169.                 ->setExtra('position'102)
  170.                 ->setExtra('icon''align-justify');
  171.         }
  172.         if ($this->featureToggleManager->isEnabled('web.seo.custom.pragraphs')
  173.             && $userRole->isGranted('ROLE_CUSTOM_PARAGRAPH')) {
  174.             $menu
  175.                 ->addChild('customParagraphs', ['route' => 'admin_custom_paragraphs_index'])
  176.                 ->setLabel($this->translator->trans('layout.admin.custom_paragraph.title'))
  177.                 ->setExtra('position'92)
  178.                 ->setExtra('icon''align-justify');
  179.         }
  180.         if ($userRole->isGranted('ROLE_SAVED_SEARCHES')) {
  181.             $menu
  182.                 ->addChild('searchResult', ['route' => 'aqarmap_admin_saved_searches'])
  183.                 ->setLabel('Searches Log')
  184.                 ->setExtra('position'94)
  185.                 ->SetExtra('icon''search');
  186.         }
  187.         if ($userRole->isGranted('ROLE_TOP_CUSTOMER')) {
  188.             $menu
  189.             ->addChild('sponsors', ['route' => 'admin_default_top_customers_index'])
  190.             ->setLabel($this->translator->trans('layout.admin.default_top_customers.indexTitle'))
  191.             ->setExtra('position'93)
  192.             ->setExtra('icon''certificate');
  193.         }
  194.         if ($userRole->isGranted('ROLE_MOBILE_SECTION_TOGGLE')) {
  195.             $menu
  196.                 ->addChild('Mobile Sections Toggles', ['route' => 'aqarmap_admin_mobile_sections_toggles'])
  197.                 ->setLabel('Mobile Sections Toggles')
  198.                 ->setExtra('icon''certificate');
  199.         }
  200.         if ($userRole->isGranted('ROLE_CREDIT_PACKAGE')) {
  201.             $menu
  202.                 ->addChild('subscription plans', ['route' => 'aqarmap_admin_subscription_plans_index'])
  203.                 ->setLabel('subscription plans')
  204.                 ->setExtra('icon''certificate');
  205.         }
  206.     }
  207.     public function onMainNavbarMenuConfigure(ConfigureMenuEvent $event): void
  208.     {
  209.         $menu $event->getMenu();
  210.         $menu
  211.             // Homepage
  212.             ->addChild('home', ['route' => 'homepage'])
  213.             ->setLabel($this->translator->trans('layout.homepage'))
  214.             ->setExtra('position'10);
  215.         // Check if has admin role
  216.         if ($this->authorizationChecker->isGranted('ROLE_ADMIN')) {
  217.             $menu
  218.                 // Dashboard
  219.                 ->addChild('dashboard', ['route' => 'admin_homepage'])
  220.                 ->setLabel($this->translator->trans('layout.dashboard'))
  221.                 ->setExtra('position'20);
  222.         }
  223.     }
  224.     /**
  225.      * Check listing roles.
  226.      */
  227.     private function checkListingRoles($userRole): bool
  228.     {
  229.         return $userRole->isGranted('ROLE_FREE_LISTING')
  230.             || $userRole->isGranted('ROLE_PAID_LISTING')
  231.             || $userRole->isGranted('ROLE_INCREASING_LISTINGS')
  232.             || $userRole->isGranted('ROLE_ADMIN_ACTIVITIES')
  233.             || $userRole->isGranted('ROLE_PUBLISHED_LISTINGS_COUNT')
  234.             || $userRole->isGranted('ROLE_PENDING_FEATURING_LISTING')
  235.             || $userRole->isGranted('ROLE_ACTIVE_CUSTOMER');
  236.     }
  237.     private function checkAnalysisRoles($userRole): bool
  238.     {
  239.         return $userRole->isGranted('ROLE_ANALYSIS')
  240.             || $userRole->isGranted('ROLE_MARKETING')
  241.             || $userRole->isGranted('ROLE_CHURN_EXPIRY')
  242.             || $userRole->isGranted('ROLE_SALES_ANALYSIS');
  243.     }
  244.     private function checkKnowMoreRoles($userRole): bool
  245.     {
  246.         return $userRole->isGranted('ROLE_DISCUSSION')
  247.             || $userRole->isGranted('ROLE_MARKETING')
  248.             || $userRole->isGranted('ROLE_WEBMASTER')
  249.             || $userRole->isGranted('ROLE_ACCESS_TO_ADMIN_LEADS');
  250.     }
  251.     private function checkExperimentsRoles($userRole): bool
  252.     {
  253.         return $userRole->isGranted('ROLE_WEBMASTER')
  254.             || $userRole->isGranted('ROLE_NOTIFICATION_SETTING')
  255.             || $userRole->isGranted('ROLE_NOTIFIER')
  256.             || $userRole->isGranted('ROLE_CUSTOMER_PROFILING')
  257.             || $userRole->isGranted('ROLE_SUPER_ADMIN');
  258.     }
  259.     private function checkSettingsRoles($userRole): bool
  260.     {
  261.         return $userRole->isGranted('ROLE_ANNOUNCEMENTS')
  262.             || $userRole->isGranted('ROLE_MARKETING')
  263.             || $userRole->isGranted('ROLE_WEBMASTER')
  264.             || $userRole->isGranted('ROLE_CRM')
  265.             || $userRole->isGranted('ROLE_SUPER_ADMIN');
  266.     }
  267.     /**
  268.      * @return array<string, mixed>
  269.      */
  270.     public static function getSubscribedEvents(): array
  271.     {
  272.         return ['aqarmap.main.admin_sidebar_menu_configure' => 'onAdminSidebarMenuConfigure'];
  273.     }
  274. }