<?php
declare(strict_types=1);
/**
* @author Mehrez Labidi
*/
namespace App\Controller;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Constraints\{
NotBlank,
Length
};
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Forms;
use App\Entity\UtilisateursNewsletter;
use App\Entity\PartenairesOptin;
use App\Services\ManagerEntity\UtilisateursNewsletterManagers;
use Symfony\Component\HttpFoundation\Request;
use App\Form\Models\NewslettersInscription;
use App\Form\Type\NewslettersInscriptionType;
use App\Helper\Utils;
use App\Services\MetaTag;
class NewslettersController extends EntityUsingController {
private $unm;
public const DESINSCRI = "desinscrit";
public function __construct(MetaTag $metaTag, UtilisateursNewsletterManagers $unm) {
$this->metaTag = $metaTag;
$this->unm = $unm;
}
public function inscriptionNewsletters(Request $request, $codePays, UtilisateursNewsletterManagers $unm) {
$metaTitle = "S'inscrire à la newsletter Fusacq | Actualités fusion-acquisition et reprise d'entreprise";
$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.";
$metaTag = $this->metaTag
->setTitle($metaTitle)
->setDescription($metaDescription);
$model = new NewslettersInscription();
// Récupérer l'email depuis l'URL si présent
$emailFromUrl = $request->query->get('email');
if ($emailFromUrl) {
$model->mail = $emailFromUrl;
}
$form = $this->createForm(NewslettersInscriptionType::class, $model, [
'action' => $this->generateUrl(
$request->attributes->get('_route'),
[
'codePays' => $codePays,
]
),
'method' => 'POST',
]);
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$data = $form->getData();
$unm->inscription($data);
$this->addFlash("success_inscri_news", "votre inscription a nos newsletters a bien ete prise en compte");
} else {
$this->addFlash("error_inscri_news", "votre inscription a nos newsletters a echoue");
}
}
return $this->render('newsletters/inscription_newsletters.html.twig', [
'controller_name' => 'FooterPageController', 'form' => $form->createView(),
'metaTag' => $metaTag,
]);
}
public function archiveNewslettersActu(Request $request, $codePays) {
return $this->render('newsletters/archive_newsletters_actu.html.twig', [
'controller_name' => 'FooterPageController'
]);
}
public function archiveNewslettersSocDiff(Request $request, $codePays) {
return $this->render('newsletters/archive_newsletters_socdiff.html.twig', [
'controller_name' => 'FooterPageController'
]);
}
public function archiveNewslettersOpp(Request $request, $codePays) {
return $this->render('newsletters/archive_newsletters_opp.html.twig', [
'controller_name' => 'FooterPageController'
]);
}
public function desinscriptionNewsletters(Request $request, $codePays, UtilisateursNewsletterManagers $unm) {
$em = $this->getDoctrine()->getManager();
$get = $request->query->all();
$email = $get["email"] ?? NULL;
$from = $get["from"] ?? NULL;
$id_pays = $get["id_pays"] ?? NULL;
$id_partenaire = $get["id_partenaire"] ?? NULL;
$labels = [
'actualite' => "Ne plus recevoir l'actualité hebdomadaire des fusions-acquisitions",
'societe_difficulte' => "Ne plus recevoir la sélection mensuelle des annonces de sociétés en difficulté",
'mailings_partenaires' => "Ne plus recevoir les mailings de partenaires FUSACQ",
'utilisateurs_recherchent' => "Ne plus recevoir la sélection hebdomadaire des annonces FUSACQ",
'mails_divers_fusacq' => "Ne plus recevoir les mailings d'information FUSACQ.",
'prestataire' => "Ne plus recevoir la newsletter Experts",
"news_fusacqbuzz_quotidienne" => "Ne plus recevoir la newsletter Fusacq Buzz quotidienne",
"news_fusacqbuzz_international" => "Ne plus recevoir la newsletter Fusacq Buzz international",
"info_fusacq_international" => "Ne plus recevoir la newsletter info fusacq international",
"synthese_hebdo_international" => "Ne plus recevoir la newsletter synthese hebdo international",
"selection_hebdo_international" => "Ne plus recevoir la newsletter selection hebdo international",
"optin_international" => "Ne plus recevoir la newsletter optin international",
"webinar" => "Ne plus recevoir les mailings concernant nos webinars",
];
if ($id_pays) {
if ($id_pays == "01") {
$labels["news_fusacqbuzz_international"] = $labels["news_fusacqbuzz_international"] . " (Canada)";
}
if ($id_pays == "41") {
$labels["news_fusacqbuzz_international"] = $labels["news_fusacqbuzz_international"] . " (Suisse)";
}
if ($id_pays == "32") {
$labels["news_fusacqbuzz_international"] = $labels["news_fusacqbuzz_international"] . " (Belgique)";
}
}
if (!empty($labels[$from])) {
$choices = [
$labels[$from] => 'partiel',
"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'
];
} else {
$choices = [
"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'
];
}
if ($id_partenaire) {
$partenaire = $em->getRepository(PartenairesOptin::class)->find($id_partenaire);
$choices = ["Se désabonner des mailings de notre partenaire : " . $partenaire->getNom() => "id_partenaire=" . $id_partenaire] + $choices;
}
$form = $this->createFormBuilder()
->add("email",
TextType::class,
[
'data' => $email ?? NULL,
"constraints" => [
new NotBlank(["message" => "ce champ est obligatoire"]),
new Assert\Email(["message" => "l'adresse mail saisie est invalide"])
]
]
)
->add("from", ChoiceType::class, [
'choices' => $choices,
'expanded' => true,
"data" => Utils::firstValInArray($choices),
'multiple' => false
])
->add('btn', SubmitType::class, [
'label' => "se désinscrire",
'attr' => ['class' => 'button-rond'],
])
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
$email = $data["email"];
$utilisateurNewsletter = $unm->getUtilisateur($email);
if ($utilisateurNewsletter) {
if (($data["from"] == "partiel") || (Utils::stringBeginWithSubString($data["from"], "id_partenaire"))) {
if ($from === "societe_difficulte") {
$utilisateurNewsletter->_set('societe_difficulte', self::DESINSCRI);
$utilisateurNewsletter->_set('newsletter_societe_difficulte', NULL);
}
if ($from === "prestataire") {
$utilisateurNewsletter->_set('newsletter_experts', NULL);
}
if ($from === "webinar") {
$utilisateurNewsletter->_set('mailings_webinars', NULL);
}
if ($from === "mailings_partenaires") {
$utilisateurNewsletter->_set('mailings_partenaires', NULL);
if ($id_partenaire) {
$optins_supprimes = $utilisateurNewsletter->_get("optins_supprimes");
$optins_supprimes = Utils::addItemToStringItems($id_partenaire, $optins_supprimes);
$utilisateurNewsletter->_set("optins_supprimes", $optins_supprimes);
}
}
if ($from === "utilisateurs_recherchent") {
$utilisateurNewsletter->_set('newsletter_opportunites', NULL);
}
if ($from === "mails_divers_fusacq") {
$utilisateurNewsletter->_set('mails_divers_fusacq', NULL);
}
if ($from === "info_fusacq_international") {
$utilisateurNewsletter->_set('info_fusacq', self::DESINSCRI);
}
if ($from === "synthese_hebdo_international") {
$utilisateurNewsletter->_set('synthese_hebdo', self::DESINSCRI);
}
if ($from === "selection_hebdo_international") {
$utilisateurNewsletter->_set('selection_hebdo', self::DESINSCRI);
}
if ($from === "optin_international") {
$utilisateurNewsletter->_set('optin', self::DESINSCRI);
}
if (in_array($from, ["news_fusacqbuzz_quotidienne", "news_fusacqbuzz_international"])) {
$utilisateurNewsletter = $unm->newsQuotidienneDesinscription($utilisateurNewsletter, $id_pays);
}
$utilisateurNewsletter = $unm->appendSuiviDesinscription($utilisateurNewsletter, $from, $id_pays, $id_partenaire);
} else {
$utilisateurNewsletter->_set('etat_utilisateur', self::DESINSCRI);
$utilisateurNewsletter->_set('societe_difficulte', self::DESINSCRI);
$utilisateurNewsletter->_set('newsletter_societe_difficulte', NULL);
$utilisateurNewsletter->_set('newsletter_experts', NULL);
$utilisateurNewsletter->_set('mailings_webinars', NULL);
$utilisateurNewsletter->_set('mailings_partenaires', NULL);
$utilisateurNewsletter->_set('newsletter_opportunites', NULL);
$utilisateurNewsletter->_set('mails_divers_fusacq', NULL);
$utilisateurNewsletter->_set('mailings_formations', NULL);
$utilisateurNewsletter->_set('newsletter_actualite', NULL);
$utilisateurNewsletter->_set('info_fusacq', self::DESINSCRI);
$utilisateurNewsletter->_set('synthese_hebdo', self::DESINSCRI);
$utilisateurNewsletter->_set('selection_hebdo', self::DESINSCRI);
$utilisateurNewsletter->_set('optin', self::DESINSCRI);
$utilisateurNewsletter = $unm->newsQuotidienneDesinscription($utilisateurNewsletter, "33");
$utilisateurNewsletter = $unm->newsQuotidienneDesinscription($utilisateurNewsletter, "32");
$utilisateurNewsletter = $unm->newsQuotidienneDesinscription($utilisateurNewsletter, "41");
$utilisateurNewsletter = $unm->newsQuotidienneDesinscription($utilisateurNewsletter, "01");
$utilisateurNewsletter = $unm->appendSuiviDesinscription($utilisateurNewsletter, "total", NULL, NULL);
}
$em->persist($utilisateurNewsletter);
$em->flush();
}
return $this->redirectToRoute('confirmation_desinscription_newsletters', ['codePays' => $codePays]);
}
return $this->render('newsletters/desinscription_newsletters.html.twig', [
'controller_name' => 'FooterPageController',
'form' => $form->createView()
]);
}
public function confirmationDesinscriptionNewsletters(Request $request, $codePays) {
return $this->render('newsletters/confirmation_desinscription_newsletters.html.twig', [
'controller_name' => 'FooterPageController',
]);
}
}