src/Controller/EliteController.php line 508

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. /**
  4.  * @author Mehrez Labidi
  5.  */
  6. namespace App\Controller;
  7. use App\Helper\{
  8.     Utils,
  9.     ParametersProvider
  10. };
  11. use App\Services\Annonces\Elites\AbstractConstCapital as EliteConst;
  12. use App\Services\Annonces\Elites\AbstractConstProfilsStrategiques as ProfilsConst;
  13. use App\Services\MetaTag;
  14. use App\Controller\EntityUsingController;
  15. use Symfony\Component\HttpFoundation\{
  16.     Request,
  17.     RequestStack,
  18.     Response
  19. };
  20. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  21. use App\Entity\{
  22.     RecherchesAvanceesElite,
  23.     DetailAnnonceCapitalImmateriel,
  24.     DetailAnnonceSyntheseStrategique,
  25.     Localisations
  26. };
  27. use App\Form\Type\Elite\RechercheAvanceeType;
  28. use App\Services\Annonces\Elites\{
  29.     RechercheAvancee,
  30.     RechercheStandard
  31. };
  32. use Symfony\Component\Security\Core\Exception\AccessDeniedException;
  33. use App\Services\ManagerEntity\DroitsAccesManagers;
  34. use Symfony\Component\Form\Extension\Core\Type\{
  35.     TextareaType,
  36.     TextType,
  37.     EmailType,
  38.     HiddenType,
  39.     SubmitType
  40. };
  41. use Symfony\Component\Validator\Constraints\{
  42.     NotBlank
  43. };
  44. use App\Validator\Constraints\Emoji;
  45. use Symfony\Component\Validator\Constraints as Assert;
  46. use EWZ\Bundle\RecaptchaBundle\Form\Type\EWZRecaptchaType;
  47. use App\Services\Mailer;
  48. use App\Services\ManagerEntity\{
  49.     AnnoncesManagers,
  50.     ServicesPrestataireManagers
  51. };
  52. use App\Services\LogMarketingProvider;
  53. use App\Services\Annonces\Elites\RechercheElite;
  54. /**
  55.  * Description of EliteController
  56.  *
  57.  * @author mehrez
  58.  */
  59. class EliteController extends EntityUsingController {
  60.     public const MAX_AGE 43200// 12heures
  61.     public function __construct(MetaTag $metaTagRechercheAvanceeType $rechercheAvanceeTypeRechercheAvancee $rechercheAvanceeRechercheStandard $rechercheStandardDroitsAccesManagers $damParameterBagInterface $paramsMailer $mailerAnnoncesManagers $amServicesPrestataireManagers $spmLogMarketingProvider $lmp) {
  62.         $this->metaTag $metaTag;
  63.         $this->rechercheAvancee $rechercheAvancee;
  64.         $this->rechercheAvanceeType $rechercheAvanceeType;
  65.         $this->rechercheStandard $rechercheStandard;
  66.         $this->dam $dam;
  67.         $this->mailer $mailer;
  68.         $this->am $am;
  69.         $this->spm $spm;
  70.         $this->dns_fusacq $params->get('app.DNS')['FUSACQ'];
  71.         $this->lmp $lmp;
  72.     }
  73.     public function presentationElite(Request $request$codePays): Response {
  74.         $metaTag $this->metaTag
  75.                 ->setTitle("FUSACQ Elite : l’offre premium pour les repreneurs d’entreprise exigeants")
  76.                 ->setDescription("FUSACQ Elite : analyse stratégique, matching avancé, capital immatériel… L’offre idéale pour les repreneurs exigeants.");
  77.         $nb $this->getDoctrine()
  78.                 ->getRepository(DetailAnnonceSyntheseStrategique::class)
  79.                 ->getNbTotal(); // nb total synthese generé  validé envoyé
  80.         $criteres = [
  81.             "positionnement" => array_filter(EliteConst::criteresPositionnement()),
  82.             "clientele" => array_filter(EliteConst::criteresClientele()),
  83.             "potentiel" => array_filter(EliteConst::criteresPotentiel())
  84.         ];
  85.         $stats $this->getDoctrine()->getRepository(DetailAnnonceCapitalImmateriel::class)->getCapitalImmaterielStats();
  86.         foreach ($criteres as $key => $value) {
  87.             foreach ($value as $k => $v) {
  88.                 if (in_array($karray_keys($stats))) {
  89.                     if ($stats[$k] == 0) { // ce cas est peu interessant
  90.                         continue; // ce cas est peu interessant
  91.                     }
  92.                     $v $v " (" $stats[$k] . ")";
  93.                 }
  94.                 $value[$k] = $v;
  95.             }
  96.             $criteres[$key] = $value;
  97.         }
  98.         $nbSyntheses = ($nb 0) ? str_split((string) $nb) : NULL;
  99.         $lienAnnonce '#';
  100.         $synthese $this->getDoctrine()
  101.                 ->getRepository(DetailAnnonceSyntheseStrategique::class)
  102.                 ->getDerniereAnnonceSyntheseGratuitAujourdhui(); // list synthese generé validé envoyé access gratuit
  103.         $idAnnonce = (!empty($synthese)) ? $synthese['id_annonce'] : NULL;
  104.         if ($idAnnonce) {
  105.             $annonce $this->am->getAnnonceVendeurArrayByIdAnnonce($idAnnonce);
  106.             if (!$annonce) {
  107.                 throw $this->createNotFoundException('No annonce  found for id ' $idAnnonce);
  108.             }
  109.             $lienAnnonce $this->generateUrl('reprendre_entreprise_details_annonce_vendeur', [
  110.                 'slug' => Utils::slugify($annonce['titre_annonce']),
  111.                 'nomLocalisation' => $annonce['nom_localisation_slug'],
  112.                 'idAnnonce' => $idAnnonce,
  113.                 'codePays' => $codePays
  114.             ]);
  115.         }
  116.         $response $this->render('elite/presentation_elite.html.twig', [
  117.             "metaTag" => $metaTag,
  118.             "criteres" => $criteres,
  119.             "lienAccesAnalyseGratuit" => $lienAnnonce,
  120.             "nbSyntheses" => $nbSyntheses
  121.         ]);
  122.         $response->setPublic();
  123.         $response->setMaxAge(self::MAX_AGE); // 12heures
  124.         return $response;
  125.     }
  126.     public function editRechercheAvancee(Request $request$codePays): Response {
  127.         $authentified = ($this->getUser()) ? true false;
  128.         $accesElite false;
  129.         if ($authentified) {
  130.             $accesElite $this->dam->checkIfThisUserHasDroitService($this->getUser(), RechercheElite::CODE_SERVICE); // ELITE
  131.         }
  132.         $form $this->createForm(RechercheAvanceeType::class, NULL, [
  133.             'method' => 'GET',
  134.             'csrf_protection' => false
  135.         ]);
  136.         $form->handleRequest($request);
  137.         if ($form->isSubmitted()) {
  138.             $data $request->query->all();
  139.             $criteres array_filter(explode(","$data['criteres']));
  140.             if (count($criteres) < RechercheAvancee::NB_MIN_CRITERES) {
  141.                 $this->get('session')->getFlashBag()->clear(); // Clear tous les flashbags
  142.                 $this->addFlash('error_recherche_elite'"Les critères ELITE sont obligatoires pour la recherche");
  143.                 return $this->redirectToRoute('elite_recherche_avancee', ["codePays" => $codePays]);
  144.             }
  145.             $queryParams array_filter($data, fn($item) => $item);
  146.             $queryParams['codePays'] = $codePays;
  147.             return $this->redirectToRoute('elite_list_recherche_avancee'$queryParams);
  148.         }
  149.         $metaTag $this->metaTag
  150.                 ->setTitle("Recherche avancée Annonces - Reprendre ou développer une entreprise | Fusacq")
  151.                 ->setDescription("Affinez votre recherche d'annonces pour reprendre ou développer une entreprise : sélection par localisation, secteur, situation financière, profil de repreneur et critères ELITE.");
  152.         $criteres EliteConst::getAllCriteres();
  153.         $recherches_sauvegardees $this->getDoctrine()->getRepository(RecherchesAvanceesElite::class)->getRecherchesAvanceesEliteByIdUtilisateur();
  154.         
  155.         $response $this->render('elite/recherche_avancee.html.twig', [
  156.             "metaTag" => $metaTag,
  157.             "recherches_sauvegardees" => $recherches_sauvegardees,
  158.             "criteres" => $criteres,
  159.             "authentified" => $authentified,
  160.             "accesElite" => $accesElite,
  161.             "form" => $form->createView()
  162.         ]);
  163.         $response->setPublic();
  164.         $response->setMaxAge(self::MAX_AGE); // 12heures
  165.         return $response;
  166.     }
  167.     public function rechercheAvancee(Request $request$codePays): Response {
  168.         $authentified = ($this->getUser()) ? true false;
  169.         $accesElite false;
  170.         if ($authentified) {
  171.             $accesElite $this->dam->checkIfThisUserHasDroitService($this->getUser(), RechercheElite::CODE_SERVICE); // ELITE
  172.         }
  173.         $form $this->createForm(RechercheAvanceeType::class, NULL, [
  174.             'method' => 'GET',
  175.             'csrf_protection' => false
  176.         ]);
  177.         $metaTag $this->metaTag
  178.                 ->setTitle("Recherche avancée Annonces - Reprendre ou développer une entreprise | Fusacq")
  179.                 ->setDescription("Affinez votre recherche d'annonces pour reprendre ou développer une entreprise : sélection par localisation, secteur, situation financière, profil de repreneur et critères ELITE.");
  180.         $criteres EliteConst::getAllCriteres();
  181.         $recherches_sauvegardees $this->getDoctrine()->getRepository(RecherchesAvanceesElite::class)->getRecherchesAvanceesEliteByIdUtilisateur();
  182.  
  183.         $response $this->render('elite/recherche_avancee.html.twig', [
  184.             "metaTag" => $metaTag,
  185.             "recherches_sauvegardees" => $recherches_sauvegardees,
  186.             "criteres" => $criteres,
  187.             "authentified" => $authentified,
  188.             "accesElite" => $accesElite,
  189.             "form" => $form->createView()
  190.         ]);
  191.         $response->setPublic();
  192.         $response->setMaxAge(self::MAX_AGE); // 12heures
  193.         $form->handleRequest($request);
  194.         if ($form->isSubmitted()) {
  195.             $data $request->query->all();
  196.             if (!empty($data['from'])) {// recherche depuis le compte ou mail alerte // juste le formulaire rempli à afficher !!
  197.                 return $response;
  198.             }
  199.             $criteres array_filter(explode(","$data['criteres']));
  200.             if (count($criteres) < RechercheAvancee::NB_MIN_CRITERES) {
  201.                 $this->get('session')->getFlashBag()->clear(); // Clear tous les flashbags
  202.                 $this->addFlash('error_recherche_elite'"Les critères ELITE sont obligatoires pour la recherche");
  203.                 return $this->redirectToRoute('elite_recherche_avancee', ["codePays" => $codePays]);
  204.             }
  205.             $queryParams array_filter($data, fn($item) => $item);
  206.             $queryParams['codePays'] = $codePays;
  207.             return $this->redirectToRoute('elite_list_recherche_avancee'$queryParams);
  208.         }
  209.         return $response;
  210.     }
  211.     public function listRechercheStandard(Request $request$codePays): Response {
  212.         ini_set('memory_limit''256M');
  213.         $this->denyAccessUnlessGranted('ROLE_USER'); //  page inaccessible sans authentification
  214.         $acces $this->dam->checkIfThisUserHasDroitService($this->getUser(), RechercheElite::CODE_SERVICE); // ELITE
  215.         if (!$acces) {
  216.             return $this->redirectToRoute('index', ['codePays' => Utils::codePaysWithoutDash($codePays)]);
  217.         }
  218.         $elite $this->dam->checkIfThisUserHasDroitService($this->getUser(), [RechercheElite::CODE_SERVICE_ELITE]); // on loggue par defaut ELITE
  219.         $userIdentity $this->getUser();
  220.         if ($elite) {
  221.             $this->lmp->ajouterActionLogsActions($userIdentity->_get('id_utilisateur'), RechercheElite::ID_LOG_ACTION_STANDARD$userIdentity->_get('type_utilisateur'), "----"); // 81  // elite  
  222.         } else {
  223.             $eliteEssai $this->dam->checkIfThisUserHasDroitService($this->getUser(), [RechercheElite::CODE_SERVICE_ELITE_ESSAI]);
  224.             if ($eliteEssai) {
  225.                 $this->lmp->ajouterActionLogsActions($userIdentity->_get('id_utilisateur'), RechercheElite::ID_LOG_ACTION_STANDARD_ESSAI$userIdentity->_get('type_utilisateur'), "----"); //82 // elite essai
  226.             }
  227.         }
  228.         $metaTag $this->metaTag
  229.                 ->setTitle("Recherche standard Annonces - Reprendre ou développer une entreprise | Fusacq")
  230.                 ->setDescription("Affinez votre recherche d'annonces pour reprendre ou développer une entreprise : sélection par localisation, secteur, situation financière  et profil d’entreprise.");
  231.         $filtres $request->query->all();
  232.         if (empty($filtres['identifiant_profil']) && !empty($filtres)) {
  233.             $this->get('session')->getFlashBag()->clear(); // Clear tous les flashbags
  234.             $this->addFlash('error_recherche_elite_standard'"Merci de sélectionner un profil stratégique");
  235.             return $this->redirectToRoute('elite_list_recherche_standard', ["codePays" => $codePays]);
  236.         }
  237.         $filtres Utils::filterArray($filtres);
  238.         $page max(1$request->query->getInt('page'1));
  239.         $limit RechercheElite::NB_ANNONCES;
  240.         $offset = ($page 1) * $limit;
  241.         // Ajouter l'offset aux filtres seulement si nécessaire
  242.         if ($page 1) {
  243.             $filtres['offset'] = $offset;
  244.         }
  245.         // Récupérer les annonces
  246.         $annonces $this->rechercheStandard->getAnnoncesResult($filtres);
  247.         // Calculer le total avec limite maximale
  248.         $totalAnnonces = !empty($annonces) ? min((int) RechercheElite::NB_TOTAL_RESULT, (int) Utils::firstValInArray($annonces)["total_count"]) : 0;
  249.         // Calculer le nombre total de pages
  250.         $totalPages $totalAnnonces ceil($totalAnnonces $limit) : 0;
  251.         // Ajuster la page si elle dépasse le maximum
  252.         if ($page $totalPages && $totalPages 0) {
  253.             $page $totalPages;
  254.             $offset = ($page 1) * $limit;
  255.             // Note : il faudrait probablement relancer la requête avec le bon offset ici
  256.         }
  257.         $profils ProfilsConst::listProfilsForm();
  258.         $pays $this->rechercheAvanceeType::listPays();
  259.         $secteurs $this->rechercheAvanceeType::getNomSecteurActivitieLevel1();
  260.         $params ParametersProvider::serializeParams($filtres);
  261.         $response $this->render('elite/list_recherche_standard.html.twig', [
  262.             "metaTag" => $metaTag,
  263.             "profils" => $profils,
  264.             "pays" => $pays,
  265.             "secteurs" => $secteurs,
  266.             "filtres" => $filtres,
  267.             "params" => $params,
  268.             "currentPage" => $page// pagination
  269.             "totalPages" => $totalPages// pagination
  270.             "totalAnnonces" => $totalAnnonces// pagination
  271.             "annonces" => $annonces ?? [] // pagination
  272.         ]);
  273.         $response->setPublic();
  274.         $response->setMaxAge(self::MAX_AGE); // 12heures
  275.         return $response;
  276.     }
  277.     public function formRechercheStandard(RequestStack $requestStack$lang$codePays): Response {
  278.         $request $requestStack->getMainRequest(); // Récupère la requête principale
  279.         $currentRoute $request->attributes->get('_route');
  280.         $routeParams $request->attributes->get('_route_params');
  281.         $pays $this->rechercheAvanceeType::listPays();
  282.         $secteurs $this->rechercheAvanceeType::getNomSecteurActivitieLevel1();
  283.         $filtres $request->query->all();
  284.         unset($filtres['_path']);
  285.         $filtres Utils::filterArray($filtres); // si vide pas de pb
  286.         $response $this->render('elite/form_recherche_standard.html.twig', [
  287.             "pays" => $pays,
  288.             "secteurs" => $secteurs,
  289.             "filtres" => $filtres,
  290.             'lang' => $lang,
  291.             'codePays' => $codePays,
  292.             'currentRoute' => $currentRoute,
  293.             'routeParams' => $routeParams,
  294.         ]);
  295.         $response->setPublic();
  296.         $response->setMaxAge(self::MAX_AGE); // 12heures
  297.         return $response;
  298.     }
  299.     public function listRechercheAvancee(Request $request$codePays): Response {
  300.         ini_set('memory_limit''256M');
  301.         $this->denyAccessUnlessGranted('ROLE_USER'); //  page inaccessible sans authentification
  302.         $acces $this->dam->checkIfThisUserHasDroitService($this->getUser(), RechercheElite::CODE_SERVICE); // ELITE
  303.         if (!$acces) {
  304.             return $this->redirectToRoute('index', ['codePays' => Utils::codePaysWithoutDash($codePays)]);
  305.         }
  306.         $elite $this->dam->checkIfThisUserHasDroitService($this->getUser(), [RechercheElite::CODE_SERVICE_ELITE]); // on loggue par defaut ELITE
  307.         $userIdentity $this->getUser();
  308.         if ($elite) {
  309.             $this->lmp->ajouterActionLogsActions($userIdentity->_get('id_utilisateur'), RechercheElite::ID_LOG_ACTION_AVANCEE$userIdentity->_get('type_utilisateur'), "----"); // 81  // elite  
  310.         } else {
  311.             $eliteEssai $this->dam->checkIfThisUserHasDroitService($this->getUser(), [RechercheElite::CODE_SERVICE_ELITE_ESSAI]);
  312.             if ($eliteEssai) {
  313.                 $this->lmp->ajouterActionLogsActions($userIdentity->_get('id_utilisateur'), RechercheElite::ID_LOG_ACTION_AVANCEE_ESSAI$userIdentity->_get('type_utilisateur'), "----"); //82 // elite essai
  314.             }
  315.         }
  316.         $filtres $request->query->all();
  317.         $page $request->query->getInt('page'1);
  318.         $page max(1$page);
  319.         unset($filtres['page']);
  320.         unset($filtres['recherche']);
  321.         unset($filtres['alerte']);
  322.         $annonces = (!empty($filtres)) ? $this->rechercheAvancee->getAnnoncesResult($filtres) : [];
  323.         $limit RechercheAvancee::NB_ANNONCES;
  324.         $offset = ($page 1) * $limit;
  325.         // Récupérer le nombre total pour la pagination
  326.         $totalAnnonces count($annonces);
  327.         $totalPages ceil($totalAnnonces $limit);
  328.         // Vérifier que la page demandée n'excède pas le nombre total de pages
  329.         if ($page $totalPages && $totalPages 0) {
  330.             $page $totalPages;
  331.             $offset = ($page 1) * $limit;
  332.         }
  333.  
  334.         $annonces array_slice($annonces,(int)$offset, (int)$limit);
  335.         $params ParametersProvider::serializeParams($filtres);
  336.         $metaTag $this->metaTag
  337.                 ->setTitle("Recherche avancée Annonces - Reprendre ou développer une entreprise | Fusacq")
  338.                 ->setDescription("Affinez votre recherche d'annonces pour reprendre ou développer une entreprise : sélection par localisation, secteur, situation financière, profil de repreneur et critères ELITE.");
  339.         $response $this->render('elite/list_recherche_avancee.html.twig', [
  340.             'metaTag' => $metaTag,
  341.             "params" => $params,
  342.             'currentPage' => $page// pagination
  343.             'totalPages' => $totalPages// pagination
  344.             "totalAnnonces" => $totalAnnonces// pagination
  345.             'annonces' => $annonces ?? [] // pagination
  346.         ]);
  347.         $response->setPublic();
  348.         $response->setMaxAge(self::MAX_AGE); // 12heures
  349.         return $response;
  350.     }
  351.     /**
  352.      * Supprime une recherche avancée sauvegardée par l'utilisateur connecté
  353.      *
  354.      * Cette méthode permet de supprimer une recherche avancée Elite préalablement
  355.      * sauvegardée par l'utilisateur authentifié. La suppression n'est effectuée que
  356.      * si la recherche appartient bien à l'utilisateur connecté.
  357.      *
  358.      * @param Request $request      L'objet Request de Symfony contenant les données de la requête HTTP
  359.      * @param int     $id_recherche L'identifiant unique de la recherche à supprimer
  360.      * @param string  $codePays     Le code pays utilisé pour la redirection après suppression
  361.      *
  362.      * @return Response Redirection vers la page de recherche avancée Elite avec le code pays
  363.      *
  364.      * @throws AccessDeniedException Si l'utilisateur n'est pas authentifié (ROLE_USER requis)
  365.      */
  366.     public function supprimerRecherche(Request $request$id_recherche$codePays): Response {
  367.         $this->denyAccessUnlessGranted('ROLE_USER'); //  page inaccessible sans authentification
  368.         $acces $this->dam->checkIfThisUserHasDroitService($this->getUser(), RechercheElite::CODE_SERVICE); // ELITE
  369.         if (!$acces) {
  370.             return $this->redirectToRoute('index', ['codePays' => Utils::codePaysWithoutDash($codePays)]);
  371.         }
  372.         $em $this->getDoctrine()->getManager();
  373.         $recherche $em->getRepository(RecherchesAvanceesElite::class)
  374.                 ->findOneBy(["id" => $id_recherche"id_utilisateur" => $this->getUser()->getId()]);
  375.         if ($recherche) {
  376.             $em->remove($recherche);
  377.             $em->flush();
  378.         }
  379.         return $this->redirectToRoute('elite_recherche_avancee', ["codePays" => $codePays]);
  380.     }
  381.     public function partager(Request $request$idAnnonce$codePays): Response {
  382.         $form $this->createFormBuilder(NULL, [
  383.                     'action' => $this->generateUrl('elite_partager_recherche_avancee', ['codePays' => $codePays'idAnnonce' => $idAnnonce]),
  384.                     'method' => 'POST',
  385.                     'attr' => ['novalidate' => 'novalidate'],
  386.                 ])
  387.                 ->add('id_annonce'HiddenType::class)
  388.                 ->add('email_destinataire'EmailType::class, ["constraints" => [new NotBlank(["message" => "le champ email est obligatoire"]), new Assert\Email(["message" => "l'adresse mail saisie est invalide"])]])
  389.                 ->add('email_expediteur'EmailType::class, ["constraints" => [new NotBlank(["message" => "le champ email est obligatoire"]), new Assert\Email(["message" => "l'adresse mail saisie est invalide"])]])
  390.                 ->add('nom_prenom'TextType::class, ["constraints" => [new NotBlank(["message" => "le champ prenom est obligatoire"])]])
  391.                 ->add('commentaire'TextareaType::class, ["required" => false"constraints" => [new Emoji()], "attr" => ["placeholder" => """autocomplete" => "off"]])
  392.                 ->add('submit'SubmitType::class, ['label' => 'envoyer''attr' => ['class' => 'button-rond']])
  393.                 ->add('recaptcha'EWZRecaptchaType::class, ['mapped' => false])
  394.                 ->getForm();
  395.         $form->handleRequest($request);
  396.         if ($form->isSubmitted() && $form->isValid()) {
  397.             $data $form->getData();
  398.             $annonce $this->am->getAnnonceVendeurArrayByIdAnnonce($idAnnonce);
  399.             $expertRandom $this->spm->getAnnonceVendeurRandomByLocalisation(Utils::getLocalisationPlusPrecisPossible($annonce['id_pays'], $annonce['id_region']));
  400.             $lienAnnonce $this->generateUrl('reprendre_entreprise_details_annonce_vendeur', [
  401.                 'slug' => Utils::slugify($annonce['titre_annonce']),
  402.                 'nomLocalisation' => $annonce['nom_localisation_slug'],
  403.                 'idAnnonce' => $idAnnonce,
  404.                 'codePays' => $codePays
  405.             ]);
  406.             $nomRegion '';
  407.             $localisationsFromDB $this->getDoctrine()->getManager()->getRepository(Localisations::class)->getNomLocalisationById(Utils::getLocalisationPlusPrecisPossible($annonce['id_pays'], $annonce['id_region']));
  408.             if (== count($localisationsFromDB)) { // si localisation departement+localisation pays alors on combine les deux
  409.                 $nomRegion $localisationsFromDB[1]['nom_localisation'] . ', ' $localisationsFromDB[0]['nom_localisation'];
  410.             }
  411.             if (== count($localisationsFromDB)) {
  412.                 $nomRegion $localisationsFromDB[0]['nom_localisation'];
  413.             }
  414.             $varTemplate = [
  415.                 'commentaire' => $data["commentaire"] ?? NULL,
  416.                 'nomRegion' => ($nomRegion) ? $nomRegion '',
  417.                 'nomPrenom' => $data["nom_prenom"] ?? NULL,
  418.                 'emailExpediteur' => $data["email_expediteur"] ?? NULL,
  419.                 'emailDestinataire' => $data["email_destinataire"] ?? NULL,
  420.                 'annonce' => $annonce ?? [],
  421.                 'expertRandom' => $expertRandom ?? [],
  422.                 'lang' => "fr",
  423.                 'typeAnnonce' => "V",
  424.                 'lienAnnonce' => $lienAnnonce,
  425.                 'dns_fusacq' => $this->dns_fusacq
  426.             ];
  427.             $subject "cette annonce sur Fusacq me semble intéressante";
  428.             $this->mailer->sendmail(
  429.                     Mailer::$senderAdress['notification'], $data['email_destinataire'], nullnull$subjectnullnull,
  430.                     'mails/templates/template_suggestion_FUSACQ.html.twig'$varTemplatenull
  431.             );
  432.             $this->get('session')->getFlashBag()->clear(); // Clear tous les flashbags
  433.             $this->addFlash('success_partage_annonce_elite'"votre message a bien été envoyé");
  434.             $currentUri $request->headers->get('referer');
  435.             return $this->redirect($currentUri);
  436.         }
  437.         $response $this->render(
  438.                 'elite/includes/partager.html.twig',
  439.                 [
  440.                     'codePays' => $codePays,
  441.                     'form' => $form->createView(),
  442.                     'idAnnonce' => $idAnnonce,
  443.                 ]
  444.         );
  445.         $response->setPublic();
  446.         $response->setMaxAge(self::MAX_AGE); // 12heures
  447.         return $response;
  448.     }
  449.     public function ongletAtoutLeviersNonAth(Request $request$codePays): Response 
  450.         $lienAnnonce '#';
  451.         $synthese $this->getDoctrine()
  452.                 ->getRepository(DetailAnnonceSyntheseStrategique::class)
  453.                 ->getDerniereAnnonceSyntheseGratuitAujourdhui(); // list synthese generé validé envoyé access gratuit
  454.         $idAnnonce = (!empty($synthese)) ? $synthese['id_annonce'] : NULL;
  455.         if ($idAnnonce) {
  456.             $annonce $this->am->getAnnonceVendeurArrayByIdAnnonce($idAnnonce);
  457.             if (!$annonce) {
  458.                 throw $this->createNotFoundException('No annonce  found for id ' $idAnnonce);
  459.             }
  460.             $lienAnnonce $this->generateUrl('reprendre_entreprise_details_annonce_vendeur', [
  461.                 'slug' => Utils::slugify($annonce['titre_annonce']),
  462.                 'nomLocalisation' => $annonce['nom_localisation_slug'],
  463.                 'idAnnonce' => $idAnnonce,
  464.                 'codePays' => $codePays
  465.             ]);
  466.         }
  467.         $response $this->render('reprendre_entreprise/fragments/detail_annonce_elite/onglet_atout_levier_non_auth.html.twig',
  468.                 [
  469.                     'controller_name' => 'EliteController',
  470.                     'lienAnnonce' => $lienAnnonce,
  471.                     'synthese'=>$synthese,
  472.                     'codePays' => $codePays
  473.                 ]
  474.         );
  475.         $response->setPublic();
  476.         $response->setMaxAge(self::MAX_AGE); // 12heures
  477.         return $response;
  478.     }
  479. }