<?php
namespace App\AtechNet\CoreBundle\Controller;
use App\AtechNet\CoreBundle\Entity\Job;
use Psr\SimpleCache\InvalidArgumentException;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class JobController extends AbstractController
{
/**
* @Route("/kariera", name="jobs_sk", defaults={"_locale":"sk"})
* @Route("/karrier", name="jobs_hu", defaults={"_locale":"hu"})
* @Route("/kariera", name="jobs_cz", defaults={"_locale":"cz"})
* @Route("/carrier", name="jobs_en", defaults={"_locale":"en"})
* @Route("/{_locale<%supported_locales%>?}/jobs", name="jobs_locale", defaults={"_locale":""})
* @param Request $request
* @return Response|null
* @throws InvalidArgumentException
*/
public function indexAction(Request $request): ?Response
{
$data = [];
$entityManager = $this->getEntityManager();
$multiStore = $this->getMultiStoreHelper($request);
$translator = $this->getTranslator();
// Langauge
$language = $multiStore->getDefaultLanguage();
// Language Code
$data['language_code'] = $language->getCode();
// Jobs
$data['jobs'] = [];
// Results
$jobsData = $entityManager->createQuery("SELECT j
FROM AtechNetCoreBundle:Job j
WHERE j.published = 1
ORDER BY j.sortOrder ASC")
->getResult();
/**
* @var Job $job
*/
foreach ($jobsData as $job) {
$translator->setLocale($job->getLanguage()->getCode());
$key = in_array($job->getId(), Job::getBasicJobIds())
? 'separated_jobs'
: 'jobs';
$data[$key][$job->getId()] = [
'title' => $job->getTitle(),
'link' => $this->generateUrl('jobs_show_'.$request->getLocale(), [
'job_id' => $job->getId(),
]),
'active' => $job->isActive(),
'shortDescription' => $job->getShortDescription(),
'coverImage' => (!is_null($job->getCoverImageTitle()) ? $this->getCoverImageLink($job->getCoverImageTitle()) : ''),
'type' => (isset(Job::getTypeChoices()[$job->getType()]) ? $translator->trans(Job::getTypeChoices()[$job->getType()]) : ''),
];
}
$translator->setLocale($language->getCode());
// Common
$data['header'] = $this->getHeader($request);
$data['footer'] = $this->getFooter($request);
return $this->render('AtechNetCoreBundle/Job/index.html.twig', $data);
}
/**
* @Route("/jobs/category/{id}", name="jobs_categories", defaults={"_locale":""})
* @Route("/{_locale<%supported_locales%>?}/jobs/category/{id}", name="jobs_categories_locale", defaults={"_locale":""})
* @param Request $request
* @param int $id
* @return RedirectResponse|Response|null
* @throws InvalidArgumentException
*/
public function categoryShowAction(Request $request, int $id)
{
$data = [];
if (!isset(Job::getTypeChoices()[$id])) {
return $this->redirectToRoute('not_found');
}
$data['header'] = $this->getHeader($request);
$data['footer'] = $this->getFooter($request);
return $this->render('AtechNetCoreBundle/Job/category_list.html.twig', $data);
}
/**
* @Route("/kariera/{job_id}", name="jobs_show_sk", defaults={"_locale":"sk"})
* @Route("/karrier/{job_id}", name="jobs_show_hu", defaults={"_locale":"hu"})
* @Route("/kariera/{job_id}", name="jobs_show_cz", defaults={"_locale":"cz"})
* @Route("/carrier/{job_id}", name="jobs_show_en", defaults={"_locale":"en"})
* @Route("/{_locale<%supported_locales%>?}/jobs/job/{job_id}", name="jobs_show_locale", defaults={"_locale":""})
* @param Request $request
* @param int $job_id
*
* @return RedirectResponse|Response|null
* @throws InvalidArgumentException
*/
public function jobShowAction(Request $request, int $job_id)
{
$data = [];
$translator = $this->getTranslator();
$multiStore = $this->getMultiStoreHelper($request);
/** @var Job $job */
$job = $this->getEntityManager()->getRepository(Job::class)->find($job_id);
if (!$job || !$job->isPublished()) {
return $this->redirectToRoute('not_found');
}
$data['title'] = $job->getTitle();
$data['shortDescription'] = $job->getShortDescription();
$data['coverImage'] = !is_null($job->getCoverImageTitle()) ? $this->getCoverImageLink($job->getCoverImageTitle()) : '';
$data['offer'] = $job->getOffer();
$data['requirements'] = $job->getRequirements();
$data['minWage'] = $job->getMinimumWage();
$data['maxWage'] = $job->getMaximumWage();
$data['workStart'] = $job->getWorkStart();
$data['availableUntil'] = $job->getAvailableUntil();
$data['wageDescription'] = $job->getWageDescription();
$data['active'] = $job->isActive();
$data['type'] = $job->getType();
$data['signupLink'] = '';
$data['signupForm'] = '';
$data['language'] = $job->getLanguage() ? $job->getLanguage()->getCode() : '';
$data['entyryType'] = Job::getEntryTypeChoices()[$job->getEntryType()];
$signupLink = $job->getSignupLink();
$translator->setLocale($data['language']);
if ($signupLink != '-') {
if (preg_match("/script/i", $signupLink)) {
$data['signupForm'] = $signupLink;
} else {
$data['signupLink'] = $signupLink;
}
} else {
$data['signupLink'] = $signupLink;
}
if (preg_match("/script/i", $signupLink)) {
$data['signupForm'] = $signupLink;
} else {
$data['signupLink'] = $signupLink;
}
switch ($job->getType()) {
case Job::TYPE_FULL_TIME:
$data['typeTitle'] = $translator->trans('Full-time');
break;
case Job::TYPE_PART_TIME:
$data['typeTitle'] = $translator->trans('Part-time');
break;
case Job::TYPE_BRIGADE:
$data['typeTitle'] = $translator->trans('Brigade work');
break;
case Job::TYPE_TRAINEE:
$data['typeTitle'] = $translator->trans('Internship');
break;
case Job::TYPE_SUBCONTRACTOR:
$data['typeTitle'] = '';
$translator->trans('Subcontractor');
break;
default:
$data['typeTitle'] = $translator->trans('Full-time');
}
$data['header'] = $this->getHeader($request);
$data['footer'] = $this->getFooter($request);
$domain = $multiStore->getDomain();
$data['warrantyYear'] = $this->getWarrantyForNonProductText($domain->getId());
return $this->render('AtechNetCoreBundle/Job/job_detail.html.twig', $data);
}
/**
* @param $coverImageTitle
* @return string
*/
private function getCoverImageLink($coverImageTitle): string
{
$coverImageBaseLink = $this->getParameter('kernel.environment') == 'prod' ? 'https://www.atechcomp.eu/centralis/web' : 'http://centralis';
if (!is_null($coverImageTitle) && $coverImageTitle != '') {
return $coverImageBaseLink . '/uploads/jobs/' . $coverImageTitle;
}
return '';
}
}