src/Controller/AnnuairesExpertsController.php line 529

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.      
  41.     public const SEARCH_WORD "searchWord";
  42.     public const ID_PAYS "id_pays";
  43.     public const ID_REGION "id_region";
  44.     public const MOTS_CLES "mots_cles";
  45.     public const TRI "tri";
  46.     public const TYPE_SOCIETE "type_societe";
  47.     public const TYPE_OPERATION "type_operation";
  48.     public const MESSAGE_SUCCESS "Votre message est bien evoyé à l'expert";
  49.     public const MESSAGE_FAIL "L'envoi de de votre message  à l'expert a échoué ";
  50.     public const FLASH_KEY_SUCCESS 'success';
  51.     public const FLASH_KEY_FAIL 'fail';
  52.     public const ID_LOCALISATION "id_localisation";
  53.     public const NOM_LOCALISATION "nom_localisation";
  54.     /**
  55.      * @var \App\Services\ManagerEntity\AnnuairesManagers
  56.      */
  57.     private $am;
  58.     /**
  59.      * @var \App\Controller\SecteursActiviteManagers
  60.      */
  61.     private $sam;
  62.     /**
  63.      * @var TelephoneInternational
  64.      */
  65.     private $ti;
  66.     /**
  67.      * @var ActualitesManagers
  68.      */
  69.     private $acm;
  70.     /**
  71.      * @var ContactPrestataireManagers
  72.      */
  73.     private $cpm;
  74.     /**
  75.      * @var ServicesPrestataireManagers
  76.      */
  77.     private $spm;
  78.     /**
  79.      * @var LocalisationsManagers
  80.      */
  81.     private $lm;
  82.     /**
  83.      * @var MetaTag
  84.      */
  85.     private $metaTag;
  86.     /**
  87.      * @var EntityManagerInterface
  88.      */
  89.     private $em;
  90.     /**
  91.      * @param AnnuairesManagers $am
  92.      * @param SecteursActiviteManagers $sam
  93.      * @param ActualitesManagers $acm
  94.      * @param TelephoneInternational $ti
  95.      * @param ContactPrestataireManagers $cpm
  96.      * @param ServicesPrestataireManagers $spm
  97.      */
  98.     public function __construct(LocalisationsManagers $lmAnnuairesManagers $amSecteursActiviteManagers $samActualitesManagers $acmTelephoneInternational $tiContactPrestataireManagers $cpmServicesPrestataireManagers $spmEntityManagerInterface $emMetaTag $metaTag) {
  99.         $this->acm $acm;
  100.         $this->am $am;
  101.         $this->sam $sam;
  102.         $this->ti $ti;
  103.         $this->cpm $cpm;
  104.         $this->spm $spm;
  105.         $this->lm $lm;
  106.         $this->metaTag $metaTag;
  107.         $this->em $em;
  108.     }
  109.     /**
  110.      * @param $codePays
  111.      */
  112.     public function expertsRecherche(Request $request$codePays): Response {
  113.         $formFactory Forms::createFormFactoryBuilder()->getFormFactory();
  114.         $form $formFactory->createBuilder()
  115.                 ->add(self::SEARCH_WORDTextType::class)
  116.                 ->add(self::ID_PAYSTextType::class)
  117.                 ->add(self::ID_REGIONTextType::class)
  118.                 ->setAction($this->generateUrl('annuaires_experts_recherche', ['codePays' => $codePays]))
  119.                 ->setMethod('GET')
  120.                 ->getForm();
  121.         $searchWord $request->query->get('form')[self::SEARCH_WORD];
  122.         if ($searchWord) {
  123.             $searchWord trim($searchWord);
  124.         }
  125.         $idPays = (isset($request->query->get('form')[self::ID_PAYS])) ? $request->query->get('form')[self::ID_PAYS] : null;
  126.         $idRegion = (isset($request->query->get('form')[self::ID_REGION])) ? $request->query->get('form')[self::ID_REGION] : null;
  127.         $filter = [
  128.             self::SEARCH_WORD => $searchWord,
  129.             self::ID_PAYS => $idPays,
  130.             self::ID_REGION => $idRegion,
  131.         ];
  132.         
  133.         // Validation structurelle des filtres
  134.         $this->validateFilters($filter);
  135.         
  136.         $categories $this->am->rechercheExpertsList1($request$filter);
  137.         $experts $this->am->rechercheExpertsList2($request$filter);
  138.         return $this->render(
  139.                         'annuaires/experts/experts_recherche.html.twig',
  140.                         ['controller_name' => 'AnnuairesExpertsController',
  141.                             'categories' => $categories,
  142.                             'experts' => $experts,
  143.                             'form' => $form->createView(),
  144.                         ]
  145.         );
  146.     }
  147.     /**
  148.      * @return \Symfony\Component\HttpFoundation\Response
  149.      */
  150.     public function index(Request $request$codePays) {
  151.         $formFactory Forms::createFormFactoryBuilder()->getFormFactory();
  152.         $form $formFactory->createBuilder()
  153.                 ->add(self::SEARCH_WORDTextType::class)
  154.                 ->add(self::ID_PAYSTextType::class)
  155.                 ->add(self::ID_REGIONTextType::class)
  156.                 ->setAction($this->generateUrl('annuaires_experts_recherche', ['codePays' => $codePays]))
  157.                 ->setMethod('GET')
  158.                 ->getForm();
  159.         $searchWord = ($request->query->get('form')) ? $request->query->get('form')[self::SEARCH_WORD] : null;
  160.         if ($searchWord) {
  161.             $searchWord trim($searchWord);
  162.         }
  163.         $idPays = (isset($request->query->get('form')[self::ID_PAYS])) ? $request->query->get('form')[self::ID_PAYS] : null;
  164.         $idRegion = (isset($request->query->get('form')[self::ID_REGION])) ? $request->query->get('form')[self::ID_REGION] : null;
  165.         $filter = [
  166.             self::SEARCH_WORD => $searchWord,
  167.             self::ID_PAYS => $idPays,
  168.             self::ID_REGION => $idRegion,
  169.         ];
  170.         
  171.         // Validation structurelle des filtres
  172.         $this->validateFilters($filter);
  173.         
  174.         $categories $this->am->rechercheExpertsList1($request$filter);
  175.         $dernieresPrestationsReferencees $this->am->getDernieresPrestationsReferencees();
  176.           $dernieresPrestationsReferenceesSimple $this->am->getDernieresPrestationsReferenceesSimple();
  177.           
  178.         return $this->render(
  179.                         'annuaires/experts/index.html.twig',
  180.                         ['controller_name' => 'AnnuairesExpertsController',
  181.                             'categories' => $categories,"NbDernieresPrestationsReferencees"=>count($dernieresPrestationsReferenceesSimple),
  182.                             'dernieresPrestationsReferencees' => $dernieresPrestationsReferencees,
  183.                             'form' => $form->createView(),
  184.                         ]
  185.         );
  186.     }
  187.     /**
  188.      * @param $codePays
  189.      * @param $lang
  190.      * @return mixed
  191.      */
  192.     public function expertsRechercheSecteur(Request $requestPaginatorInterface $paginator$codePays$lang) {
  193.         $formFactory Forms::createFormFactoryBuilder()->getFormFactory();
  194.         $form $formFactory->createBuilder()
  195.                 ->add(self::MOTS_CLESTextType::class)
  196.                 ->add(self::ID_PAYSTextType::class)
  197.                 ->add(self::ID_REGIONTextType::class)
  198.                 ->add(self::TYPE_SOCIETETextType::class)
  199.                 ->add(self::TYPE_OPERATIONTextType::class)
  200.                 ->setAction($this->generateUrl(
  201.                                 'annuaires_experts_recherche_secteur',
  202.                                 [
  203.                                     'codePays' => $codePays,
  204.                                     'lang' => $lang,
  205.                                 ]
  206.                         ))
  207.                 ->setMethod('GET')
  208.                 ->getForm();
  209.         $motsCle = ($request->query->get(self::MOTS_CLES) !== null) ? $request->query->get(self::MOTS_CLES) : NULL;
  210.         if ($motsCle) {
  211.             $motsCle trim($motsCle);
  212.         }
  213.         $idPays = ($request->query->get(self::ID_PAYS) !== null) ? $request->query->get(self::ID_PAYS) : NULL;
  214.         $idRegion = ($request->query->get(self::ID_REGION) !== null) ? $request->query->get(self::ID_REGION) : NULL;
  215.         $typeSociete = ($request->query->get(self::TYPE_SOCIETE) !== null) ? $request->query->get(self::TYPE_SOCIETE) : NULL;
  216.         $typeOperation = ($request->query->get(self::TYPE_OPERATION) !== null) ? $request->query->get(self::TYPE_OPERATION) : NULL;
  217.         $tri = ($request->query->get(self::TRI) !== null) ? $request->query->get(self::TRI) : NULL;
  218.         $filter = [
  219.             'motsCle' => $motsCle,
  220.             self::ID_PAYS => $idPays,
  221.             self::ID_REGION => $idRegion,
  222.             self::TYPE_SOCIETE => $typeSociete,
  223.             self::TYPE_OPERATION => $typeOperation,
  224.             self::TRI => $tri,
  225.         ];
  226.         
  227.         // Validation structurelle des filtres
  228.         $this->validateFilters($filter);
  229.         
  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.  
  406.         $metaTitle $membre["prenom"]." ".$membre["nom"].", ".$membre["raison_sociale"];
  407.         $metaDescription $membre["prenom"]." ".$membre["nom"].", ".$membre["fonction"]." ".$membre["raison_sociale"];
  408.         
  409.                 $metaTag $this->metaTag
  410.                 ->setTitle($metaTitle)
  411.                 ->setDescription($metaDescription);
  412.                 
  413.         return $this->render('annuaires/experts/fiche_expert_detail.html.twig', [
  414.                     'controller_name' => 'AnnuairesExpertsController',
  415.                     'membre' => $membre'form' => $form->createView(),    'metaTag' => $metaTag,
  416.                     'prestation' => $prestation'equipes' => $equipes'blogs' => $blogs'operations' => $operations,
  417.                     'lienExpertSuivant' => $lienExpertSuivant'lienExpertPrecedant' => $lienExpertPrecedant,
  418.         ]);
  419.     }
  420.     /**
  421.      * @param $idServicePrestataire
  422.      * @param $codePays
  423.      * @return mixed
  424.      * @throws \Exception
  425.      */
  426.     public function ficheEquipeExpertFusacq(Request $requestTranslationExtension $translationExtension$idServicePrestataire$codePays) {
  427.         if (!$idServicePrestataire) {
  428.             throw $this->createNotFoundException('No Expert  found for id ' $idServicePrestataire);
  429.         }
  430.         $prestation $this->spm->getDetailServicesPrestataireById($idServicePrestataire$this->ti);
  431.         if ($prestation["statut"] != 'publique' && $prestation["statut"] != 'publique_temporaire') {
  432.             $this->addFlash('error_prestataire_introuvable''La prestation n’existe pas ou a été supprimée');
  433.             return $this->redirectToRoute('annuaires_experts_index', ['codePays' => $codePays]);
  434.         }
  435.         $equipes $this->am->getMembresEquipeExpert($prestation['id_service_prestataire'], $prestation['id_societe_prestataire']);
  436.         $blogs $this->acm->getLesDerniersTroisBlogsExperts($prestation['id_service_prestataire'], $prestation['id_societe_prestataire'], date('YmdHis'), NULLnull);
  437.         $model = new ContactezDirectementExperts();
  438.         $model->_set('id_service_prestataire'$idServicePrestataire);
  439.         $currentRoute $request->attributes->get('_route');
  440.         $form $this->createForm(ContactezDirectementExpertsType::class, $model, [
  441.             'action' => $this->generateUrl(
  442.                     $currentRoute,
  443.                     [
  444.                         'codePays' => $codePays,
  445.                         'titreslug' => Utils::slugify($prestation['titre_service']),
  446.                         'idServicePrestataire' => $idServicePrestataire,
  447.                     ]
  448.             ),
  449.             'method' => 'POST',
  450.         ]);
  451.         $form->handleRequest($request);
  452.         if ($form->isSubmitted()) {
  453.             if ($form->isValid()) {
  454.                 $data $form->getData();
  455.                 $this->cpm->contacterSocietePrestataire((array) $data);
  456.                 $this->addFlash(self::FLASH_KEY_SUCCESSself::MESSAGE_SUCCESS);
  457.             } else {
  458.                 $this->addFlash(self::FLASH_KEY_FAILself::MESSAGE_FAIL);
  459.             }
  460.         }
  461.         $lang $request->getSession()->get('lang');
  462.         $arrayVarsTrans["nom_commercial_societe"] = $prestation['nom_commercial_societe'];
  463.         $arrayVarsTrans["nomSecteur"] = $this->spm->getNomSecteurActiviteById($prestation['id_secteur_new']);
  464.         $arrayVarsTrans["nomLocalisation"] = $prestation['ville'];
  465.         $metaTitle str_replace(['%$nom_commercial_societe%$''%$nomSecteur%$''%$nomLocalisation%$'], [$arrayVarsTrans["nom_commercial_societe"], $arrayVarsTrans["nomSecteur"], $arrayVarsTrans["nomLocalisation"]], 'Equipe %$nom_commercial_societe%$, %$nomSecteur%$, %$nomLocalisation%$');
  466.         $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%$');
  467.         $metaTag $this->metaTag
  468.                 ->setTitle($metaTitle)
  469.                 ->setDescription($metaDescription);
  470.         return $this->render('annuaires/experts/fiche_equipe.html.twig', [
  471.                     'metaTag' => $metaTag,
  472.                     'controller_name' => 'AnnuairesExpertsController''form' => $form->createView(),
  473.                     'prestation' => $prestation'equipes' => $equipes'blogs' => $blogs,
  474.         ]);
  475.     }
  476.     /**
  477.      * @param $idServicePrestataire
  478.      * @param $codePays
  479.      * @return mixed
  480.      * @throws \Exception
  481.      */
  482.     public function ficheBlogExpertFusacq(Request $requestTranslationExtension $translationExtension$idServicePrestataire$codePays) {
  483.         if (!$idServicePrestataire) {
  484.             throw $this->createNotFoundException('No Expert  found for id ' $idServicePrestataire);
  485.         }
  486.         $prestation $this->spm->getDetailServicesPrestataireById($idServicePrestataire$this->ti);
  487.         if ($prestation["statut"] != 'publique' && $prestation["statut"] != 'publique_temporaire') {
  488.             $this->addFlash('error_prestataire_introuvable''La prestation n’existe pas ou a été supprimée');
  489.             return $this->redirectToRoute('annuaires_experts_index', ['codePays' => $codePays]);
  490.         }
  491.         $equipes $this->am->getMembresEquipeExpert($prestation['id_service_prestataire'], $prestation['id_societe_prestataire']);
  492.         $blogs $this->acm->getLesDerniersTroisBlogsExperts($prestation['id_service_prestataire'], $prestation['id_societe_prestataire'], date('YmdHis'), NULLnull);
  493.         $model = new ContactezDirectementExperts();
  494.         $model->_set('id_service_prestataire'$idServicePrestataire);
  495.         $currentRoute $request->attributes->get('_route');
  496.         $form $this->createForm(ContactezDirectementExpertsType::class, $model, [
  497.             'action' => $this->generateUrl(
  498.                     $currentRoute,
  499.                     [
  500.                         'codePays' => $codePays,
  501.                         'titreslug' => Utils::slugify($prestation['titre_service']),
  502.                         'idServicePrestataire' => $idServicePrestataire,
  503.                     ]
  504.             ),
  505.             'method' => 'POST',
  506.         ]);
  507.         $form->handleRequest($request);
  508.         if ($form->isSubmitted()) {
  509.             if ($form->isValid()) {
  510.                 $data $form->getData();
  511.                 $this->cpm->contacterSocietePrestataire((array) $data);
  512.                 $this->addFlash(self::FLASH_KEY_SUCCESSself::MESSAGE_SUCCESS);
  513.             } else {
  514.                 $this->addFlash(self::FLASH_KEY_FAILself::MESSAGE_FAIL);
  515.             }
  516.         }
  517.         $lang $request->getSession()->get('lang');
  518.         $arrayVarsTrans["nom_commercial_societe"] = $prestation['nom_commercial_societe'];
  519.         $arrayVarsTrans["nomSecteur"] = $this->spm->getNomSecteurActiviteById($prestation['id_secteur_new']);
  520.         $arrayVarsTrans["nomLocalisation"] = $prestation['ville'];
  521.         $metaTitle str_replace(['%$nom_commercial_societe%$''%$nomSecteur%$''%$nomLocalisation%$'], [$arrayVarsTrans["nom_commercial_societe"], $arrayVarsTrans["nomSecteur"], $arrayVarsTrans["nomLocalisation"]], 'Actualité %$nom_commercial_societe%$, %$nomSecteur%$, %$nomLocalisation%$');
  522.         $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%$');
  523.         $metaTag $this->metaTag
  524.                 ->setTitle($metaTitle)
  525.                 ->setDescription($metaDescription);
  526.         return $this->render('annuaires/experts/fiche_blog.html.twig', [
  527.                     'metaTag' => $metaTag,
  528.                     'controller_name' => 'AnnuairesExpertsController''form' => $form->createView(),
  529.                     'prestation' => $prestation'equipes' => $equipes'blogs' => $blogs,
  530.         ]);
  531.     }
  532.     /**
  533.      * @param $lang
  534.      * @param $currentRouteParams
  535.      * @param $idPaysPrestataire
  536.      * @param $idLocalisationPrestataire
  537.      * @param $codePays
  538.      * @return mixed
  539.      */
  540.     public function fileAriane($lang$currentRouteParams$idPaysPrestataire$idLocalisationPrestataire$codePays) {
  541.         if (!$currentRouteParams['idServicePrestataire']) {
  542.             throw $this->createNotFoundException('No Expert  found for id ' $currentRouteParams['idServicePrestataire']);
  543.         }
  544.         $idServicePrestataire $currentRouteParams['idServicePrestataire'];
  545.         if (!$idServicePrestataire) {
  546.             throw $this->createNotFoundException('No Expert  found for id ' $idServicePrestataire);
  547.         }
  548.         $prestation $this->spm->getDetailServicesPrestataireById($idServicePrestataire$this->ti); // idServicePrestataire verifié deja depuis la ligne 299
  549.         if ($prestation["statut"] != 'publique' && $prestation["statut"] != 'publique_temporaire') {
  550.             $this->addFlash('error_prestataire_introuvable''La prestation n’existe pas ou a été supprimée');
  551.             return $this->redirectToRoute('annuaires_experts_index', ['codePays' => $codePays]);
  552.         }
  553.         $nomMembre = (isset($currentRouteParams['idMembre'])) ? $this->am->getNomPrenomMembreById($currentRouteParams['idMembre']) : null;
  554.         $secteurs $this->am->getSecteursActivitePrestataireNewParListeId($this->am->getIdSecteurPointerVers($this->am->getIdSecteurNew($idServicePrestataire)));
  555.         $secteursSecondLevel $this->am->getSecteursActivitePrestataireNewParPointeVers($this->am->getIdSecteurNew($idServicePrestataire));
  556.         $response $this->render(
  557.                 'annuaires/experts/fragments/file_ariane_expert.html.twig',
  558.                 [
  559.                     'controller_name' => 'AnnuairesExpertsController',
  560.                     'codePaysWithUnderScore' => $codePays,
  561.                     'secteurs' => $secteurs'secteursSecondLevel' => $secteursSecondLevel,
  562.                     'idServicePrestataire' => $idServicePrestataire'idLocalisationPrestataire' => $idLocalisationPrestataire'idPaysPrestataire' => $idPaysPrestataire,
  563.                     'lang' => $lang,
  564.                     'nomMembre' => $nomMembre'prestation' => $prestation,
  565.                 ]
  566.         );
  567.         $response->setPublic();
  568.         $response->setMaxAge(43200); // 12heures
  569.         return $response;
  570.     }
  571.     /**
  572.      * @param $id_secteur_activite
  573.      * @return mixed
  574.      */
  575.     public function repriseCessionCreationFranchise($id_secteur_activite) {
  576.         $secteurs $this->spm->getSecteursPourAffichageRecherche($id_secteur_activite);
  577.         $metaTitle "Reprise, cession, création, franchise, Annuaire des experts FUSACQ";
  578.         $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.";
  579.         $metaTag $this->metaTag
  580.                 ->setTitle($metaTitle)
  581.                 ->setDescription($metaDescription);
  582.         return $this->render('annuaires/experts/toutes_les_categories/reprise_cession_creation_franchise.html.twig', [
  583.                     'controller_name' => 'AnnuairesExpertsController''secteurs' => $secteurs'metaTag' => $metaTag,
  584.         ]);
  585.     }
  586.     /**
  587.      * @param $id_secteur_activite
  588.      * @return mixed
  589.      */
  590.     public function marketingVente($id_secteur_activite) {
  591.         $secteurs $this->spm->getSecteursPourAffichageRecherche($id_secteur_activite);
  592.         $metaTitle "Marketing & Vente, Annuaire des experts FUSACQ";
  593.         $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.";
  594.         $metaTag $this->metaTag
  595.                 ->setTitle($metaTitle)
  596.                 ->setDescription($metaDescription);
  597.         return $this->render('annuaires/experts/toutes_les_categories/marketing_vente.html.twig', [
  598.                     'controller_name' => 'AnnuairesExpertsController''secteurs' => $secteurs'metaTag' => $metaTag,
  599.         ]);
  600.     }
  601.     /**
  602.      * @param $id_secteur_activite
  603.      * @return mixed
  604.      */
  605.     public function comptabiliteAuditFinancementAssurance($id_secteur_activite) {
  606.         $secteurs $this->spm->getSecteursPourAffichageRecherche($id_secteur_activite);
  607.         $metaTitle "Comptabilité, audit, financement, assurance, Annuaire des experts FUSACQ";
  608.         $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.";
  609.         $metaTag $this->metaTag
  610.                 ->setTitle($metaTitle)
  611.                 ->setDescription($metaDescription);
  612.         return $this->render('annuaires/experts/toutes_les_categories/comptabilite_audit_financement_assurance.html.twig', [
  613.                     'controller_name' => 'AnnuairesExpertsController''secteurs' => $secteurs'metaTag' => $metaTag,
  614.         ]);
  615.     }
  616.     /**
  617.      * @param $id_secteur_activite
  618.      * @return mixed
  619.      */
  620.     public function informatiqueBureautiqueTelecom($id_secteur_activite) {
  621.         $secteurs $this->spm->getSecteursPourAffichageRecherche($id_secteur_activite);
  622.         $metaTitle "Informatique / bureautique & Telecom, Annuaire des experts FUSACQ";
  623.         $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.";
  624.         $metaTag $this->metaTag
  625.                 ->setTitle($metaTitle)
  626.                 ->setDescription($metaDescription);
  627.         return $this->render('annuaires/experts/toutes_les_categories/informatique_bureautique_telecom.html.twig', [
  628.                     'controller_name' => 'AnnuairesExpertsController''secteurs' => $secteurs'metaTag' => $metaTag,
  629.         ]);
  630.     }
  631.     /**
  632.      * @param $id_secteur_activite
  633.      * @return mixed
  634.      */
  635.     public function ressourcesHumaines($id_secteur_activite) {
  636.         $secteurs $this->spm->getSecteursPourAffichageRecherche($id_secteur_activite);
  637.         $metaTitle "Ressources Humaines, Annuaire des experts FUSACQ";
  638.         $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.";
  639.         $metaTag $this->metaTag
  640.                 ->setTitle($metaTitle)
  641.                 ->setDescription($metaDescription);
  642.         return $this->render('annuaires/experts/toutes_les_categories/ressources_humaines.html.twig', [
  643.                     'controller_name' => 'AnnuairesExpertsController''secteurs' => $secteurs'metaTag' => $metaTag,
  644.         ]);
  645.     }
  646.     /**
  647.      * @param $id_secteur_activite
  648.      * @return mixed
  649.      */
  650.     public function droitFiscalitePatrimoineImmobilier($id_secteur_activite) {
  651.         $secteurs $this->spm->getSecteursPourAffichageRecherche($id_secteur_activite);
  652.         $metaTitle "Droit, fiscalité, patrimoine, immobilier, Annuaire des experts FUSACQ";
  653.         $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.";
  654.         $metaTag $this->metaTag
  655.                 ->setTitle($metaTitle)
  656.                 ->setDescription($metaDescription);
  657.         return $this->render('annuaires/experts/toutes_les_categories/droit_fiscalite_patrimoine_immobilier.html.twig', [
  658.                     'controller_name' => 'AnnuairesExpertsController''secteurs' => $secteurs'metaTag' => $metaTag,
  659.         ]);
  660.     }
  661.     /**
  662.      * @param $id_secteur_activite
  663.      * @param PaysAnnuaireExperts $paysAnnuaireExperts
  664.      * @return mixed
  665.      */
  666.     public function listeSousCategoriesExperts(Request $request$id_secteur_activitePaysAnnuaireExperts $paysAnnuaireExperts$codePays) {
  667.         $idLocalisations $this->spm->getLocalisationServicePrestataireByIdSecteurActivite($id_secteur_activite);
  668.         if (Utils::idLocalisationArrayContainsOnlyIdPays($idLocalisations)) { // tous les id sont SANS précisions idregion/iddepartement
  669.             array_unique($idLocalisations);
  670.             $id_localisation end($idLocalisations);
  671.             $secteur $this->spm->getSecteursActivitePrestataireNewParListeId($id_secteur_activite);
  672.             $nom_secteur_activite Utils::slugify(array_column($secteur0)[0]);
  673.             if ($nom_secteur_activite && $id_localisation) {
  674.                 return $this->redirectToRoute(
  675.                                 'annuaires_experts_list_experts_localisation',
  676.                                 [
  677.                                     'id_secteur_activite' => $id_secteur_activite,
  678.                                     'nom_secteur_activite' => $nom_secteur_activite,
  679.                                     self::ID_LOCALISATION => $id_localisation,
  680.                                     self::NOM_LOCALISATION => $paysAnnuaireExperts->getPaysExpertByIdLocalisation($id_localisation)[0],
  681.                                     'codePays' => $codePays
  682.                                 ]
  683.                 );
  684.             }
  685.         }
  686.         $listPays $this->lm->extractListIdPaysFromIdlocalisation($idLocalisations); // list des pays qui ont des experts pour ce secteur activité
  687.         $secteur $this->spm->getSecteursActivitePrestataireNewParListeId($id_secteur_activite);
  688.         $id_pays $request->query->get('id_pays');
  689.         if (!isset($id_pays)) {
  690.             $id_pays $this->container->get("id_pays_by_code_pays")->getIdPaysByCodePays($codePays);
  691.         }
  692.         $listRegionsFrance = ($id_pays == "33") ? $this->listRegionsExpertsPays($listPays$idLocalisations$id_pays) : [];
  693.         $listRegionsBelgique = ($id_pays == "32") ? $this->listRegionsExpertsPays($listPays$idLocalisations$id_pays) : [];
  694.         $listRegionsSuisse = ($id_pays == "41") ? $this->listRegionsExpertsPays($listPays$idLocalisations$id_pays) : [];
  695.         $listRegionsCanada = ($id_pays == "01") ? $this->listRegionsExpertsPays($listPays$idLocalisations$id_pays) : [];
  696.         $listRegionsLuxembourg = ($id_pays == "352") ? $this->listRegionsExpertsPays($listPays$idLocalisations$id_pays) : [];
  697.         $listRegions array_merge($listRegionsFrance$listRegionsBelgique$listRegionsSuisse$listRegionsCanada$listRegionsLuxembourg);
  698.         $metaTitle Utils::firstValInArray($secteur)[0] . ", " Utils::firstValInArray($this->lm->getNomLocalisationById($id_pays)) ["nom_localisation"] . " FUSACQ";
  699.         $metaDescription Utils::firstValInArray($secteur)[0] . ", " Utils::firstValInArray($this->lm->getNomLocalisationById($id_pays)) ["nom_localisation"];
  700.         $metaTag $this->metaTag
  701.                 ->setTitle($metaTitle)
  702.                 ->setDescription($metaDescription);
  703.         return $this->render('annuaires/experts/liste_sous_categories_experts.html.twig', [
  704.                     'controller_name' => 'AnnuairesExpertsController''secteur' => $secteur"paysAnnuaireExperts" => $paysAnnuaireExperts->listPays(),
  705.                     'listRegionsFrance' => ($listRegionsFrance) ? $listRegionsFrance : [],
  706.                     'listRegionsBelgique' => ($listRegionsBelgique) ? $listRegionsBelgique : [],
  707.                     'listRegionsCanada' => ($listRegionsCanada) ? $listRegionsCanada : [],
  708.                     'listRegionsSuisse' => ($listRegionsSuisse) ? $listRegionsSuisse : [],
  709.                     'listRegionsLuxembourg' => ($listRegionsLuxembourg) ? $listRegionsLuxembourg : [],
  710.                     'listRegions' => $listRegions'metaTag' => $metaTag,
  711.                     "id_secteur_activite" => $id_secteur_activite"idLocalisations" => $idLocalisations"listPays" => $listPays
  712.         ]);
  713.     }
  714.     /**
  715.      * @param $listPays
  716.      * @param $idLocalisations
  717.      * @param $idpays
  718.      * @return array|null
  719.      */
  720.     private function listRegionsExpertsPays($listPays$idLocalisations$idpays) {
  721.         $listRegions = (in_array($idpays$listPays)) ? $this->lm->getRegionsEtLeursDepartement($idpays) : [];
  722.         foreach ($listRegions as $item => $region) {
  723.             $region["nb_experts_region"] = Utils::countNbIdLocalisationInArray($region[self::ID_LOCALISATION], $idLocalisationstrue);
  724.             $sum 0;
  725.             if (isset($region["departements"])) {
  726.                 foreach ($region["departements"] as $i => $departement) {
  727.                     $departement["nb_experts"] = Utils::countNbIdLocalisationInArray($departement[self::ID_LOCALISATION], $idLocalisations);
  728.                     $sum += $departement["nb_experts"];
  729.                     $region["departements"][$i] = $departement;
  730.                 }
  731.             }
  732.             $region["nb_experts_departements"] = $sum;
  733.             $listRegions[$item] = $region;
  734.         }
  735.         return $listRegions;
  736.     }
  737.     /**
  738.      * @param $id_secteur_activite
  739.      * @param $id_localisation
  740.      * @return mixed
  741.      */
  742.     public function listExpertsLocalisation(Request $requestTranslationExtension $translationExtension$id_secteur_activite$id_localisation) {
  743.         $secteurs $this->am->getSecteursActivitePrestataireNewParListeId($id_secteur_activite);
  744.         $experts $this->spm->getListServicePrestataireByIdSecteurActiviteByLocalisation($id_secteur_activite$id_localisation);
  745.         $nomLocalisationWithPrefix $this->lm->getNomLocalisationWithPrefixById($id_localisation);
  746.         if ((Utils::lastValInArray($nomLocalisationWithPrefix)) && (Utils::lastValInArray($nomLocalisationWithPrefix)[self::NOM_LOCALISATION])) {
  747.             $nomLocalisationWithPrefix Utils::lastValInArray($nomLocalisationWithPrefix)[self::NOM_LOCALISATION];
  748.         }
  749.         $nomLocalisation $this->lm->getNomLocalisationById($id_localisation);
  750.         $nomLocalisation end($nomLocalisation)[self::NOM_LOCALISATION];
  751.         $nomSecteur $this->spm->getNomSecteurActiviteById($id_secteur_activite);
  752.         $villesRepo $this->getDoctrine()->getRepository(Villes::class);
  753.         $nomVillePrincipale $villesRepo->donne_string_noms_villes_principales_dune_localisation($id_localisation1);
  754.         $lang $request->getSession()->get('lang');
  755.         $arrayVarsTrans["nomSecteur"] = $nomSecteur;
  756.         $arrayVarsTrans["nomLocalisationWithPrefix"] = $nomLocalisationWithPrefix;
  757.         $arrayVarsTrans["nomVillePrincipale"] = $nomVillePrincipale;
  758.         $metaTitle str_replace(
  759.                 ['%$nomSecteur%$''%$nomLocalisationWithPrefix%$'],
  760.                 [$nomSecteur$nomLocalisationWithPrefix],
  761.                 ' %$nomSecteur%$ %$nomLocalisationWithPrefix%$ '
  762.         );
  763.         $metaDescription str_replace(
  764.                 ['%$nomSecteur%$''%$nomLocalisationWithPrefix%$''%$nomVillePrincipale%$'],
  765.                 [$nomSecteur$nomLocalisationWithPrefix$nomVillePrincipale],
  766.                 ' %$nomSecteur%$ %$nomLocalisationWithPrefix%$, %$nomVillePrincipale%$ ');
  767.         $metaTag $this->metaTag
  768.                 ->setTitle($metaTitle)
  769.                 ->setDescription($metaDescription);
  770.         return $this->render('annuaires/experts/list_experts_localisation.html.twig', [
  771.                     'metaTag' => $metaTag,
  772.                     'controller_name' => 'AnnuairesExpertsController',
  773.                     "nomLocalisationWithPrefix" => $nomLocalisationWithPrefixself::ID_LOCALISATION => $id_localisation,
  774.                     "nomLocalisation" => $nomLocalisation"id_secteur_activite" => $id_secteur_activite,
  775.                     "nomSecteur" => $nomSecteur"experts" => $experts"secteurs" => $secteurs
  776.         ]);
  777.     }
  778.     /**
  779.      * @param Request $request
  780.      * @param type $lang
  781.      * @param type $codePays
  782.      * @return type
  783.      */
  784.     public function colonnesGaucheExpert(Request $request$lang$codePays) {
  785.         $dernieresPrestationsReferencees $this->am->getDernieresPrestationsReferencees(3);
  786.         $dernieresPrestationsReferenceesSimple $this->am->getDernieresPrestationsReferenceesSimple();
  787.         $response $this->render(
  788.                 'includes/colonnes_gauche_expert.html.twig',
  789.                 [
  790.                     'controller_name' => 'AnnuairesExpertsController',
  791.                     'codePaysWithUnderScore' => $codePays,
  792.                     'dernieresPrestationsReferencees' => $dernieresPrestationsReferencees,
  793.                     'NbDernieresPrestationsReferencees' => count($dernieresPrestationsReferenceesSimple),
  794.                     'lang' => $lang,
  795.                 ]
  796.         );
  797.         $response->setPublic();
  798.         $response->setMaxAge(43200); // 12heures
  799.         return $response;
  800.     }
  801.     public function detailArticle(Request $request$titreActu$idActuTranslationExtension $translationExtension$codePays) {
  802.         $article $this->acm->getArticleDetailById($idActu);
  803.         if (!$article) {
  804.             throw $this->createNotFoundException('article   introuvable avec id ' $article);
  805.         }
  806.         $metaTitle $article['titre_actualite'] . ", FUSACQ Buzz";
  807.         $metaDescription $article['titre_actualite'];
  808.         $metaTag $this->metaTag
  809.                 ->setTitle($metaTitle)
  810.                 ->setDescription($metaDescription);
  811.         return $this->render('annuaires/experts/detail_article.html.twig', [
  812.                     'controller_name' => 'AnnuairesExpertsController',
  813.                     'article' => $article'metaTag' => $metaTag,
  814.         ]);
  815.     }
  816.     
  817.    
  818. }