src/Controller/VacancyController.php line 37

Open in your IDE?
  1. <?php
  2. /**
  3.  * Vacancy Controller
  4.  *
  5.  * @author Vincent van Waasbergen <v.vanwaasbergen@visualmedia.nl>
  6.  */
  7. namespace App\Controller;
  8. use Exception;
  9. use App\Form\Type\VacancyResponseType;
  10. use App\Manager\PageManager;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\HttpFoundation\Response;
  13. use VisualMedia\LisaBundle\Component\ManagerData;
  14. use VisualMedia\PageBundle\Manager\BasePageManager;
  15. use VisualMedia\VacancyBundle\Controller\VacancyController as BaseVacancyController;
  16. use VisualMedia\VacancyBundle\Manager\BaseVacancyManager;
  17. use VisualMedia\VacancyBundle\Provider\VacancyLayoutProvider;
  18. use VisualMedia\FormBundle\Entity\BaseFormReply;
  19. use VisualMedia\FormBundle\Manager\BaseFormReplyManager;
  20. use VisualMedia\LisaBundle\Service\Mailer;
  21. use VisualMedia\LisaBundle\Service\SettingProvider;
  22. /**
  23.  * Vacancy Controller
  24.  */
  25. class VacancyController extends BaseVacancyController
  26. {
  27.     /**
  28.      * {@inheritdoc}
  29.      */
  30.     public function viewAction(Request $requeststring $slug): Response
  31.     {
  32.         $translator $this->get('translator');
  33.         $manager $this->get(BaseVacancyManager::class);
  34.         if (null === $vacancy $manager->getFirst(new ManagerData([ $manager::OPTION_SLUG => $slug ]))) {
  35.             throw new Exception($translator->trans('vacancy.not_found', [], 'exception'), 404);
  36.         }
  37.         elseif (!$vacancy->getPublished()) {
  38.             throw new Exception($translator->trans('vacancy.gone', [], 'exception'), 410);
  39.         }
  40.         $pageManager $this->get(PageManager::class);
  41.         $vacancyPage $pageManager->getFirst(new ManagerData([
  42.             $pageManager::OPTION_ID => 46,
  43.         ]));
  44.         $vacancyBlocks $vacancyPage;
  45.         $form $this->createForm(VacancyResponseType::class);
  46.         $form->handleRequest($request);
  47.         if ($form->isSubmitted() && $form->isValid()) {
  48.             $resume $form->get('uploadResume')->getData();
  49.             // $motivation = $form->get('uploadMotivation')->getData();
  50.             $reply = new BaseFormReply();
  51.             $reply->setForm($form->getName());
  52.             $reply->setFormData(json_encode($form->getData()));
  53.             $reply->setBrowser($request->server->get('HTTP_USER_AGENT'));
  54.             $reply->setUrl(sprintf('%s://%s%s'$request->getScheme(), $request->getHost(), $request->getRequestUri()));
  55.             $formReplyManager $this->get(BaseFormReplyManager::class);
  56.             $formReplyManager->persist($reply);
  57.             $formReplyManager->flush();
  58.             $mailer $this->get(Mailer::class);
  59.             $settingProvider $this->get(SettingProvider::class);
  60.             $contact sprintf('%s %s'$form->get('firstName')->getData(), $form->get('lastName')->getData());
  61.             $email $form->get('email')->getData();
  62.             $templateData array_merge($form->getData(), array(
  63.                 'mailer_sender_name' => $settingProvider->getValue($reference 'mailer_sender_name'$domain 'system') ?? Helper::settingPlaceholder($reference$domain),
  64.                 'vacancy' => $vacancy,
  65.             ));
  66.             $files = [];
  67.             if ($resume) {
  68.                 $files[] = $resume;
  69.             }
  70.             $mailer->sendReversed(
  71.                 $translator->trans('vacancy_response.email_subject_int', [], 'forms'),
  72.                 $email,
  73.                 $contact,
  74.                 'Email/vacancy_response_int.html.twig',
  75.                 $templateData,
  76.                 $files
  77.             );
  78.             $mailer->sendReversed($translator->trans('vacancy_response.email_subject_int', [], 'forms'), $email$contact'Email/vacancy_response_int.html.twig'$templateData$files);
  79.             $mailer->send($translator->trans('vacancy_response.email_subject_ext', [], 'forms'), $email$contact'Email/vacancy_response_ext.html.twig'$templateData);
  80.             $pageManager $this->get(PageManager::class);
  81.             $key 'vacancy_response';
  82.             $title $translator->trans(sprintf('%s.title'$key), [], 'pages');
  83.             $page $pageManager->getOrCreatePage($key, [
  84.                 'title' => $title,
  85.                 'published' => true,
  86.                 'indexable' => true,
  87.                 'browserTitle' => $title,
  88.                 'metaDescription' => "{$title}.",
  89.             ]);
  90.             return $this->redirectToRoute('page_view', [
  91.                 'slug' => $page->slug,
  92.             ]);
  93.         }
  94.         return $this->render($vacancy->getLayout(), [
  95.             'browser_title' => $vacancy->getBrowserTitle(),
  96.             'meta_description' => $vacancy->getMetaDescription(),
  97.             'meta_keywords' => $vacancy->getMetaKeywords(),
  98.             'indexable' => $vacancy->getIndexable(),
  99.             'vacancy' => $vacancy,
  100.             'form' => $form->createView(),
  101.             'page' => $vacancyBlocks,
  102.         ]);
  103.     }
  104. }