<?php
/**
* Created by Elements.at New Media Solutions GmbH
*
*/
namespace App\Controller;
use App\Service\ApplicationService;
use App\Service\JobService;
use Elements\Bundle\HashCashBundle\Service\HashCashService;
use Pimcore\Model\DataObject\Job;
use Pimcore\Model\DataObject\JobTeam;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
class JobController extends AbstractController
{
public function overviewAction(Request $request, JobService $jobService): Response
{
$categories = $this->document->getEditable('categories') && method_exists($this->document->getEditable('categories'), 'getElements') ? $this->document->getEditable('categories')->getElements() : [];
return $this->render('job/overview.html.twig', [
'categories' => $jobService->getCategoryTabs(new Job\Listing(), null, $categories),
]);
}
public function detailAction(Request $request, ApplicationService $service, HashCashService $hashCashService): Response
{
\Pimcore\Cache::disable();
$job = Job::getById($request->get('id'));
if (!$job instanceof Job || !$job->isPublished() || !$job->getTitle($request->getLocale())) {
throw new NotFoundHttpException();
}
$returnArray = [ 'job' => $job ];
if ($request->getMethod() == 'POST') {
if ($hashCashService->validateProcessFrom()) {
$applicationResult = $service->handleApplication($request, $job);
if ($applicationResult instanceof RedirectResponse) {
return $applicationResult;
} else {
$returnArray['errors'] = $applicationResult;
}
}
}
return $this->render('job/detail.html.twig', $returnArray);
}
public function teamOverviewAction(Request $request): Response
{
$teams = new JobTeam\Listing();
$teams->setOrderKey('sort');
$teams->setOrder('ASC');
return $this->render('job/team-overview.html.twig', [ 'teams' => $teams ]);
}
public function teamDetailAction(Request $request, JobService $jobService): Response
{
$id = $request->get('id');
$team = JobTeam::getById($id);
if (!$team instanceof JobTeam || !$team->isPublished() || !$team->getTitle($request->getLocale())) {
throw new NotFoundHttpException();
}
$jobs = new Job\Listing();
$jobs->addConditionParam('team__id = :id', [ 'id' => $id ]);
$teams = new JobTeam\Listing();
$teams->addConditionParam('o_id != :id', [ 'id' => $id ]);
return $this->render('job/team-detail.html.twig', [
'team' => $team,
'teams' => $teams,
'categories' => $jobService->getCategoryTabs($jobs, $id),
'jobCount' => $jobs->getCount(),
]);
}
public function initiativeApplicationAction(Request $request, ApplicationService $service, HashCashService $hashCashService): Response
{
$returnArray = [];
if ($request->getMethod() == 'POST') {
if ($hashCashService->validateProcessFrom()) {
$applicationResult = $service->handleApplication($request, null, $this->document->getEditable('initiativeApplicationMail'));
if ($applicationResult instanceof RedirectResponse) {
return $applicationResult;
} else {
$returnArray['errors'] = $applicationResult;
}
}
}
return $this->render('job/initiative-application.html.twig', $returnArray);
}
}