src/Controller/FrontController/ContactController.php line 22

Open in your IDE?
  1. <?php
  2. namespace App\Controller\FrontController;
  3. use App\Repository\ProductRepository;
  4. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\HttpFoundation\Response;
  7. use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
  8. use Symfony\Component\Mailer\MailerInterface;
  9. use Symfony\Component\Mime\Email;
  10. use Symfony\Component\Routing\Annotation\Route;
  11. /**
  12.  * @Route("/devis")
  13.  */
  14. class ContactController extends AbstractController
  15. {
  16.     /**
  17.      * @Route("/", name="app_contact", methods={"GET", "POST"})
  18.      */
  19.     public function index(Request $request, MailerInterface $mailer, ProductRepository $productRepository): Response
  20.     {
  21.         if ($request->isMethod('POST')) {
  22.             if (!$this->isCsrfTokenValid('contact_form', $request->request->get('_token'))) {
  23.                 throw $this->createAccessDeniedException('Jeton CSRF invalide.');
  24.             }
  25.             $name = trim((string) $request->request->get('name'));
  26.             $email = trim((string) $request->request->get('email'));
  27.             $phone = trim((string) $request->request->get('phone'));
  28.             $productId = (int) $request->request->get('product_id');
  29.             $requesterType = trim((string) $request->request->get('requester_type'));
  30.             $location = trim((string) $request->request->get('location'));
  31.             $role = trim((string) $request->request->get('role'));
  32.             $productName = trim((string) $request->request->get('product_name'));
  33.             $productType = trim((string) $request->request->get('product_type'));
  34.             $subject = trim((string) $request->request->get('subject'));
  35.             $message = trim((string) $request->request->get('message'));
  36.             $quoteProduct = $productId > 0 ? $productRepository->find($productId) : null;
  37.             if ($quoteProduct) {
  38.                 $productName = $quoteProduct->getTitle();
  39.                 $productType = implode(' / ', $quoteProduct->getStatetypeLabels());
  40.             }
  41.             if ($subject === '') {
  42.                 $subject = 'Demande de devis';
  43.             }
  44.             if ($message === '') {
  45.                 $message = 'Demande de devis pour le produit : ' . $productName . ' (' . $productType . ').';
  46.             }
  47.             if ($name === '' || !filter_var($email, FILTER_VALIDATE_EMAIL) || $requesterType === '' || $location === '' || $role === '' || $productName === '' || $productType === '') {
  48.                 $this->addFlash('error', 'Veuillez remplir correctement les champs obligatoires.');
  49.                 return $this->redirectToRoute('app_contact');
  50.             }
  51.             $mail = (new Email())
  52.                 ->from((string) $this->getParameter('mailer_from'))
  53.                 ->to((string) $this->getParameter('contact_recipient'))
  54.                 ->replyTo($email)
  55.                 ->subject($subject)
  56.                 ->html($this->renderView('emails/contact.html.twig', [
  57.                     'name' => $name,
  58.                     'email' => $email,
  59.                     'phone' => $phone !== '' ? $phone : 'Non renseigné',
  60.                     'requester_type' => $requesterType,
  61.                     'location' => $location,
  62.                     'role' => $role,
  63.                     'product_name' => $productName,
  64.                     'product_type' => $productType,
  65.                     'service' => $subject,
  66.                     'message' => $message,
  67.                 ]))
  68.                 ->text($this->renderView('emails/contact.txt.twig', [
  69.                     'name' => $name,
  70.                     'email' => $email,
  71.                     'phone' => $phone !== '' ? $phone : 'Non renseigné',
  72.                     'requester_type' => $requesterType,
  73.                     'location' => $location,
  74.                     'role' => $role,
  75.                     'product_name' => $productName,
  76.                     'product_type' => $productType,
  77.                     'service' => $subject,
  78.                     'message' => $message,
  79.                 ]));
  80.             try {
  81.                 $mailer->send($mail);
  82.             } catch (TransportExceptionInterface $exception) {
  83.                 $this->addFlash('error', 'L’envoi de votre demande a échoué. Veuillez réessayer.');
  84.                 return $this->redirectToRoute('app_contact');
  85.             }
  86.             $this->addFlash('success', 'Votre demande a bien été envoyée.');
  87.             return $this->redirectToRoute('app_contact');
  88.         }
  89.         $productId = (int) $request->query->get('product_id');
  90.         $quoteProduct = $productId > 0 ? $productRepository->find($productId) : null;
  91.         return $this->render('frontView/contact.html.twig', [
  92.             'quote_product' => $quoteProduct,
  93.         ]);
  94.     }
  95. }