src/AppBundle/Controller/CareerController.php line 69

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace AppBundle\Controller;
  4. use AppBundle\Website\LinkGenerator\JobOfferLinkGenerator;
  5. use Knp\Component\Pager\PaginatorInterface;
  6. use Pimcore\Model\DataObject\JobOffer;
  7. use Pimcore\Model\DataObject\JobOffer\Listing;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. class CareerController extends BaseController
  13. {
  14.     public function defaultAction(): Response
  15.     {
  16.         $jobOffers = new Listing();
  17.         $pharmacies $jobOffers->setCondition('department IN (:departments)', ['departments' => $this->getDepartments(['pharmacy'])]);
  18.         $pharmacies->setOrderKey('RAND()'false);
  19.         $pharmacies->setOrder('desc');
  20.         $pharmacies->setLimit(4);
  21.         $jobOffers = new Listing();
  22.         $offices $jobOffers->setCondition('department IN (:departments)', ['departments' => $this->getDepartments(['office'])]);
  23.         $offices->setOrderKey('RAND()'false);
  24.         $offices->setOrder('desc');
  25.         $offices->setLimit(4);
  26.         $jobOffers = new Listing();
  27.         $warehouses $jobOffers->setCondition('department IN (:departments)', ['departments' => $this->getDepartments(['warehouse'])]);
  28.         $warehouses->setOrderKey('RAND()'false);
  29.         $warehouses->setOrder('desc');
  30.         $warehouses->setLimit(4);
  31.         return $this->render('Career/default.html.twig', [
  32.             'pharmacies' => $pharmacies,
  33.             'offices' => $offices,
  34.             'warehouses' => $warehouses,
  35.         ]);
  36.     }
  37.     /**
  38.      * @Route("{pathjoboffer}/{joboffertitle}~o{joboffer}", name="joboffer-detail", defaults={"pathjoboffer"=""}, requirements={"pathjoboffer"=".*?", "joboffertitle"="[\w-]+", "joboffer"="\d+"})
  39.      */
  40.     public function detailAction(Request $requestJobOfferLinkGenerator $jobOfferLinkGenerator): Response
  41.     {
  42.         $jobOffer JobOffer::getById($request->get('joboffer'));
  43.         if (!($jobOffer instanceof JobOffer && ($jobOffer->isPublished() || $this->verifyPreviewRequest($request$jobOffer)))) {
  44.             throw new NotFoundHttpException('JobOffer not found. ID: ' $request->get('joboffer'));
  45.         }
  46.         //        $headTitleHelper($jobOffer->getTitle());
  47.         //
  48.         //        $placeholderHelper('canonical')->set($jobOfferLinkGenerator->generate($jobOffer, ['document' => $this->document->getProperty('geminiCareerDefaultDocument')]));
  49.         return $this->render('Career/detail.html.twig', [
  50.             'jobOffer' => $jobOffer,
  51.             'officeDepartments' => $this->getDepartmentsFromMap('office'),
  52.             'warehouseDepartments' => $this->getDepartmentsFromMap('warehouse'),
  53.             'pharmacyDepartments' => $this->getDepartmentsFromMap('pharmacy'),
  54.         ]);
  55.     }
  56.     public function listAction(Request $requestPaginatorInterface $paginator): Response
  57.     {
  58.         $voivodships $request->get('voivodship');
  59.         $departments $request->get('department');
  60.         $jobOffers = new Listing();
  61.         $jobOffers->setOrderKey('title');
  62.         $jobOffers->setOrder('asc');
  63.         if ($voivodships) {
  64.             $jobOffers->setCondition('countryRegion IN (:voivodships)', ['voivodships' => $voivodships]);
  65.         }
  66.         if ($departments && $voivodships) {
  67.             $jobOffers->addConditionParam('department IN (:departments)', ['departments' => $this->getDepartments($departments)], 'AND');
  68.         } elseif ($departments) {
  69.             $jobOffers->setCondition('department IN (:departments)', ['departments' => $this->getDepartments($departments)]);
  70.         }
  71.         $pagination $paginator->paginate($jobOffers, (int) $request->get('page'1), 16);
  72.         return $this->render('Career/list.html.twig', [
  73.             'jobOffers' => $pagination,
  74.             'paginationVariables' => $pagination->getPaginationData(),
  75.             'voivodships' => $voivodships,
  76.             'departments' => $departments,
  77.         ]);
  78.     }
  79.     protected function getDepartments($departments): array
  80.     {
  81.         $conditionArray = [];
  82.         if (is_array($departments)) {
  83.             foreach ($departments as $department) {
  84.                 $conditionArray array_merge($conditionArray$this->getDepartmentsFromMap($department));
  85.             }
  86.         } else {
  87.             $conditionArray array_merge($conditionArray$this->getDepartmentsFromMap($departments));
  88.         }
  89.         return $conditionArray;
  90.     }
  91.     protected function getDepartmentsFromMap(string $section): array
  92.     {
  93.         $map = [
  94.             'office' => ['Budowlany''eCommerce''Zakupy (dział Handlowy)''Zakupy''Zakupy ''zakupy''zakupy ''Rozwój''Kadry''Prawny''Kontroling''Sprzedaż''HR''Marketing''Obsługa klienta''IT''Administracja''Księgowość'],
  95.             'warehouse' => ['Dystrybucja Bysewska''Dystrybucja Trzy lipy'],
  96.             'pharmacy' => ['Apteki Stacjonarne'],
  97.         ];
  98.         return $map[$section];
  99.     }
  100. }