src/Controller/FooterPageController.php line 173

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\RateLimiter\RateLimiterFactory;
  8. use App\Services\ContactPubFusacqExpert as ContactPubFusacqExpertService;
  9. use App\Form\Models\ContactPubFusacqExpert;
  10. use App\Form\Type\ContactPubFusacqExpertType;
  11. use App\Helper\Utils;
  12. use App\Services\{
  13.     Mailer,
  14.     TelephoneInternational
  15. };
  16. use App\Form\Models\{
  17.     ContactezNous,
  18.     Publicite,
  19.     DemandeInterm
  20. };
  21. use App\Form\Type\{
  22.     ContactezNousType,
  23.     PubliciteType,
  24.     DemandeIntermType
  25. };
  26. use App\Services\ContactezNous as ContactezNousService;
  27. use App\Services\ManagerEntity\{
  28.     PubliciteManagers,
  29.     QuestionsFrequentesManagers,
  30.     QuestionsSemaineManagers,
  31.     TemoignageManager
  32. };
  33. use Doctrine\ORM\EntityManagerInterface;
  34. use Exception;
  35. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  36. use Symfony\Component\HttpFoundation\{
  37.     Request,
  38.     Response
  39. };
  40. use App\Services\API\ClientAPI;
  41. use App\Services\MetaTag;
  42. use Psr\Log\LoggerInterface;
  43. class FooterPageController extends EntityUsingController {
  44.     public const MAX_AGE 43200// 12heures
  45.     /**
  46.      * @var EntityManagerInterface
  47.      */
  48.     private EntityManagerInterface $em;
  49.     /**
  50.      * @var QuestionsSemaineManagers
  51.      */
  52.     private QuestionsSemaineManagers $qsm;
  53.     /**
  54.      * @var TemoignageManager
  55.      */
  56.     private TemoignageManager $tm;
  57.     /**
  58.      * @var ParameterBagInterface
  59.      */
  60.     private ParameterBagInterface $params;
  61.     /**
  62.      * @var PubliciteManagers
  63.      */
  64.     private PubliciteManagers $publiciteManagers;
  65.     /**
  66.      * @var QuestionsFrequentesManagers
  67.      */
  68.     private QuestionsFrequentesManagers $qfm;
  69.     /**
  70.      * @var Mailer
  71.      */
  72.     private $mailer;
  73.     /**
  74.      * @var MetaTag
  75.      */
  76.     private $metaTag;
  77.     /**
  78.      * @var LoggerInterface
  79.      */
  80.     private $logger;
  81.     /**
  82.      * @param QuestionsSemaineManagers $qsm
  83.      */
  84.     public function __construct(
  85.             EntityManagerInterface $em,
  86.             QuestionsSemaineManagers $qsm,
  87.             TemoignageManager $tm,
  88.             QuestionsFrequentesManagers $qfm,
  89.             ParameterBagInterface $params,
  90.             PubliciteManagers $publiciteManagers,
  91.             Mailer $mailerMetaTag $metaTagLoggerInterface $logger
  92.     ) {
  93.         $this->em $em;
  94.         $this->qfm $qfm;
  95.         $this->qsm $qsm;
  96.         $this->tm $tm;
  97.         $this->params $params;
  98.         $this->mailer $mailer;
  99.         $this->publiciteManagers $publiciteManagers;
  100.         $this->metaTag $metaTag;
  101.         $this->logger $logger;
  102.     }
  103.     /**
  104.      * @return mixed
  105.      */
  106.     public function publicite(Request $request$codePays) {
  107.         $model = new Publicite();
  108.         $form $this->createForm(PubliciteType::class, $model, [
  109.             'action' => $this->generateUrl(
  110.                     $request->attributes->get('_route'),
  111.                     [
  112.                         'codePays' => $codePays
  113.                     ]
  114.             ),
  115.             'method' => 'POST',
  116.         ]);
  117.         $form->handleRequest($request);
  118.         if ($form->isSubmitted()) {
  119.             if ($form->isValid()) {
  120.                 $data $form->getData();
  121.                 $this->publiciteManagers->envoiMailDemandePublicite($data);
  122.                 $this->addFlash('success_pub_form'"Votre message a bien été envoyé.");
  123.             } else {
  124.                 $this->addFlash('error_pub_form'"L'envoi de votre  message a échoué");
  125.             }
  126.         }
  127.         $metaTitle "Publicité ciblée sur FUSACQ | Bannières & Emailing";
  128.         $metaDescription "Boostez votre visibilité sur FUSACQ : bannières publicitaires et emailing ciblés (secteur, zone géographique) pour atteindre acquéreurs, cédants et experts.";
  129.         $metaTag $this->metaTag
  130.                 ->setTitle($metaTitle)
  131.                 ->setDescription($metaDescription);
  132.         return $this->render('footer_page/publicite.html.twig', [
  133.                     'controller_name' => 'FooterPageController''form' => $form->createView(), 'metaTag' => $metaTag,
  134.         ]);
  135.     }
  136.     /**
  137.      * @return Response
  138.      */
  139.     public function quiSommeNous() {
  140.         $response $this->render('footer_page/qui_somme_nous.html.twig',
  141.                 [
  142.                     'controller_name' => 'FooterPageController',
  143.                 ]
  144.         );
  145.         $response->setPublic();
  146.         $response->setMaxAge(self::MAX_AGE); // 12heures
  147.         return $response;
  148.     }
  149.     /**
  150.      * @return Response
  151.      */
  152.     public function cgu() {
  153.         $response $this->render('footer_page/cgu.html.twig',
  154.                 [
  155.                     'controller_name' => 'FooterPageController',
  156.                 ]
  157.         );
  158.         $response->setPublic();
  159.         $response->setMaxAge(self::MAX_AGE); // 12heures
  160.         return $response;
  161.     }
  162.     /**
  163.      * @return Response
  164.      */
  165.     public function mentionsLegales() {
  166.         $response $this->render('footer_page/mentions_legales.html.twig',
  167.                 [
  168.                     'controller_name' => 'FooterPageController',
  169.                 ]
  170.         );
  171.         $response->setPublic();
  172.         $response->setMaxAge(self::MAX_AGE); // 12heures
  173.         return $response;
  174.     }
  175.     public function charteQualiteDeposant() {
  176.         $response $this->render('footer_page/charte_qualite_deposant.html.twig',
  177.                 [
  178.                     'controller_name' => 'FooterPageController'
  179.                 ]
  180.         );
  181.         $response->setPublic();
  182.         $response->setMaxAge(self::MAX_AGE); // 12heures
  183.         return $response;
  184.     }
  185.     /**
  186.      * @return Response
  187.      * @throws Exception
  188.      */
  189.     public function contact(Request $requestContactezNousService $contactezNousRateLimiterFactory $contactFormLimiter$codePays) {
  190.         $model = new ContactezNous();
  191.         $form $this->createForm(ContactezNousType::class, $model, [
  192.             'action' => $this->generateUrl(
  193.                     $request->attributes->get('_route'),
  194.                     [
  195.                         'codePays' => $codePays,
  196.                     ]
  197.             ),
  198.             'method' => 'POST',
  199.         ]);
  200.         $form->handleRequest($request);
  201.         if ($form->isSubmitted()) {
  202.             
  203.               // Vérifier le rate limit avant de traiter
  204.             $limiter $contactFormLimiter->create($request->getClientIp());
  205.             $limit $limiter->consume(1);
  206.              
  207.             // Si la limite est atteinte
  208.             if (false === $limit->isAccepted()) {
  209.                 // Calculer le temps d'attente en minutes
  210.                 $retryAfter $limit->getRetryAfter();
  211.                 $waitTime ceil(($retryAfter->getTimestamp() - time()) / 60);
  212.                 
  213.                 $this->addFlash('error'sprintf(
  214.                     'Vous avez atteint la limite de %d messages par heure. Veuillez réessayer dans %d minutes.',
  215.                     $limit->getLimit(),
  216.                     $waitTime
  217.                 ));
  218.                 
  219.                  return $this->redirectToRoute('contact', ['codePays' => $codePays]);
  220.             }
  221.             
  222.             
  223.             // ✅ Vérification du honeypot EN PREMIER
  224.             $honeypotWebsite $form->get('website')->getData();
  225.             $companyWebsite $form->get('company')->getData();
  226.             if (!empty($honeypotWebsite) || !empty($companyWebsite)) {
  227.                 // Spam détecté - on arrête tout de suite
  228.                 $this->logger->critical('Spam détecté via honeypot', [
  229.                     'ip' => $request->getClientIp(),
  230.                     'honeypot_value' => $honeypotWebsite $companyWebsite
  231.                 ]);
  232.                 $this->addFlash('success_contact_demande''Votre demande est bien envoyée');
  233.                 return $this->redirectToRoute('contact', ['codePays' => $codePays]);
  234.             }
  235.             if ($form->isValid() ) {
  236.                 $data $form->getData();
  237.                 $contactezNous->sendMailCreateQuestionUtilisateur($data);
  238.                 $this->addFlash('success_contact_demande''Votre demande est bien envoyée');
  239.             } else {
  240.                 $this->addFlash('error_contact_demande'"Votre demande n'est pas envoyée");
  241.             }
  242.         }
  243.         $metaTitle "Contactez Fusacq | Experts en Cession & Acquisition d'Entreprises";
  244.         $metaDescription "Besoin d'accompagnement pour votre projet de cession ou acquisition d'entreprise ? L'équipe Fusacq est à votre écoute. Contactez nos experts pour un accompagnement personnalisé.";
  245.         $metaTag $this->metaTag
  246.                 ->setTitle($metaTitle)
  247.                 ->setDescription($metaDescription);
  248.         return $this->render('footer_page/contact.html.twig', [
  249.                     'controller_name' => 'FooterPageController',
  250.                     'metaTag' => $metaTag,
  251.                     'form' => $form->createView()
  252.         ]);
  253.     }
  254.     /**
  255.      * @return Response
  256.      */
  257.     public function presse() {
  258.         $metaTitle "Espace Presse Fusacq | Communiqués et actualités fusions-acquisitions";
  259.         $metaDescription "Retrouvez tous les communiqués de presse et l'actualité de Fusacq, plateforme leader des fusions-acquisitions et de la transmission d'entreprise. Contacts presse et ressources média.";
  260.         $metaTag $this->metaTag
  261.                 ->setTitle($metaTitle)
  262.                 ->setDescription($metaDescription);
  263.         $response $this->render('footer_page/presse.html.twig',
  264.                 [
  265.                     'controller_name' => 'FooterPageController',
  266.                     'metaTag' => $metaTag,
  267.                 ]
  268.         );
  269.         $response->setPublic();
  270.         $response->setMaxAge(self::MAX_AGE); // 12heures
  271.         return $response;
  272.     }
  273.     public function evennements(ClientAPI $api$codePays) {
  274.         $events $api->getEvenement();
  275.         $metaTitle "Événements Fusacq | Agenda des rendez-vous fusions-acquisitions et reprise d'entreprise";
  276.         $metaDescription "Découvrez tous les événements Fusacq : conférences, webinaires et rencontres dédiés aux fusions-acquisitions, cession, reprise et transmission d'entreprise. Restez informé des prochains rendez-vous.";
  277.         $metaTag $this->metaTag
  278.                 ->setTitle($metaTitle)
  279.                 ->setDescription($metaDescription);
  280.         $response $this->render('footer_page/evennements.html.twig', [
  281.             "controller_name" => "FooterPageController",
  282.             'metaTag' => $metaTag,
  283.             "events" => $events
  284.         ]);
  285.         $response->setPublic();
  286.         $response->setMaxAge(self::MAX_AGE); // 12heures
  287.         return $response;
  288.     }
  289.     public function communiques() {
  290.         $response $this->render('footer_page/communiques.html.twig',
  291.                 [
  292.                     'controller_name' => 'FooterPageController'
  293.                 ]
  294.         );
  295.         $response->setPublic();
  296.         $response->setMaxAge(self::MAX_AGE); // 12heures
  297.         return $response;
  298.     }
  299.     /**
  300.      * @return Response
  301.      */
  302.     public function journalistes() {
  303.         $response $this->render('footer_page/journalistes.html.twig',
  304.                 [
  305.                     'controller_name' => 'FooterPageController',
  306.                 ]
  307.         );
  308.         $response->setPublic();
  309.         $response->setMaxAge(self::MAX_AGE); // 12heures
  310.         return $response;
  311.     }
  312.     /**
  313.      * @return Response
  314.      */
  315.     public function questionsFrequentes() {
  316.         $questions $this->qfm->getAllQuestionsReponses();
  317.         return $this->render('footer_page/questions_frequentes.html.twig', [
  318.                     'controller_name' => 'FooterPageController',
  319.                     'questions' => $questions,
  320.         ]);
  321.     }
  322.     /**
  323.      * @return Response
  324.      * @throws Exception
  325.      */
  326.     public function questionLaSemaine() {
  327.         $questions $this->qsm->getAllQuestionsPublique();
  328.         $metaTitle "Les questions FUSACQ sur la reprise d'entreprise";
  329.         $metaDescription "Les questions FUSACQ sur la reprise d'entreprise";
  330.         $metaTag $this->metaTag
  331.                 ->setTitle($metaTitle)
  332.                 ->setDescription($metaDescription);
  333.         return $this->render('footer_page/question_semaine.html.twig', [
  334.                     'controller_name' => 'FooterPageController',
  335.                     'questions' => $questions'metaTag' => $metaTag,
  336.         ]);
  337.     }
  338.     public function getDetailsQuestion($id) {
  339.         if (!$id) {
  340.             throw $this->createNotFoundException('No Question found for id ' $id);
  341.         }
  342.         
  343.         // Incrémenter le compteur de consultations
  344.         try {
  345.             $this->qsm->incrementConsultations((int)$id);
  346.         } catch (\Exception $e) {
  347.             $this->logger->warning('Impossible d\'incrémenter le compteur de consultations', [
  348.                 'question_id' => $id,
  349.                 'error' => $e->getMessage(),
  350.             ]);
  351.         }
  352.         
  353.         $question $this->qsm->getDetailsQuestion($id);
  354.         $metaTitle = (!empty($question[0])) ? $question[0]["question"] : "Les questions FUSACQ sur la reprise d'entreprise";
  355.         $metaDescription = (!empty($question[0])) ? $question[0]["question"] : "Les questions FUSACQ sur la reprise d'entreprise";
  356.         $metaTag $this->metaTag
  357.                 ->setTitle($metaTitle)
  358.                 ->setDescription($metaDescription);
  359.         return $this->render('footer_page/details_question.html.twig', [
  360.                     'controller_name' => 'FooterPageController',
  361.                     'question' => $question'metaTag' => $metaTag,
  362.         ]);
  363.     }
  364.     public function getQuestionResultats(Request $request$id) {
  365.         if (!$id) {
  366.             throw $this->createNotFoundException('No Question found for id ' $id);
  367.         }
  368.         
  369.         // Incrémenter le compteur de consultations (même si l'utilisateur répond ou non)
  370.         try {
  371.             $this->qsm->incrementConsultations((int)$id);
  372.         } catch (\Exception $e) {
  373.             $this->logger->warning('Impossible d\'incrémenter le compteur de consultations', [
  374.                 'question_id' => $id,
  375.                 'error' => $e->getMessage(),
  376.             ]);
  377.         }
  378.         
  379.         if ($request->isMethod('post')) {
  380.             $idReponse $request->get('reponse');
  381.             if (!isset($idReponse)) {
  382.                 throw $this->createNotFoundException('No reponse found for id ' $idReponse);
  383.             }
  384.             $this->qsm->insererNouvelleReponse($idReponse);
  385.         }
  386.         $question $this->qsm->getDetailsQuestion($id);
  387.         $resultats $this->qsm->getSumNBReponsesByIdQuestion($id);
  388.         $metaTitle = (!empty($question[0])) ? "Résultat de la question : " $question[0]["question"] : "Les questions FUSACQ sur la reprise d'entreprise";
  389.         $metaDescription = (!empty($question[0])) ? "Résultat de la question : " $question[0]["question"] : "Les questions FUSACQ sur la reprise d'entreprise";
  390.         $metaTag $this->metaTag
  391.                 ->setTitle($metaTitle)
  392.                 ->setDescription($metaDescription);
  393.         return $this->render('footer_page/question_resultats.html.twig', [
  394.                     'controller_name' => 'FooterPageController',
  395.                     'question' => $question'resultats' => $resultats'metaTag' => $metaTag,
  396.         ]);
  397.     }
  398.     /**
  399.      * @return Response
  400.      */
  401.     public function temoignages() {
  402.         $tIntermediaires $this->tm->getTemoignagesIntermediaires();
  403.         $tCedants $this->tm->getTemoignagesCedants();
  404.         $tRepreneurs $this->tm->getTemoignagesRepreneurs();
  405.         return $this->render('footer_page/temoignages.html.twig', [
  406.                     'controller_name' => 'FooterPageController',
  407.                     'tIntermediaires' => $tIntermediaires,
  408.                     'tCedants' => $tCedants,
  409.                     'tRepreneurs' => $tRepreneurs,
  410.         ]);
  411.     }
  412.     /**
  413.      * @param $id
  414.      * @return mixed
  415.      * @throws Exception
  416.      */
  417.     public function temoignageDetails($id) {
  418.         if (!$id) {
  419.             throw $this->createNotFoundException('No Temoignage found for id ' $id);
  420.         }
  421.         $temoignage $this->tm->getTemoignageDetails($id);
  422.         $previous $this->tm->getTemoignagePrecedantMemeCategorie($id$temoignage['profil']);
  423.         $next $this->tm->getTemoignageSuivantMemeCategorie($id$temoignage['profil']);
  424.         return $this->render('footer_page/temoignage_details.html.twig', [
  425.                     'controller_name' => 'FooterPageController',
  426.                     'temoignage' => $temoignage,
  427.                     'previous' => $previous'next' => $next
  428.         ]);
  429.     }
  430.     /**
  431.      * @return Response
  432.      */
  433.     public function premiereVisite() {
  434.         $metaTitle "Reprise d'entreprise, Vente d'entreprise, Transmission d'entreprise, Premiére visite sur Fusacq";
  435.         $metaDescription "Premiére visite sur Fusacq, place de marché Reprise d'entreprise, 2000 annonces de cession d'entreprise, transmission d'entreprise, acquisition d'entreprise, vente et reprise d'entreprise";
  436.         $metaTag $this->metaTag
  437.                 ->setTitle($metaTitle)
  438.                 ->setDescription($metaDescription);
  439.         $response $this->render('footer_page/premiere_visite.html.twig',
  440.                 [
  441.                     'controller_name' => 'FooterPageController',
  442.                     'metaTag' => $metaTag,
  443.                 ]
  444.         );
  445.         $response->setPublic();
  446.         $response->setMaxAge(self::MAX_AGE); // 12heures
  447.         return $response;
  448.     }
  449.     /**
  450.      * @param Request $request
  451.      * @param $codePays
  452.      * @return Response
  453.      */
  454.     public function demandeInterm(Request $request$codePaysTelephoneInternational $telephoneInternational) {
  455.         $model = new DemandeInterm();
  456.         $form $this->createForm(DemandeIntermType::class, $model, [
  457.             'action' => $this->generateUrl(
  458.                     $request->attributes->get('_route'),
  459.                     [
  460.                         'codePays' => $codePays,
  461.                     ]
  462.             ),
  463.             'method' => 'POST',
  464.         ]);
  465.         $form->handleRequest($request);
  466.         if ($form->isSubmitted()) {
  467.             if ($form->isValid()) {
  468.                 $data $form->getData();
  469.                 $prenom Utils::reformatNomPrenom($data->prenom"prenom");
  470.                 $nom Utils::reformatNomPrenom($data->nom"nom");
  471.                 $indicatif $data->indicatif;
  472.                 $telephone $data->telephone;
  473.                 $subject "Demande d'intermediation, question d'un utilisateur";
  474.                 $telephoneInternational $telephoneInternational->getInternationalPhone($telephone$indicatif)['affichage'];
  475.                 $varTemplate = [
  476.                     'prenom' => $prenom,
  477.                     'nom' => $nom,
  478.                     'telephone' => $telephoneInternational,
  479.                     'mail' => $data->email,
  480.                     'projet_cession' => $data->projet_cession,
  481.                     'annee_creation' => $data->annee_creation,
  482.                     'ca' => $data->ca,
  483.                     'resutltat_net' => $data->resutltat_net,
  484.                     'nb_collaborateurs' => $data->nb_collaborateurs
  485.                 ];
  486.                 $this->mailer->sendmail(
  487.                         Mailer::$senderAdress['notification'],
  488.                         Mailer::$receiverAdress['mail_damien'],
  489.                         null,
  490.                         null,
  491.                         $subject,
  492.                         null,
  493.                         null,
  494.                         'mails/templates/demande_interm.html.twig',
  495.                         $varTemplate,
  496.                         null
  497.                 );
  498.                 $this->addFlash('success_demande_interm'"la demande est envoyée avec succès");
  499.             } else {
  500.                 $this->addFlash('error_demande_interm'"lenvoi de la demande a échoué");
  501.             }
  502.         }
  503.         return $this->render('footer_page/premiere_visite_vous_etes/demande_interm.html.twig', [
  504.                     'controller_name' => 'FooterPageController''form' => $form->createView(),
  505.         ]);
  506.     }
  507.     /**
  508.      * @return Response
  509.      */
  510.     public function vousEtesInvestisseur() {
  511.         $metaTitle "Reprise d'entreprise, Vente d'entreprise, Transmission d'entreprise, Premiére visite sur Fusacq";
  512.         $metaDescription "Premiére visite sur Fusacq, place de marché Reprise d'entreprise, 2000 annonces de cession d'entreprise, transmission d'entreprise, acquisition d'entreprise, vente et reprise d'entreprise";
  513.         $metaTag $this->metaTag
  514.                 ->setTitle($metaTitle)
  515.                 ->setDescription($metaDescription);
  516.         $response $this->render('footer_page/premiere_visite_vous_etes/vous_etes_investisseur.html.twig',
  517.                 [
  518.                     'controller_name' => 'FooterPageController''metaTag' => $metaTag,
  519.                 ]
  520.         );
  521.         $response->setPublic();
  522.         $response->setMaxAge(self::MAX_AGE); // 12heures
  523.         return $response;
  524.     }
  525.     public function vousEtesCedant() {
  526.         $metaTitle "Reprise d'entreprise, Vente d'entreprise, Transmission d'entreprise, Premiére visite sur Fusacq";
  527.         $metaDescription "Premiére visite sur Fusacq, place de marché Reprise d'entreprise, 2000 annonces de cession d'entreprise, transmission d'entreprise, acquisition d'entreprise, vente et reprise d'entreprise";
  528.         $metaTag $this->metaTag
  529.                 ->setTitle($metaTitle)
  530.                 ->setDescription($metaDescription);
  531.         $response $this->render('footer_page/premiere_visite_vous_etes/vous_etes_cedant.html.twig',
  532.                 [
  533.                     'controller_name' => 'FooterPageController''metaTag' => $metaTag,
  534.                 ]
  535.         );
  536.         $response->setPublic();
  537.         $response->setMaxAge(self::MAX_AGE); // 12heures
  538.         return $response;
  539.     }
  540.     public function vousEtesAcquereur() {
  541.         $metaTitle "Reprise d'entreprise, Vente d'entreprise, Transmission d'entreprise, Premiére visite sur Fusacq";
  542.         $metaDescription "Premiére visite sur Fusacq, place de marché Reprise d'entreprise, 2000 annonces de cession d'entreprise, transmission d'entreprise, acquisition d'entreprise, vente et reprise d'entreprise";
  543.         $metaTag $this->metaTag
  544.                 ->setTitle($metaTitle)
  545.                 ->setDescription($metaDescription);
  546.         $response $this->render('footer_page/premiere_visite_vous_etes/vous_etes_acquereur.html.twig',
  547.                 [
  548.                     'controller_name' => 'FooterPageController''metaTag' => $metaTag,
  549.                 ]
  550.         );
  551.         $response->setPublic();
  552.         $response->setMaxAge(self::MAX_AGE); // 12heures
  553.         return $response;
  554.     }
  555.     public function vousEtesExpert(Request $requestContactPubFusacqExpertService $contactPubFusacqExpert$codePays) {
  556.         $model = new ContactPubFusacqExpert();
  557.         $form $this->createForm(ContactPubFusacqExpertType::class, $model, [
  558.             'action' => $this->generateUrl(
  559.                     'vous_etes_expert',
  560.                     [
  561.                         'codePays' => $codePays,
  562.                     ]
  563.             ),
  564.             'method' => 'POST',
  565.         ]);
  566.         $form->handleRequest($request);
  567.         if ($form->isSubmitted()) {
  568.             if ($form->isValid()) {
  569.                 $data $form->getData();
  570.                 $response $contactPubFusacqExpert->sendMail($data);
  571.                 if ($response) {
  572.                     $this->addFlash('success'"votre message est bien envoye");
  573.                 } else {
  574.                     $this->addFlash('error'"l'envoi de votre message a echoue");
  575.                 }
  576.             } else {
  577.                 $this->addFlash('error'"l'envoi de votre message a echoue");
  578.             }
  579.         }
  580.         $metaTitle "Reprise d'entreprise, Vente d'entreprise, Transmission d'entreprise, Premiére visite sur Fusacq";
  581.         $metaDescription "Premiére visite sur Fusacq, place de marché Reprise d'entreprise, 2000 annonces de cession d'entreprise, transmission d'entreprise, acquisition d'entreprise, vente et reprise d'entreprise";
  582.         $metaTag $this->metaTag
  583.                 ->setTitle($metaTitle)
  584.                 ->setDescription($metaDescription);
  585.         $response $this->render('footer_page/premiere_visite_vous_etes/vous_etes_expert.html.twig',
  586.                 [
  587.                     'controller_name' => 'FooterPageController',
  588.                     'codePays' => $codePays'metaTag' => $metaTag,
  589.                     'form' => $form->createView()
  590.                 ]
  591.         );
  592.         $response->setPublic();
  593.         $response->setMaxAge(self::MAX_AGE); // 12heures
  594.         return $response;
  595.     }
  596.     /**
  597.      * @return mixed
  598.      */
  599.     public function ouvrages() {
  600.         $response $this->render('footer_page/ouvrages.html.twig',
  601.                 [
  602.                     'controller_name' => 'FooterPageController',
  603.                 ]
  604.         );
  605.         $response->setPublic();
  606.         $response->setMaxAge(self::MAX_AGE); // 12heures
  607.         return $response;
  608.     }
  609.     /**
  610.      * @return Response
  611.      */
  612.     public function plan() {
  613.         $response $this->render('footer_page/plan.html.twig',
  614.                 [
  615.                     'controller_name' => 'FooterPageController'
  616.                 ]
  617.         );
  618.         $response->setPublic();
  619.         $response->setMaxAge(self::MAX_AGE); // 12heures
  620.         return $response;
  621.     }
  622.     /**
  623.      * Affiche la page de politique de confidentialité.
  624.      * 
  625.      * Cette méthode génère la page de confidentialité avec les méta-informations optimisées
  626.      * pour le SEO et met en place un cache public avec une durée de validité définie.
  627.      * 
  628.      * @return Response La réponse HTTP contenant la page de confidentialité rendue
  629.      *                  avec un cache public d'une durée de 12 heures.
  630.      */
  631.     public function confidentialite() {
  632.         $metaTitle "Politique de Confidentialité | Protégez vos données personnelles";
  633.         $metaDescription "Découvrez notre politique de confidentialité transparente. Apprenez comment nous protégeons vos données personnelles, vos droits d'accès et nos engagements pour assurer la sécurité de vos informations.";
  634.         $metaTag $this->metaTag
  635.                 ->setTitle($metaTitle)
  636.                 ->setDescription($metaDescription);
  637.         $response $this->render('footer_page/confidentialite.html.twig',
  638.                 [
  639.                     'controller_name' => 'FooterPageController',
  640.                     'metaTag' => $metaTag,
  641.                 ]
  642.         );
  643.         $response->setPublic();
  644.         $response->setMaxAge(self::MAX_AGE); // 12heures
  645.         return $response;
  646.     }
  647. }