src/Controller/Front/AbstractFrontController.php line 40

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Front;
  3. use App\Entity\Audit;
  4. use App\Entity\Demo;
  5. use App\Form\DemoType;
  6. use App\Service\Mail;
  7. use App\Form\AuditType;
  8. use App\Entity\Newsletter;
  9. use App\Form\NewsletterType;
  10. use App\Repository\NewsletterRepository;
  11. use App\Repository\WebinaireRepository;
  12. use App\Repository\AvisClientRepository;
  13. use Doctrine\ORM\EntityManagerInterface;
  14. use Symfony\Component\Form\FormFactoryInterface;
  15. use Symfony\Component\HttpFoundation\Response;
  16. use Symfony\Component\HttpFoundation\RequestStack;
  17. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  18. abstract class AbstractFrontController extends AbstractController
  19. {
  20.     protected $request;
  21.     protected $em;
  22.     protected $newsletterrepo;
  23.     protected $webinaireRepository;
  24.     protected $avisClientRepository;
  25.     protected $formFactory;
  26.     public function __construct(RequestStack $requestEntityManagerInterface $emNewsletterRepository $newsletterrepoWebinaireRepository $webinaireRepositoryAvisClientRepository $avisClientRepositoryFormFactoryInterface $formFactory)
  27.     {
  28.         $this->request $request;
  29.         $this->em $em;
  30.         $this->newsletterrepo $newsletterrepo;
  31.         $this->webinaireRepository $webinaireRepository;
  32.         $this->avisClientRepository $avisClientRepository;
  33.         $this->formFactory $formFactory;
  34.     }
  35.     protected function render(string $view, array $parameters = [], ?Response $response null): Response
  36.     {
  37.         $request $this->request->getCurrentRequest();
  38.         // Newsletter
  39.         foreach (['form_newsletter''form_news''form_news2'] as $name) {
  40.             $newsletter = new Newsletter();
  41.             $form $this->formFactory->createNamed($nameNewsletterType::class, $newsletter, ['attr' => ['id' => $name '_anchor']]);
  42.             $form->handleRequest($request);
  43.             if ($form->isSubmitted() && $form->isValid()) {
  44.                 $this->handleNewsletterSubmission($newsletter);
  45.                 return $this->redirect($request->getRequestUri() . '#' $name '_anchor');
  46.             }
  47.             $parameters[$name] = $form->createView();
  48.         }
  49.         // Audit
  50.         foreach (['form_audit''form_audit2''form_contact''form_contact_2'] as $name) {
  51.             $audit = new Audit();
  52.             $form $this->formFactory->createNamed($nameAuditType::class, $audit, ['attr' => ['id' => $name '_anchor']]);
  53.             $form->handleRequest($request);
  54.             if ($form->isSubmitted() && $form->isValid()) {
  55.                 $this->handleAuditSubmission($audit);
  56.                 return $this->redirect($request->getRequestUri() . '#' $name '_anchor');
  57.             }
  58.             $parameters[$name] = $form->createView();
  59.         }
  60.         // Demo
  61.         $demo = new Demo();
  62.         $form_demo $this->formFactory->createNamed('form_demo'DemoType::class, $demo, ['attr' => ['id' => 'form_demo_anchor']]);
  63.         $form_demo->handleRequest($request);
  64.         if ($form_demo->isSubmitted() && $form_demo->isValid()) {
  65.             $this->handleDemoSubmission($demo);
  66.             return $this->redirect($request->getRequestUri() . '#form_demo_anchor');
  67.         }
  68.         $parameters['form_demo'] = $form_demo->createView();
  69.         $parameters['nombreAbonne'] = $this->newsletterrepo->findAll();
  70.         $parameters['webinairePromote'] = $this->webinaireRepository->findOneBy(['promote' => true]);
  71.         $parameters['webinairePopup'] = $this->webinaireRepository->findOneBy(['popup' => true]);
  72.         $parameters['avis_clients'] = $this->avisClientRepository->findRandom(6);
  73.         $parameters['avis_total'] = $this->avisClientRepository->countExcluding([]);
  74.         return parent::render($view$parameters$response);
  75.     }
  76.     private function handleNewsletterSubmission(Newsletter $newsletter): void
  77.     {
  78.         if (isset($_COOKIE['afid'])) {
  79.             $newsletter->setAfid($_COOKIE['afid']);
  80.         }
  81.         $this->em->persist($newsletter);
  82.         $this->em->flush();
  83.         $email = new Mail();
  84.         $email->sendNewsLetter($newsletter->getName(), $newsletter->getEmail());
  85.         $email->sendToUserNewsletter($newsletter->getName(), $newsletter->getEmail());
  86.         $this->addFlash('success''Vous vous êtes abonné à notre Newsletter avec succès');
  87.     }
  88.     protected function handleAuditSubmission(Audit $audit): void
  89.     {
  90.         if (isset($_COOKIE['afid'])) {
  91.             $audit->setAfid($_COOKIE['afid']);
  92.         }
  93.         $newsConfirm $this->newsletterrepo->findOneBy(['email' => $audit->getEmail()]);
  94.         if (!$newsConfirm) {
  95.             $newsletter = new Newsletter();
  96.             $newsletter->setName($audit->getName());
  97.             $newsletter->setEmail($audit->getEmail());
  98.             if (isset($_COOKIE['afid'])) {
  99.                 $newsletter->setAfid($_COOKIE['afid']);
  100.             }
  101.             $this->em->persist($newsletter);
  102.         }
  103.         $this->em->persist($audit);
  104.         $this->em->flush();
  105.         $email = new Mail();
  106.         $email->send($audit->getName(), $audit->getTelephone(), $audit->getEmail(), $audit->getMessage(), $audit->getPage(), $audit->getAfid());
  107.         $email->sendToUserAudit($audit->getName(), $audit->getEmail());
  108.         $this->addFlash('success''Votre message a bien été envoyé');
  109.     }
  110.     private function handleDemoSubmission(Demo $demo): void
  111.     {
  112.         if (isset($_COOKIE['afid'])) {
  113.             $demo->setAfid($_COOKIE['afid']);
  114.         }
  115.         $newsConfirm $this->newsletterrepo->findOneBy(['email' => $demo->getEmail()]);
  116.         if (!$newsConfirm) {
  117.             $newsletter = new Newsletter();
  118.             $newsletter->setName($demo->getName());
  119.             $newsletter->setEmail($demo->getEmail());
  120.             if (isset($_COOKIE['afid'])) {
  121.                 $newsletter->setAfid($_COOKIE['afid']);
  122.             }
  123.             $this->em->persist($newsletter);
  124.         }
  125.         $this->em->persist($demo);
  126.         $this->em->flush();
  127.         $email = new Mail();
  128.         $email->sendDemo($demo->getName(), $demo->getTelephone(), $demo->getEmail(), $demo->getPage(), $demo->getAfid());
  129.         $email->sendToUserDemoCom($demo->getName(), $demo->getEmail());
  130.         $this->addFlash('success''Votre message a bien été envoyé');
  131.     }
  132.     public function saveAsNewsletter($name$email): void
  133.     {
  134.         $newsConfirm $this->newsletterrepo->findOneBy(['email' => $email]);
  135.         if (!$newsConfirm) {
  136.             $newsletter = new Newsletter();
  137.             $newsletter->setName($name);
  138.             $newsletter->setEmail($email);
  139.             if (isset($_COOKIE['afid'])) {
  140.                 // Récupère la valeur du cookie 'afid'
  141.                 $afidValue $_COOKIE['afid'];
  142.                 $newsletter->setAfid($afidValue);
  143.             }
  144.             $this->em->persist($newsletter);
  145.             $this->em->flush();
  146.         }
  147.     }
  148. }