<?php
namespace App\Controller;
use App\Entity\CMS\ContactForm;
use App\Entity\Company\Brand;
use App\Entity\Mail;
use App\Entity\User;
use App\Form\CMS\ContactFormType;
use App\Service\MailerService;
use App\Service\SecurityService;
use DateInterval;
use DateTimeImmutable;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Form\FormError;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController as Controller;
class StaticHtmlController extends Controller
{
/**
* @Route("/mentions-legales", name="legal")
*/
public function legal()
{
return $this->render('StaticHtml/legal.html.twig');
}
/**
* @Route("/confidentialite", name="confidentialite")
*/
public function confidentialite()
{
return $this->render('StaticHtml/privacy.html.twig');
}
/**
* @Route("/mail-test", name="mail-test")
*/
public function mailTest(EntityManagerInterface $em)
{
$mail = $em->getRepository(Mail::class)->find(1);
return $this->render('Mail/view.html.twig', [
'mail' => $mail,
'vars' => [
'date' => '12/08/2019',
'main_picture' => '5d7cf74f999f2_header-1.jpg',
'message' => 'Donec eget lectus libero. Curabitur bibendum eleifend lorem, id eleifend diam ornare egestas. Curabitur nec diam eros. Nullam eu consequat justo, quis sollicitudin lacus. Praesent tincidunt dapibus leo, sit amet ullamcorper orci. In eget dictum est. Phasellus placerat mollis diam dignissim consectetur. Donec fermentum a elit sed scelerisque.',
'user' => [
'username' => 'Clément',
],
'cta' => [
'url' => 'http://test.fr',
'label' => 'Voir ma recette',
]
],
]);
}
/**
* @Route("/contact/envoye", name="contactsended")
*/
public function contactSended()
{
return $this->render('StaticHtml/contact_sended.html.twig');
}
/**
* @Route("/contact/attente", name="contactwaiting")
*/
public function contactWaiting()
{
return $this->render('StaticHtml/contact_waiting.html.twig');
}
public function contactSend(
Request $request,
ContactForm $contactForm,
MailerService $mailer,
string $mailTo
) {
$mailSlug = 'contactform';
$em = $this->getDoctrine()->getManager();
/** @var $user User */
$user = $em->getRepository(User::class)->findOneByEmail($contactForm->getContactEmail());
$userId = '';
if (null !== $user) {
$userId = $user->getId();
}
$contactForm->setMailTo($mailTo);
$em->persist($contactForm);
$em->flush();
$vars = [
'userId' => $userId,
'contactName' => $contactForm->getContactName(),
'contactEmail' => $contactForm->getContactEmail(),
'mailObject' => $contactForm->getMailObject(),
'messageContact' => $contactForm->getMessage(),
];
$mail = $em->getRepository(Mail::class)->getOneBySlug($mailSlug);
$mailer->sendContactMail($mail, $vars, $mailTo);
$request->getSession()->getFlashBag()->add('success', 'app.contact_form.success');
$request->getSession()->set('contact_form_send', new DateTimeImmutable());
return $this->redirectToRoute('contactsended');
}
private function generateForm(
Request $request,
MailerService $mailerService
){
$formDate = $request->getSession()->get('contact_form_send');
$deltaSend = 1;
$now = new DateTimeImmutable();
if ($formDate && $now < $formDate->add(new DateInterval('PT'.$deltaSend .'M'))) {
return $this->redirectToRoute('contactwaiting');
}
$contactEmail = $this->getParameter('mailer.from');
$contactForm = new ContactForm();
$form = $this->createForm(ContactFormType::class, $contactForm);
if ($request->isMethod('POST') && $form->handleRequest($request)->isValid()) {
if ($contactForm->getCaptcha() === $contactForm->getContactEmail()) {
return ($this->contactSend($request, $contactForm, $mailerService, $contactEmail));
} else {
$form->get('captcha')->addError(new FormError(
'Le CAPTCHA ne correspond pas ! Merci de modifier votre réponse puis de cliquer sur "Envoyer".'
));
}
}
return $this->render('StaticHtml/contact.html.twig', [
'form' => $form->createView(),
]);
}
/**
* @Route("/contact", name="contactform")
*/
public function contactAction(Request $request, MailerService $mailerService, SecurityService $securityService)
{
return $this->generateForm($request, $mailerService, $securityService);
}
}