<?php
/**
* Form Controller
*
* @author Vincent van Waasbergen <v.vanwaasbergen@visualmedia.nl>
*/
namespace App\Controller;
use App\Form\Type\ContactType;
use App\Manager\PageManager;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use VisualMedia\FormBundle\Entity\BaseFormReply;
use VisualMedia\FormBundle\Manager\BaseFormReplyManager;
use VisualMedia\LisaBundle\Helper\Helper;
use VisualMedia\LisaBundle\Controller\BaseController;
use VisualMedia\LisaBundle\Service\Mailer;
use VisualMedia\LisaBundle\Service\SettingProvider;
use VisualMedia\PageBundle\Service\PageLayoutProvider;
/**
* Form Controller
*/
class ContactController extends BaseController
{
const CONTACT_KEY = 'contact';
const CONTACT_THANKS_KEY = 'contact_thanks';
/**
* Index Action
*
* @param Request $request
*
* @return Response
*/
public function indexAction(Request $request) : Response
{
$translator = $this->get('translator');
$pageLayoutProvider = $this->get(PageLayoutProvider::class);
$settingProvider = $this->get(SettingProvider::class);
$title = $translator->trans(sprintf('%s.title', static::CONTACT_KEY), [], 'pages');
$pageManager = $this->get(PageManager::class);
$page = $pageManager->getOrCreatePage(static::CONTACT_KEY, array(
'title' => $title,
'published' => true,
'indexable' => true,
'browserTitle' => $title,
'metaDescription' => sprintf('%s.', $title),
));
$form = $this->createForm(ContactType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$contact = $form->get('name')->getData();
$email = $form->get('email')->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::getServiceId());
$templateData = array_merge($form->getData(), array(
'mailer_sender_name' => $settingProvider->getValue($reference = 'mailer_sender_name', $domain = 'system') ?? Helper::settingPlaceholder($reference, $domain),
));
$mailer->sendReversed($translator->trans('contact.email_subject_int', [], 'forms'), $email, $contact, 'Email/contact_int.html.twig', $templateData);
$mailer->send($translator->trans('contact.email_subject_ext', [], 'forms'), $email, $contact, 'Email/contact_ext.html.twig', $templateData);
$contactThanksTitle = $translator->trans(sprintf('%s.title', static::CONTACT_THANKS_KEY), [], 'pages');
$page = $pageManager->getOrCreatePage(static::CONTACT_THANKS_KEY, array(
'title' => $contactThanksTitle,
'published' => true,
'indexable' => true,
'browserTitle' => $contactThanksTitle,
'metaDescription' => sprintf('%s.', $contactThanksTitle),
));
return $this->redirectToRoute('page_view', array(
'slug' => $page->slug,
));
}
return $this->render('Contact/index.html.twig', array(
'browser_title' => $page->browserTitle,
'meta_description' => $page->metaDescription,
'meta_keywords' => $page->metaKeywords,
'indexable' => $page->indexable,
'page' => $page,
'form' => $form->createView(),
));
}
}