<?php
declare(strict_types=1);
/**
* @author Mehrez Labidi
*/
namespace App\Controller;
use App\Services\MetaTag;
use App\Form\Models\ContactezDirectementExperts;
use App\Form\Type\{
ContactezDirectementExpertsType,
ContactezDirectementMembreExpertsType
};
use App\Helper\Utils;
use App\Services\ManagerEntity\{
ActualitesManagers,
AnnuairesManagers,
ContactPrestataireManagers,
LocalisationsManagers,
SecteursActiviteManagers,
ServicesPrestataireManagers
};
use App\Services\{
PaysAnnuaireExperts,
TelephoneInternational
};
use Knp\Component\Pager\PaginatorInterface;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Forms;
use Symfony\Component\HttpFoundation\{
Request,
Response
};
use App\Twig\TranslationExtension;
use App\Entity\Villes;
use Doctrine\ORM\EntityManagerInterface;
use App\Entity\StatistiquesMensuellesPrestataire;
use App\Helper\FiltresValidatorTrait; // validation des filtres
class AnnuairesExpertsController extends EntityUsingController {
use FiltresValidatorTrait;
public const SEARCH_WORD = "searchWord";
public const ID_PAYS = "id_pays";
public const ID_REGION = "id_region";
public const MOTS_CLES = "mots_cles";
public const TRI = "tri";
public const TYPE_SOCIETE = "type_societe";
public const TYPE_OPERATION = "type_operation";
public const MESSAGE_SUCCESS = "Votre message est bien evoyé à l'expert";
public const MESSAGE_FAIL = "L'envoi de de votre message à l'expert a échoué ";
public const FLASH_KEY_SUCCESS = 'success';
public const FLASH_KEY_FAIL = 'fail';
public const ID_LOCALISATION = "id_localisation";
public const NOM_LOCALISATION = "nom_localisation";
/**
* @var \App\Services\ManagerEntity\AnnuairesManagers
*/
private $am;
/**
* @var \App\Controller\SecteursActiviteManagers
*/
private $sam;
/**
* @var TelephoneInternational
*/
private $ti;
/**
* @var ActualitesManagers
*/
private $acm;
/**
* @var ContactPrestataireManagers
*/
private $cpm;
/**
* @var ServicesPrestataireManagers
*/
private $spm;
/**
* @var LocalisationsManagers
*/
private $lm;
/**
* @var MetaTag
*/
private $metaTag;
/**
* @var EntityManagerInterface
*/
private $em;
/**
* @param AnnuairesManagers $am
* @param SecteursActiviteManagers $sam
* @param ActualitesManagers $acm
* @param TelephoneInternational $ti
* @param ContactPrestataireManagers $cpm
* @param ServicesPrestataireManagers $spm
*/
public function __construct(LocalisationsManagers $lm, AnnuairesManagers $am, SecteursActiviteManagers $sam, ActualitesManagers $acm, TelephoneInternational $ti, ContactPrestataireManagers $cpm, ServicesPrestataireManagers $spm, EntityManagerInterface $em, MetaTag $metaTag) {
$this->acm = $acm;
$this->am = $am;
$this->sam = $sam;
$this->ti = $ti;
$this->cpm = $cpm;
$this->spm = $spm;
$this->lm = $lm;
$this->metaTag = $metaTag;
$this->em = $em;
}
/**
* @param $codePays
*/
public function expertsRecherche(Request $request, $codePays): Response {
$formFactory = Forms::createFormFactoryBuilder()->getFormFactory();
$form = $formFactory->createBuilder()
->add(self::SEARCH_WORD, TextType::class)
->add(self::ID_PAYS, TextType::class)
->add(self::ID_REGION, TextType::class)
->setAction($this->generateUrl('annuaires_experts_recherche', ['codePays' => $codePays]))
->setMethod('GET')
->getForm();
$searchWord = $request->query->get('form')[self::SEARCH_WORD];
if ($searchWord) {
$searchWord = trim($searchWord);
}
$idPays = (isset($request->query->get('form')[self::ID_PAYS])) ? $request->query->get('form')[self::ID_PAYS] : null;
$idRegion = (isset($request->query->get('form')[self::ID_REGION])) ? $request->query->get('form')[self::ID_REGION] : null;
$filter = [
self::SEARCH_WORD => $searchWord,
self::ID_PAYS => $idPays,
self::ID_REGION => $idRegion,
];
// Validation structurelle des filtres
$this->validateFilters($filter);
$categories = $this->am->rechercheExpertsList1($request, $filter);
$experts = $this->am->rechercheExpertsList2($request, $filter);
return $this->render(
'annuaires/experts/experts_recherche.html.twig',
['controller_name' => 'AnnuairesExpertsController',
'categories' => $categories,
'experts' => $experts,
'form' => $form->createView(),
]
);
}
/**
* @return \Symfony\Component\HttpFoundation\Response
*/
public function index(Request $request, $codePays) {
$formFactory = Forms::createFormFactoryBuilder()->getFormFactory();
$form = $formFactory->createBuilder()
->add(self::SEARCH_WORD, TextType::class)
->add(self::ID_PAYS, TextType::class)
->add(self::ID_REGION, TextType::class)
->setAction($this->generateUrl('annuaires_experts_recherche', ['codePays' => $codePays]))
->setMethod('GET')
->getForm();
$searchWord = ($request->query->get('form')) ? $request->query->get('form')[self::SEARCH_WORD] : null;
if ($searchWord) {
$searchWord = trim($searchWord);
}
$idPays = (isset($request->query->get('form')[self::ID_PAYS])) ? $request->query->get('form')[self::ID_PAYS] : null;
$idRegion = (isset($request->query->get('form')[self::ID_REGION])) ? $request->query->get('form')[self::ID_REGION] : null;
$filter = [
self::SEARCH_WORD => $searchWord,
self::ID_PAYS => $idPays,
self::ID_REGION => $idRegion,
];
// Validation structurelle des filtres
$this->validateFilters($filter);
$categories = $this->am->rechercheExpertsList1($request, $filter);
$dernieresPrestationsReferencees = $this->am->getDernieresPrestationsReferencees();
$dernieresPrestationsReferenceesSimple = $this->am->getDernieresPrestationsReferenceesSimple();
return $this->render(
'annuaires/experts/index.html.twig',
['controller_name' => 'AnnuairesExpertsController',
'categories' => $categories,"NbDernieresPrestationsReferencees"=>count($dernieresPrestationsReferenceesSimple),
'dernieresPrestationsReferencees' => $dernieresPrestationsReferencees,
'form' => $form->createView(),
]
);
}
/**
* @param $codePays
* @param $lang
* @return mixed
*/
public function expertsRechercheSecteur(Request $request, PaginatorInterface $paginator, $codePays, $lang) {
$formFactory = Forms::createFormFactoryBuilder()->getFormFactory();
$form = $formFactory->createBuilder()
->add(self::MOTS_CLES, TextType::class)
->add(self::ID_PAYS, TextType::class)
->add(self::ID_REGION, TextType::class)
->add(self::TYPE_SOCIETE, TextType::class)
->add(self::TYPE_OPERATION, TextType::class)
->setAction($this->generateUrl(
'annuaires_experts_recherche_secteur',
[
'codePays' => $codePays,
'lang' => $lang,
]
))
->setMethod('GET')
->getForm();
$motsCle = ($request->query->get(self::MOTS_CLES) !== null) ? $request->query->get(self::MOTS_CLES) : NULL;
if ($motsCle) {
$motsCle = trim($motsCle);
}
$idPays = ($request->query->get(self::ID_PAYS) !== null) ? $request->query->get(self::ID_PAYS) : NULL;
$idRegion = ($request->query->get(self::ID_REGION) !== null) ? $request->query->get(self::ID_REGION) : NULL;
$typeSociete = ($request->query->get(self::TYPE_SOCIETE) !== null) ? $request->query->get(self::TYPE_SOCIETE) : NULL;
$typeOperation = ($request->query->get(self::TYPE_OPERATION) !== null) ? $request->query->get(self::TYPE_OPERATION) : NULL;
$tri = ($request->query->get(self::TRI) !== null) ? $request->query->get(self::TRI) : NULL;
$filter = [
'motsCle' => $motsCle,
self::ID_PAYS => $idPays,
self::ID_REGION => $idRegion,
self::TYPE_SOCIETE => $typeSociete,
self::TYPE_OPERATION => $typeOperation,
self::TRI => $tri,
];
// Validation structurelle des filtres
$this->validateFilters($filter);
$filter = array_filter($filter); // if empty
if (count($filter) > 0) {
$idLocalisation = ($idRegion) ? $idRegion : $idPays;
$experts = $this->am->getListExpertsBySecteurActiviteLocalisation($request, $paginator, $idLocalisation, $typeSociete, $typeOperation, $motsCle, $tri);
$nbAllExperts = $this->am->getNbExpertsBySecteurActiviteLocalisation($request, $idLocalisation, $typeSociete, $typeOperation, $motsCle);
return $this->render(
'annuaires/experts/resultats_experts_recherche_secteur.html.twig',
[
'controller_name' => 'AnnuairesExpertsController',
'experts' => $experts, 'nbAllExperts' => $nbAllExperts,
]
);
}
return $this->render(
'annuaires/experts/fragments/experts_recherche_secteur.html.twig',
[
'controller_name' => 'AnnuairesExpertsController',
'lang' => $lang,
'form' => $form->createView(),
]
);
}
/**
* @param $codePays
* @return mixed
* @throws \Exception
*/
public function dernieresPrestationsReferenceesFusacq(Request $request, $codePays) {
$dernieresPrestationsReferencees = $this->am->getDernieresPrestationsReferencees(20);
return $this->render(
'annuaires/experts/dernieres_prestations_referencees_sur_fusacq.html.twig',
[
'dernieresPrestationsReferencees' => $dernieresPrestationsReferencees,
'controller_name' => 'AnnuairesExpertsController',
]
);
}
/**
* @param $idServicePrestataire
* @param $codePays
* @return mixed
* @throws \Exception
*/
public function ficheActiviteExpertFusacq(Request $request, TranslationExtension $translationExtension, $idServicePrestataire, $codePays) {
if (!$idServicePrestataire) {
throw $this->createNotFoundException('No Expert found for id ' . $idServicePrestataire);
}
$prestation = $this->spm->getDetailServicesPrestataireById($idServicePrestataire, $this->ti);
if (!$prestation) {
throw $this->createNotFoundException('No Expert found for id ' . $idServicePrestataire);
}
if ($prestation["statut"] != 'publique' && $prestation["statut"] != 'publique_temporaire') {
$this->addFlash('error_prestataire_introuvable', 'La prestation n’existe pas ou a été supprimée');
return $this->redirectToRoute('annuaires_experts_index', ['codePays' => $codePays]);
}
$stas = $this->em->getRepository(StatistiquesMensuellesPrestataire::class)->findOneBy(array("id_service_prestataire" => $idServicePrestataire, "date_mois" => date("Ym")));
if (empty($stas)) {
$stas = new StatistiquesMensuellesPrestataire();
$stas->_set("id_service_prestataire", $idServicePrestataire);
$stas->_set("date_mois", date("Ym"));
$stas->_set("nb_affichages_fiche", 1);
$this->em->persist($stas);
$this->em->flush();
} else {
$stas->_set("nb_affichages_fiche", $stas->_get("nb_affichages_fiche") + 1);
$this->em->persist($stas);
$this->em->flush();
}
$equipes = $this->am->getMembresEquipeExpert($prestation['id_service_prestataire'], $prestation['id_societe_prestataire']);
$blogs = $this->acm->getLesDerniersTroisBlogsExperts($prestation['id_service_prestataire'], $prestation['id_societe_prestataire'], date('YmdHis'), NULL, null);
$model = new ContactezDirectementExperts();
$model->_set('id_service_prestataire', $idServicePrestataire);
$currentRoute = $request->attributes->get('_route');
$form = $this->createForm(ContactezDirectementExpertsType::class, $model, [
'action' => $this->generateUrl(
$currentRoute,
[
'codePays' => $codePays,
'titreslug' => Utils::slugify($prestation['titre_service']),
'idServicePrestataire' => $idServicePrestataire,
]
),
'method' => 'POST',
]);
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$data = $form->getData();
$this->cpm->contacterSocietePrestataire((array) $data);
$this->addFlash(self::FLASH_KEY_SUCCESS, self::MESSAGE_SUCCESS);
} else {
$this->addFlash(self::FLASH_KEY_FAIL, self::MESSAGE_FAIL);
}
}
$lang = $request->getSession()->get('lang');
$arrayVarsTrans["nom_commercial_societe"] = $prestation['nom_commercial_societe'];
$arrayVarsTrans["nomSecteur"] = $this->spm->getNomSecteurActiviteById($prestation['id_secteur_new']);
$arrayVarsTrans["nomLocalisation"] = $prestation['ville'];
$metaTitle = str_replace(['%$nom_commercial_societe%$', '%$nomSecteur%$', '%$nomLocalisation%$'], [$arrayVarsTrans["nom_commercial_societe"], $arrayVarsTrans["nomSecteur"], $arrayVarsTrans["nomLocalisation"]], '%$nom_commercial_societe%$, %$nomSecteur%$, %$nomLocalisation%$');
$metaDescription = str_replace(['%$nom_commercial_societe%$', '%$nomSecteur%$', '%$nomLocalisation%$'], [$arrayVarsTrans["nom_commercial_societe"], $arrayVarsTrans["nomSecteur"], $arrayVarsTrans["nomLocalisation"]], 'découvrez %$nom_commercial_societe%$, %$nomSecteur%$, %$nomLocalisation%$');
$metaTag = $this->metaTag
->setTitle($metaTitle)
->setDescription($metaDescription);
return $this->render('annuaires/experts/fiche_activite.html.twig', [
'metaTag' => $metaTag,
'controller_name' => 'AnnuairesExpertsController', 'prestation' => $prestation,
'equipes' => $equipes, 'blogs' => $blogs,
'form' => $form->createView(),
]);
}
/**
* @param $idMembre
* @param $idServicePrestataire
* @param $codePays
* @return mixed
* @throws \Exception
*/
public function ficheExpertDetail(Request $request, $idMembre, $idServicePrestataire, $codePays) {
if (!$idMembre) {
throw $this->createNotFoundException('No membre found for id ' . $idMembre);
}
if (!$idServicePrestataire) {
throw $this->createNotFoundException('No ServicePrestataire found for id ' . $idMembre);
}
$prestation = $this->spm->getDetailServicesPrestataireById($idServicePrestataire, $this->ti);
if ($prestation["statut"] != 'publique' && $prestation["statut"] != 'publique_temporaire') {
$this->addFlash('error_prestataire_introuvable', 'La prestation n’existe pas ou a été supprimée');
return $this->redirectToRoute('annuaires_experts_index', ['codePays' => $codePays]);
}
$equipes = $this->am->getMembresEquipeExpert($prestation['id_service_prestataire'], $prestation['id_societe_prestataire']);
$blogs = $this->acm->getLesDerniersTroisBlogsExperts($prestation['id_service_prestataire'], $prestation['id_societe_prestataire'], date('YmdHis'), NULL, null);
$membre = $this->am->getUnMembreEquipeExpert($idMembre);
$operations = $this->acm->getlisteOperationsFromMember($idMembre);
$lienExpertPrecedant = $lienExpertSuivant = null; // les liens vides si pas d'expert
foreach ($equipes as $i => $memb) {
if ($idMembre == $memb['id_membre']) { // le membre courant
if (array_key_exists($i - 1, $equipes)) { // le precedant de sa liste
$lienExpertPrecedant = $this->generateUrl(
$request->attributes->get('_route'), // la route courante , on veut la garder
['codePays' => $codePays, 'idMembre' => $equipes[$i - 1]['id_membre'], 'idServicePrestataire' => $idServicePrestataire, 'reecriture_url' => $equipes[$i - 1]['reecriture_url']]
);
}
if (array_key_exists($i + 1, $equipes)) { // le suivant de sa liste
$lienExpertSuivant = $this->generateUrl(
$request->attributes->get('_route'), // la route courante , on veut la garder
['codePays' => $codePays, 'idMembre' => $equipes[$i + 1]['id_membre'], 'idServicePrestataire' => $idServicePrestataire, 'reecriture_url' => $equipes[$i + 1]['reecriture_url']]
);
}
}
}
$currentRoute = $request->attributes->get('_route');
$form = $this->createForm(ContactezDirectementMembreExpertsType::class, [
'id_membre' => $idMembre,
'id_service_prestataire' => $idServicePrestataire
], [
'action' => $this->generateUrl(
$currentRoute,
[
'codePays' => $codePays, 'idMembre' => $idMembre,
'reecriture_url' => Utils::slugify($prestation['titre_service']),
'idServicePrestataire' => $idServicePrestataire,
]
),
'method' => 'POST',
]);
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$data = $form->getData();
$this->cpm->contacterMembreEquipePrestataire((array) $data);
$this->addFlash(self::FLASH_KEY_SUCCESS, self::MESSAGE_SUCCESS);
} else {
$this->addFlash(self::FLASH_KEY_FAIL, self::MESSAGE_FAIL);
}
}
$metaTitle = $membre["prenom"]." ".$membre["nom"].", ".$membre["raison_sociale"];
$metaDescription = $membre["prenom"]." ".$membre["nom"].", ".$membre["fonction"]." ".$membre["raison_sociale"];
$metaTag = $this->metaTag
->setTitle($metaTitle)
->setDescription($metaDescription);
return $this->render('annuaires/experts/fiche_expert_detail.html.twig', [
'controller_name' => 'AnnuairesExpertsController',
'membre' => $membre, 'form' => $form->createView(), 'metaTag' => $metaTag,
'prestation' => $prestation, 'equipes' => $equipes, 'blogs' => $blogs, 'operations' => $operations,
'lienExpertSuivant' => $lienExpertSuivant, 'lienExpertPrecedant' => $lienExpertPrecedant,
]);
}
/**
* @param $idServicePrestataire
* @param $codePays
* @return mixed
* @throws \Exception
*/
public function ficheEquipeExpertFusacq(Request $request, TranslationExtension $translationExtension, $idServicePrestataire, $codePays) {
if (!$idServicePrestataire) {
throw $this->createNotFoundException('No Expert found for id ' . $idServicePrestataire);
}
$prestation = $this->spm->getDetailServicesPrestataireById($idServicePrestataire, $this->ti);
if ($prestation["statut"] != 'publique' && $prestation["statut"] != 'publique_temporaire') {
$this->addFlash('error_prestataire_introuvable', 'La prestation n’existe pas ou a été supprimée');
return $this->redirectToRoute('annuaires_experts_index', ['codePays' => $codePays]);
}
$equipes = $this->am->getMembresEquipeExpert($prestation['id_service_prestataire'], $prestation['id_societe_prestataire']);
$blogs = $this->acm->getLesDerniersTroisBlogsExperts($prestation['id_service_prestataire'], $prestation['id_societe_prestataire'], date('YmdHis'), NULL, null);
$model = new ContactezDirectementExperts();
$model->_set('id_service_prestataire', $idServicePrestataire);
$currentRoute = $request->attributes->get('_route');
$form = $this->createForm(ContactezDirectementExpertsType::class, $model, [
'action' => $this->generateUrl(
$currentRoute,
[
'codePays' => $codePays,
'titreslug' => Utils::slugify($prestation['titre_service']),
'idServicePrestataire' => $idServicePrestataire,
]
),
'method' => 'POST',
]);
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$data = $form->getData();
$this->cpm->contacterSocietePrestataire((array) $data);
$this->addFlash(self::FLASH_KEY_SUCCESS, self::MESSAGE_SUCCESS);
} else {
$this->addFlash(self::FLASH_KEY_FAIL, self::MESSAGE_FAIL);
}
}
$lang = $request->getSession()->get('lang');
$arrayVarsTrans["nom_commercial_societe"] = $prestation['nom_commercial_societe'];
$arrayVarsTrans["nomSecteur"] = $this->spm->getNomSecteurActiviteById($prestation['id_secteur_new']);
$arrayVarsTrans["nomLocalisation"] = $prestation['ville'];
$metaTitle = str_replace(['%$nom_commercial_societe%$', '%$nomSecteur%$', '%$nomLocalisation%$'], [$arrayVarsTrans["nom_commercial_societe"], $arrayVarsTrans["nomSecteur"], $arrayVarsTrans["nomLocalisation"]], 'Equipe %$nom_commercial_societe%$, %$nomSecteur%$, %$nomLocalisation%$');
$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%$');
$metaTag = $this->metaTag
->setTitle($metaTitle)
->setDescription($metaDescription);
return $this->render('annuaires/experts/fiche_equipe.html.twig', [
'metaTag' => $metaTag,
'controller_name' => 'AnnuairesExpertsController', 'form' => $form->createView(),
'prestation' => $prestation, 'equipes' => $equipes, 'blogs' => $blogs,
]);
}
/**
* @param $idServicePrestataire
* @param $codePays
* @return mixed
* @throws \Exception
*/
public function ficheBlogExpertFusacq(Request $request, TranslationExtension $translationExtension, $idServicePrestataire, $codePays) {
if (!$idServicePrestataire) {
throw $this->createNotFoundException('No Expert found for id ' . $idServicePrestataire);
}
$prestation = $this->spm->getDetailServicesPrestataireById($idServicePrestataire, $this->ti);
if ($prestation["statut"] != 'publique' && $prestation["statut"] != 'publique_temporaire') {
$this->addFlash('error_prestataire_introuvable', 'La prestation n’existe pas ou a été supprimée');
return $this->redirectToRoute('annuaires_experts_index', ['codePays' => $codePays]);
}
$equipes = $this->am->getMembresEquipeExpert($prestation['id_service_prestataire'], $prestation['id_societe_prestataire']);
$blogs = $this->acm->getLesDerniersTroisBlogsExperts($prestation['id_service_prestataire'], $prestation['id_societe_prestataire'], date('YmdHis'), NULL, null);
$model = new ContactezDirectementExperts();
$model->_set('id_service_prestataire', $idServicePrestataire);
$currentRoute = $request->attributes->get('_route');
$form = $this->createForm(ContactezDirectementExpertsType::class, $model, [
'action' => $this->generateUrl(
$currentRoute,
[
'codePays' => $codePays,
'titreslug' => Utils::slugify($prestation['titre_service']),
'idServicePrestataire' => $idServicePrestataire,
]
),
'method' => 'POST',
]);
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$data = $form->getData();
$this->cpm->contacterSocietePrestataire((array) $data);
$this->addFlash(self::FLASH_KEY_SUCCESS, self::MESSAGE_SUCCESS);
} else {
$this->addFlash(self::FLASH_KEY_FAIL, self::MESSAGE_FAIL);
}
}
$lang = $request->getSession()->get('lang');
$arrayVarsTrans["nom_commercial_societe"] = $prestation['nom_commercial_societe'];
$arrayVarsTrans["nomSecteur"] = $this->spm->getNomSecteurActiviteById($prestation['id_secteur_new']);
$arrayVarsTrans["nomLocalisation"] = $prestation['ville'];
$metaTitle = str_replace(['%$nom_commercial_societe%$', '%$nomSecteur%$', '%$nomLocalisation%$'], [$arrayVarsTrans["nom_commercial_societe"], $arrayVarsTrans["nomSecteur"], $arrayVarsTrans["nomLocalisation"]], 'Actualité %$nom_commercial_societe%$, %$nomSecteur%$, %$nomLocalisation%$');
$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%$');
$metaTag = $this->metaTag
->setTitle($metaTitle)
->setDescription($metaDescription);
return $this->render('annuaires/experts/fiche_blog.html.twig', [
'metaTag' => $metaTag,
'controller_name' => 'AnnuairesExpertsController', 'form' => $form->createView(),
'prestation' => $prestation, 'equipes' => $equipes, 'blogs' => $blogs,
]);
}
/**
* @param $lang
* @param $currentRouteParams
* @param $idPaysPrestataire
* @param $idLocalisationPrestataire
* @param $codePays
* @return mixed
*/
public function fileAriane($lang, $currentRouteParams, $idPaysPrestataire, $idLocalisationPrestataire, $codePays) {
if (!$currentRouteParams['idServicePrestataire']) {
throw $this->createNotFoundException('No Expert found for id ' . $currentRouteParams['idServicePrestataire']);
}
$idServicePrestataire = $currentRouteParams['idServicePrestataire'];
if (!$idServicePrestataire) {
throw $this->createNotFoundException('No Expert found for id ' . $idServicePrestataire);
}
$prestation = $this->spm->getDetailServicesPrestataireById($idServicePrestataire, $this->ti); // idServicePrestataire verifié deja depuis la ligne 299
if ($prestation["statut"] != 'publique' && $prestation["statut"] != 'publique_temporaire') {
$this->addFlash('error_prestataire_introuvable', 'La prestation n’existe pas ou a été supprimée');
return $this->redirectToRoute('annuaires_experts_index', ['codePays' => $codePays]);
}
$nomMembre = (isset($currentRouteParams['idMembre'])) ? $this->am->getNomPrenomMembreById($currentRouteParams['idMembre']) : null;
$secteurs = $this->am->getSecteursActivitePrestataireNewParListeId($this->am->getIdSecteurPointerVers($this->am->getIdSecteurNew($idServicePrestataire)));
$secteursSecondLevel = $this->am->getSecteursActivitePrestataireNewParPointeVers($this->am->getIdSecteurNew($idServicePrestataire));
$response = $this->render(
'annuaires/experts/fragments/file_ariane_expert.html.twig',
[
'controller_name' => 'AnnuairesExpertsController',
'codePaysWithUnderScore' => $codePays,
'secteurs' => $secteurs, 'secteursSecondLevel' => $secteursSecondLevel,
'idServicePrestataire' => $idServicePrestataire, 'idLocalisationPrestataire' => $idLocalisationPrestataire, 'idPaysPrestataire' => $idPaysPrestataire,
'lang' => $lang,
'nomMembre' => $nomMembre, 'prestation' => $prestation,
]
);
$response->setPublic();
$response->setMaxAge(43200); // 12heures
return $response;
}
/**
* @param $id_secteur_activite
* @return mixed
*/
public function repriseCessionCreationFranchise($id_secteur_activite) {
$secteurs = $this->spm->getSecteursPourAffichageRecherche($id_secteur_activite);
$metaTitle = "Reprise, cession, création, franchise, Annuaire des experts FUSACQ";
$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.";
$metaTag = $this->metaTag
->setTitle($metaTitle)
->setDescription($metaDescription);
return $this->render('annuaires/experts/toutes_les_categories/reprise_cession_creation_franchise.html.twig', [
'controller_name' => 'AnnuairesExpertsController', 'secteurs' => $secteurs, 'metaTag' => $metaTag,
]);
}
/**
* @param $id_secteur_activite
* @return mixed
*/
public function marketingVente($id_secteur_activite) {
$secteurs = $this->spm->getSecteursPourAffichageRecherche($id_secteur_activite);
$metaTitle = "Marketing & Vente, Annuaire des experts FUSACQ";
$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.";
$metaTag = $this->metaTag
->setTitle($metaTitle)
->setDescription($metaDescription);
return $this->render('annuaires/experts/toutes_les_categories/marketing_vente.html.twig', [
'controller_name' => 'AnnuairesExpertsController', 'secteurs' => $secteurs, 'metaTag' => $metaTag,
]);
}
/**
* @param $id_secteur_activite
* @return mixed
*/
public function comptabiliteAuditFinancementAssurance($id_secteur_activite) {
$secteurs = $this->spm->getSecteursPourAffichageRecherche($id_secteur_activite);
$metaTitle = "Comptabilité, audit, financement, assurance, Annuaire des experts FUSACQ";
$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.";
$metaTag = $this->metaTag
->setTitle($metaTitle)
->setDescription($metaDescription);
return $this->render('annuaires/experts/toutes_les_categories/comptabilite_audit_financement_assurance.html.twig', [
'controller_name' => 'AnnuairesExpertsController', 'secteurs' => $secteurs, 'metaTag' => $metaTag,
]);
}
/**
* @param $id_secteur_activite
* @return mixed
*/
public function informatiqueBureautiqueTelecom($id_secteur_activite) {
$secteurs = $this->spm->getSecteursPourAffichageRecherche($id_secteur_activite);
$metaTitle = "Informatique / bureautique & Telecom, Annuaire des experts FUSACQ";
$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.";
$metaTag = $this->metaTag
->setTitle($metaTitle)
->setDescription($metaDescription);
return $this->render('annuaires/experts/toutes_les_categories/informatique_bureautique_telecom.html.twig', [
'controller_name' => 'AnnuairesExpertsController', 'secteurs' => $secteurs, 'metaTag' => $metaTag,
]);
}
/**
* @param $id_secteur_activite
* @return mixed
*/
public function ressourcesHumaines($id_secteur_activite) {
$secteurs = $this->spm->getSecteursPourAffichageRecherche($id_secteur_activite);
$metaTitle = "Ressources Humaines, Annuaire des experts FUSACQ";
$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.";
$metaTag = $this->metaTag
->setTitle($metaTitle)
->setDescription($metaDescription);
return $this->render('annuaires/experts/toutes_les_categories/ressources_humaines.html.twig', [
'controller_name' => 'AnnuairesExpertsController', 'secteurs' => $secteurs, 'metaTag' => $metaTag,
]);
}
/**
* @param $id_secteur_activite
* @return mixed
*/
public function droitFiscalitePatrimoineImmobilier($id_secteur_activite) {
$secteurs = $this->spm->getSecteursPourAffichageRecherche($id_secteur_activite);
$metaTitle = "Droit, fiscalité, patrimoine, immobilier, Annuaire des experts FUSACQ";
$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.";
$metaTag = $this->metaTag
->setTitle($metaTitle)
->setDescription($metaDescription);
return $this->render('annuaires/experts/toutes_les_categories/droit_fiscalite_patrimoine_immobilier.html.twig', [
'controller_name' => 'AnnuairesExpertsController', 'secteurs' => $secteurs, 'metaTag' => $metaTag,
]);
}
/**
* @param $id_secteur_activite
* @param PaysAnnuaireExperts $paysAnnuaireExperts
* @return mixed
*/
public function listeSousCategoriesExperts(Request $request, $id_secteur_activite, PaysAnnuaireExperts $paysAnnuaireExperts, $codePays) {
$idLocalisations = $this->spm->getLocalisationServicePrestataireByIdSecteurActivite($id_secteur_activite);
if (Utils::idLocalisationArrayContainsOnlyIdPays($idLocalisations)) { // tous les id sont SANS précisions idregion/iddepartement
array_unique($idLocalisations);
$id_localisation = end($idLocalisations);
$secteur = $this->spm->getSecteursActivitePrestataireNewParListeId($id_secteur_activite);
$nom_secteur_activite = Utils::slugify(array_column($secteur, 0)[0]);
if ($nom_secteur_activite && $id_localisation) {
return $this->redirectToRoute(
'annuaires_experts_list_experts_localisation',
[
'id_secteur_activite' => $id_secteur_activite,
'nom_secteur_activite' => $nom_secteur_activite,
self::ID_LOCALISATION => $id_localisation,
self::NOM_LOCALISATION => $paysAnnuaireExperts->getPaysExpertByIdLocalisation($id_localisation)[0],
'codePays' => $codePays
]
);
}
}
$listPays = $this->lm->extractListIdPaysFromIdlocalisation($idLocalisations); // list des pays qui ont des experts pour ce secteur activité
$secteur = $this->spm->getSecteursActivitePrestataireNewParListeId($id_secteur_activite);
$id_pays = $request->query->get('id_pays');
if (!isset($id_pays)) {
$id_pays = $this->container->get("id_pays_by_code_pays")->getIdPaysByCodePays($codePays);
}
$listRegionsFrance = ($id_pays == "33") ? $this->listRegionsExpertsPays($listPays, $idLocalisations, $id_pays) : [];
$listRegionsBelgique = ($id_pays == "32") ? $this->listRegionsExpertsPays($listPays, $idLocalisations, $id_pays) : [];
$listRegionsSuisse = ($id_pays == "41") ? $this->listRegionsExpertsPays($listPays, $idLocalisations, $id_pays) : [];
$listRegionsCanada = ($id_pays == "01") ? $this->listRegionsExpertsPays($listPays, $idLocalisations, $id_pays) : [];
$listRegionsLuxembourg = ($id_pays == "352") ? $this->listRegionsExpertsPays($listPays, $idLocalisations, $id_pays) : [];
$listRegions = array_merge($listRegionsFrance, $listRegionsBelgique, $listRegionsSuisse, $listRegionsCanada, $listRegionsLuxembourg);
$metaTitle = Utils::firstValInArray($secteur)[0] . ", " . Utils::firstValInArray($this->lm->getNomLocalisationById($id_pays)) ["nom_localisation"] . " FUSACQ";
$metaDescription = Utils::firstValInArray($secteur)[0] . ", " . Utils::firstValInArray($this->lm->getNomLocalisationById($id_pays)) ["nom_localisation"];
$metaTag = $this->metaTag
->setTitle($metaTitle)
->setDescription($metaDescription);
return $this->render('annuaires/experts/liste_sous_categories_experts.html.twig', [
'controller_name' => 'AnnuairesExpertsController', 'secteur' => $secteur, "paysAnnuaireExperts" => $paysAnnuaireExperts->listPays(),
'listRegionsFrance' => ($listRegionsFrance) ? $listRegionsFrance : [],
'listRegionsBelgique' => ($listRegionsBelgique) ? $listRegionsBelgique : [],
'listRegionsCanada' => ($listRegionsCanada) ? $listRegionsCanada : [],
'listRegionsSuisse' => ($listRegionsSuisse) ? $listRegionsSuisse : [],
'listRegionsLuxembourg' => ($listRegionsLuxembourg) ? $listRegionsLuxembourg : [],
'listRegions' => $listRegions, 'metaTag' => $metaTag,
"id_secteur_activite" => $id_secteur_activite, "idLocalisations" => $idLocalisations, "listPays" => $listPays
]);
}
/**
* @param $listPays
* @param $idLocalisations
* @param $idpays
* @return array|null
*/
private function listRegionsExpertsPays($listPays, $idLocalisations, $idpays) {
$listRegions = (in_array($idpays, $listPays)) ? $this->lm->getRegionsEtLeursDepartement($idpays) : [];
foreach ($listRegions as $item => $region) {
$region["nb_experts_region"] = Utils::countNbIdLocalisationInArray($region[self::ID_LOCALISATION], $idLocalisations, true);
$sum = 0;
if (isset($region["departements"])) {
foreach ($region["departements"] as $i => $departement) {
$departement["nb_experts"] = Utils::countNbIdLocalisationInArray($departement[self::ID_LOCALISATION], $idLocalisations);
$sum += $departement["nb_experts"];
$region["departements"][$i] = $departement;
}
}
$region["nb_experts_departements"] = $sum;
$listRegions[$item] = $region;
}
return $listRegions;
}
/**
* @param $id_secteur_activite
* @param $id_localisation
* @return mixed
*/
public function listExpertsLocalisation(Request $request, TranslationExtension $translationExtension, $id_secteur_activite, $id_localisation) {
$secteurs = $this->am->getSecteursActivitePrestataireNewParListeId($id_secteur_activite);
$experts = $this->spm->getListServicePrestataireByIdSecteurActiviteByLocalisation($id_secteur_activite, $id_localisation);
$nomLocalisationWithPrefix = $this->lm->getNomLocalisationWithPrefixById($id_localisation);
if ((Utils::lastValInArray($nomLocalisationWithPrefix)) && (Utils::lastValInArray($nomLocalisationWithPrefix)[self::NOM_LOCALISATION])) {
$nomLocalisationWithPrefix = Utils::lastValInArray($nomLocalisationWithPrefix)[self::NOM_LOCALISATION];
}
$nomLocalisation = $this->lm->getNomLocalisationById($id_localisation);
$nomLocalisation = end($nomLocalisation)[self::NOM_LOCALISATION];
$nomSecteur = $this->spm->getNomSecteurActiviteById($id_secteur_activite);
$villesRepo = $this->getDoctrine()->getRepository(Villes::class);
$nomVillePrincipale = $villesRepo->donne_string_noms_villes_principales_dune_localisation($id_localisation, 1);
$lang = $request->getSession()->get('lang');
$arrayVarsTrans["nomSecteur"] = $nomSecteur;
$arrayVarsTrans["nomLocalisationWithPrefix"] = $nomLocalisationWithPrefix;
$arrayVarsTrans["nomVillePrincipale"] = $nomVillePrincipale;
$metaTitle = str_replace(
['%$nomSecteur%$', '%$nomLocalisationWithPrefix%$'],
[$nomSecteur, $nomLocalisationWithPrefix],
' %$nomSecteur%$ %$nomLocalisationWithPrefix%$ '
);
$metaDescription = str_replace(
['%$nomSecteur%$', '%$nomLocalisationWithPrefix%$', '%$nomVillePrincipale%$'],
[$nomSecteur, $nomLocalisationWithPrefix, $nomVillePrincipale],
' %$nomSecteur%$ %$nomLocalisationWithPrefix%$, %$nomVillePrincipale%$ ');
$metaTag = $this->metaTag
->setTitle($metaTitle)
->setDescription($metaDescription);
return $this->render('annuaires/experts/list_experts_localisation.html.twig', [
'metaTag' => $metaTag,
'controller_name' => 'AnnuairesExpertsController',
"nomLocalisationWithPrefix" => $nomLocalisationWithPrefix, self::ID_LOCALISATION => $id_localisation,
"nomLocalisation" => $nomLocalisation, "id_secteur_activite" => $id_secteur_activite,
"nomSecteur" => $nomSecteur, "experts" => $experts, "secteurs" => $secteurs
]);
}
/**
* @param Request $request
* @param type $lang
* @param type $codePays
* @return type
*/
public function colonnesGaucheExpert(Request $request, $lang, $codePays) {
$dernieresPrestationsReferencees = $this->am->getDernieresPrestationsReferencees(3);
$dernieresPrestationsReferenceesSimple = $this->am->getDernieresPrestationsReferenceesSimple();
$response = $this->render(
'includes/colonnes_gauche_expert.html.twig',
[
'controller_name' => 'AnnuairesExpertsController',
'codePaysWithUnderScore' => $codePays,
'dernieresPrestationsReferencees' => $dernieresPrestationsReferencees,
'NbDernieresPrestationsReferencees' => count($dernieresPrestationsReferenceesSimple),
'lang' => $lang,
]
);
$response->setPublic();
$response->setMaxAge(43200); // 12heures
return $response;
}
public function detailArticle(Request $request, $titreActu, $idActu, TranslationExtension $translationExtension, $codePays) {
$article = $this->acm->getArticleDetailById($idActu);
if (!$article) {
throw $this->createNotFoundException('article introuvable avec id ' . $article);
}
$metaTitle = $article['titre_actualite'] . ", FUSACQ Buzz";
$metaDescription = $article['titre_actualite'];
$metaTag = $this->metaTag
->setTitle($metaTitle)
->setDescription($metaDescription);
return $this->render('annuaires/experts/detail_article.html.twig', [
'controller_name' => 'AnnuairesExpertsController',
'article' => $article, 'metaTag' => $metaTag,
]);
}
}