src/Controller/NewslettersController.php line 39

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. /**
  4.  * @author Mehrez Labidi
  5.  */
  6. namespace App\Controller;
  7. use Symfony\Component\Validator\Constraints as Assert;
  8. use Symfony\Component\Validator\Constraints\{
  9.     NotBlank,
  10.     Length
  11. };
  12. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  13. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  14. use Symfony\Component\Form\Extension\Core\Type\TextType;
  15. use Symfony\Component\Form\Forms;
  16. use App\Entity\UtilisateursNewsletter;
  17. use App\Entity\PartenairesOptin;
  18. use App\Services\ManagerEntity\UtilisateursNewsletterManagers;
  19. use Symfony\Component\HttpFoundation\Request;
  20. use App\Form\Models\NewslettersInscription;
  21. use App\Form\Type\NewslettersInscriptionType;
  22. use App\Helper\Utils;
  23. use App\Services\MetaTag;
  24. class NewslettersController extends EntityUsingController {
  25.     private $unm;
  26.     public const DESINSCRI "desinscrit";
  27.     public function __construct(MetaTag $metaTagUtilisateursNewsletterManagers $unm) {
  28.         $this->metaTag $metaTag;
  29.         $this->unm $unm;
  30.     }
  31.     public function inscriptionNewsletters(Request $request$codePaysUtilisateursNewsletterManagers $unm) {
  32.         $metaTitle "S'inscrire à la newsletter Fusacq | Actualités fusion-acquisition et reprise d'entreprise";
  33.         $metaDescription "Inscrivez-vous gratuitement à la newsletter Fusacq et recevez les dernières opportunités et actualités du marché de la fusion-acquisition, cession et reprise d'entreprise en France.";
  34.         $metaTag $this->metaTag
  35.                 ->setTitle($metaTitle)
  36.                 ->setDescription($metaDescription);
  37.         $model = new NewslettersInscription();
  38.         
  39.         // Récupérer l'email depuis l'URL si présent
  40.         $emailFromUrl $request->query->get('email');
  41.         if ($emailFromUrl) {
  42.             $model->mail $emailFromUrl;
  43.         }
  44.         
  45.         $form $this->createForm(NewslettersInscriptionType::class, $model, [
  46.             'action' => $this->generateUrl(
  47.                     $request->attributes->get('_route'),
  48.                     [
  49.                         'codePays' => $codePays,
  50.                     ]
  51.             ),
  52.             'method' => 'POST',
  53.         ]);
  54.         $form->handleRequest($request);
  55.         if ($form->isSubmitted()) {
  56.             if ($form->isValid()) {
  57.                 $data $form->getData();
  58.                 $unm->inscription($data);
  59.                 $this->addFlash("success_inscri_news""votre inscription a nos newsletters a bien ete prise en compte");
  60.             } else {
  61.                 $this->addFlash("error_inscri_news""votre inscription a nos newsletters a echoue");
  62.             }
  63.         }
  64.         return $this->render('newsletters/inscription_newsletters.html.twig', [
  65.                     'controller_name' => 'FooterPageController''form' => $form->createView(),
  66.                     'metaTag' => $metaTag,
  67.         ]);
  68.     }
  69.     public function archiveNewslettersActu(Request $request$codePays) {
  70.         return $this->render('newsletters/archive_newsletters_actu.html.twig', [
  71.                     'controller_name' => 'FooterPageController'
  72.         ]);
  73.     }
  74.     public function archiveNewslettersSocDiff(Request $request$codePays) {
  75.         return $this->render('newsletters/archive_newsletters_socdiff.html.twig', [
  76.                     'controller_name' => 'FooterPageController'
  77.         ]);
  78.     }
  79.     public function archiveNewslettersOpp(Request $request$codePays) {
  80.         return $this->render('newsletters/archive_newsletters_opp.html.twig', [
  81.                     'controller_name' => 'FooterPageController'
  82.         ]);
  83.     }
  84.     public function desinscriptionNewsletters(Request $request$codePaysUtilisateursNewsletterManagers $unm) {
  85.         $em $this->getDoctrine()->getManager();
  86.         $get $request->query->all();
  87.         $email $get["email"] ?? NULL;
  88.         $from $get["from"] ?? NULL;
  89.         $id_pays $get["id_pays"] ?? NULL;
  90.         $id_partenaire $get["id_partenaire"] ?? NULL;
  91.         $labels = [
  92.             'actualite' => "Ne plus recevoir l'actualité hebdomadaire des fusions-acquisitions",
  93.             'societe_difficulte' => "Ne plus recevoir la sélection mensuelle des annonces de sociétés en difficulté",
  94.             'mailings_partenaires' => "Ne plus recevoir les mailings de partenaires FUSACQ",
  95.             'utilisateurs_recherchent' => "Ne plus recevoir la sélection hebdomadaire des annonces FUSACQ",
  96.             'mails_divers_fusacq' => "Ne plus recevoir les mailings d'information FUSACQ.",
  97.             'prestataire' => "Ne plus recevoir la newsletter Experts",
  98.             "news_fusacqbuzz_quotidienne" => "Ne plus recevoir la newsletter Fusacq Buzz quotidienne",
  99.             "news_fusacqbuzz_international" => "Ne plus recevoir la newsletter Fusacq Buzz international",
  100.             "info_fusacq_international" => "Ne plus recevoir la newsletter info fusacq international",
  101.             "synthese_hebdo_international" => "Ne plus recevoir la newsletter synthese hebdo international",
  102.             "selection_hebdo_international" => "Ne plus recevoir la newsletter selection hebdo international",
  103.             "optin_international" => "Ne plus recevoir la newsletter optin international",
  104.             "webinar" => "Ne plus recevoir les mailings concernant nos webinars",
  105.         ];
  106.         if ($id_pays) {
  107.             if ($id_pays == "01") {
  108.                 $labels["news_fusacqbuzz_international"] = $labels["news_fusacqbuzz_international"] . " (Canada)";
  109.             }
  110.             if ($id_pays == "41") {
  111.                 $labels["news_fusacqbuzz_international"] = $labels["news_fusacqbuzz_international"] . " (Suisse)";
  112.             }
  113.             if ($id_pays == "32") {
  114.                 $labels["news_fusacqbuzz_international"] = $labels["news_fusacqbuzz_international"] . " (Belgique)";
  115.             }
  116.         }
  117.         if (!empty($labels[$from])) {
  118.             $choices = [
  119.                 $labels[$from] => 'partiel',
  120.                 "Ne plus recevoir aucune communication de la part de FUSACQ (attention en cochant cette case vous continuerez à recevoir les mails d'alertes. Allez sur votre compte pour les supprimer)." => 'total'
  121.             ];
  122.         } else {
  123.             $choices = [
  124.                 "Ne plus recevoir aucune communication de la part de FUSACQ (attention en cochant cette case vous continuerez à recevoir les mails d'alertes. Allez sur votre compte pour les supprimer)." => 'total'
  125.             ];
  126.         }
  127.         if ($id_partenaire) {
  128.             $partenaire $em->getRepository(PartenairesOptin::class)->find($id_partenaire);
  129.             $choices = ["Se désabonner des mailings de notre partenaire : " $partenaire->getNom() => "id_partenaire=" $id_partenaire] + $choices;
  130.         }
  131.         $form $this->createFormBuilder()
  132.                 ->add("email",
  133.                         TextType::class,
  134.                         [
  135.                             'data' => $email ?? NULL,
  136.                             "constraints" => [
  137.                                 new NotBlank(["message" => "ce champ est obligatoire"]),
  138.                                 new Assert\Email(["message" => "l'adresse mail saisie est invalide"])
  139.                             ]
  140.                         ]
  141.                 )
  142.                 ->add("from"ChoiceType::class, [
  143.                     'choices' => $choices,
  144.                     'expanded' => true,
  145.                     "data" => Utils::firstValInArray($choices),
  146.                     'multiple' => false
  147.                 ])
  148.                 ->add('btn'SubmitType::class, [
  149.                     'label' => "se désinscrire",
  150.                     'attr' => ['class' => 'button-rond'],
  151.                 ])
  152.                 ->getForm();
  153.         $form->handleRequest($request);
  154.         if ($form->isSubmitted() && $form->isValid()) {
  155.             $data $form->getData();
  156.             $email $data["email"];
  157.             $utilisateurNewsletter $unm->getUtilisateur($email);
  158.             if ($utilisateurNewsletter) {
  159.                 if (($data["from"] == "partiel") || (Utils::stringBeginWithSubString($data["from"], "id_partenaire"))) {
  160.                     if ($from === "societe_difficulte") {
  161.                         $utilisateurNewsletter->_set('societe_difficulte'self::DESINSCRI);
  162.                         $utilisateurNewsletter->_set('newsletter_societe_difficulte'NULL);
  163.                     }
  164.                     if ($from === "prestataire") {
  165.                         $utilisateurNewsletter->_set('newsletter_experts'NULL);
  166.                     }
  167.                     if ($from === "webinar") {
  168.                         $utilisateurNewsletter->_set('mailings_webinars'NULL);
  169.                     }
  170.                     if ($from === "mailings_partenaires") {
  171.                         $utilisateurNewsletter->_set('mailings_partenaires'NULL);
  172.                         if ($id_partenaire) {
  173.                             $optins_supprimes $utilisateurNewsletter->_get("optins_supprimes");
  174.                             $optins_supprimes Utils::addItemToStringItems($id_partenaire$optins_supprimes);
  175.                             $utilisateurNewsletter->_set("optins_supprimes"$optins_supprimes);
  176.                         }
  177.                     }
  178.                     if ($from === "utilisateurs_recherchent") {
  179.                         $utilisateurNewsletter->_set('newsletter_opportunites'NULL);
  180.                     }
  181.                     if ($from === "mails_divers_fusacq") {
  182.                         $utilisateurNewsletter->_set('mails_divers_fusacq'NULL);
  183.                     }
  184.                     if ($from === "info_fusacq_international") {
  185.                         $utilisateurNewsletter->_set('info_fusacq'self::DESINSCRI);
  186.                     }
  187.                     if ($from === "synthese_hebdo_international") {
  188.                         $utilisateurNewsletter->_set('synthese_hebdo'self::DESINSCRI);
  189.                     }
  190.                     if ($from === "selection_hebdo_international") {
  191.                         $utilisateurNewsletter->_set('selection_hebdo'self::DESINSCRI);
  192.                     }
  193.                     if ($from === "optin_international") {
  194.                         $utilisateurNewsletter->_set('optin'self::DESINSCRI);
  195.                     }
  196.                     if (in_array($from, ["news_fusacqbuzz_quotidienne""news_fusacqbuzz_international"])) {
  197.                         $utilisateurNewsletter $unm->newsQuotidienneDesinscription($utilisateurNewsletter$id_pays);
  198.                     }
  199.                     $utilisateurNewsletter $unm->appendSuiviDesinscription($utilisateurNewsletter$from$id_pays$id_partenaire);
  200.                 } else {
  201.                     $utilisateurNewsletter->_set('etat_utilisateur'self::DESINSCRI);
  202.                     $utilisateurNewsletter->_set('societe_difficulte'self::DESINSCRI);
  203.                     $utilisateurNewsletter->_set('newsletter_societe_difficulte'NULL);
  204.                     $utilisateurNewsletter->_set('newsletter_experts'NULL);
  205.                     $utilisateurNewsletter->_set('mailings_webinars'NULL);
  206.                     $utilisateurNewsletter->_set('mailings_partenaires'NULL);
  207.                     $utilisateurNewsletter->_set('newsletter_opportunites'NULL);
  208.                     $utilisateurNewsletter->_set('mails_divers_fusacq'NULL);
  209.                     $utilisateurNewsletter->_set('mailings_formations'NULL);
  210.                     $utilisateurNewsletter->_set('newsletter_actualite'NULL);
  211.                     $utilisateurNewsletter->_set('info_fusacq'self::DESINSCRI);
  212.                     $utilisateurNewsletter->_set('synthese_hebdo'self::DESINSCRI);
  213.                     $utilisateurNewsletter->_set('selection_hebdo'self::DESINSCRI);
  214.                     $utilisateurNewsletter->_set('optin'self::DESINSCRI);
  215.                     $utilisateurNewsletter $unm->newsQuotidienneDesinscription($utilisateurNewsletter"33");
  216.                     $utilisateurNewsletter $unm->newsQuotidienneDesinscription($utilisateurNewsletter"32");
  217.                     $utilisateurNewsletter $unm->newsQuotidienneDesinscription($utilisateurNewsletter"41");
  218.                     $utilisateurNewsletter $unm->newsQuotidienneDesinscription($utilisateurNewsletter"01");
  219.                     $utilisateurNewsletter $unm->appendSuiviDesinscription($utilisateurNewsletter"total"NULLNULL);
  220.                 }
  221.                 $em->persist($utilisateurNewsletter);
  222.                 $em->flush();
  223.             }
  224.             return $this->redirectToRoute('confirmation_desinscription_newsletters', ['codePays' => $codePays]);
  225.         }
  226.         return $this->render('newsletters/desinscription_newsletters.html.twig', [
  227.                     'controller_name' => 'FooterPageController',
  228.                     'form' => $form->createView()
  229.         ]);
  230.     }
  231.     public function confirmationDesinscriptionNewsletters(Request $request$codePays) {
  232.         return $this->render('newsletters/confirmation_desinscription_newsletters.html.twig', [
  233.                     'controller_name' => 'FooterPageController',
  234.         ]);
  235.     }
  236. }