<?php
namespace App\Controller;
use Carbon\Carbon;
use Pimcore\Controller\FrontendController;
use Pimcore\Model\Asset;
use Pimcore\Model\DataObject\Job;
use Pimcore\Model\Document\Page;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
class JobsController extends FrontendController
{
/**
* @Template
*
* @param Request $request
*
* @return array
*/
public function overviewAction(Request $request)
{
$now = Carbon::now()->timestamp;
$jobs = Job::getList()
->setCondition('date <= ? AND (closeDate >= ? OR closeDate IS NULL)', [$now, $now])
->setOrderKey(['date', 'o_id'])
->setOrder('DESC')->getObjects();
$output = [];
foreach ($jobs as $j) {
$output[self::getSlug($j->getTitle())] = $j;
}
// dd($output);
return ['headerImages' => $this->loadHeader(), 'jobs' => $output];
}
/**
* @Template
*
* @param Request $request
*
* @return array
*/
public function detailAction(Request $request): array
{
$job = Job::getById($request->get('id'));
$page = Page::getByPath($request->get('prefix'));
$this->document->setTitle($job->getTitle());
$this->document->setProperty('hoursPerWeek', "string", $job->getHoursPerWeek());
$this->document->setProperty('subTitle', "string", $job->getSubTitle());
$this->document->setProperty('headerImage', "asset", $job->getImage());
if ($job && $job->isPublished()) {
return ['headerImages' => $this->loadHeader(), 'document_id' => $page->getId(), 'job' => $job];
} else {
throw new NotFoundHttpException();
}
}
/**
* @param $title
* @return string
*/
private static function getSlug($title)
{
return str_replace(' ', '-', preg_replace("/[^a-z0-9 ]/", '', strtolower($title)));
}
private function loadHeader(): Asset\Listing
{
$imageList = Asset::getList();
$imageList->setCondition("parentId = ?", 2);
$imageList->setOrderKey("RAND()", false);
return $imageList;
}
}