src/Controller/AnnuairesExpertsController.php line 606

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. /**
  4.  * @author Mehrez Labidi
  5.  */
  6. namespace App\Controller;
  7. use App\Services\MetaTag;
  8. use App\Form\Models\ContactezDirectementExperts;
  9. use App\Form\Type\{
  10.     ContactezDirectementExpertsType,
  11.     ContactezDirectementMembreExpertsType
  12. };
  13. use App\Helper\Utils;
  14. use App\Services\ManagerEntity\{
  15.     ActualitesManagers,
  16.     AnnuairesManagers,
  17.     ContactPrestataireManagers,
  18.     LocalisationsManagers,
  19.     SecteursActiviteManagers,
  20.     ServicesPrestataireManagers
  21. };
  22. use App\Services\{
  23.     PaysAnnuaireExperts,
  24.     TelephoneInternational
  25. };
  26. use Knp\Component\Pager\PaginatorInterface;
  27. use Symfony\Component\Form\Extension\Core\Type\TextType;
  28. use Symfony\Component\Form\Forms;
  29. use Symfony\Component\HttpFoundation\{
  30.     Request,
  31.     Response
  32. };
  33. use App\Twig\TranslationExtension;
  34. use App\Entity\Villes;
  35. use Doctrine\ORM\EntityManagerInterface;
  36. use App\Entity\StatistiquesMensuellesPrestataire;
  37. use App\Helper\FiltresValidatorTrait// validation des filtres
  38. class AnnuairesExpertsController extends EntityUsingController {
  39.     use FiltresValidatorTrait;
  40.     public const SEARCH_WORD "searchWord";
  41.     public const ID_PAYS "id_pays";
  42.     public const ID_REGION "id_region";
  43.     public const MOTS_CLES "mots_cles";
  44.     public const TRI "tri";
  45.     public const TYPE_SOCIETE "type_societe";
  46.     public const TYPE_OPERATION "type_operation";
  47.     public const MESSAGE_SUCCESS "Votre message est bien evoyé à l'expert";
  48.     public const MESSAGE_FAIL "L'envoi de de votre message  à l'expert a échoué ";
  49.     public const FLASH_KEY_SUCCESS 'success';
  50.     public const FLASH_KEY_FAIL 'fail';
  51.     public const ID_LOCALISATION "id_localisation";
  52.     public const NOM_LOCALISATION "nom_localisation";
  53.     /**
  54.      * @var \App\Services\ManagerEntity\AnnuairesManagers
  55.      */
  56.     private $am;
  57.     /**
  58.      * @var \App\Controller\SecteursActiviteManagers
  59.      */
  60.     private $sam;
  61.     /**
  62.      * @var TelephoneInternational
  63.      */
  64.     private $ti;
  65.     /**
  66.      * @var ActualitesManagers
  67.      */
  68.     private $acm;
  69.     /**
  70.      * @var ContactPrestataireManagers
  71.      */
  72.     private $cpm;
  73.     /**
  74.      * @var ServicesPrestataireManagers
  75.      */
  76.     private $spm;
  77.     /**
  78.      * @var LocalisationsManagers
  79.      */
  80.     private $lm;
  81.     /**
  82.      * @var MetaTag
  83.      */
  84.     private $metaTag;
  85.     /**
  86.      * @var EntityManagerInterface
  87.      */
  88.     private $em;
  89.     /**
  90.      * @param AnnuairesManagers $am
  91.      * @param SecteursActiviteManagers $sam
  92.      * @param ActualitesManagers $acm
  93.      * @param TelephoneInternational $ti
  94.      * @param ContactPrestataireManagers $cpm
  95.      * @param ServicesPrestataireManagers $spm
  96.      */
  97.     public function __construct(LocalisationsManagers $lmAnnuairesManagers $amSecteursActiviteManagers $samActualitesManagers $acmTelephoneInternational $tiContactPrestataireManagers $cpmServicesPrestataireManagers $spmEntityManagerInterface $emMetaTag $metaTag) {
  98.         $this->acm $acm;
  99.         $this->am $am;
  100.         $this->sam $sam;
  101.         $this->ti $ti;
  102.         $this->cpm $cpm;
  103.         $this->spm $spm;
  104.         $this->lm $lm;
  105.         $this->metaTag $metaTag;
  106.         $this->em $em;
  107.     }
  108.     public function presentation(Request $request$codePays): Response {
  109.         return $this->render(
  110.                         'annuaires/experts/presentation.html.twig',
  111.                         [
  112.                             'controller_name' => 'AnnuairesExpertsController',
  113.                         ]
  114.                 );
  115.     }
  116.     /**
  117.      * @param $codePays
  118.      */
  119.     public function expertsRecherche(Request $request$codePays): Response {
  120.         $formFactory Forms::createFormFactoryBuilder()->getFormFactory();
  121.         $form $formFactory->createBuilder()
  122.                 ->add(self::SEARCH_WORDTextType::class)
  123.                 ->add(self::ID_PAYSTextType::class)
  124.                 ->add(self::ID_REGIONTextType::class)
  125.                 ->setAction($this->generateUrl('annuaires_experts_recherche', ['codePays' => $codePays]))
  126.                 ->setMethod('GET')
  127.                 ->getForm();
  128.         $searchWord $request->query->get('form')[self::SEARCH_WORD];
  129.         if ($searchWord) {
  130.             $searchWord trim($searchWord);
  131.         }
  132.         $idPays = (isset($request->query->get('form')[self::ID_PAYS])) ? $request->query->get('form')[self::ID_PAYS] : null;
  133.         $idRegion = (isset($request->query->get('form')[self::ID_REGION])) ? $request->query->get('form')[self::ID_REGION] : null;
  134.         $filter = [
  135.             self::SEARCH_WORD => $searchWord,
  136.             self::ID_PAYS => $idPays,
  137.             self::ID_REGION => $idRegion,
  138.         ];
  139.         // Validation structurelle des filtres
  140.         $this->validateFilters($filter);
  141.         $categories $this->am->rechercheExpertsList1($request$filter);
  142.         $experts $this->am->rechercheExpertsList2($request$filter);
  143.         return $this->render(
  144.                         'annuaires/experts/experts_recherche.html.twig',
  145.                         ['controller_name' => 'AnnuairesExpertsController',
  146.                             'categories' => $categories,
  147.                             'experts' => $experts,
  148.                             'form' => $form->createView(),
  149.                         ]
  150.                 );
  151.     }
  152.     /**
  153.      * @return \Symfony\Component\HttpFoundation\Response
  154.      */
  155.     public function index(Request $request$codePays) {
  156.         $formFactory Forms::createFormFactoryBuilder()->getFormFactory();
  157.         $form $formFactory->createBuilder()
  158.                 ->add(self::SEARCH_WORDTextType::class)
  159.                 ->add(self::ID_PAYSTextType::class)
  160.                 ->add(self::ID_REGIONTextType::class)
  161.                 ->setAction($this->generateUrl('annuaires_experts_recherche', ['codePays' => $codePays]))
  162.                 ->setMethod('GET')
  163.                 ->getForm();
  164.         $searchWord = ($request->query->get('form')) ? $request->query->get('form')[self::SEARCH_WORD] : null;
  165.         if ($searchWord) {
  166.             $searchWord trim($searchWord);
  167.         }
  168.         $idPays = (isset($request->query->get('form')[self::ID_PAYS])) ? $request->query->get('form')[self::ID_PAYS] : null;
  169.         $idRegion = (isset($request->query->get('form')[self::ID_REGION])) ? $request->query->get('form')[self::ID_REGION] : null;
  170.         $filter = [
  171.             self::SEARCH_WORD => $searchWord,
  172.             self::ID_PAYS => $idPays,
  173.             self::ID_REGION => $idRegion,
  174.         ];
  175.         // Validation structurelle des filtres
  176.         $this->validateFilters($filter);
  177.         $categories $this->am->rechercheExpertsList1($request$filter);
  178.         $dernieresPrestationsReferencees $this->am->getDernieresPrestationsReferencees();
  179.         $dernieresPrestationsReferenceesSimple $this->am->getDernieresPrestationsReferenceesSimple();
  180.         return $this->render(
  181.                         'annuaires/experts/index.html.twig',
  182.                         ['controller_name' => 'AnnuairesExpertsController',
  183.                             'categories' => $categories"NbDernieresPrestationsReferencees" => count($dernieresPrestationsReferenceesSimple),
  184.                             'dernieresPrestationsReferencees' => $dernieresPrestationsReferencees,
  185.                             'form' => $form->createView(),
  186.                         ]
  187.                 );
  188.     }
  189.     /**
  190.      * @param $codePays
  191.      * @param $lang
  192.      * @return mixed
  193.      */
  194.     public function expertsRechercheSecteur(Request $requestPaginatorInterface $paginator$codePays$lang) {
  195.         $formFactory Forms::createFormFactoryBuilder()->getFormFactory();
  196.         $form $formFactory->createBuilder()
  197.                 ->add(self::MOTS_CLESTextType::class)
  198.                 ->add(self::ID_PAYSTextType::class)
  199.                 ->add(self::ID_REGIONTextType::class)
  200.                 ->add(self::TYPE_SOCIETETextType::class)
  201.                 ->add(self::TYPE_OPERATIONTextType::class)
  202.                 ->setAction($this->generateUrl(
  203.                                 'annuaires_experts_recherche_secteur',
  204.                                 [
  205.                                     'codePays' => $codePays,
  206.                                     'lang' => $lang,
  207.                                 ]
  208.                         ))
  209.                 ->setMethod('GET')
  210.                 ->getForm();
  211.         $motsCle = ($request->query->get(self::MOTS_CLES) !== null) ? $request->query->get(self::MOTS_CLES) : NULL;
  212.         if ($motsCle) {
  213.             $motsCle trim($motsCle);
  214.         }
  215.         $idPays = ($request->query->get(self::ID_PAYS) !== null) ? $request->query->get(self::ID_PAYS) : NULL;
  216.         $idRegion = ($request->query->get(self::ID_REGION) !== null) ? $request->query->get(self::ID_REGION) : NULL;
  217.         $typeSociete = ($request->query->get(self::TYPE_SOCIETE) !== null) ? $request->query->get(self::TYPE_SOCIETE) : NULL;
  218.         $typeOperation = ($request->query->get(self::TYPE_OPERATION) !== null) ? $request->query->get(self::TYPE_OPERATION) : NULL;
  219.         $tri = ($request->query->get(self::TRI) !== null) ? $request->query->get(self::TRI) : NULL;
  220.         $filter = [
  221.             'motsCle' => $motsCle,
  222.             self::ID_PAYS => $idPays,
  223.             self::ID_REGION => $idRegion,
  224.             self::TYPE_SOCIETE => $typeSociete,
  225.             self::TYPE_OPERATION => $typeOperation,
  226.             self::TRI => $tri,
  227.         ];
  228.         // Validation structurelle des filtres
  229.         $this->validateFilters($filter);
  230.         $filter array_filter($filter); // if empty
  231.         if (count($filter) > 0) {
  232.             $idLocalisation = ($idRegion) ? $idRegion $idPays;
  233.             $experts $this->am->getListExpertsBySecteurActiviteLocalisation($request$paginator$idLocalisation$typeSociete$typeOperation$motsCle$tri);
  234.             $nbAllExperts $this->am->getNbExpertsBySecteurActiviteLocalisation($request$idLocalisation$typeSociete$typeOperation$motsCle);
  235.             return $this->render(
  236.                             'annuaires/experts/resultats_experts_recherche_secteur.html.twig',
  237.                             [
  238.                                 'controller_name' => 'AnnuairesExpertsController',
  239.                                 'experts' => $experts'nbAllExperts' => $nbAllExperts,
  240.                             ]
  241.                     );
  242.         }
  243.         return $this->render(
  244.                         'annuaires/experts/fragments/experts_recherche_secteur.html.twig',
  245.                         [
  246.                             'controller_name' => 'AnnuairesExpertsController',
  247.                             'lang' => $lang,
  248.                             'form' => $form->createView(),
  249.                         ]
  250.                 );
  251.     }
  252.     /**
  253.      * @param $codePays
  254.      * @return mixed
  255.      * @throws \Exception
  256.      */
  257.     public function dernieresPrestationsReferenceesFusacq(Request $request$codePays) {
  258.         $dernieresPrestationsReferencees $this->am->getDernieresPrestationsReferencees(20);
  259.         return $this->render(
  260.                         'annuaires/experts/dernieres_prestations_referencees_sur_fusacq.html.twig',
  261.                         [
  262.                             'dernieresPrestationsReferencees' => $dernieresPrestationsReferencees,
  263.                             'controller_name' => 'AnnuairesExpertsController',
  264.                         ]
  265.                 );
  266.     }
  267.     /**
  268.      * @param $idServicePrestataire
  269.      * @param $codePays
  270.      * @return mixed
  271.      * @throws \Exception
  272.      */
  273.     public function ficheActiviteExpertFusacq(Request $requestTranslationExtension $translationExtension$idServicePrestataire$codePays) {
  274.         if (!$idServicePrestataire) {
  275.             throw $this->createNotFoundException('No Expert  found for id ' $idServicePrestataire);
  276.         }
  277.         $prestation $this->spm->getDetailServicesPrestataireById($idServicePrestataire$this->ti);
  278.         if (!$prestation) {
  279.             throw $this->createNotFoundException('No Expert  found for id ' $idServicePrestataire);
  280.         }
  281.         if ($prestation["statut"] != 'publique' && $prestation["statut"] != 'publique_temporaire') {
  282.             $this->addFlash('error_prestataire_introuvable''La prestation n’existe pas ou a été supprimée');
  283.             return $this->redirectToRoute('annuaires_experts_index', ['codePays' => $codePays]);
  284.         }
  285.         $stas $this->em->getRepository(StatistiquesMensuellesPrestataire::class)->findOneBy(array("id_service_prestataire" => $idServicePrestataire"date_mois" => date("Ym")));
  286.         if (empty($stas)) {
  287.             $stas = new StatistiquesMensuellesPrestataire();
  288.             $stas->_set("id_service_prestataire"$idServicePrestataire);
  289.             $stas->_set("date_mois"date("Ym"));
  290.             $stas->_set("nb_affichages_fiche"1);
  291.             $this->em->persist($stas);
  292.             $this->em->flush();
  293.         } else {
  294.             $stas->_set("nb_affichages_fiche"$stas->_get("nb_affichages_fiche") + 1);
  295.             $this->em->persist($stas);
  296.             $this->em->flush();
  297.         }
  298.         $equipes $this->am->getMembresEquipeExpert($prestation['id_service_prestataire'], $prestation['id_societe_prestataire']);
  299.         $blogs $this->acm->getLesDerniersTroisBlogsExperts($prestation['id_service_prestataire'], $prestation['id_societe_prestataire'], date('YmdHis'), NULLnull);
  300.         $model = new ContactezDirectementExperts();
  301.         $model->_set('id_service_prestataire'$idServicePrestataire);
  302.         $currentRoute $request->attributes->get('_route');
  303.         $form $this->createForm(ContactezDirectementExpertsType::class, $model, [
  304.             'action' => $this->generateUrl(
  305.                     $currentRoute,
  306.                     [
  307.                         'codePays' => $codePays,
  308.                         'titreslug' => Utils::slugify($prestation['titre_service']),
  309.                         'idServicePrestataire' => $idServicePrestataire,
  310.                     ]
  311.             ),
  312.             'method' => 'POST',
  313.         ]);
  314.         $form->handleRequest($request);
  315.         if ($form->isSubmitted()) {
  316.             if ($form->isValid()) {
  317.                 $data $form->getData();
  318.                 $this->cpm->contacterSocietePrestataire((array) $data);
  319.                 $this->addFlash(self::FLASH_KEY_SUCCESSself::MESSAGE_SUCCESS);
  320.             } else {
  321.                 $this->addFlash(self::FLASH_KEY_FAILself::MESSAGE_FAIL);
  322.             }
  323.         }
  324.         $lang $request->getSession()->get('lang');
  325.         $arrayVarsTrans["nom_commercial_societe"] = $prestation['nom_commercial_societe'];
  326.         $arrayVarsTrans["nomSecteur"] = $this->spm->getNomSecteurActiviteById($prestation['id_secteur_new']);
  327.         $arrayVarsTrans["nomLocalisation"] = $prestation['ville'];
  328.         $metaTitle str_replace(['%$nom_commercial_societe%$''%$nomSecteur%$''%$nomLocalisation%$'], [$arrayVarsTrans["nom_commercial_societe"], $arrayVarsTrans["nomSecteur"], $arrayVarsTrans["nomLocalisation"]], '%$nom_commercial_societe%$, %$nomSecteur%$, %$nomLocalisation%$');
  329.         $metaDescription str_replace(['%$nom_commercial_societe%$''%$nomSecteur%$''%$nomLocalisation%$'], [$arrayVarsTrans["nom_commercial_societe"], $arrayVarsTrans["nomSecteur"], $arrayVarsTrans["nomLocalisation"]], 'découvrez %$nom_commercial_societe%$, %$nomSecteur%$, %$nomLocalisation%$');
  330.         $metaTag $this->metaTag
  331.                 ->setTitle($metaTitle)
  332.                 ->setDescription($metaDescription);
  333.         return $this->render('annuaires/experts/fiche_activite.html.twig', [
  334.                     'metaTag' => $metaTag,
  335.                     'controller_name' => 'AnnuairesExpertsController''prestation' => $prestation,
  336.                     'equipes' => $equipes'blogs' => $blogs,
  337.                     'form' => $form->createView(),
  338.         ]);
  339.     }
  340.     /**
  341.      * @param $idMembre
  342.      * @param $idServicePrestataire
  343.      * @param $codePays
  344.      * @return mixed
  345.      * @throws \Exception
  346.      */
  347.     public function ficheExpertDetail(Request $request$idMembre$idServicePrestataire$codePays) {
  348.         if (!$idMembre) {
  349.             throw $this->createNotFoundException('No membre  found for id ' $idMembre);
  350.         }
  351.         if (!$idServicePrestataire) {
  352.             throw $this->createNotFoundException('No ServicePrestataire  found for id ' $idMembre);
  353.         }
  354.         $prestation $this->spm->getDetailServicesPrestataireById($idServicePrestataire$this->ti);
  355.         if ($prestation["statut"] != 'publique' && $prestation["statut"] != 'publique_temporaire') {
  356.             $this->addFlash('error_prestataire_introuvable''La prestation n’existe pas ou a été supprimée');
  357.             return $this->redirectToRoute('annuaires_experts_index', ['codePays' => $codePays]);
  358.         }
  359.         $equipes $this->am->getMembresEquipeExpert($prestation['id_service_prestataire'], $prestation['id_societe_prestataire']);
  360.         $blogs $this->acm->getLesDerniersTroisBlogsExperts($prestation['id_service_prestataire'], $prestation['id_societe_prestataire'], date('YmdHis'), NULLnull);
  361.         $membre $this->am->getUnMembreEquipeExpert($idMembre);
  362.         $operations $this->acm->getlisteOperationsFromMember($idMembre);
  363.         $lienExpertPrecedant $lienExpertSuivant null// les liens vides si pas d'expert
  364.         foreach ($equipes as $i => $memb) {
  365.             if ($idMembre == $memb['id_membre']) { // le membre  courant
  366.                 if (array_key_exists($i 1$equipes)) { // le precedant de sa liste
  367.                     $lienExpertPrecedant $this->generateUrl(
  368.                             $request->attributes->get('_route'), // la route courante , on veut la garder
  369.                             ['codePays' => $codePays'idMembre' => $equipes[$i 1]['id_membre'], 'idServicePrestataire' => $idServicePrestataire'reecriture_url' => $equipes[$i 1]['reecriture_url']]
  370.                     );
  371.                 }
  372.                 if (array_key_exists($i 1$equipes)) { // le suivant de sa liste
  373.                     $lienExpertSuivant $this->generateUrl(
  374.                             $request->attributes->get('_route'), // la route courante , on veut la garder
  375.                             ['codePays' => $codePays'idMembre' => $equipes[$i 1]['id_membre'], 'idServicePrestataire' => $idServicePrestataire'reecriture_url' => $equipes[$i 1]['reecriture_url']]
  376.                     );
  377.                 }
  378.             }
  379.         }
  380.         $currentRoute $request->attributes->get('_route');
  381.         $form $this->createForm(ContactezDirectementMembreExpertsType::class, [
  382.             'id_membre' => $idMembre,
  383.             'id_service_prestataire' => $idServicePrestataire
  384.                 ], [
  385.             'action' => $this->generateUrl(
  386.                     $currentRoute,
  387.                     [
  388.                         'codePays' => $codePays'idMembre' => $idMembre,
  389.                         'reecriture_url' => Utils::slugify($prestation['titre_service']),
  390.                         'idServicePrestataire' => $idServicePrestataire,
  391.                     ]
  392.             ),
  393.             'method' => 'POST',
  394.         ]);
  395.         $form->handleRequest($request);
  396.         if ($form->isSubmitted()) {
  397.             if ($form->isValid()) {
  398.                 $data $form->getData();
  399.                 $this->cpm->contacterMembreEquipePrestataire((array) $data);
  400.                 $this->addFlash(self::FLASH_KEY_SUCCESSself::MESSAGE_SUCCESS);
  401.             } else {
  402.                 $this->addFlash(self::FLASH_KEY_FAILself::MESSAGE_FAIL);
  403.             }
  404.         }
  405.         $metaTitle $membre["prenom"] . " " $membre["nom"] . ", " $membre["raison_sociale"];
  406.         $metaDescription $membre["prenom"] . " " $membre["nom"] . ", " $membre["fonction"] . " " $membre["raison_sociale"];
  407.         $metaTag $this->metaTag
  408.                 ->setTitle($metaTitle)
  409.                 ->setDescription($metaDescription);
  410.         return $this->render('annuaires/experts/fiche_expert_detail.html.twig', [
  411.                     'controller_name' => 'AnnuairesExpertsController',
  412.                     'membre' => $membre'form' => $form->createView(), 'metaTag' => $metaTag,
  413.                     'prestation' => $prestation'equipes' => $equipes'blogs' => $blogs'operations' => $operations,
  414.                     'lienExpertSuivant' => $lienExpertSuivant'lienExpertPrecedant' => $lienExpertPrecedant,
  415.         ]);
  416.     }
  417.     /**
  418.      * @param $idServicePrestataire
  419.      * @param $codePays
  420.      * @return mixed
  421.      * @throws \Exception
  422.      */
  423.     public function ficheEquipeExpertFusacq(Request $requestTranslationExtension $translationExtension$idServicePrestataire$codePays) {
  424.         if (!$idServicePrestataire) {
  425.             throw $this->createNotFoundException('No Expert  found for id ' $idServicePrestataire);
  426.         }
  427.         $prestation $this->spm->getDetailServicesPrestataireById($idServicePrestataire$this->ti);
  428.         if ($prestation["statut"] != 'publique' && $prestation["statut"] != 'publique_temporaire') {
  429.             $this->addFlash('error_prestataire_introuvable''La prestation n’existe pas ou a été supprimée');
  430.             return $this->redirectToRoute('annuaires_experts_index', ['codePays' => $codePays]);
  431.         }
  432.         $equipes $this->am->getMembresEquipeExpert($prestation['id_service_prestataire'], $prestation['id_societe_prestataire']);
  433.         $blogs $this->acm->getLesDerniersTroisBlogsExperts($prestation['id_service_prestataire'], $prestation['id_societe_prestataire'], date('YmdHis'), NULLnull);
  434.         $model = new ContactezDirectementExperts();
  435.         $model->_set('id_service_prestataire'$idServicePrestataire);
  436.         $currentRoute $request->attributes->get('_route');
  437.         $form $this->createForm(ContactezDirectementExpertsType::class, $model, [
  438.             'action' => $this->generateUrl(
  439.                     $currentRoute,
  440.                     [
  441.                         'codePays' => $codePays,
  442.                         'titreslug' => Utils::slugify($prestation['titre_service']),
  443.                         'idServicePrestataire' => $idServicePrestataire,
  444.                     ]
  445.             ),
  446.             'method' => 'POST',
  447.         ]);
  448.         $form->handleRequest($request);
  449.         if ($form->isSubmitted()) {
  450.             if ($form->isValid()) {
  451.                 $data $form->getData();
  452.                 $this->cpm->contacterSocietePrestataire((array) $data);
  453.                 $this->addFlash(self::FLASH_KEY_SUCCESSself::MESSAGE_SUCCESS);
  454.             } else {
  455.                 $this->addFlash(self::FLASH_KEY_FAILself::MESSAGE_FAIL);
  456.             }
  457.         }
  458.         $lang $request->getSession()->get('lang');
  459.         $arrayVarsTrans["nom_commercial_societe"] = $prestation['nom_commercial_societe'];
  460.         $arrayVarsTrans["nomSecteur"] = $this->spm->getNomSecteurActiviteById($prestation['id_secteur_new']);
  461.         $arrayVarsTrans["nomLocalisation"] = $prestation['ville'];
  462.         $metaTitle str_replace(['%$nom_commercial_societe%$''%$nomSecteur%$''%$nomLocalisation%$'], [$arrayVarsTrans["nom_commercial_societe"], $arrayVarsTrans["nomSecteur"], $arrayVarsTrans["nomLocalisation"]], 'Equipe %$nom_commercial_societe%$, %$nomSecteur%$, %$nomLocalisation%$');
  463.         $metaDescription str_replace(['%$nom_commercial_societe%$''%$nomSecteur%$''%$nomLocalisation%$'], [$arrayVarsTrans["nom_commercial_societe"], $arrayVarsTrans["nomSecteur"], $arrayVarsTrans["nomLocalisation"]], 'découvrez l\'équipe %$nom_commercial_societe%$, %$nomSecteur%$, %$nomLocalisation%$');
  464.         $metaTag $this->metaTag
  465.                 ->setTitle($metaTitle)
  466.                 ->setDescription($metaDescription);
  467.         return $this->render('annuaires/experts/fiche_equipe.html.twig', [
  468.                     'metaTag' => $metaTag,
  469.                     'controller_name' => 'AnnuairesExpertsController''form' => $form->createView(),
  470.                     'prestation' => $prestation'equipes' => $equipes'blogs' => $blogs,
  471.         ]);
  472.     }
  473.     /**
  474.      * @param $idServicePrestataire
  475.      * @param $codePays
  476.      * @return mixed
  477.      * @throws \Exception
  478.      */
  479.     public function ficheBlogExpertFusacq(Request $requestTranslationExtension $translationExtension$idServicePrestataire$codePays) {
  480.         if (!$idServicePrestataire) {
  481.             throw $this->createNotFoundException('No Expert  found for id ' $idServicePrestataire);
  482.         }
  483.         $prestation $this->spm->getDetailServicesPrestataireById($idServicePrestataire$this->ti);
  484.         if ($prestation["statut"] != 'publique' && $prestation["statut"] != 'publique_temporaire') {
  485.             $this->addFlash('error_prestataire_introuvable''La prestation n’existe pas ou a été supprimée');
  486.             return $this->redirectToRoute('annuaires_experts_index', ['codePays' => $codePays]);
  487.         }
  488.         $equipes $this->am->getMembresEquipeExpert($prestation['id_service_prestataire'], $prestation['id_societe_prestataire']);
  489.         $blogs $this->acm->getLesDerniersTroisBlogsExperts($prestation['id_service_prestataire'], $prestation['id_societe_prestataire'], date('YmdHis'), NULLnull);
  490.         $model = new ContactezDirectementExperts();
  491.         $model->_set('id_service_prestataire'$idServicePrestataire);
  492.         $currentRoute $request->attributes->get('_route');
  493.         $form $this->createForm(ContactezDirectementExpertsType::class, $model, [
  494.             'action' => $this->generateUrl(
  495.                     $currentRoute,
  496.                     [
  497.                         'codePays' => $codePays,
  498.                         'titreslug' => Utils::slugify($prestation['titre_service']),
  499.                         'idServicePrestataire' => $idServicePrestataire,
  500.                     ]
  501.             ),
  502.             'method' => 'POST',
  503.         ]);
  504.         $form->handleRequest($request);
  505.         if ($form->isSubmitted()) {
  506.             if ($form->isValid()) {
  507.                 $data $form->getData();
  508.                 $this->cpm->contacterSocietePrestataire((array) $data);
  509.                 $this->addFlash(self::FLASH_KEY_SUCCESSself::MESSAGE_SUCCESS);
  510.             } else {
  511.                 $this->addFlash(self::FLASH_KEY_FAILself::MESSAGE_FAIL);
  512.             }
  513.         }
  514.         $lang $request->getSession()->get('lang');
  515.         $arrayVarsTrans["nom_commercial_societe"] = $prestation['nom_commercial_societe'];
  516.         $arrayVarsTrans["nomSecteur"] = $this->spm->getNomSecteurActiviteById($prestation['id_secteur_new']);
  517.         $arrayVarsTrans["nomLocalisation"] = $prestation['ville'];
  518.         $metaTitle str_replace(['%$nom_commercial_societe%$''%$nomSecteur%$''%$nomLocalisation%$'], [$arrayVarsTrans["nom_commercial_societe"], $arrayVarsTrans["nomSecteur"], $arrayVarsTrans["nomLocalisation"]], 'Actualité %$nom_commercial_societe%$, %$nomSecteur%$, %$nomLocalisation%$');
  519.         $metaDescription str_replace(['%$nom_commercial_societe%$''%$nomSecteur%$''%$nomLocalisation%$'], [$arrayVarsTrans["nom_commercial_societe"], $arrayVarsTrans["nomSecteur"], $arrayVarsTrans["nomLocalisation"]], 'découvrez l\'actualité %$nom_commercial_societe%$, %$nomSecteur%$, %$nomLocalisation%$');
  520.         $metaTag $this->metaTag
  521.                 ->setTitle($metaTitle)
  522.                 ->setDescription($metaDescription);
  523.         return $this->render('annuaires/experts/fiche_blog.html.twig', [
  524.                     'metaTag' => $metaTag,
  525.                     'controller_name' => 'AnnuairesExpertsController''form' => $form->createView(),
  526.                     'prestation' => $prestation'equipes' => $equipes'blogs' => $blogs,
  527.         ]);
  528.     }
  529.     /**
  530.      * @param $lang
  531.      * @param $currentRouteParams
  532.      * @param $idPaysPrestataire
  533.      * @param $idLocalisationPrestataire
  534.      * @param $codePays
  535.      * @return mixed
  536.      */
  537.     public function fileAriane($lang$currentRouteParams$idPaysPrestataire$idLocalisationPrestataire$codePays) {
  538.         if (!$currentRouteParams['idServicePrestataire']) {
  539.             throw $this->createNotFoundException('No Expert  found for id ' $currentRouteParams['idServicePrestataire']);
  540.         }
  541.         $idServicePrestataire $currentRouteParams['idServicePrestataire'];
  542.         if (!$idServicePrestataire) {
  543.             throw $this->createNotFoundException('No Expert  found for id ' $idServicePrestataire);
  544.         }
  545.         $prestation $this->spm->getDetailServicesPrestataireById($idServicePrestataire$this->ti); // idServicePrestataire verifié deja depuis la ligne 299
  546.         if ($prestation["statut"] != 'publique' && $prestation["statut"] != 'publique_temporaire') {
  547.             $this->addFlash('error_prestataire_introuvable''La prestation n’existe pas ou a été supprimée');
  548.             return $this->redirectToRoute('annuaires_experts_index', ['codePays' => $codePays]);
  549.         }
  550.         $nomMembre = (isset($currentRouteParams['idMembre'])) ? $this->am->getNomPrenomMembreById($currentRouteParams['idMembre']) : null;
  551.         $secteurs $this->am->getSecteursActivitePrestataireNewParListeId($this->am->getIdSecteurPointerVers($this->am->getIdSecteurNew($idServicePrestataire)));
  552.         $secteursSecondLevel $this->am->getSecteursActivitePrestataireNewParPointeVers($this->am->getIdSecteurNew($idServicePrestataire));
  553.         $response $this->render(
  554.                 'annuaires/experts/fragments/file_ariane_expert.html.twig',
  555.                 [
  556.                     'controller_name' => 'AnnuairesExpertsController',
  557.                     'codePaysWithUnderScore' => $codePays,
  558.                     'secteurs' => $secteurs'secteursSecondLevel' => $secteursSecondLevel,
  559.                     'idServicePrestataire' => $idServicePrestataire'idLocalisationPrestataire' => $idLocalisationPrestataire'idPaysPrestataire' => $idPaysPrestataire,
  560.                     'lang' => $lang,
  561.                     'nomMembre' => $nomMembre'prestation' => $prestation,
  562.                 ]
  563.         );
  564.         $response->setPublic();
  565.         $response->setMaxAge(43200); // 12heures
  566.         return $response;
  567.     }
  568.     /**
  569.      * @param $id_secteur_activite
  570.      * @return mixed
  571.      */
  572.     public function repriseCessionCreationFranchise($id_secteur_activite) {
  573.         $secteurs $this->spm->getSecteursPourAffichageRecherche($id_secteur_activite);
  574.         $metaTitle "Reprise, cession, création, franchise, Annuaire des experts FUSACQ";
  575.         $metaDescription "Trouver un expert en Reprise, cession, création, franchise dans l'annuaire des experts FUSACQ pour vous accompagner dans votre opération de création, reprise, cession ou développement de votre entreprise.";
  576.         $metaTag $this->metaTag
  577.                 ->setTitle($metaTitle)
  578.                 ->setDescription($metaDescription);
  579.         return $this->render('annuaires/experts/toutes_les_categories/reprise_cession_creation_franchise.html.twig', [
  580.                     'controller_name' => 'AnnuairesExpertsController''secteurs' => $secteurs'metaTag' => $metaTag,
  581.         ]);
  582.     }
  583.     /**
  584.      * @param $id_secteur_activite
  585.      * @return mixed
  586.      */
  587.     public function marketingVente($id_secteur_activite) {
  588.         $secteurs $this->spm->getSecteursPourAffichageRecherche($id_secteur_activite);
  589.         $metaTitle "Marketing & Vente, Annuaire des experts FUSACQ";
  590.         $metaDescription "Trouver un expert en Marketing Vente dans l'annuaire des experts FUSACQ pour vous accompagner dans votre opération de création, reprise, cession ou développement de votre entreprise.";
  591.         $metaTag $this->metaTag
  592.                 ->setTitle($metaTitle)
  593.                 ->setDescription($metaDescription);
  594.         return $this->render('annuaires/experts/toutes_les_categories/marketing_vente.html.twig', [
  595.                     'controller_name' => 'AnnuairesExpertsController''secteurs' => $secteurs'metaTag' => $metaTag,
  596.         ]);
  597.     }
  598.     /**
  599.      * @param $id_secteur_activite
  600.      * @return mixed
  601.      */
  602.     public function comptabiliteAuditFinancementAssurance($id_secteur_activite) {
  603.         $secteurs $this->spm->getSecteursPourAffichageRecherche($id_secteur_activite);
  604.         $metaTitle "Comptabilité, audit, financement, assurance, Annuaire des experts FUSACQ";
  605.         $metaDescription "Trouver un expert en Comptabilité, audit, financement, assurance dans l'annuaire des experts FUSACQ pour vous accompagner dans votre opération de création, reprise, cession ou développement de votre entreprise.";
  606.         $metaTag $this->metaTag
  607.                 ->setTitle($metaTitle)
  608.                 ->setDescription($metaDescription);
  609.         return $this->render('annuaires/experts/toutes_les_categories/comptabilite_audit_financement_assurance.html.twig', [
  610.                     'controller_name' => 'AnnuairesExpertsController''secteurs' => $secteurs'metaTag' => $metaTag,
  611.         ]);
  612.     }
  613.     /**
  614.      * @param $id_secteur_activite
  615.      * @return mixed
  616.      */
  617.     public function informatiqueBureautiqueTelecom($id_secteur_activite) {
  618.         $secteurs $this->spm->getSecteursPourAffichageRecherche($id_secteur_activite);
  619.         $metaTitle "Informatique / bureautique & Telecom, Annuaire des experts FUSACQ";
  620.         $metaDescription "Trouver un expert en Informatique, bureautique, télécom dans l'annuaire des experts FUSACQ pour vous accompagner dans votre opération de création, reprise, cession ou développement de votre entreprise.";
  621.         $metaTag $this->metaTag
  622.                 ->setTitle($metaTitle)
  623.                 ->setDescription($metaDescription);
  624.         return $this->render('annuaires/experts/toutes_les_categories/informatique_bureautique_telecom.html.twig', [
  625.                     'controller_name' => 'AnnuairesExpertsController''secteurs' => $secteurs'metaTag' => $metaTag,
  626.         ]);
  627.     }
  628.     /**
  629.      * @param $id_secteur_activite
  630.      * @return mixed
  631.      */
  632.     public function ressourcesHumaines($id_secteur_activite) {
  633.         $secteurs $this->spm->getSecteursPourAffichageRecherche($id_secteur_activite);
  634.         $metaTitle "Ressources Humaines, Annuaire des experts FUSACQ";
  635.         $metaDescription "Trouver un expert en Ressources Humaines dans l'annuaire des experts FUSACQ pour vous accompagner dans votre opération de création, reprise, cession ou développement de votre entreprise.";
  636.         $metaTag $this->metaTag
  637.                 ->setTitle($metaTitle)
  638.                 ->setDescription($metaDescription);
  639.         return $this->render('annuaires/experts/toutes_les_categories/ressources_humaines.html.twig', [
  640.                     'controller_name' => 'AnnuairesExpertsController''secteurs' => $secteurs'metaTag' => $metaTag,
  641.         ]);
  642.     }
  643.     /**
  644.      * @param $id_secteur_activite
  645.      * @return mixed
  646.      */
  647.     public function droitFiscalitePatrimoineImmobilier($id_secteur_activite) {
  648.         $secteurs $this->spm->getSecteursPourAffichageRecherche($id_secteur_activite);
  649.         $metaTitle "Droit, fiscalité, patrimoine, immobilier, Annuaire des experts FUSACQ";
  650.         $metaDescription "Trouver un expert en Droit, fiscalité, patrimoine, immobilier dans l'annuaire des experts FUSACQ pour vous accompagner dans votre opération de création, reprise, cession ou développement de votre entreprise.";
  651.         $metaTag $this->metaTag
  652.                 ->setTitle($metaTitle)
  653.                 ->setDescription($metaDescription);
  654.         return $this->render('annuaires/experts/toutes_les_categories/droit_fiscalite_patrimoine_immobilier.html.twig', [
  655.                     'controller_name' => 'AnnuairesExpertsController''secteurs' => $secteurs'metaTag' => $metaTag,
  656.         ]);
  657.     }
  658.     /**
  659.      * @param $id_secteur_activite
  660.      * @param PaysAnnuaireExperts $paysAnnuaireExperts
  661.      * @return mixed
  662.      */
  663.     public function listeSousCategoriesExperts(Request $request$id_secteur_activitePaysAnnuaireExperts $paysAnnuaireExperts$codePays) {
  664.         $idLocalisations $this->spm->getLocalisationServicePrestataireByIdSecteurActivite($id_secteur_activite);
  665.         if (Utils::idLocalisationArrayContainsOnlyIdPays($idLocalisations)) { // tous les id sont SANS précisions idregion/iddepartement
  666.             array_unique($idLocalisations);
  667.             $id_localisation end($idLocalisations);
  668.             $secteur $this->spm->getSecteursActivitePrestataireNewParListeId($id_secteur_activite);
  669.             $nom_secteur_activite Utils::slugify(array_column($secteur0)[0]);
  670.             if ($nom_secteur_activite && $id_localisation) {
  671.                 return $this->redirectToRoute(
  672.                                 'annuaires_experts_list_experts_localisation',
  673.                                 [
  674.                                     'id_secteur_activite' => $id_secteur_activite,
  675.                                     'nom_secteur_activite' => $nom_secteur_activite,
  676.                                     self::ID_LOCALISATION => $id_localisation,
  677.                                     self::NOM_LOCALISATION => $paysAnnuaireExperts->getPaysExpertByIdLocalisation($id_localisation)[0],
  678.                                     'codePays' => $codePays
  679.                                 ]
  680.                         );
  681.             }
  682.         }
  683.         $listPays $this->lm->extractListIdPaysFromIdlocalisation($idLocalisations); // list des pays qui ont des experts pour ce secteur activité
  684.         $secteur $this->spm->getSecteursActivitePrestataireNewParListeId($id_secteur_activite);
  685.         $id_pays $request->query->get('id_pays');
  686.         if (!isset($id_pays)) {
  687.             $id_pays $this->container->get("id_pays_by_code_pays")->getIdPaysByCodePays($codePays);
  688.         }
  689.         $listRegionsFrance = ($id_pays == "33") ? $this->listRegionsExpertsPays($listPays$idLocalisations$id_pays) : [];
  690.         $listRegionsBelgique = ($id_pays == "32") ? $this->listRegionsExpertsPays($listPays$idLocalisations$id_pays) : [];
  691.         $listRegionsSuisse = ($id_pays == "41") ? $this->listRegionsExpertsPays($listPays$idLocalisations$id_pays) : [];
  692.         $listRegionsCanada = ($id_pays == "01") ? $this->listRegionsExpertsPays($listPays$idLocalisations$id_pays) : [];
  693.         $listRegionsLuxembourg = ($id_pays == "352") ? $this->listRegionsExpertsPays($listPays$idLocalisations$id_pays) : [];
  694.         $listRegions array_merge($listRegionsFrance$listRegionsBelgique$listRegionsSuisse$listRegionsCanada$listRegionsLuxembourg);
  695.         $metaTitle Utils::firstValInArray($secteur)[0] . ", " Utils::firstValInArray($this->lm->getNomLocalisationById($id_pays)) ["nom_localisation"] . " FUSACQ";
  696.         $metaDescription Utils::firstValInArray($secteur)[0] . ", " Utils::firstValInArray($this->lm->getNomLocalisationById($id_pays)) ["nom_localisation"];
  697.         $metaTag $this->metaTag
  698.                 ->setTitle($metaTitle)
  699.                 ->setDescription($metaDescription);
  700.         return $this->render('annuaires/experts/liste_sous_categories_experts.html.twig', [
  701.                     'controller_name' => 'AnnuairesExpertsController''secteur' => $secteur"paysAnnuaireExperts" => $paysAnnuaireExperts->listPays(),
  702.                     'listRegionsFrance' => ($listRegionsFrance) ? $listRegionsFrance : [],
  703.                     'listRegionsBelgique' => ($listRegionsBelgique) ? $listRegionsBelgique : [],
  704.                     'listRegionsCanada' => ($listRegionsCanada) ? $listRegionsCanada : [],
  705.                     'listRegionsSuisse' => ($listRegionsSuisse) ? $listRegionsSuisse : [],
  706.                     'listRegionsLuxembourg' => ($listRegionsLuxembourg) ? $listRegionsLuxembourg : [],
  707.                     'listRegions' => $listRegions'metaTag' => $metaTag,
  708.                     "id_secteur_activite" => $id_secteur_activite"idLocalisations" => $idLocalisations"listPays" => $listPays
  709.         ]);
  710.     }
  711.     /**
  712.      * @param $listPays
  713.      * @param $idLocalisations
  714.      * @param $idpays
  715.      * @return array|null
  716.      */
  717.     private function listRegionsExpertsPays($listPays$idLocalisations$idpays) {
  718.         $listRegions = (in_array($idpays$listPays)) ? $this->lm->getRegionsEtLeursDepartement($idpays) : [];
  719.         foreach ($listRegions as $item => $region) {
  720.             $region["nb_experts_region"] = Utils::countNbIdLocalisationInArray($region[self::ID_LOCALISATION], $idLocalisationstrue);
  721.             $sum 0;
  722.             if (isset($region["departements"])) {
  723.                 foreach ($region["departements"] as $i => $departement) {
  724.                     $departement["nb_experts"] = Utils::countNbIdLocalisationInArray($departement[self::ID_LOCALISATION], $idLocalisations);
  725.                     $sum += $departement["nb_experts"];
  726.                     $region["departements"][$i] = $departement;
  727.                 }
  728.             }
  729.             $region["nb_experts_departements"] = $sum;
  730.             $listRegions[$item] = $region;
  731.         }
  732.         return $listRegions;
  733.     }
  734.     /**
  735.      * @param $id_secteur_activite
  736.      * @param $id_localisation
  737.      * @return mixed
  738.      */
  739.     public function listExpertsLocalisation(Request $requestTranslationExtension $translationExtension$id_secteur_activite$id_localisation) {
  740.         $secteurs $this->am->getSecteursActivitePrestataireNewParListeId($id_secteur_activite);
  741.         $experts $this->spm->getListServicePrestataireByIdSecteurActiviteByLocalisation($id_secteur_activite$id_localisation);
  742.         $nomLocalisationWithPrefix $this->lm->getNomLocalisationWithPrefixById($id_localisation);
  743.         if ((Utils::lastValInArray($nomLocalisationWithPrefix)) && (Utils::lastValInArray($nomLocalisationWithPrefix)[self::NOM_LOCALISATION])) {
  744.             $nomLocalisationWithPrefix Utils::lastValInArray($nomLocalisationWithPrefix)[self::NOM_LOCALISATION];
  745.         }
  746.         $nomLocalisation $this->lm->getNomLocalisationById($id_localisation);
  747.         $nomLocalisation end($nomLocalisation)[self::NOM_LOCALISATION];
  748.         $nomSecteur $this->spm->getNomSecteurActiviteById($id_secteur_activite);
  749.         $villesRepo $this->getDoctrine()->getRepository(Villes::class);
  750.         $nomVillePrincipale $villesRepo->donne_string_noms_villes_principales_dune_localisation($id_localisation1);
  751.         $lang $request->getSession()->get('lang');
  752.         $arrayVarsTrans["nomSecteur"] = $nomSecteur;
  753.         $arrayVarsTrans["nomLocalisationWithPrefix"] = $nomLocalisationWithPrefix;
  754.         $arrayVarsTrans["nomVillePrincipale"] = $nomVillePrincipale;
  755.         $metaTitle str_replace(
  756.                 ['%$nomSecteur%$''%$nomLocalisationWithPrefix%$'],
  757.                 [$nomSecteur$nomLocalisationWithPrefix],
  758.                 ' %$nomSecteur%$ %$nomLocalisationWithPrefix%$ '
  759.         );
  760.         $metaDescription str_replace(
  761.                 ['%$nomSecteur%$''%$nomLocalisationWithPrefix%$''%$nomVillePrincipale%$'],
  762.                 [$nomSecteur$nomLocalisationWithPrefix$nomVillePrincipale],
  763.                 ' %$nomSecteur%$ %$nomLocalisationWithPrefix%$, %$nomVillePrincipale%$ ');
  764.         $metaTag $this->metaTag
  765.                 ->setTitle($metaTitle)
  766.                 ->setDescription($metaDescription);
  767.         return $this->render('annuaires/experts/list_experts_localisation.html.twig', [
  768.                     'metaTag' => $metaTag,
  769.                     'controller_name' => 'AnnuairesExpertsController',
  770.                     "nomLocalisationWithPrefix" => $nomLocalisationWithPrefixself::ID_LOCALISATION => $id_localisation,
  771.                     "nomLocalisation" => $nomLocalisation"id_secteur_activite" => $id_secteur_activite,
  772.                     "nomSecteur" => $nomSecteur"experts" => $experts"secteurs" => $secteurs
  773.         ]);
  774.     }
  775.     /**
  776.      * @param Request $request
  777.      * @param type $lang
  778.      * @param type $codePays
  779.      * @return type
  780.      */
  781.     public function colonnesGaucheExpert(Request $request$lang$codePays) {
  782.         $dernieresPrestationsReferencees $this->am->getDernieresPrestationsReferencees(3);
  783.         $dernieresPrestationsReferenceesSimple $this->am->getDernieresPrestationsReferenceesSimple();
  784.         $response $this->render(
  785.                 'includes/colonnes_gauche_expert.html.twig',
  786.                 [
  787.                     'controller_name' => 'AnnuairesExpertsController',
  788.                     'codePaysWithUnderScore' => $codePays,
  789.                     'dernieresPrestationsReferencees' => $dernieresPrestationsReferencees,
  790.                     'NbDernieresPrestationsReferencees' => count($dernieresPrestationsReferenceesSimple),
  791.                     'lang' => $lang,
  792.                 ]
  793.         );
  794.         $response->setPublic();
  795.         $response->setMaxAge(43200); // 12heures
  796.         return $response;
  797.     }
  798.     public function detailArticle(Request $request$titreActu$idActuTranslationExtension $translationExtension$codePays) {
  799.         $article $this->acm->getArticleDetailById($idActu);
  800.         if (!$article) {
  801.             throw $this->createNotFoundException('article   introuvable avec id ' $article);
  802.         }
  803.         $metaTitle $article['titre_actualite'] . ", FUSACQ Buzz";
  804.         $metaDescription $article['titre_actualite'];
  805.         $metaTag $this->metaTag
  806.                 ->setTitle($metaTitle)
  807.                 ->setDescription($metaDescription);
  808.         return $this->render('annuaires/experts/detail_article.html.twig', [
  809.                     'controller_name' => 'AnnuairesExpertsController',
  810.                     'article' => $article'metaTag' => $metaTag,
  811.         ]);
  812.     }
  813. }