src/Component/AdminMenu/EventSubscriber/ATSHeaderMenuSubscriber.php line 15

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\BuildATSMenuEvent;
  5. use App\Dto\MenuItem;
  6. use App\EventListener\FeatureFlagListener;
  7. use Knp\Menu\ItemInterface;
  8. class ATSHeaderMenuSubscriber extends AbstractMenuBuildEventSubscriber
  9. {
  10.     protected static string $eventClass BuildATSMenuEvent::class;
  11.     public function buildMenu(AbstractBuildMenuEvent $event)
  12.     {
  13.         if (!$event instanceof BuildATSMenuEvent) {
  14.             return;
  15.         }
  16.         $atsFeatures array_filter(array_column($event->getATSList(), 'feature'));
  17.         $atsFeatures[] = FeatureFlagListener::FEATURE_ATS;
  18.         $atsFeatures array_unique($atsFeatures);
  19.         $hasAtsEnabled $this->checkFeatures($atsFeatures);
  20.         if (
  21.             !$hasAtsEnabled && (!$this->hasAccess(['ROLE_ADMIN_USER']) || $this->hasAccess(['ROLE_ADMIN_HIRING_MANAGER']))
  22.         ) {
  23.             $event->stopPropagation();
  24.             return;
  25.         }
  26.         $menuBuilder $this->getMenuBuilder($event->getMenu())
  27.             ->addSection('ATS''skin-lemon');
  28.         /** @var ItemInterface $currentItem */
  29.         $currentItem $menuBuilder->getCurrentContext();
  30.         $atsDto = new MenuItem($currentItem);
  31.         if (
  32.             (
  33.                 $this->hasAccess(['ROLE_ADMIN_HIRING_MANAGER'])
  34.                 || $this->hasAccess(['ROLE_ADMIN_USER'])
  35.             )
  36.             && $this->checkFeatures([FeatureFlagListener::FEATURE_ATS])
  37.         ) {
  38.             $menuBuilder->addMainItem('Applicants''fal fa-users''admin_applicants', [
  39.                 'view' => $this->featureManager->isActive(FeatureFlagListener::FEATURE_ATS) ? 'funnel' 'grid',
  40.             ])->end();
  41.             $menuBuilder->addMainItem('Open applicants''fal fa-id-badge''admin_applicants_open')->end();
  42.             $menuBuilder->addMainItem('Applicant form''fal fa-file-alt''applicant_forms')->end();
  43.         }
  44.         if ($this->checkFeatures([FeatureFlagListener::FEATURE_ATS]) && $this->hasAccess(['ROLE_ADMIN_USER'])) {
  45.             $menuBuilder->addMainItem('Recipients''fal fa-at''ats_recipients')
  46.                 ->end()
  47.                 ->addMainItem('Hire/Reject reasons''fal fa-tasks''ats_reject_reason')
  48.                 ->end()
  49.                 ->addMainItem('Applicant status''fal fa-thermometer-half''ats_status')
  50.                 ->end()
  51.             ;
  52.         }
  53.         if (!$this->hasAccess(['ROLE_ADMIN_USER'])) {
  54.             $atsDto->close();
  55.             return;
  56.         }
  57.         foreach ($event->getATSList() as $title => $details) {
  58.             if (!$this->checkFeatures([$details['feature']])) {
  59.                 continue;
  60.             }
  61.             $menuBuilder->addMainItem(
  62.                 $title,
  63.                 $details['icon'] ?? 'fal fa-network-wired',
  64.                 $details['route']
  65.             )->end();
  66.         }
  67.         if ($this->checkFeatures([FeatureFlagListener::FEATURE_EXTERNAL_INTEGRATION_LOG])) {
  68.             $menuBuilder->addMainItem('Integration log''fal fa-info-square''admin_external_integration_log');
  69.         }
  70.         $atsDto->close();
  71.     }
  72. }