src/Component/AdminMenu/EventSubscriber/VacancyMenuSubscriber.php line 46

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\BuildVacancyMenuEvent;
  5. use App\Component\Configuration\Util\Config;
  6. use App\Component\UserRole\Permission\UserRolePermission;
  7. use App\Dto\MenuItem;
  8. use App\Entity\Applicant;
  9. use App\Entity\ApplicantForm;
  10. use App\Entity\ApplicationProcessItemCollection;
  11. use App\Entity\Feed;
  12. use App\Entity\InternFormEntry;
  13. use App\Entity\JobProfile;
  14. use App\Entity\KnockoutQuestion;
  15. use App\Entity\NoticeCategory;
  16. use App\Entity\PayrollQuestion;
  17. use App\Entity\SearchAnalytics;
  18. use App\Entity\SiteUserData;
  19. use App\Entity\VacancyAttribute;
  20. use App\Entity\VacancyDomain;
  21. use App\Entity\VacancyMoreInfo;
  22. use App\Entity\VacancyTemplate;
  23. use App\Entity\VacancyUsp;
  24. use App\Entity\XmlFeed;
  25. use App\EventListener\FeatureFlagListener;
  26. use Flagception\Manager\FeatureManagerInterface;
  27. use Knp\Menu\ItemInterface;
  28. use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
  29. use Symfony\Component\Security\Core\Security;
  30. class VacancyMenuSubscriber extends AbstractMenuBuildEventSubscriber
  31. {
  32.     protected static string $eventClass BuildVacancyMenuEvent::class;
  33.     public function __construct(
  34.         AuthorizationCheckerInterface $authorizationChecker,
  35.         FeatureManagerInterface $featureManager,
  36.         private readonly Config $config,
  37.         private readonly Security $security,
  38.     ) {
  39.         parent::__construct($authorizationChecker$featureManager);
  40.     }
  41.     public function buildMenu(AbstractBuildMenuEvent $event)
  42.     {
  43.         $menuBuilder $this->getMenuBuilder($event->getMenu(), 'Vacancies');
  44.         $menuBuilder
  45.             ->addMainItem('Vacancies''fal fa-suitcase')
  46.             ->addOverlay()
  47.             ->addSection('Vacancies')
  48.             ->addColumn('General''fal fa-suitcase')
  49.             ->addItem('View vacancies''admin_vacancies');
  50.         if (!(true === $this->config->get('job_owner_hide_vacancy_create_without_template')
  51.             && $this->security->isGranted('ROLE_ADMIN_JOB_OWNER')
  52.             && !$this->security->isGranted('ROLE_ADMIN_HIRING_MANAGER'))
  53.         ) {
  54.             $menuBuilder->addItem('Create vacancy''admin_vacancy_create');
  55.         }
  56.         if (
  57.             $this->hasAccess(['ROLE_ADMIN_USER', [UserRolePermission::MASK_VIEWApplicationProcessItemCollection::class]])
  58.             && $this->checkFeatures([FeatureFlagListener::FEATURE_APPLICATION_PROCESS])
  59.         ) {
  60.             $menuBuilder->addItem('Application Process''admin_application_process');
  61.         }
  62.         if (
  63.             (
  64.                 $this->hasAccess(['ROLE_ADMIN_HIRING_MANAGER', [UserRolePermission::MASK_VIEWVacancyMoreInfo::class]])
  65.                 || $this->hasAccess(['ROLE_ADMIN_USER', [UserRolePermission::MASK_VIEWVacancyMoreInfo::class]])
  66.             )
  67.             && $this->checkFeatures([FeatureFlagListener::FEATURE_VACANCY_MORE_INFO_BUTTON])
  68.         ) {
  69.             $menuBuilder->addItem('More info requests''admin_vacancy_more_info_index');
  70.         }
  71.         if (
  72.             $this->hasAccess(['ROLE_ADMIN_USER', [UserRolePermission::MASK_VIEWVacancyUsp::class]])
  73.             && $this->checkFeatures([FeatureFlagListener::FEATURE_VACANCY_USPS])
  74.         ) {
  75.             $menuBuilder->addItem("Vacancy USP's"'admin_vacancyusps');
  76.         }
  77.         if (
  78.             (
  79.                 $this->hasAccess(['ROLE_ADMIN_USER', [UserRolePermission::MASK_VIEWVacancyDomain::class]])
  80.                 || $this->hasAccess(['ROLE_ADMIN_JOB_OWNER', [UserRolePermission::MASK_VIEWVacancyDomain::class]])
  81.             )
  82.             && $this->checkFeatures([FeatureFlagListener::FEATURE_VACANCY_DOMAIN])
  83.         ) {
  84.             $menuBuilder->addItem('Vacancy domains''admin_vacancy_domain');
  85.         }
  86.         if ($this->hasAccess([[UserRolePermission::MASK_VIEWVacancyTemplate::class]])) {
  87.             $menuBuilder->addItem('Vacancy templates''admin_vacancy_template');
  88.         }
  89.         if (
  90.             $this->hasAccess(['ROLE_ADMIN_USER', [UserRolePermission::MASK_VIEWInternFormEntry::class]])
  91.             && $this->checkFeatures([FeatureFlagListener::FEATURE_INTERNSHIP_FORM])
  92.         ) {
  93.             $menuBuilder->addItem('Internship forms''admin_intern_form_index');
  94.         }
  95.         if ($this->hasAccess(['ROLE_ADMIN_USER', [UserRolePermission::MASK_VIEWSearchAnalytics::class]])) {
  96.             $menuBuilder->addItem('Search statistics''admin_vacancy_analytics_index');
  97.         }
  98.         if ($this->hasAccess(['ROLE_ADMIN_USER', [UserRolePermission::MASK_VIEWVacancyAttribute::class]])) {
  99.             $menuBuilder->addItem('Vacancy attributes''admin_vacancy_attribute_index');
  100.         }
  101.         $menuBuilder->end();
  102.         $menuBuilder->addColumn('Applicants''fal fa-users');
  103.         /** @var ItemInterface $currentItem */
  104.         $currentItem $menuBuilder->getCurrentContext();
  105.         $applicantsDto = new MenuItem($currentItem);
  106.         if (
  107.             $this->hasAccess(['ROLE_ADMIN_JOB_OWNER'])
  108.             || $this->hasAccess(['ROLE_ADMIN_USER'])
  109.         ) {
  110.             if ($this->authorizationChecker->isGranted(UserRolePermission::MASK_VIEWApplicant::class)) {
  111.                 $menuBuilder->addItem('Applicants''admin_applicants', [
  112.                     'view' => $this->featureManager->isActive(FeatureFlagListener::FEATURE_ATS) ? 'funnel' 'grid',
  113.                 ])
  114.                     ->additem('Open applicants''admin_applicants_open');
  115.             }
  116.             if ($this->authorizationChecker->isGranted(UserRolePermission::MASK_VIEWApplicantForm::class)) {
  117.                 $menuBuilder->additem('Applicant form''applicant_forms');
  118.             }
  119.         }
  120.         if (
  121.             $this->hasAccess([[UserRolePermission::MASK_VIEWSiteUserData::class]])
  122.             && $this->checkFeatures([FeatureFlagListener::FEATURE_RESUME_DATABASE])
  123.         ) {
  124.             $menuBuilder->addItem('Resumes''admin_resume_database_index');
  125.         }
  126.         if (
  127.             $this->hasAccess(['ROLE_ADMIN_MOBILITY_USER', [UserRolePermission::MASK_VIEWJobProfile::class]])
  128.             && $this->checkFeatures([FeatureFlagListener::FEATURE_MOBILITY_PLATFORM])
  129.         ) {
  130.             $menuBuilder->addItem('Job Profiles''admin_job_profiles');
  131.         }
  132.         if (
  133.             $this->hasAccess(['ROLE_ADMIN_USER', [UserRolePermission::MASK_VIEWKnockoutQuestion::class]])
  134.             && $this->checkFeatures([FeatureFlagListener::FEATURE_VACANCY_KNOCKOUT_QUESTIONS])
  135.         ) {
  136.             $menuBuilder
  137.                 ->addItem('Knockout Questions''admin_knockout_questions');
  138.         }
  139.         $menuBuilder->end();
  140.         $applicantsDto->close();
  141.         if (!$this->checkFeatures([
  142.             FeatureFlagListener::FEATURE_PAYROLL,
  143.             FeatureFlagListener::FEATURE_COMPANY_DASHBOARD,
  144.             FeatureFlagListener::FEATURE_FEEDS,
  145.             FeatureFlagListener::FEATURE_XML_VACANCY_FEEDS,
  146.         ])) {
  147.             return;
  148.         }
  149.         $menuBuilder->addColumn('Other''fal fa-globe');
  150.         /** @var ItemInterface $currentItem */
  151.         $currentItem $menuBuilder->getCurrentContext();
  152.         $otherDto = new MenuItem($currentItem);
  153.         if (
  154.             $this->hasAccess(['ROLE_ADMIN_USER', [UserRolePermission::MASK_VIEWFeed::class]])
  155.             && $this->checkFeatures([FeatureFlagListener::FEATURE_FEEDS])
  156.         ) {
  157.             $menuBuilder->addItem('Feeds''admin_feeds');
  158.         }
  159.         if (
  160.             $this->hasAccess(['ROLE_ADMIN_USER', [UserRolePermission::MASK_VIEWXmlFeed::class]])
  161.             && $this->checkFeatures([FeatureFlagListener::FEATURE_XML_VACANCY_FEEDS])
  162.         ) {
  163.             $menuBuilder->addItem('XML feeds''admin_xml_feed_index');
  164.         }
  165.         if (
  166.             $this->hasAccess(['ROLE_ADMIN_USER', [UserRolePermission::MASK_VIEWNoticeCategory::class]])
  167.             && $this->checkFeatures([FeatureFlagListener::FEATURE_COMPANY_DASHBOARD])
  168.         ) {
  169.             $menuBuilder->addItem('Notice Categories''admin_notice_category');
  170.         }
  171.         if (
  172.             $this->hasAccess(['ROLE_ADMIN_USER', [UserRolePermission::MASK_VIEWPayrollQuestion::class]])
  173.             && $this->checkFeatures([FeatureFlagListener::FEATURE_PAYROLL])
  174.         ) {
  175.             $menuBuilder->addItem('Payroll''admin_payroll');
  176.         }
  177.         $otherDto->close();
  178.     }
  179. }