<?php
namespace App\Controller\FrontController;
use App\Repository\ProductRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Email;
use Symfony\Component\Routing\Annotation\Route;
/**
* @Route("/devis")
*/
class ContactController extends AbstractController
{
/**
* @Route("/", name="app_contact", methods={"GET", "POST"})
*/
public function index(Request $request, MailerInterface $mailer, ProductRepository $productRepository): Response
{
if ($request->isMethod('POST')) {
if (!$this->isCsrfTokenValid('contact_form', $request->request->get('_token'))) {
throw $this->createAccessDeniedException('Jeton CSRF invalide.');
}
$name = trim((string) $request->request->get('name'));
$email = trim((string) $request->request->get('email'));
$phone = trim((string) $request->request->get('phone'));
$productId = (int) $request->request->get('product_id');
$requesterType = trim((string) $request->request->get('requester_type'));
$location = trim((string) $request->request->get('location'));
$role = trim((string) $request->request->get('role'));
$productName = trim((string) $request->request->get('product_name'));
$productType = trim((string) $request->request->get('product_type'));
$subject = trim((string) $request->request->get('subject'));
$message = trim((string) $request->request->get('message'));
$quoteProduct = $productId > 0 ? $productRepository->find($productId) : null;
if ($quoteProduct) {
$productName = $quoteProduct->getTitle();
$productType = implode(' / ', $quoteProduct->getStatetypeLabels());
}
if ($subject === '') {
$subject = 'Demande de devis';
}
if ($message === '') {
$message = 'Demande de devis pour le produit : ' . $productName . ' (' . $productType . ').';
}
if ($name === '' || !filter_var($email, FILTER_VALIDATE_EMAIL) || $requesterType === '' || $location === '' || $role === '' || $productName === '' || $productType === '') {
$this->addFlash('error', 'Veuillez remplir correctement les champs obligatoires.');
return $this->redirectToRoute('app_contact');
}
$mail = (new Email())
->from((string) $this->getParameter('mailer_from'))
->to((string) $this->getParameter('contact_recipient'))
->replyTo($email)
->subject($subject)
->html($this->renderView('emails/contact.html.twig', [
'name' => $name,
'email' => $email,
'phone' => $phone !== '' ? $phone : 'Non renseigné',
'requester_type' => $requesterType,
'location' => $location,
'role' => $role,
'product_name' => $productName,
'product_type' => $productType,
'service' => $subject,
'message' => $message,
]))
->text($this->renderView('emails/contact.txt.twig', [
'name' => $name,
'email' => $email,
'phone' => $phone !== '' ? $phone : 'Non renseigné',
'requester_type' => $requesterType,
'location' => $location,
'role' => $role,
'product_name' => $productName,
'product_type' => $productType,
'service' => $subject,
'message' => $message,
]));
try {
$mailer->send($mail);
} catch (TransportExceptionInterface $exception) {
$this->addFlash('error', 'L’envoi de votre demande a échoué. Veuillez réessayer.');
return $this->redirectToRoute('app_contact');
}
$this->addFlash('success', 'Votre demande a bien été envoyée.');
return $this->redirectToRoute('app_contact');
}
$productId = (int) $request->query->get('product_id');
$quoteProduct = $productId > 0 ? $productRepository->find($productId) : null;
return $this->render('frontView/contact.html.twig', [
'quote_product' => $quoteProduct,
]);
}
}