src/Controller/Vitrine/NewsletterController.php line 84

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Vitrine;
  3. use App\Entity\Core\Mails;
  4. use App\Entity\Core\Newsletters;
  5. use App\Form\Website\NewsletterUnregisterForm;
  6. use App\Services\Core\Users;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Cache;
  9. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  10. use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  13. use Symfony\Component\HttpFoundation\Cookie;
  14. use Symfony\Component\HttpFoundation\JsonResponse;
  15. use Symfony\Component\HttpFoundation\RedirectResponse;
  16. use Symfony\Component\HttpFoundation\Request;
  17. use Symfony\Component\HttpFoundation\Response;
  18. use Symfony\Component\Routing\Annotation\Route;
  19. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  20. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  21. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  22. /**
  23.  * Gestion des newsletters
  24.  */
  25. class NewsletterController extends AbstractController
  26. {
  27.     private $em;
  28.     private $ms;
  29.     private $us;
  30.     public function __construct(EntityManagerInterface $em,
  31.                                 \App\Services\Mails    $ms,
  32.                                 Users                  $us
  33.     ){
  34.         $this->em $em;
  35.         $this->ms $ms;
  36.         $this->us $us;
  37.     }
  38.     /**
  39.      * Inscription à la newsletter
  40.      * TODO: Envoyer un mail de confirmation
  41.      * @param Request $request
  42.      * @return Response
  43.      */
  44.     public function registerEmail(Request $request): Response
  45.     {
  46.         $session $request->getSession();
  47.         $referer $request->headers->get('referer');
  48.         $data $request->request->all();
  49.         $email $data['EMAIL'];
  50.         $newsletter $this->em->getRepository(Newsletters::class)->findOneBy(['email' => $email]);
  51.         if($newsletter != null) {
  52.             $session->getFlashBag()->add('error''Vous êtes déjà inscris');
  53.             return new RedirectResponse($referer);
  54.         }
  55.         $newsletter = new Newsletters();
  56.         $newsletter->setEmail($email);
  57.         $newsletter->setValide(true);
  58.         $this->em->persist($newsletter);
  59.         $this->em->flush();
  60.         $session->getFlashBag()->add('success''Inscription à la newsletter');
  61.         return new RedirectResponse($referer);
  62.     }
  63.     /**
  64.      * Confirmation de la Désinscription à la newsletter
  65.      * TODO: Vérifier
  66.      * @param Request $request
  67.      * @return Response
  68.      */
  69.     public function unregisterEmailConfirm(Request $request): Response
  70.     {
  71.         $session $request->getSession();
  72.         $formNewsletter $this->createForm(NewsletterUnregisterForm::class);
  73.         $formNewsletter->handleRequest($request);
  74.         if ($formNewsletter->isSubmitted() && $formNewsletter->isValid()) {
  75.             $data $request->request->all();
  76.             $data $data['newsletter_unregister_form'];
  77.             $this->sendEmailUnregisterNewsletter($data);
  78.             $session->getFlashBag()->add('success''Mail de désinscription envoyé');
  79.             return $this->redirectToRoute('homepage');
  80.         }
  81.         return $this->render('security/login/newsletter_unregister.html.twig', [
  82.             'formNewsletter' => $formNewsletter->createView()
  83.         ]);
  84.     }
  85.     /**
  86.      *  Désinscription confirmée
  87.      * @param Request $request
  88.      * @param $identifiant
  89.      * @return Response
  90.      */
  91.     public function unregisterEmail(Request $request,$identifiant): Response
  92.     {
  93.         $session $request->getSession();
  94.         $newsletter $this->em->getRepository(Newsletters::class)->findOneBy(['registerChain' => $identifiant]);
  95.         if($newsletter == null) {
  96.             return $this->redirect('homepage');
  97.         }
  98.         $this->em->remove($newsletter);
  99.         $this->em->flush();
  100.         $session->getFlashBag()->add('success''Désinscription à la newsletter');
  101.         return $this->redirectToRoute('homepage');
  102.     }
  103.     /**
  104.      * Mail de désinscription à la newsletter
  105.      * @param $data
  106.      * @return false
  107.      */
  108.     private function sendEmailUnregisterNewsletter($data)
  109.     {
  110.         $newsletter $this->em->getRepository(Newsletters::class)->findOneBy(['email' => $data['email']]);
  111.         if($newsletter == null) {
  112.             return false;
  113.         }
  114.         $randomPassword $newsletter->getId().$this->us->randomPasswordSecurised(20);
  115.         $newsletter->setRegisterChain($randomPassword);
  116.         $this->em->persist($newsletter);
  117.         $this->em->flush();
  118.         $data['chain'] = $randomPassword;
  119.         $typeWebsite $_ENV["TYPE_WEBSITE"];
  120.         $templateEntity $this->em->getRepository(Mails::class)->findOneBy(['typeWebsite' => $typeWebsite'name' => 'desinscription-newsletter']);
  121.         $path = (string)$this->generateUrl('app_newsletter_unregister_email', ['identifiant' => $randomPassword], UrlGeneratorInterface::ABSOLUTE_URL);
  122.         return $this->ms->sendUnregisterNewsletterEmail($data,$templateEntity,$path);
  123.     }
  124. }