<?php
/**
* Vacancy Controller
*
* @author Vincent van Waasbergen <v.vanwaasbergen@visualmedia.nl>
*/
namespace App\Controller;
use Exception;
use App\Form\Type\VacancyResponseType;
use App\Manager\PageManager;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use VisualMedia\LisaBundle\Component\ManagerData;
use VisualMedia\PageBundle\Manager\BasePageManager;
use VisualMedia\VacancyBundle\Controller\VacancyController as BaseVacancyController;
use VisualMedia\VacancyBundle\Manager\BaseVacancyManager;
use VisualMedia\VacancyBundle\Provider\VacancyLayoutProvider;
use VisualMedia\FormBundle\Entity\BaseFormReply;
use VisualMedia\FormBundle\Manager\BaseFormReplyManager;
use VisualMedia\LisaBundle\Service\Mailer;
use VisualMedia\LisaBundle\Service\SettingProvider;
/**
* Vacancy Controller
*/
class VacancyController extends BaseVacancyController
{
/**
* {@inheritdoc}
*/
public function viewAction(Request $request, string $slug): Response
{
$translator = $this->get('translator');
$manager = $this->get(BaseVacancyManager::class);
if (null === $vacancy = $manager->getFirst(new ManagerData([ $manager::OPTION_SLUG => $slug ]))) {
throw new Exception($translator->trans('vacancy.not_found', [], 'exception'), 404);
}
elseif (!$vacancy->getPublished()) {
throw new Exception($translator->trans('vacancy.gone', [], 'exception'), 410);
}
$pageManager = $this->get(PageManager::class);
$vacancyPage = $pageManager->getFirst(new ManagerData([
$pageManager::OPTION_ID => 46,
]));
$vacancyBlocks = $vacancyPage;
$form = $this->createForm(VacancyResponseType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$resume = $form->get('uploadResume')->getData();
// $motivation = $form->get('uploadMotivation')->getData();
$reply = new BaseFormReply();
$reply->setForm($form->getName());
$reply->setFormData(json_encode($form->getData()));
$reply->setBrowser($request->server->get('HTTP_USER_AGENT'));
$reply->setUrl(sprintf('%s://%s%s', $request->getScheme(), $request->getHost(), $request->getRequestUri()));
$formReplyManager = $this->get(BaseFormReplyManager::class);
$formReplyManager->persist($reply);
$formReplyManager->flush();
$mailer = $this->get(Mailer::class);
$settingProvider = $this->get(SettingProvider::class);
$contact = sprintf('%s %s', $form->get('firstName')->getData(), $form->get('lastName')->getData());
$email = $form->get('email')->getData();
$templateData = array_merge($form->getData(), array(
'mailer_sender_name' => $settingProvider->getValue($reference = 'mailer_sender_name', $domain = 'system') ?? Helper::settingPlaceholder($reference, $domain),
'vacancy' => $vacancy,
));
$files = [];
if ($resume) {
$files[] = $resume;
}
$mailer->sendReversed(
$translator->trans('vacancy_response.email_subject_int', [], 'forms'),
$email,
$contact,
'Email/vacancy_response_int.html.twig',
$templateData,
$files
);
$mailer->sendReversed($translator->trans('vacancy_response.email_subject_int', [], 'forms'), $email, $contact, 'Email/vacancy_response_int.html.twig', $templateData, $files);
$mailer->send($translator->trans('vacancy_response.email_subject_ext', [], 'forms'), $email, $contact, 'Email/vacancy_response_ext.html.twig', $templateData);
$pageManager = $this->get(PageManager::class);
$key = 'vacancy_response';
$title = $translator->trans(sprintf('%s.title', $key), [], 'pages');
$page = $pageManager->getOrCreatePage($key, [
'title' => $title,
'published' => true,
'indexable' => true,
'browserTitle' => $title,
'metaDescription' => "{$title}.",
]);
return $this->redirectToRoute('page_view', [
'slug' => $page->slug,
]);
}
return $this->render($vacancy->getLayout(), [
'browser_title' => $vacancy->getBrowserTitle(),
'meta_description' => $vacancy->getMetaDescription(),
'meta_keywords' => $vacancy->getMetaKeywords(),
'indexable' => $vacancy->getIndexable(),
'vacancy' => $vacancy,
'form' => $form->createView(),
'page' => $vacancyBlocks,
]);
}
}