src/Controller/PageController.php line 67

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Page;
  4. use App\Entity\Items;
  5. use App\Entity\Ville;
  6. use App\Entity\Region;
  7. use App\Service\Slugify;
  8. use App\Entity\QuoiMotCle;
  9. use App\Entity\Departement;
  10. use App\Service\PathBuilder;
  11. use App\Elasticsearch\Moteur;
  12. use App\Entity\Etablissement;
  13. use App\Entity\PageCategorie;
  14. use App\Entity\AncienneRegion;
  15. use App\Entity\ItemsInsertion;
  16. use App\Elasticsearch\Parametres;
  17. use App\Controller\AnnuaireController;
  18. use App\Entity\SeoTexteReferencementDiplome;
  19. use Symfony\Component\HttpFoundation\Request;
  20. use Symfony\Component\HttpFoundation\Response;
  21. use Symfony\Component\Routing\Annotation\Route;
  22. use Symfony\Component\Routing\Generator\UrlGenerator;
  23. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  24. class PageController extends AbstractController
  25. {
  26.     private const MAX 50;
  27.     /** @var Slugify */
  28.     private $slugify;
  29.     /** @var Moteur */
  30.     private $moteur;    
  31.     public function __construct(
  32.         Slugify $slugify,
  33.         Moteur $moteur,
  34.         PathBuilder $pathBuilder
  35.     ) {
  36.         $this->slugify $slugify;
  37.         $this->moteur $moteur;
  38.         $this->pathBuilder $pathBuilder;
  39.     }
  40.     /**
  41.      * @Route("/guide-inscription.html", name="guide-inscription")
  42.      */
  43.     public function guideInscription()
  44.     {
  45.         $parent $this->getDoctrine()->getRepository(PageCategorie::class)->findBy(['slug' => 'guide-inscription']);
  46.         $categories $this->getDoctrine()->getRepository(PageCategorie::class)->findByParent($parent, ['ordre' => 'ASC''titre' => 'ASC']);
  47.         return $this->render('page/guide-inscription.html.twig', [
  48.             'categories' => $categories,
  49.         ]);
  50.     }
  51.     /**
  52.      * @Route("/guide-inscription/{slug}", name="guide-inscription-page")
  53.      */
  54.     public function guideInscriptionPage($slug)
  55.     {
  56.         $page $this->getDoctrine()->getRepository(Page::class)->findOneBy(['slug' => $slug]);
  57.         return $this->render('page/index.html.twig', [
  58.             'page' => $page,
  59.         ]);
  60.     }
  61.     /**
  62.     * @Route("/ecoles-colleges-lycees", name="enseignement-prive")
  63.     * @Route("/enseignement-catholique", name="enseignement-catholique")
  64.      */
  65.     public function enseignementIndex(Request $request)
  66.     {
  67.         $currentRoute $request->attributes->get('_route');
  68.         // 2025 - Supprimer l'annuaire catho...
  69.         if ($currentRoute == "enseignement-catholique")
  70.             return $this->redirectToRoute('enseignement-prive', [], 301);
  71.         $cathoPrive mb_strpos($currentRoute'-prive') > 'prive' 'catho';
  72.         $cathoPriveLibelle $cathoPrive == 'prive' "Privé" "Catholique";
  73.         // Liste des régions
  74.         $regions $this->getDoctrine()->getRepository(Region::class)->findAll();
  75.         // Texte SEO
  76.         $formation $currentRoute "-";  // Car getTitreEtTexte supprime le dernier caractère, héritage d'un autre module
  77.         $seoTitre $seoTexte "";
  78.         list($seoTitre$seoTexte) = $this->getDoctrine()->getRepository(SeoTexteReferencementDiplome::class)->getTitreEtTexte($formation);
  79.         $seoTexteMetadesc html_entity_decode($seoTexteENT_QUOTES);
  80.         $seoTexteMetadesc str_replace(array("\n""\t""\r"), ''$seoTexteMetadesc);
  81.         return $this->render('page/enseignement-index.html.twig', [
  82.             'regions' => $regions,
  83.             'cathoPrive' => $cathoPrive,
  84.             'cathoPriveLibelle' => $cathoPriveLibelle,
  85.             'typeOnglet' => $currentRoute,
  86.             'seoTitre' => $seoTitre,
  87.             'seoTexte' => $seoTexte,
  88.             'seoTexteMetadesc' => $seoTexteMetadesc,
  89.             'urlCanonical' => $this->generateUrl('enseignement-prive', [], UrlGenerator::ABSOLUTE_URL)
  90.         ]);
  91.     }
  92.     /**
  93.     * @Route("/enseignement-prive/{regionSlug}/region/{regionId}", name="enseignement-region-prive")
  94.     * @Route("/enseignement-catholique/{regionSlug}/region/{regionId}", name="enseignement-region-catho")
  95.      */
  96.     public function enseignementCatholiqueParRegion(Region $regionIdRequest $request)
  97.     {
  98.         $currentRoute $request->attributes->get('_route');
  99.         $cathoPrive mb_strpos($currentRoute'-prive') > 'prive' 'catho';
  100.         $cathoPriveLibelle $cathoPrive == 'prive' "Privé" "Catholique";
  101.         //$departements = $this->getDoctrine()->getRepository(Departement::class)->findByRegion($regionId);
  102.         if ($cathoPrive == "catho") {
  103.             return $this->redirectToRoute('annuaire_catho', ['lieu'=> $regionId->getSlug(), 'statut[]'=> 'catholique'], 301);
  104.         } else {
  105.             return $this->redirectToRoute('annuaire_prive', ['lieu'=> $regionId->getSlug()], 301);
  106.         }
  107.     }
  108.     /**
  109.     * @Route("/enseignement-prive/{villeSlug}/ville/{villeId}/{page}", name="enseignement-prive-par-ville-prive", requirements={"page"="\d+"})
  110.      * @Route("/enseignement-catholique/{villeSlug}/ville/{villeId}/{page}", name="enseignement-catholique-par-ville-catho", requirements={"page"="\d+"})
  111.      */
  112.     public function enseignementCatholiqueParVille(Ville $villeIdRequest $request$page=1)
  113.     {
  114.         // Redirection vers AnnuaireController::liste()
  115.         $currentRoute $request->attributes->get('_route');
  116.         if ($currentRoute == "enseignement-catholique-par-ville-catho") {
  117.             return $this->redirectToRoute('annuaire_catho', ['lieu'=> $villeId->getSlug(), 'statut[]'=> 'catholique'], 301);
  118.         } else {
  119.             return $this->redirectToRoute('annuaire_prive', ['lieu'=> $villeId->getSlug()], 301);
  120.         }
  121.     }
  122.     // INTERNATS
  123.     /**
  124.     * @Route("/internat-catholique/{villeNom}/ville/{villeId}/{page}",  requirements={"page"="\d+"})
  125.     * @Route("/internat-catholique/{dptSlug}/departement/{page}",       requirements={"page"="\d+"})
  126.     * @Route("/internat-catholique/{regionSlug}/region/{regionId}"    )
  127.     *
  128.     * @Route("/internat-college-catholique/{villeNom}/ville/{villeId}/{truc1}/{page}",      requirements={"page"="\d+"})
  129.     * @Route("/internat-college-catholique/{dptSlug}/departement/{truc2}/{truc1}/{page}",   requirements={"page"="\d+"})
  130.     * @Route("/internat-college-catholique/{regionSlug}/region/{regionId}/{truc1}/{page}")
  131.     * @Route("/internat-college-catholique/{regionSlug}/region/{regionId}/{truc1}/{page}")
  132.     * @Route("/internat-college-catholique/{regionSlug}/region/{regionId}/{truc1}/{truc3}/{page}")
  133.     *
  134.     * @Route("/internat-colleges/{villeNom}/ville/{villeId}/{truc1}/{page}",      requirements={"page"="\d+"})
  135.     * @Route("/internat-colleges/{dptSlug}/departement/{truc2}/{truc1}/{page}",   requirements={"page"="\d+"})
  136.     * @Route("/internat-colleges/{regionSlug}/region/{regionId}/{truc1}/{page}")
  137.     * @Route("/internat-colleges/{regionSlug}/region/{regionId}/{truc1}/{page}")
  138.     * @Route("/internat-colleges/{regionSlug}/region/{regionId}/{truc1}/{truc3}/{page}")
  139.     *
  140.     * @Route("/internat-ecole-catholique/{villeNom}/ville/{villeId}/{truc1}/{page}",      requirements={"page"="\d+"})
  141.     * @Route("/internat-ecole-catholique/{dptSlug}/departement/{truc2}/{truc1}/{page}",   requirements={"page"="\d+"})
  142.     * @Route("/internat-ecole-catholique/{regionSlug}/region/{regionId}/{truc1}/{page}")
  143.     * @Route("/internat-ecole-catholique/{regionSlug}/region/{regionId}/{truc1}/{page}")
  144.     * @Route("/internat-ecole-catholique/{regionSlug}/region/{regionId}/{truc1}/{truc3}/{page}")
  145.     *
  146.     * @Route("/internat-ecoles/{villeNom}/ville/{villeId}/{truc1}/{page}",      requirements={"page"="\d+"})
  147.     * @Route("/internat-ecoles/{dptSlug}/departement/{truc2}/{truc1}/{page}",   requirements={"page"="\d+"})
  148.     * @Route("/internat-ecoles/{regionSlug}/region/{regionId}/{truc1}/{page}")
  149.     * @Route("/internat-ecoles/{regionSlug}/region/{regionId}/{truc1}/{page}")
  150.     * @Route("/internat-ecoles/{regionSlug}/region/{regionId}/{truc1}/{truc3}/{page}")
  151.     *
  152.     * @Route("/internat-enseignement-professionnel/{villeNom}/ville/{villeId}/{truc1}/{page}",      requirements={"page"="\d+"})
  153.     * @Route("/internat-enseignement-professionnel/{dptSlug}/departement/{truc2}/{truc1}/{page}",   requirements={"page"="\d+"})
  154.     * @Route("/internat-enseignement-professionnel/{regionSlug}/region/{regionId}/{truc1}/{page}")
  155.     * @Route("/internat-enseignement-professionnel/{regionSlug}/region/{regionId}/{truc1}/{page}")
  156.     * @Route("/internat-enseignement-professionnel/{regionSlug}/region/{regionId}/{truc1}/{truc3}/{page}")
  157.     *
  158.     * @Route("/internat-enseignement-professionnel-catholique/{villeNom}/ville/{villeId}/{truc1}/{page}",      requirements={"page"="\d+"})
  159.     * @Route("/internat-enseignement-professionnel-catholique/{dptSlug}/departement/{truc2}/{truc1}/{page}",   requirements={"page"="\d+"})
  160.     * @Route("/internat-enseignement-professionnel-catholique/{regionSlug}/region/{regionId}/{truc1}/{page}")
  161.     * @Route("/internat-enseignement-professionnel-catholique/{regionSlug}/region/{regionId}/{truc1}/{page}")
  162.     * @Route("/internat-enseignement-professionnel-catholique/{regionSlug}/region/{regionId}/{truc1}/{truc3}/{page}")
  163.     *
  164.     * @Route("/internat-enseignement-superieur/{villeNom}/ville/{villeId}/{truc1}/{page}",      requirements={"page"="\d+"})
  165.     * @Route("/internat-enseignement-superieur/{dptSlug}/departement/{truc2}/{truc1}/{page}",   requirements={"page"="\d+"})
  166.     * @Route("/internat-enseignement-superieur/{regionSlug}/region/{regionId}/{truc1}/{page}")
  167.     * @Route("/internat-enseignement-superieur/{regionSlug}/region/{regionId}/{truc1}/{page}")
  168.     * @Route("/internat-enseignement-superieur/{regionSlug}/region/{regionId}/{truc1}/{truc3}/{page}")
  169.     *
  170.     * @Route("/internat-enseignement-superieur-catholique/{villeNom}/ville/{villeId}/{truc1}/{page}",      requirements={"page"="\d+"})
  171.     * @Route("/internat-enseignement-superieur-catholique/{dptSlug}/departement/{truc2}/{truc1}/{page}",   requirements={"page"="\d+"})
  172.     * @Route("/internat-enseignement-superieur-catholique/{regionSlug}/region/{regionId}/{truc1}/{page}")
  173.     * @Route("/internat-enseignement-superieur-catholique/{regionSlug}/region/{regionId}/{truc1}/{page}")
  174.     * @Route("/internat-enseignement-superieur-catholique/{regionSlug}/region/{regionId}/{truc1}/{truc3}/{page}")
  175.     *
  176.     * @Route("/internat-lycee-catholique/{villeNom}/ville/{villeId}/{truc1}/{page}",               requirements={"page"="\d+"})
  177.     * @Route("/internat-lycee-catholique/{dptSlug}/departement/{truc2}/{truc1}/{page}",            requirements={"page"="\d+"})
  178.     * @Route("/internat-lycee-catholique/{regionSlug}/region/{regionId}/{truc1}/{page}")
  179.     * @Route("/internat-lycee-catholique/{regionSlug}/region/{regionId}/{truc1}/{page}")
  180.     * @Route("/internat-lycee-catholique/{regionSlug}/region/{regionId}/{truc1}/{truc3}/{page}",   requirements={"page"="\d+"})
  181.     *
  182.     * @Route("/internat-lycees/{villeNom}/ville/{villeId}/{truc1}/{page}",               requirements={"page"="\d+"})
  183.     * @Route("/internat-lycees/{dptSlug}/departement/{truc2}/{truc1}/{page}",            requirements={"page"="\d+"})
  184.     * @Route("/internat-lycees/{regionSlug}/region/{regionId}/{truc1}/{page}")
  185.     * @Route("/internat-lycees/{regionSlug}/region/{regionId}/{truc1}/{page}")
  186.     * @Route("/internat-lycees/{regionSlug}/region/{regionId}/{truc1}/{truc3}/{page}",   requirements={"page"="\d+"})
  187.      */
  188.     public function internat(
  189.         $villeNom null,
  190.         Ville $villeId null,
  191.         $dptSlug null,
  192.         $regionSlug null,
  193.         $regionId null,
  194.         $truc1 null,
  195.         $truc2 null,
  196.         $page=1
  197.     ) {
  198.         $villeId = !is_null($villeId) ? $villeId->getSlug() : null;
  199.         if (!is_null($truc2)) {
  200.             $dptSlug .= "-" $truc2;
  201.         }
  202.         $lieu $villeId ?? $dptSlug ?? $regionSlug;
  203.         return $this->redirectToRoute(
  204.             'annuaire_liste_par_onglet',
  205.             ['typeOnglet'=> 'internat',
  206.              'niveauOnglet'=> $lieu
  207.          ],
  208.             301
  209.         );
  210.     }
  211.     //
  212.     // Par NIVEAUX
  213.     //
  214.     /**
  215.     * @Route("/{niveau}/{regionSlug}/region/{regionId}/{niveauSlug}/{page}", name="enseignement-annuaire-par-region-prive", requirements={"page"="\d+"})
  216.     * @Route("/{niveau}/{regionSlug}/region/{regionId}/{niveauSlug}/catho/{page}", name="enseignement-annuaire-par-region-catho", requirements={"page"="\d+"})
  217.      */
  218.     public function enseignementAnnuaireParRegion(Region $regionIdRequest $request$niveau$niveauSlug$page=1)
  219.     {
  220.         $currentRoute $request->attributes->get('_route');
  221.         $cathoPrive mb_strpos($currentRoute'-prive') > 'prive' 'catho';
  222.         // Parfois on ne connait pas quelle est la bonne route appelée, du coup on va controler sur $niveau, voir s'il contient 'catho'
  223.         $niveauCatho mb_strpos($niveau'catho') > true false;
  224.         if ($cathoPrive == 'prive' && $niveauCatho) {
  225.             $cathoPrive 'catho';
  226.         } else {
  227.             $cathoPrive 'prive';
  228.         }
  229.         $typeOnglet $this->niveau2typeOnglet($niveau);
  230.         if ($typeOnglet == "")
  231.             return $this->redirectToRoute('homepage', [], 301);
  232.         // Redirection vers AnnuaireController::liste()
  233.         if ($cathoPrive == "catho") {
  234.             return $this->redirectToRoute(
  235.                     'annuaire_liste_par_onglet',
  236.                     ['typeOnglet'=> $typeOnglet,
  237.                      'niveauOnglet'=> $regionId->getSlug(), 'statut[]'=> 'catholique'
  238.                  ],
  239.                     301
  240.                 );
  241.         } else {
  242.             return $this->redirectToRoute(
  243.                     'annuaire_liste_par_onglet',
  244.                     ['typeOnglet'=> $typeOnglet,
  245.                      'niveauOnglet'=> $regionId->getSlug()
  246.                  ],
  247.                     301
  248.                 );
  249.         }
  250.     }
  251.     /**
  252.      * @Route("/{niveau}/{villeSlug}/ville/{villeId}/{niveauSlug}/{page}", name="enseignement-annuaire-par-ville-prive", requirements={"page"="\d+"})
  253.      * @Route("/{niveau}/{villeSlug}/ville/{villeId}/{niveauSlug}/catho/{page}", name="enseignement-annuaire-par-ville-catho", requirements={"page"="\d+"})
  254.      */
  255.     public function enseignementAnnuaireParVille(Ville $villeIdRequest $request$niveau$niveauSlug$page=1)
  256.     {
  257.         $currentRoute $request->attributes->get('_route');
  258.         $cathoPrive mb_strpos($currentRoute'-prive') > 'prive' 'catho';
  259.         // Parfois on ne connait pas quelle est la bonne route appelée, du coup on va controler sur $niveau, voir s'il contient 'catho'
  260.         $niveauCatho mb_strpos($niveau'catho') > true false;
  261.         if ($cathoPrive == 'prive' && $niveauCatho) {
  262.             $cathoPrive 'catho';
  263.         } else {
  264.             $cathoPrive 'prive';
  265.         }
  266.         // Redirection vers AnnuaireController::liste()
  267.         if ($cathoPrive == "catho") {
  268.             return $this->redirectToRoute(
  269.                     'annuaire_liste_par_onglet',
  270.                     ['typeOnglet'=> $this->niveau2typeOnglet($niveau),
  271.                      'niveauOnglet'=> $villeId->getDepartement()->getSlug(), 'statut[]'=> 'catholique'
  272.                  ],
  273.                     301
  274.                 );
  275.         } else {
  276.             return $this->redirectToRoute(
  277.                     'annuaire_liste_par_onglet',
  278.                     ['typeOnglet'=> $this->niveau2typeOnglet($niveau),
  279.                      'niveauOnglet'=> $villeId->getDepartement()->getSlug()
  280.                  ],
  281.                     301
  282.                 );
  283.         }
  284.     }
  285.     /**
  286.     * @Route("/{niveau}/{niveauSlug}/fr", name="enseignement-annuaire-niveau-prive")
  287.     * @Route("/{niveau}/{niveauSlug}/catho/fr", name="enseignement-annuaire-niveau-catho")
  288.      */
  289.     public function enseignementAnnuaire($niveauRequest $requestRegion $regionId null$niveauSlug "")
  290.     {
  291.         // 2025 - Redirection vers les pages annuaire du menu principal
  292.         switch ($niveau) {
  293.             case 'ecoles':
  294.             case 'ecoles-catholiques':
  295.                 return $this->redirectToRoute('annuaire_liste_par_onglet',
  296.                     [
  297.                         "niveauOnglet" => "tout",
  298.                         "typeOnglet"   => "ecole",
  299.                     ], 301);
  300.             case 'college':
  301.             case 'colleges':
  302.             case 'colleges-catholiques':
  303.                 return $this->redirectToRoute('annuaire_liste_par_onglet',
  304.                     [
  305.                         "niveauOnglet" => "tout",
  306.                         "typeOnglet"   => "college",
  307.                     ], 301);
  308.             case 'lycees':
  309.             case 'lycees-catholiques':
  310.                 return $this->redirectToRoute('annuaire_liste_par_onglet',
  311.                     [
  312.                         "niveauOnglet" => "tout",
  313.                         "typeOnglet"   => "lycee",
  314.                     ], 301);
  315.             case 'ecoles-lycees-professionnels'// Lycées professionnels
  316.             case 'ecoles-lycees-professionnels-catholiques':
  317.                 return $this->redirectToRoute('annuaire_liste_par_onglet',
  318.                     [
  319.                         "niveauOnglet" => "tout",
  320.                         "typeOnglet"   => "professionnel",
  321.                     ], 301);
  322.             case 'ecoles-lycees-agricoles'// Lycées agricoles
  323.             case 'ecoles-lycees-agricoles-catholiques':
  324.                 return $this->redirectToRoute('annuaire_liste_par_onglet',
  325.                     [
  326.                         "niveauOnglet" => "bac-pro",
  327.                         "typeOnglet"   => "professionnel",
  328.                         // "filiere[0]" => "LYCPRO-BACP-AGRI" // ça fonctionne pas :(
  329.                     ], 301);
  330.             case 'classes-prepas':
  331.             case 'classes-prepas-catholiques'
  332.                 return $this->redirectToRoute('annuaire_liste_par_onglet_sup',
  333.                     [
  334.                         "niveauOnglet"   => "classes-preparatoires",
  335.                         "sousTypeOnglet" => "niveau"
  336.                     ], 301);
  337.             case 'universites':
  338.             case 'universites-catholiques':
  339.                 return $this->redirectToRoute('annuaire_liste_par_onglet_sup',
  340.                     [
  341.                         "niveauOnglet" => "tout",
  342.                         "sousTypeOnglet" => null
  343.                     ], 301);
  344.             case 'ecoles-de-commerce':
  345.             case 'ecoles-de-commerce-catholiques':
  346.                 return $this->redirectToRoute('annuaire_liste_par_onglet_sup',
  347.                     [
  348.                         "niveauOnglet" => "bac-4-bac-5-master",
  349.                         "sousTypeOnglet" => "niveau",
  350.                         // "filiere%5B0%5D" > "PBAC-BAC45-CDV"
  351.                     ], 301);
  352.             case 'ecoles-d-ingenieurs':
  353.             case 'ecoles-d-ingenieurs-catholiques':
  354.                 return $this->redirectToRoute('annuaire_liste_par_onglet_sup',
  355.                     [
  356.                         "niveauOnglet" => "ecoles-d-ingenieurs",
  357.                         "sousTypeOnglet" => "niveau"
  358.                     ], 301);
  359.             case 'ecoles-specialisees':
  360.             case 'ecoles-specialisees':
  361.                 return $this->redirectToRoute('annuaire_liste_par_onglet_sup',
  362.                     [
  363.                         "niveauOnglet" => "tout",
  364.                         "sousTypeOnglet" => null
  365.                     ], 301);
  366.         }
  367.         return $this->redirectToRoute('homepage', [], 301);
  368.         /*
  369.         $currentRoute = $request->attributes->get('_route');
  370.         $cathoPrive = mb_strpos($currentRoute, '-prive') > 0 ? 'prive' : 'catho';
  371.         $cathoPriveLibelle = $cathoPrive == 'prive' ? "Privé" : "Catholique";
  372.         $etablissements = [];
  373.         if ($currentRoute == 'enseignement-annuaire-niveau-prive-region' || $currentRoute == 'enseignement-annuaire-niveau-catho-region') {
  374.             $lieu = $this->slugify->revealLieu($regionId->getSlug());
  375.             $quoi = '';
  376.             $quoi = $this->slugify->revealQuoi($quoi);
  377.             $parametres = new Parametres();
  378.             if ($cathoPrive == 'catho') {
  379.                 $parametres->catholique = true;
  380.             }
  381.             $parametres->setQuoiLieu($quoi, $lieu);
  382.             $parametres->pageActuele = $request->query->getInt('page', 1);
  383.             $parametres->maxParPage = self::MAX * 2;
  384.             // Filtrer les ets selon le niveau
  385.             $parametres = $this->filtrerParNiveau($parametres, $niveauSlug);
  386.             $etablissements = $this->moteur->cherche($parametres);
  387.         }
  388.         $regions = $this->getDoctrine()->getRepository(Region::class)->findAll();
  389.         $villes  = $this->getDoctrine()->getRepository(Ville::class)
  390.                     ->findBy(
  391.                         [
  392.                             'libelle' => [
  393.                                 'AJACCIO', 'AMIENS', 'BESANCON', 'BORDEAUX', 'CAEN', 'CHALONS-EN-CHAMPAGNE', 'CLERMONT-FERRAND',
  394.                                 'DIJON', 'LILLE', 'LIMOGES', 'LYON', 'MARSEILLE', 'METZ', 'MONTPELLIER', 'NANTES', 'ORLEANS',
  395.                                 'PARIS', 'POITIERS', 'RENNES', 'ROUEN', 'STRASBOURG', 'TOULOUSE'
  396.                             ]
  397.                         ]
  398.                     );
  399.         // Ajouter le "-" à la fin pour séparer entre LYC et LYCPRO
  400.         // Ainsi on aura LYC- et LYCPRO-
  401.         $secteurs = $this->getDoctrine()->getRepository(Items::class)->getFilieres($this->niveau2slug($niveau) . "-");
  402.         // Texte SEO
  403.         $formation = $niveauSlug . "-";  // Car getTitreEtTexte supprime le dernier caractère, héritage d'un autre module
  404.         $seoTitre = $seoTexte = "";
  405.         list($seoTitre, $seoTexte) = $this->getDoctrine()->getRepository(SeoTexteReferencementDiplome::class)->getTitreEtTexte($formation);
  406.         // Nbr d'étabs
  407.         // Exp : /ecoles/ECOL/fr >> impossible à calculer ici !!
  408.         $nbrEtabs = "";
  409.         $seoTexteMetadesc = html_entity_decode(str_replace('[nbr-etabs]', $nbrEtabs, $seoTexte), ENT_QUOTES);
  410.         $seoTexteMetadesc = str_replace(array("\n", "\t", "\r"), '', $seoTexteMetadesc);
  411.         return $this->render('page/enseignement-annuaire-niveau.html.twig', [
  412.             'regions' => $regions,
  413.             'region' => $regionId,
  414.             'villes'  => $villes,
  415.             'niveau'  => $niveau,
  416.             'niveauSlug'     => $this->niveau2slug($niveau),
  417.             'secteurs' => $secteurs,
  418.             'cathoPrive' => $cathoPrive,
  419.             'cathoPriveLibelle' => $cathoPriveLibelle,
  420.             'etablissements' => $etablissements,
  421.             'typeOnglet' => $this->niveau2typeOnglet($niveau),
  422.             'seoTitre' => str_replace('[nbr-etabs]', $nbrEtabs, $seoTitre),
  423.             'seoTexte' => str_replace('[nbr-etabs]', $nbrEtabs, $seoTexte),
  424.             'seoTexteMetadesc' => $seoTexteMetadesc           
  425.         ]);
  426.         */
  427.     }
  428.     // CATHO - Liste des départements
  429.     // IMPORTANT : doit être AVANT enseignementAnnuaireParDepartement()
  430.     /**
  431.     * @Route("/enseignement-prive/{departementSlug}/departement/{departementId}/{page}", name="enseignement-catholique-par-departement-prive", requirements={"page"="\d+"})
  432.     * @Route("/enseignement-catholique/{departementSlug}/departement/{departementId}/{page}", name="enseignement-catholique-par-departement-catho", requirements={"page"="\d+"})
  433.      */
  434.     public function enseignementCatholiqueParDepartementOLD(Departement $departementIdRequest $request$page=1)
  435.     {
  436.         $currentRoute $request->attributes->get('_route');
  437.         // Redirection vers AnnuaireController::liste()
  438.         if ($currentRoute == "enseignement-catholique-par-departement-catho") {
  439.             return $this->redirectToRoute('annuaire_catho', ['lieu'=> $departementId->getSlug(), 'statut[]'=> 'catholique'], 301);
  440.         } else {
  441.             return $this->redirectToRoute('annuaire_prive', ['lieu'=> $departementId->getSlug()], 301);
  442.         }
  443.     }
  444.     /**
  445.     * @Route("/{niveau}/{departementSlug}/departement/{departementId}/{niveauSlug}/{page}", name="enseignement-annuaire-par-departement", requirements={"page"="\d+"})
  446.      * @Route("/{niveau}/{departementSlug}/departement/{departementId}/{niveauSlug}/catho/{page}", name="enseignement-annuaire-par-departement-catho", requirements={"page"="\d+"})
  447.      */
  448.     public function enseignementAnnuaireParDepartement(Departement $departementIdRequest $request$niveau$niveauSlug$page=1)
  449.     {
  450.         $currentRoute $request->attributes->get('_route');
  451.         if ($niveau == "enseignement-catholique" || $niveau == "enseignement-prive") {
  452.             // Redirection vers AnnuaireController::liste()
  453.             if ($currentRoute == "enseignement-annuaire-par-departement-catho") {
  454.                 return $this->redirectToRoute('annuaire_catho', ['lieu'=> $departementId->getSlug(), 'statut[]'=> 'catholique'], 301);
  455.             } else {
  456.                 return $this->redirectToRoute('annuaire_prive', ['lieu'=> $departementId->getSlug()], 301);
  457.             }
  458.         } else {
  459.             $cathoPrive mb_strpos($currentRoute'-prive') > 'prive' 'catho';
  460.             // Parfois on ne connait pas quelle est la bonne route appelée, du coup on va controler sur $niveau, voir s'il contient 'catho'
  461.             $niveauCatho mb_strpos($niveau'catho') > true false;
  462.             if ($cathoPrive == 'prive' && $niveauCatho) {
  463.                 $cathoPrive 'catho';
  464.             } else {
  465.                 $cathoPrive 'prive';
  466.             }
  467.             if ($currentRoute == "enseignement-annuaire-par-departement-catho" || $cathoPrive == 'catho') {
  468.                 return $this->redirectToRoute(
  469.                     'annuaire_liste_par_onglet',
  470.                     ['typeOnglet'=> $this->niveau2typeOnglet($niveau),
  471.                      'niveauOnglet'=> $departementId->getSlug(), 'statut[]'=> 'catholique'
  472.                  ],
  473.                     301
  474.                 );
  475.             } else {
  476.                 return $this->redirectToRoute(
  477.                     'annuaire_liste_par_onglet',
  478.                     ['typeOnglet'=> $this->niveau2typeOnglet($niveau),
  479.                      'niveauOnglet'=> $departementId->getSlug()
  480.                  ],
  481.                     301
  482.                 );
  483.             }
  484.         }
  485.     }
  486.     /*
  487.     Calcule le SLUG inséré à la fin de chaque URL en fonction du niveau
  488.     */
  489.     private function niveau2slug($niveau)
  490.     {
  491.         $res = [
  492.             'ecole'    => 'ECOL',
  493.             'ecole-catholique' => 'ECOL',
  494.             'ecoles'    => 'ECOL',
  495.             'ecoles-catholiques' => 'ECOL',
  496.             'collegs'  => 'COLL',
  497.             'collegs-catholiqus' => 'COLL',
  498.             'colleges'  => 'COLL',
  499.             'colleges-catholiques' => 'COLL',
  500.             'lycees'    => 'LYC',
  501.             'lycees-catholiques' => 'LYC',
  502.             'lycees'    => 'LYC',
  503.             'lycees-catholiques' => 'LYC',
  504.             'ecoles-lycees-professionnels-catholiques' => 'LYPRO',
  505.             'ecoles-lycees-professionnels' => 'LYPRO',
  506.             'ecoles-lycees-agricoles' => 'LYAG',
  507.             'ecoles-lycees-agricoles-catholiques' => 'LYAG',
  508.             'universite' => 'UNIV',
  509.             'universite-catholique' => 'UNIV',
  510.             'universites' => 'UNIV',
  511.             'universites-catholiques' => 'UNIV',
  512.             'classes-prepas' => 'PBAC-PREPA',
  513.             'classes-prepas-catholiques' => 'PBAC-PREPA',
  514.             'ecoles-de-commerce' => 'PBAC-COM',
  515.             'ecoles-de-commerce-catholiques' => 'PBAC-COM',
  516.             'ecoles-d-ingenieurs' => 'PBAC-ING',
  517.             'ecoles-d-ingenieurs-catholiques' => 'PBAC-ING',
  518.             'ecoles-specialisees' => 'ESPE',
  519.             'ecoles-specialisees-catholiques' => 'ESPE',
  520.         ];
  521.         return $res[trim($niveau)];
  522.     }
  523.     /*
  524.     Ajoute les filtres à papliquer selon le SLUG du niveau (se baser sur le SLUG est plus facile que sur le niveau)
  525.     */
  526.     private function filtrerParNiveau(Parametres $parametres$niveauSlug)
  527.     {
  528.         switch ($niveauSlug) {
  529.             case 'ECOL':
  530.                 $parametres->types = ['02-ELEM''03-PRIM''01-MATER'];
  531.                 break;
  532.             case 'COLL':
  533.                 $parametres->types = ['04-COLL'];
  534.                 break;
  535.             case 'LYC':
  536.                 $parametres->types = ['05-LGEN''06-LTECH''07-LEGT'];
  537.                 break;
  538.             case 'LYAG':
  539.                 $parametres->types = ['08-LAGRI'];
  540.                 break;
  541.             case 'LYPRO':
  542.                 $parametres->types = ['09-LPROF''10-LEAP'];
  543.                 break;
  544.             case 'PBAC-PREPA':
  545.                 // $parametres->formations = ['PBAC-PREPA-'];
  546.                 $parametres->addFiltres(['SOUS_TYPE-EPRE']);
  547.                 break;
  548.             case 'UNIV':
  549.                 $parametres->types = ['12-SUP'];
  550.                 break;
  551.             case 'PBAC-COM':
  552.                 $parametres->formations = ['PBAC-BAC2-CDV''PBAC-BAC3-CDV''PBAC-BAC45-CDV''PBAC-FPC-DISTRI''PBAC-PREPA-COM'];
  553.                 // $parametres->addFiltres(['SOUS_TYPE-ECOM']);
  554.                 break;
  555.             case 'PBAC-ING':
  556.                 $parametres->addFiltres(['SOUS_TYPE-EING']);
  557.                 break;
  558.             case 'ESPE':
  559.                 $parametres->types = ['16-ESPEC'];
  560.                 break;
  561.             default:
  562.                 // code...
  563.                 break;
  564.         }
  565.         return $parametres;
  566.     }
  567.     /*
  568.     Renvoi le typeOnglet (nécessaire pour les onglets) en partant du niveau
  569.     */
  570.     private function niveau2typeOnglet($niveau)
  571.     {
  572.         $res = [
  573.             'ecole'    => 'ecole',
  574.             'ecole-catholique' => 'ecole',
  575.             'ecoles'    => 'ecole',
  576.             'ecoles-catholiques' => 'ecole',
  577.             'college'  => 'college',
  578.             'college-catholique' => 'college',
  579.             'colleges'  => 'college',
  580.             'colleges-catholiques' => 'college',
  581.             'lycee'    => 'lycee',
  582.             'lycee-catholique' => 'lycee',
  583.             'lycees'    => 'lycee',
  584.             'lycees-catholiques' => 'lycee',
  585.             'ecole-lycee-professionnel-catholique' => 'professionnel',
  586.             'ecole-lycee-professionnel' => 'professionnel',
  587.             'ecoles-lycees-professionnels-catholiques' => 'professionnel',
  588.             'ecoles-lycees-professionnels' => 'professionnel',
  589.             'bac-pro-vente' => 'professionnel',
  590.             'ecole-lycees-agricole' => 'professionnel',
  591.             'ecole-lycees-agricole-catholique' => 'professionnel',
  592.             'ecoles-lycees-agricoles' => 'professionnel',
  593.             'ecoles-lycees-agricoles-catholiques' => 'professionnel',
  594.             'universite' => 'superieur',
  595.             'universite-catholique' => 'superieur',
  596.             'universites' => 'superieur',
  597.             'universites-catholiques' => 'superieur',
  598.             'classes-prepas' => 'superieur',
  599.             'classes-prepas-catholiques' => 'superieur',
  600.             'ecoles-de-commerce' => 'superieur',
  601.             'ecoles-de-commerce-catholiques' => 'superieur',
  602.             'ecoles-d-ingenieurs' => 'superieur',
  603.             'ecoles-d-ingenieurs-catholiques' => 'superieur',
  604.             'ecoles-specialisees' => 'superieur',
  605.             'ecoles-specialisees-catholiques' => 'superieur',
  606.             'internat' => 'internat'
  607.         ];
  608.         return @$res[$niveau];
  609.     }
  610.     // ---- Liste des filières par niveau --------------------------
  611.     /**
  612.     * @Route("/filiere/{typeOnglet}/{niveauOnglet}", name="filieres")
  613.      */
  614.     public function filieres($typeOnglet$niveauOngletRequest $request)
  615.     {
  616.         switch ($typeOnglet) {
  617.             case 'lycee'
  618.                 switch ($niveauOnglet) {
  619.                     case 'technologique':
  620.                         return $this->redirectToRoute('annuaire_liste_par_onglet', ['niveauOnglet' => $niveauOnglet'typeOnglet' => $typeOnglet], 301);
  621.                     default:
  622.                         return $this->redirectToRoute('annuaire_liste_par_onglet', ['niveauOnglet' => 'tout''typeOnglet' => $typeOnglet], 301);
  623.                 }
  624.             case 'professionnel'
  625.                 switch ($niveauOnglet) {
  626.                     case 'cap':
  627.                     case 'bac-pro':
  628.                     case 'formation-pro-continue':
  629.                         return $this->redirectToRoute('annuaire_liste_par_onglet', ['niveauOnglet' => $niveauOnglet'typeOnglet' => $typeOnglet], 301);
  630.                     default:
  631.                         return $this->redirectToRoute('annuaire_liste_par_onglet', ['niveauOnglet' => 'tout''typeOnglet' => $typeOnglet], 301);
  632.                 }
  633.             case 'superieur'
  634.                 switch ($niveauOnglet) {
  635.                     case 'bac-2-bts':
  636.                     case 'classes-preparatoires':
  637.                     case 'ecoles-d-ingenieurs':
  638.                     case 'bac-3-licence':
  639.                     case 'bac-4-bac-5-master':
  640.                     case 'formation-professionnelle-continue':
  641.                         return $this->redirectToRoute('annuaire_liste_par_onglet_sup', ['sousTypeOnglet' => 'niveau''niveauOnglet' => $niveauOnglet], 301);
  642.                     default:
  643.                         return $this->redirectToRoute('annuaire_liste_par_onglet_sup', ['niveauOnglet' => 'tout''sousTypeOnglet' => null], 301);
  644.                 }
  645.             default:
  646.                 return $this->redirectToRoute('homepage', [], 301);
  647.                 break;
  648.         }
  649.         return $this->redirectToRoute('homepage', [], 301);
  650.     }
  651.     // ---- Liste des diplômes par filière  --------------------------
  652.     /**
  653.     * @Route("/diplome/{typeOnglet}/{niveauOnglet}/{filiere}", name="diplomes")
  654.     * @Route("/diplome/{typeOnglet}/{niveauOnglet}/{filiere}/{oldAbreviation}", name="diplomes_old")
  655.      */
  656.     public function diplomes($typeOnglet$niveauOnglet$filiere$oldAbreviation nullRequest $request)
  657.     {
  658.         return $this->filieres($typeOnglet$niveauOnglet$request);
  659.     }
  660.     /**
  661.      * @Route("/annuaire-diplomes", name="annuaire-diplomes", methods={"GET"})
  662.      */
  663.     public function annuaireDiplomes(): Response
  664.     {
  665.         return $this->redirectToRoute('guide-inscription-page', ['slug' => 'trouvez-le-diplome-qui-vous-convient'], 301);
  666.     }
  667. }