<?phpnamespace App\Controller\Vitrine;use App\Entity\Core\Mails;use App\Entity\Core\Newsletters;use App\Form\Website\NewsletterUnregisterForm;use App\Services\Core\Users;use Doctrine\ORM\EntityManagerInterface;use Sensio\Bundle\FrameworkExtraBundle\Configuration\Cache;use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;use Symfony\Component\EventDispatcher\EventDispatcherInterface;use Symfony\Component\HttpFoundation\Cookie;use Symfony\Component\HttpFoundation\JsonResponse;use Symfony\Component\HttpFoundation\RedirectResponse;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\Routing\Annotation\Route;use Symfony\Component\Routing\Generator\UrlGeneratorInterface;use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;/** * Gestion des newsletters */class NewsletterController extends AbstractController{ private $em; private $ms; private $us; public function __construct(EntityManagerInterface $em, \App\Services\Mails $ms, Users $us ){ $this->em = $em; $this->ms = $ms; $this->us = $us; } /** * Inscription à la newsletter * TODO: Envoyer un mail de confirmation * @param Request $request * @return Response */ public function registerEmail(Request $request): Response { $session = $request->getSession(); $referer = $request->headers->get('referer'); $data = $request->request->all(); $email = $data['EMAIL']; $newsletter = $this->em->getRepository(Newsletters::class)->findOneBy(['email' => $email]); if($newsletter != null) { $session->getFlashBag()->add('error', 'Vous êtes déjà inscris'); return new RedirectResponse($referer); } $newsletter = new Newsletters(); $newsletter->setEmail($email); $newsletter->setValide(true); $this->em->persist($newsletter); $this->em->flush(); $session->getFlashBag()->add('success', 'Inscription à la newsletter'); return new RedirectResponse($referer); } /** * Confirmation de la Désinscription à la newsletter * TODO: Vérifier * @param Request $request * @return Response */ public function unregisterEmailConfirm(Request $request): Response { $session = $request->getSession(); $formNewsletter = $this->createForm(NewsletterUnregisterForm::class); $formNewsletter->handleRequest($request); if ($formNewsletter->isSubmitted() && $formNewsletter->isValid()) { $data = $request->request->all(); $data = $data['newsletter_unregister_form']; $this->sendEmailUnregisterNewsletter($data); $session->getFlashBag()->add('success', 'Mail de désinscription envoyé'); return $this->redirectToRoute('homepage'); } return $this->render('security/login/newsletter_unregister.html.twig', [ 'formNewsletter' => $formNewsletter->createView() ]); } /** * Désinscription confirmée * @param Request $request * @param $identifiant * @return Response */ public function unregisterEmail(Request $request,$identifiant): Response { $session = $request->getSession(); $newsletter = $this->em->getRepository(Newsletters::class)->findOneBy(['registerChain' => $identifiant]); if($newsletter == null) { return $this->redirect('homepage'); } $this->em->remove($newsletter); $this->em->flush(); $session->getFlashBag()->add('success', 'Désinscription à la newsletter'); return $this->redirectToRoute('homepage'); } /** * Mail de désinscription à la newsletter * @param $data * @return false */ private function sendEmailUnregisterNewsletter($data) { $newsletter = $this->em->getRepository(Newsletters::class)->findOneBy(['email' => $data['email']]); if($newsletter == null) { return false; } $randomPassword = $newsletter->getId().$this->us->randomPasswordSecurised(20); $newsletter->setRegisterChain($randomPassword); $this->em->persist($newsletter); $this->em->flush(); $data['chain'] = $randomPassword; $typeWebsite = $_ENV["TYPE_WEBSITE"]; $templateEntity = $this->em->getRepository(Mails::class)->findOneBy(['typeWebsite' => $typeWebsite, 'name' => 'desinscription-newsletter']); $path = (string)$this->generateUrl('app_newsletter_unregister_email', ['identifiant' => $randomPassword], UrlGeneratorInterface::ABSOLUTE_URL); return $this->ms->sendUnregisterNewsletterEmail($data,$templateEntity,$path); }}