<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Component\Messenger\MessageBusInterface;
use Symfony\Component\Mailer\MailerInterface;
// use App\Message\LowPriorityEmail;
use App\Message\HighPriorityEmail;
use App\Entity\Page;
use App\Entity\Contact;
use App\Form\ContactType;
class ContactController extends AbstractController
{
/**
* @Route("/contact", name="contact")
*/
public function contact(Request $request, MessageBusInterface $bus)
{
$slug = "contact";
$page = $this->getDoctrine()->getRepository(Page::class)->findOneBySlug($slug);
if (!$page) {
throw $this->createNotFoundException('Pas de page avec le slug "' . $slug . '".');
}
$contact = new Contact();
$form = $this->createForm(ContactType::class, $contact);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$contact = $form->getData();
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($contact);
$entityManager->flush();
// dump($contact->getMessage());
// exit;
$copyToSender = true;
$isSent = $this->_sendContactMail($contact, $entityManager, $bus, $copyToSender);
$this->addFlash(
'notice-popup',
'Votre mail a été envoyé. Nous vous répondrons sous peu. Merci.'
);
return $this->redirectToRoute('home');
}
return $this->render('contact/index.html.twig', [
'page' => $page,
'form' => $form->createView(),
]);
}
private function _sendContactMail(Contact $contact, $entityManager, $bus, $copyToSender = true) : bool
{
// MAIL POUR LE CONTACT DU SITE
// -> avec méthode messenger
$fromEmail = $_ENV['FROM_MAIL'];
$toEmails = "ici-Grenoble <" . $_ENV['CONTACT_MAIL'] . ">";
$subject = $contact->getSubject();
$content = "<p><strong>Contact depuis le site ici-grenoble par : " . $contact->getName() . " (" . $contact->getEmail() . ")</strong></p>\n";
$content .= $contact->getMessage();
$contentHtml = null;
$ccEmails = null;
$bccEmails = null;
$replytoEmail = $contact->getName() . " <" . $contact->getEmail() . ">";
$beforeSubject = null; // = ""; // defaults to App\Message\BaseEmail::DEFAULT_BEFORE_SUBJECT
// will cause the HighPriorityEmailHandler to be called
$bus->dispatch(new HighPriorityEmail($fromEmail, $toEmails, $subject, $content, $contentHtml, $ccEmails, $bccEmails, $replytoEmail, $beforeSubject));
// COPIE POUR L'ENVOYEUR
if($copyToSender) {
// -> avec méthode messenger
$fromEmail = $_ENV['FROM_MAIL'];
$toEmails = $contact->getName() . " <" . $contact->getEmail() . ">";
$subject = $contact->getSubject();
$content = "<p><strong>Contact depuis le site ici-grenoble par : " . $contact->getName() . " (" . $contact->getEmail() . ")<br>-> copie à l'envoyeur</strong></p>\n";
$content .= $contact->getMessage();
$contentHtml = null;
$ccEmails = null;
$bccEmails = null;
$replytoEmail = $_ENV['REPLYTO_MAIL'];
$beforeSubject = null; // = ""; // defaults to App\Message\BaseEmail::DEFAULT_BEFORE_SUBJECT
// will cause the HighPriorityEmailHandler to be called
$bus->dispatch(new HighPriorityEmail($fromEmail, $toEmails, $subject, $content, $contentHtml, $ccEmails, $bccEmails, $replytoEmail, $beforeSubject));
}
$contact->setSent(true); // je considère que le mail est envoyé, même s'il y a erreur...
$entityManager->persist($contact);
$entityManager->flush();
$isSent = true;
return $isSent;
}
}