src/Controller/ContactController.php line 42

Open in your IDE?
  1. <?php
  2. /**
  3.  * Form Controller
  4.  *
  5.  * @author Vincent van Waasbergen <v.vanwaasbergen@visualmedia.nl>
  6.  */
  7. namespace App\Controller;
  8. use App\Form\Type\ContactType;
  9. use App\Manager\PageManager;
  10. use Symfony\Component\HttpFoundation\Response;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use VisualMedia\FormBundle\Entity\BaseFormReply;
  13. use VisualMedia\FormBundle\Manager\BaseFormReplyManager;
  14. use VisualMedia\LisaBundle\Helper\Helper;
  15. use VisualMedia\LisaBundle\Controller\BaseController;
  16. use VisualMedia\LisaBundle\Service\Mailer;
  17. use VisualMedia\LisaBundle\Service\SettingProvider;
  18. use VisualMedia\PageBundle\Service\PageLayoutProvider;
  19. /**
  20.  * Form Controller
  21.  */
  22. class ContactController extends BaseController
  23. {
  24.     const CONTACT_KEY 'contact';
  25.     const CONTACT_THANKS_KEY 'contact_thanks';
  26.     /**
  27.      * Index Action
  28.      *
  29.      * @param Request $request
  30.      *
  31.      * @return Response
  32.      */
  33.     public function indexAction(Request $request) : Response
  34.     {
  35.         $translator $this->get('translator');
  36.         $pageLayoutProvider $this->get(PageLayoutProvider::class);
  37.         $settingProvider $this->get(SettingProvider::class);
  38.         $title $translator->trans(sprintf('%s.title', static::CONTACT_KEY), [], 'pages');
  39.         $pageManager $this->get(PageManager::class);
  40.         $page $pageManager->getOrCreatePage(static::CONTACT_KEY, array(
  41.             'title' => $title,
  42.             'published' => true,
  43.             'indexable' => true,
  44.             'browserTitle' => $title,
  45.             'metaDescription' => sprintf('%s.'$title),
  46.         ));
  47.         $form $this->createForm(ContactType::class);
  48.         $form->handleRequest($request);
  49.         if ($form->isSubmitted() && $form->isValid()) {
  50.             $contact $form->get('name')->getData();
  51.             $email $form->get('email')->getData();
  52.             $reply = new BaseFormReply();
  53.             $reply->setForm($form->getName());
  54.             $reply->setFormData(json_encode($form->getData()));
  55.             $reply->setBrowser($request->server->get('HTTP_USER_AGENT'));
  56.             $reply->setUrl(sprintf('%s://%s%s'$request->getScheme(), $request->getHost(), $request->getRequestUri()));
  57.             $formReplyManager $this->get(BaseFormReplyManager::class);
  58.             $formReplyManager->persist($reply);
  59.             $formReplyManager->flush();
  60.             $mailer $this->get(Mailer::getServiceId());
  61.             $templateData array_merge($form->getData(), array(
  62.                 'mailer_sender_name' => $settingProvider->getValue($reference 'mailer_sender_name'$domain 'system') ?? Helper::settingPlaceholder($reference$domain),
  63.             ));
  64.             $mailer->sendReversed($translator->trans('contact.email_subject_int', [], 'forms'), $email$contact'Email/contact_int.html.twig'$templateData);
  65.             $mailer->send($translator->trans('contact.email_subject_ext', [], 'forms'), $email$contact'Email/contact_ext.html.twig'$templateData);
  66.             $contactThanksTitle $translator->trans(sprintf('%s.title', static::CONTACT_THANKS_KEY), [], 'pages');
  67.             $page $pageManager->getOrCreatePage(static::CONTACT_THANKS_KEY, array(
  68.                 'title' => $contactThanksTitle,
  69.                 'published' => true,
  70.                 'indexable' => true,
  71.                 'browserTitle' => $contactThanksTitle,
  72.                 'metaDescription' => sprintf('%s.'$contactThanksTitle),
  73.             ));
  74.             return $this->redirectToRoute('page_view', array(
  75.                 'slug' => $page->slug,
  76.             ));
  77.         }
  78.         return $this->render('Contact/index.html.twig', array(
  79.             'browser_title' => $page->browserTitle,
  80.             'meta_description' => $page->metaDescription,
  81.             'meta_keywords' => $page->metaKeywords,
  82.             'indexable' => $page->indexable,
  83.             'page' => $page,
  84.             'form' => $form->createView(),
  85.         ));
  86.     }
  87. }