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

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