ContactController.php 3.27 KB
Newer Older
Julien Jorry committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
<?php

namespace App\Controller;

use App\Entity\GlobalParameter;
use App\Form\Type\ContactFormType;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Twig\Environment;

class ContactController extends AbstractController
{
    private $em;
    private $mailer;
    private $templating;

    public function __construct(EntityManagerInterface $em, \Swift_Mailer $mailer, Environment $templating)
    {
        $this->em = $em;
        $this->mailer = $mailer;
        $this->templating = $templating;
    }

    /**
     * @Route("/contact", name="contact")
     */
    public function contactAction(Request $request)
    {
        $form = $this->createForm(ContactFormType::class);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            $name = $form['nom']->getData();
            $emailFrom = $form['email']->getData();
            $message = $form['message']->getData();
39
            $senderTypeAsSubjectSuffix = '';
40 41 42 43 44 45 46 47 48
            if ($this->getParameter('tav_env') && $this->getParameter('presta_self_init_and_eval')) {
                switch ($form['type']) {
                    case 'prestataire_candidate':
                        $senderTypeAsSubjectSuffix = " d'un point de vente candidat";
                        break;
                    case 'adherent':
                        $senderTypeAsSubjectSuffix = " d'un adhérent";
                        break;
                }
49
            }
Julien Jorry committed
50

51
            $this->sendMail($name, $emailFrom, $message, $senderTypeAsSubjectSuffix);
Julien Jorry committed
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69

            $this->addFlash(
                'success',
                'Merci ! Le message a bien été envoyé !'
            );
            $referer = $request->headers->get('referer');
            if ($referer && !$request->isXmlHttpRequest()) {
                return $this->redirect($referer);
            } elseif (!$request->isXmlHttpRequest()) {
                return new Response('', Response::HTTP_BAD_REQUEST);
            }
        }

        return $this->render('@kohinos/contact.html.twig', [
            'form' => $form->createView(),
        ]);
    }

70
    private function sendMail($name, $from, $message, $senderTypeAsSubjectSuffix = '')
Julien Jorry committed
71
    {
72
        $subject = $this->em->getRepository(GlobalParameter::class)->val(GlobalParameter::MLC_NAME_SMALL) . ' : Contact' . $senderTypeAsSubjectSuffix;
Julien Jorry committed
73
        $mail = (new \Swift_Message($subject))
74
            ->setFrom($this->em->getRepository(GlobalParameter::class)->val(GlobalParameter::MLC_NOTIF_EMAIL)) //using $from here sometimes fails with 550 5.7.1 Sender mismatch
Julien Jorry committed
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
            ->setTo($this->em->getRepository(GlobalParameter::class)->val(GlobalParameter::MLC_CONTACT_EMAIL))
            ->setBody(
                $this->templating->render(
                    '@kohinos/email/contact.html.twig',
                    [
                        'subject' => $subject,
                        'from' => $from,
                        'name' => $name,
                        'message' => $message,
                    ]
                ),
                'text/html'
            );
        $this->mailer->send($mail);
    }
}