src/AtechNet/CoreBundle/Controller/JobController.php line 186

Open in your IDE?
  1. <?php
  2. namespace App\AtechNet\CoreBundle\Controller;
  3. use App\AtechNet\CoreBundle\Entity\Job;
  4. use Psr\SimpleCache\InvalidArgumentException;
  5. use Symfony\Component\HttpFoundation\RedirectResponse;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use Symfony\Component\Routing\Annotation\Route;
  9. class JobController extends AbstractController
  10. {
  11.     /**
  12.      * @Route("/kariera", name="jobs_sk", defaults={"_locale":"sk"})
  13.      * @Route("/karrier", name="jobs_hu", defaults={"_locale":"hu"})
  14.      * @Route("/kariera", name="jobs_cz", defaults={"_locale":"cz"})
  15.      * @Route("/carrier", name="jobs_en", defaults={"_locale":"en"})
  16.      * @Route("/{_locale<%supported_locales%>?}/jobs", name="jobs_locale", defaults={"_locale":""})
  17.      * @param Request $request
  18.      * @return Response|null
  19.      * @throws InvalidArgumentException
  20.      */
  21.     public function indexAction(Request $request): ?Response
  22.     {
  23.         $data = [];
  24.         $entityManager = $this->getEntityManager();
  25.         $multiStore = $this->getMultiStoreHelper($request);
  26.         $translator = $this->getTranslator();
  27.         // Langauge
  28.         $language = $multiStore->getDefaultLanguage();
  29.         // Language Code
  30.         $data['language_code'] = $language->getCode();
  31.         // Jobs
  32.         $data['jobs'] = [];
  33.         // Results
  34.         $jobsData = $entityManager->createQuery("SELECT j
  35.                 FROM AtechNetCoreBundle:Job j
  36.                 WHERE j.published = 1
  37.                 ORDER BY j.sortOrder ASC")
  38.             ->getResult();
  39.         /**
  40.          * @var Job $job
  41.          */
  42.         foreach ($jobsData as $job) {
  43.             $translator->setLocale($job->getLanguage()->getCode());
  44.             $key = in_array($job->getId(), Job::getBasicJobIds())
  45.                 ? 'separated_jobs'
  46.                 : 'jobs';
  47.             $data[$key][$job->getId()] = [
  48.                 'title' => $job->getTitle(),
  49.                 'link' => $this->generateUrl('jobs_show_'.$request->getLocale(), [
  50.                     'job_id' => $job->getId(),
  51.                 ]),
  52.                 'active' => $job->isActive(),
  53.                 'shortDescription' => $job->getShortDescription(),
  54.                 'coverImage' => (!is_null($job->getCoverImageTitle()) ? $this->getCoverImageLink($job->getCoverImageTitle()) : ''),
  55.                 'type' => (isset(Job::getTypeChoices()[$job->getType()]) ? $translator->trans(Job::getTypeChoices()[$job->getType()]) : ''),
  56.             ];
  57.         }
  58.         $translator->setLocale($language->getCode());
  59.         // Common
  60.         $data['header'] = $this->getHeader($request);
  61.         $data['footer'] = $this->getFooter($request);
  62.         return $this->render('AtechNetCoreBundle/Job/index.html.twig', $data);
  63.     }
  64.     /**
  65.      * @Route("/jobs/category/{id}", name="jobs_categories", defaults={"_locale":""})
  66.      * @Route("/{_locale<%supported_locales%>?}/jobs/category/{id}", name="jobs_categories_locale", defaults={"_locale":""})
  67.      * @param Request $request
  68.      * @param int $id
  69.      * @return RedirectResponse|Response|null
  70.      * @throws InvalidArgumentException
  71.      */
  72.     public function categoryShowAction(Request $request, int $id)
  73.     {
  74.         $data = [];
  75.         if (!isset(Job::getTypeChoices()[$id])) {
  76.             return $this->redirectToRoute('not_found');
  77.         }
  78.         $data['header'] = $this->getHeader($request);
  79.         $data['footer'] = $this->getFooter($request);
  80.         return $this->render('AtechNetCoreBundle/Job/category_list.html.twig', $data);
  81.     }
  82.     /**
  83.      * @Route("/kariera/{job_id}", name="jobs_show_sk", defaults={"_locale":"sk"})
  84.      * @Route("/karrier/{job_id}", name="jobs_show_hu", defaults={"_locale":"hu"})
  85.      * @Route("/kariera/{job_id}", name="jobs_show_cz", defaults={"_locale":"cz"})
  86.      * @Route("/carrier/{job_id}", name="jobs_show_en", defaults={"_locale":"en"})
  87.      * @Route("/{_locale<%supported_locales%>?}/jobs/job/{job_id}", name="jobs_show_locale", defaults={"_locale":""})
  88.      * @param Request $request
  89.      * @param int $job_id
  90.      *
  91.      * @return RedirectResponse|Response|null
  92.      * @throws InvalidArgumentException
  93.      */
  94.     public function jobShowAction(Request $request, int $job_id)
  95.     {
  96.         $data = [];
  97.         $translator = $this->getTranslator();
  98.         $multiStore = $this->getMultiStoreHelper($request);
  99.         /** @var Job $job */
  100.         $job = $this->getEntityManager()->getRepository(Job::class)->find($job_id);
  101.         if (!$job || !$job->isPublished()) {
  102.             return $this->redirectToRoute('not_found');
  103.         }
  104.         $data['title'] = $job->getTitle();
  105.         $data['shortDescription'] = $job->getShortDescription();
  106.         $data['coverImage'] = !is_null($job->getCoverImageTitle()) ? $this->getCoverImageLink($job->getCoverImageTitle()) : '';
  107.         $data['offer'] = $job->getOffer();
  108.         $data['requirements'] = $job->getRequirements();
  109.         $data['minWage'] = $job->getMinimumWage();
  110.         $data['maxWage'] = $job->getMaximumWage();
  111.         $data['workStart'] = $job->getWorkStart();
  112.         $data['availableUntil'] = $job->getAvailableUntil();
  113.         $data['wageDescription'] = $job->getWageDescription();
  114.         $data['active'] = $job->isActive();
  115.         $data['type'] = $job->getType();
  116.         $data['signupLink'] = '';
  117.         $data['signupForm'] = '';
  118.         $data['language'] = $job->getLanguage() ? $job->getLanguage()->getCode() : '';
  119.         $data['entyryType'] = Job::getEntryTypeChoices()[$job->getEntryType()];
  120.         $signupLink = $job->getSignupLink();
  121.         $translator->setLocale($data['language']);
  122.         if ($signupLink != '-') {
  123.             if (preg_match("/script/i", $signupLink)) {
  124.                 $data['signupForm'] = $signupLink;
  125.             } else {
  126.                 $data['signupLink'] = $signupLink;
  127.             }
  128.         } else {
  129.             $data['signupLink'] = $signupLink;
  130.         }
  131.         if (preg_match("/script/i", $signupLink)) {
  132.             $data['signupForm'] = $signupLink;
  133.         } else {
  134.             $data['signupLink'] = $signupLink;
  135.         }
  136.         switch ($job->getType()) {
  137.             case Job::TYPE_FULL_TIME:
  138.                 $data['typeTitle'] = $translator->trans('Full-time');
  139.                 break;
  140.             case Job::TYPE_PART_TIME:
  141.                 $data['typeTitle'] = $translator->trans('Part-time');
  142.                 break;
  143.             case Job::TYPE_BRIGADE:
  144.                 $data['typeTitle'] = $translator->trans('Brigade work');
  145.                 break;
  146.             case Job::TYPE_TRAINEE:
  147.                 $data['typeTitle'] = $translator->trans('Internship');
  148.                 break;
  149.             case Job::TYPE_SUBCONTRACTOR:
  150.                 $data['typeTitle'] = '';
  151.                 $translator->trans('Subcontractor');
  152.                 break;
  153.             default:
  154.                 $data['typeTitle'] = $translator->trans('Full-time');
  155.         }
  156.         $data['header'] = $this->getHeader($request);
  157.         $data['footer'] = $this->getFooter($request);
  158.         $domain = $multiStore->getDomain();
  159.         $data['warrantyYear'] = $this->getWarrantyForNonProductText($domain->getId());
  160.         return $this->render('AtechNetCoreBundle/Job/job_detail.html.twig', $data);
  161.     }
  162.     /**
  163.      * @param $coverImageTitle
  164.      * @return string
  165.      */
  166.     private function getCoverImageLink($coverImageTitle): string
  167.     {
  168.         $coverImageBaseLink = $this->getParameter('kernel.environment') == 'prod' ? 'https://www.atechcomp.eu/centralis/web' : 'http://centralis';
  169.         if (!is_null($coverImageTitle) && $coverImageTitle != '') {
  170.             return $coverImageBaseLink . '/uploads/jobs/' . $coverImageTitle;
  171.         }
  172.         return '';
  173.     }
  174. }