<?php
namespace Boldr\Cms\JobsBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\{ Request, Response };
use Boldr\Cms\CmsBundle\Permalink\{ PermalinkableInterface, PermalinkResolverInterface, PermalinkGeneratorInterface, PermalinkHandlerInterface };
use Boldr\Cms\JobsBundle\Entity\JobOffer;
use Boldr\Cms\JobsBundle\Presenter\JobOfferPresenterInterface;
class JobOfferController extends AbstractController implements PermalinkResolverInterface, PermalinkGeneratorInterface, PermalinkHandlerInterface
{
public static function getSubscribedServices(): array
{
return array_merge(parent::getSubscribedServices(), [
JobOfferPresenterInterface::class
]);
}
public function handlePermalink(PermalinkableInterface $permalinkable, Request $request): Response
{
$jobOfferView = $this->container->get(JobOfferPresenterInterface::class)->createJobOfferView($permalinkable, false, $request->getLocale());
return $this->render('@BoldrJobs/job-offer.html.twig', [
'jobOffer' => $jobOfferView,
'assets' => $jobOfferView->getAssets()
]);
}
public function resolvePermalink(string $permalink, string $locale): ?PermalinkableInterface
{
$jobOfferRepository = $this->getDoctrine()->getRepository(JobOffer::class);
$jobOffer = $jobOfferRepository->createQueryBuilder('j')
->leftJoin('j.translations', 't')
->where('t.locale = ?1 AND t.permalink = ?2 AND j.enabled = true')
->setParameter(1, $locale)
->setParameter(2, $permalink)
->getQuery()
->setMaxResults(1)
->getOneOrNullResult();
return $jobOffer;
}
public function generatePermalink(PermalinkableInterface $permalinkable, string $locale): string
{
if (!($permalinkable instanceof JobOffer))
throw new \Exception();
return $permalinkable->getTranslations()->get($locale)->getPermalink();
}
}