src/Controller/Page/VacanciesController.php line 55

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Page;
  3. use App\Component\Configuration\Util\Config;
  4. use App\Entity\Company;
  5. use App\Entity\Vacancy;
  6. use App\Renderer\Page;
  7. use App\Service\SiteService;
  8. use App\Service\VacancyService;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use FOS\HttpCacheBundle\Configuration\Tag;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpFoundation\RequestStack;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Twig\Error\LoaderError;
  16. use Twig\Error\RuntimeError;
  17. use Twig\Error\SyntaxError;
  18. class VacanciesController extends AbstractController
  19. {
  20.     private RequestStack $requestStack;
  21.     private Page $pageRenderer;
  22.     private VacancyService $service;
  23.     private Config $config;
  24.     private SiteService $siteService;
  25.     private EntityManagerInterface $entityManager;
  26.     public function __construct(
  27.         RequestStack $requestStack,
  28.         Page $pageRenderer,
  29.         VacancyService $service,
  30.         Config $config,
  31.         SiteService $siteService,
  32.         EntityManagerInterface $entityManager
  33.     ) {
  34.         $this->requestStack $requestStack;
  35.         $this->pageRenderer $pageRenderer;
  36.         $this->service $service;
  37.         $this->config $config;
  38.         $this->siteService $siteService;
  39.         $this->entityManager $entityManager;
  40.     }
  41.     /**
  42.      * @Tag({"pages", "vacancy_overview"})
  43.      *
  44.      * @param null $filters
  45.      *
  46.      * @throws LoaderError
  47.      * @throws RuntimeError
  48.      * @throws SyntaxError
  49.      */
  50.     public function indexAction(
  51.         $filters null
  52.     ): Response {
  53.         $company null;
  54.         $range 10;
  55.         if ($filters) {
  56.             $companyCandidate $filters;
  57.             if (str_contains($companyCandidate'/')) {
  58.                 $urlFilters explode('/'$companyCandidate);
  59.                 $companyCandidate reset($urlFilters);
  60.                 $range $this->findRange($urlFilters);
  61.             }
  62.             $company $this->entityManager->getRepository(Company::class)->findOneBy([
  63.                 'slug' => $companyCandidate,
  64.             ]);
  65.         }
  66.         $map null !== $this->requestStack->getMainRequest()?->get('map');
  67.         $seoSnippet $this->getSeoSnippet();
  68.         return $this
  69.             ->pageRenderer
  70.             ->renderPage(
  71.                 placeholder'{vacancies}',
  72.                 template'@default/pages/vacancy_overview.html.twig',
  73.                 data: [
  74.                     'map' => $map,
  75.                     'limitPerPage' => $this->config->get('site_vacancy_limit_per_page'),
  76.                     'sortForm' => $this->service->getSortingForm()->createView(),
  77.                     'company' => $company,
  78.                     'range' => $range,
  79.                     // this is needed for bc when theme has no theme inheritance
  80.                     'e_commerce_script' => '<script> window.dataLayer = window.dataLayer || []; </script>',
  81.                     'seoSnippet' => $seoSnippet,
  82.                 ],
  83.                 metaData$seoSnippet,
  84.                 options: [
  85.                     'skip_tealium' => true,
  86.                 ]
  87.             )
  88.         ;
  89.     }
  90.     private function findRange(array $urlFilters): int
  91.     {
  92.         $range 10;
  93.         if (!$rangeKey array_search('range'$urlFilterstrue)) {
  94.             return $range;
  95.         }
  96.         /* @var int $rangeKey */
  97.         ++$rangeKey;
  98.         if (!empty($urlFilters[$rangeKey]) && \is_int($urlFilters[$rangeKey])) {
  99.             $range $urlFilters[$rangeKey];
  100.         }
  101.         return $range;
  102.     }
  103.     /**
  104.      * @throws LoaderError
  105.      * @throws RuntimeError
  106.      * @throws SyntaxError
  107.      */
  108.     public function favoritesOverviewAction(): Response
  109.     {
  110.         return $this
  111.             ->pageRenderer
  112.             ->renderPage('{favorites}''@default/pages/vacancy_favorites.html.twig', []);
  113.     }
  114.     private function getSeoSnippet(): array
  115.     {
  116.         /** @var Request $request */
  117.         $request $this->requestStack->getCurrentRequest() ?? $this->requestStack->getMainRequest();
  118.         $filters $this->service->fetchFiltersFromUrl($request);
  119.         return $this->service->getSeoSnippetsFromFilters($filters$this->siteService->getSite());
  120.     }
  121. }