<?php
namespace App\Controller\Page;
use App\Entity\VRQuote;
use App\Form\VRQuoteType;
use App\Renderer\Page as PageRenderer;
use App\Sender\VrQuoteSender;
use App\Sendgrid\Mailer;
use App\Templating\Decorator;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Throwable;
use Twig_Error_Loader;
use Twig_Error_Runtime;
use Twig_Error_Syntax;
#[Route('/vrquote')]
class VRQuoteController extends AbstractController
{
/**
* @var EventDispatcherInterface
*/
private $eventDispatcher;
/**
* @var PageRenderer
*/
private $pageRenderer;
/**
* @var Decorator
*/
private $decorator;
/**
* @var VrQuoteSender
*/
private $sender;
/**
* @var Mailer
*/
private $mailer;
public function __construct(
EventDispatcherInterface $eventDispatcher,
PageRenderer $pageRenderer,
Decorator $decorator,
VrQuoteSender $vrquoteSender,
Mailer $mailer,
) {
$this->eventDispatcher = $eventDispatcher;
$this->pageRenderer = $pageRenderer;
$this->decorator = $decorator;
$this->sender = $vrquoteSender;
$this->mailer = $mailer;
}
/**
* @throws Twig_Error_Loader
* @throws Twig_Error_Runtime
* @throws Twig_Error_Syntax
* @throws Throwable
*/
#[Route(path: '/', name: 'vrquote_form')]
public function indexAction(Request $request): Response
{
$vrquote = new VRQuote();
$form = $this->createForm(VRQuoteType::class, $vrquote);
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
try {
$em = $this->getDoctrine()->getManager();
$em->persist($vrquote);
$em->flush();
$this->sender->mailUser($vrquote);
$this->sender->mailSiteOwner($vrquote);
// ToDo: Hier nog ooit een setting van maken.
return $this->redirect('offerte-aanvraag-bedankt');
} catch (\Exception $exception) {
echo $exception->getMessage();
}
}
}
return $this
->pageRenderer
->renderPage(
'{vrquote_form}',
$this->decorator->getTemplate('pages/vrquote_form.html.twig'),
[
'vrquote' => $vrquote,
'form' => $form->createView(),
// 'show_privacy_statement_text' => ($this->getParameter('site_contact_privacy_statement_option')),
// 'privacy_statement_text' => $this->getParameter('site_contact_privacy_statement_text')
]
);
}
}