src/Component/AdminMenu/EventSubscriber/CompanyMenuSubscriber.php line 30

Open in your IDE?
  1. <?php
  2. namespace App\Component\AdminMenu\EventSubscriber;
  3. use App\Component\AdminMenu\Event\AbstractBuildMenuEvent;
  4. use App\Component\AdminMenu\Event\BuildMainMenuEvent;
  5. use App\Component\AdminMenu\Event\BuildVacancyMenuEvent;
  6. use App\Component\AdminMenu\MenuBuilder;
  7. use App\Component\UserRole\Permission\UserRolePermission;
  8. use App\Entity\Company;
  9. use App\Entity\CompanyAttribute;
  10. use App\Entity\CompanyStatus;
  11. use App\Entity\Employee;
  12. use App\Entity\FeedbackCompany;
  13. use App\EventListener\FeatureFlagListener;
  14. class CompanyMenuSubscriber extends AbstractMenuBuildEventSubscriber
  15. {
  16.     protected static int $priority = -100;
  17.     protected static string $eventClass BuildVacancyMenuEvent::class;
  18.     public static function getSubscribedEvents(): array
  19.     {
  20.         $subscribers parent::getSubscribedEvents();
  21.         $subscribers[BuildMainMenuEvent::class] = ['buildMenu', -100];
  22.         return $subscribers;
  23.     }
  24.     public function buildMenu(AbstractBuildMenuEvent $event)
  25.     {
  26.         if (
  27.             (
  28.                 !$this->hasAccess(['ROLE_ADMIN_USER', [UserRolePermission::MASK_VIEWCompany::class]])
  29.                 && !$this->hasAccess(['ROLE_ADMIN_HIRING_MANAGER', [UserRolePermission::MASK_VIEWCompany::class]])
  30.                 && !$this->hasAccess(['ROLE_ADMIN_USER', [UserRolePermission::MASK_VIEWCompanyAttribute::class]])
  31.                 && !$this->hasAccess(['ROLE_ADMIN_USER', [UserRolePermission::MASK_VIEWCompanyStatus::class]])
  32.                 && !$this->hasAccess(['ROLE_ADMIN_USER', [UserRolePermission::MASK_VIEWEmployee::class]])
  33.             )
  34.             || !$this->checkFeatures([FeatureFlagListener::FEATURE_COMPANYFeatureFlagListener::FEATURE_EMPLOYEE])
  35.         ) {
  36.             return;
  37.         }
  38.         $menuBuilder null;
  39.         if (!empty($event->getMenu()['Content']['OVERLAY']['Manage content'])) {
  40.             $menuItem $event->getMenu()['Content']['OVERLAY']['Manage content'];
  41.             $menuBuilder $this->getMenuBuilder($menuItem);
  42.         }
  43.         if ($event instanceof BuildVacancyMenuEvent) {
  44.             $menuBuilder $this->getMenuBuilder($event->getMenu(), 'Vacancies')
  45.                 ->addMainItem('Companies''fal fa-building')
  46.                 ->addOverlay()
  47.                 ->addSection('Companies');
  48.         }
  49.         if (!$menuBuilder) {
  50.             return;
  51.         }
  52.         if ($this->checkCompanyColumnPermissions()) {
  53.             $this->renderCompanyColumn($menuBuilder);
  54.         }
  55.         if ($this->checkEmployeeColumnPermissions()) {
  56.             $this->renderEmployeeColumn($menuBuilder);
  57.         }
  58.         if ($this->checkOtherColumnPermissions() && $event instanceof BuildVacancyMenuEvent) {
  59.             $this->renderOtherColumn($menuBuilder);
  60.         }
  61.     }
  62.     private function checkCompanyColumnPermissions(): bool
  63.     {
  64.         return (
  65.             $this->hasAccess(['ROLE_ADMIN_USER', [UserRolePermission::MASK_VIEWCompany::class]])
  66.             || $this->hasAccess(['ROLE_ADMIN_HIRING_MANAGER', [UserRolePermission::MASK_VIEWCompany::class]])
  67.             || $this->hasAccess(['ROLE_ADMIN_USER', [UserRolePermission::MASK_VIEWCompanyAttribute::class]])
  68.             || $this->hasAccess(['ROLE_ADMIN_USER', [UserRolePermission::MASK_VIEWCompanyStatus::class]])
  69.         )
  70.             && $this->checkFeatures([FeatureFlagListener::FEATURE_COMPANY]);
  71.     }
  72.     private function checkEmployeeColumnPermissions(): bool
  73.     {
  74.         return $this->hasAccess(['ROLE_ADMIN_USER', [UserRolePermission::MASK_VIEWEmployee::class]])
  75.             && $this->checkFeatures([FeatureFlagListener::FEATURE_EMPLOYEE]);
  76.     }
  77.     private function checkOtherColumnPermissions(): bool
  78.     {
  79.         return $this->hasAccess(['ROLE_ADMIN_USER', [UserRolePermission::MASK_VIEWFeedbackCompany::class]])
  80.             && $this->checkFeatures([FeatureFlagListener::FEATURE_FEEDBACK_COMPANY]);
  81.     }
  82.     private function renderCompanyColumn(MenuBuilder $menuBuilder)
  83.     {
  84.         $menuBuilder->addColumn('Companies''fal fa-building');
  85.         if ($this->hasAccess(['ROLE_ADMIN_USER', [UserRolePermission::MASK_VIEWCompany::class]])
  86.             || $this->hasAccess(['ROLE_ADMIN_HIRING_MANAGER', [UserRolePermission::MASK_VIEWCompany::class]])
  87.         ) {
  88.             $menuBuilder->addItem('Create company''company_create')
  89.                 ->addItem('View companies''admin_companies');
  90.         }
  91.         if ($this->hasAccess(['ROLE_ADMIN_USER', [UserRolePermission::MASK_VIEWCompanyAttribute::class]])) {
  92.             $menuBuilder->addItem('Company attributes''admin_company_attribute_index');
  93.         }
  94.         if ($this->hasAccess(['ROLE_ADMIN_USER', [UserRolePermission::MASK_VIEWCompanyStatus::class]])) {
  95.             $menuBuilder->addItem('Company Statuses''admin_company_status_index');
  96.         }
  97.         $menuBuilder->end();
  98.     }
  99.     private function renderEmployeeColumn(MenuBuilder $menuBuilder)
  100.     {
  101.         $menuBuilder->addColumn('Employees''fal fa-user-friends')
  102.             ->addItem('Create employee''employee_create')
  103.             ->addItem('View employees''admin_employees')
  104.             ->end()
  105.         ;
  106.     }
  107.     private function renderOtherColumn(MenuBuilder $menuBuilder)
  108.     {
  109.         $menuBuilder->addColumn('Other''fal fa-globe')
  110.             ->addItem('Feedback Company''admin_feedback_company_index');
  111.     }
  112. }