src/Controller/Lenord/MainLenordController.php line 1316

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Lenord;
  3. use App\Entity\Cantons;
  4. use App\Entity\Commune;
  5. use App\Entity\Contact;
  6. use App\Entity\CustomForm;
  7. use App\Entity\Document;
  8. use App\Entity\Footer;
  9. use App\Entity\FooterSites;
  10. use App\Entity\FormulaireThematique;
  11. use App\Entity\Glossaire;
  12. use App\Entity\InscritNewsletter;
  13. use App\Entity\LogEs;
  14. use App\Entity\MailElu;
  15. use App\Entity\PageAccueil;
  16. use App\Entity\PageAccueilService;
  17. use App\Entity\Pages;
  18. use App\Entity\PageSatellite;
  19. use App\Entity\PagesLegales;
  20. use App\Entity\PolitiqueDepartementale;
  21. use App\Entity\Service;
  22. use App\Entity\TypeDocument;
  23. use App\Entity\User;
  24. use DateTime;
  25. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  26. use Doctrine\ORM\EntityManagerInterface;
  27. use App\Utilities\Feed;
  28. use App\Service\ElasticsearchService;
  29. use App\Service\EpingleService;
  30. use App\Service\OfficeMailService;
  31. use App\Service\WemapService;
  32. use App\Service\RssService;
  33. use App\Service\SendgridMailService;
  34. use App\Service\SeoService;
  35. use Symfony\Component\Routing\Annotation\Route;
  36. use Symfony\Component\HttpFoundation\JsonResponse;
  37. use Symfony\Component\HttpFoundation\Request;
  38. use Symfony\Component\HttpFoundation\Response;
  39. use Dompdf\Dompdf;
  40. use Dompdf\Options;
  41. /**
  42.  * @method User getUser()
  43.  */
  44. //#[Route(host: "lenord.local")]
  45. #[Route(host"lenord.spontaneit.fr")]
  46. //#[Route(host: "lenord.fr")]
  47. //#[Route(host:"localhost")]
  48. class MainLenordController extends AbstractController
  49. {
  50.   protected mixed $params = [];
  51.   public function __construct(
  52.     private EntityManagerInterface $em,
  53.     private Feed $feedUtilities,
  54.     private ElasticsearchService $es_service,
  55.     private WemapService $wemap_service,
  56.     private RssService $rss_service,
  57.     private EpingleService $epingle_service,
  58.     private SendgridMailService $sendgrid_service,
  59.     private SeoService $seo_service
  60.   ) {
  61.     $this->params['title'] = "";
  62.     $this->params['meta_description'] = "";
  63.     $this->params['footer'] = $this->em->getRepository(Footer::class)->find(1);
  64.     $this->params['epingles'] = [];
  65.     $this->params['is_pdf'] = 0;
  66.     $this->params['is_preview'] = 0;
  67.     $this->params['breadcrumb'] = [];
  68.   }
  69.   
  70.   #[Route(path'/test_email'name'lenord_test_email')]
  71.   public function lenord_test_email(OfficeMailService $mail_service){
  72.     dd($mail_service->testsend());
  73.   }
  74.   
  75.   #[Route(path'/store_preferences'name'lenord_store_preferences')]
  76.   public function storeUserPreferences(Request $request): Response
  77.   {
  78.     $post $request->request;
  79.     $function $post->get('function');
  80.     $user $this->getUser();
  81.     switch ($function) {
  82.       case 'store_dark_mode':
  83.         $user->setDarkMode((int)$post->get('dark_mode'));
  84.         $this->em->persist($user);
  85.         $this->em->flush();
  86.         break;
  87.       case 'store_font_size':
  88.         $user->setFontSize($post->get('font_size'));
  89.         $this->em->persist($user);
  90.         $this->em->flush();
  91.         break;
  92.       case 'store_font_family':
  93.         $user->setFontFamily($post->get('font_family'));
  94.         $this->em->persist($user);
  95.         $this->em->flush();
  96.         break;
  97.     }
  98.     return new JsonResponse(['success' => true]);
  99.   }
  100.   #[Route(path'/compte-cree/{token}'name'user_activate')]
  101.   public function activateUser(string $token): Response
  102.   {
  103.     $user $this->em->getRepository(User::class)->findOneBy(['token_activation' => $token]);
  104.     if ($user == null) {
  105.       $this->params['message'] = 'Compte déjà activé ou inexistant';
  106.       return $this->render('Nordinfo/Main/endformerror.html.twig'$this->params);
  107.     }
  108.     $user->setTokenActivation(null)
  109.       ->setActive(true);
  110.     $this->em->persist($user);
  111.     $this->em->flush();
  112.     $this->params['message'] = "Grâce à mon compte, <b>mes préférences</b> (lieux de vie, centres d'intérêt) et <b>mes paramètres personnels</b> seront conservés quel que soit le terminal de consultation (smartphone, tablette, ordinateur), de même pour mes contenus mis en favoris. Vous pouvez également <a href='/proposer-un-evenement'>proposer un événement</a> dans l’agenda.";
  113.     if ($user->getRole() == "vip") {
  114.       $this->params['message'] = "Grâce à mon compte, mes préférences (mes lieux de vie, mes centres d’intérêt) et mes paramètres personnels (affichage, favoris) seront conservés quel que soit mon terminal de consultation (smartphone, tablette, ordinateur). Je peux également <a href='/proposer-un-evenement'>proposer un événement</a> dans l’agenda. 
  115.       Mon profil premium me permet d'accéder à des contenus exclusifs ou en avant-première.
  116.       Ces contenus sont indiqués par un cadenas vert dans L'info, Vidéos et dans Mes actus.";
  117.     }
  118.     return $this->render('Nordinfo/Main/endregister.html.twig'$this->params);
  119.   }
  120.   #[Route(path'/ajax/territory_lenord'name'ajax_territory_lenord')]
  121.   public function searchTerritoryLenord(Request $request): Response
  122.   {
  123.     $search $request->request->get('search');
  124.     //$test = $this->em->getRepository(Cantons::class)->searchCommune($search);
  125.     $test $this->em->getRepository(Commune::class)->findOneBy(array('commune' => $search));
  126.     if ($test == null) {
  127.       $response = ['error' => 'Aucun territoire trouvé'];
  128.     } else {
  129.       $response = ['error' => false't' => ['id' => $test->getTerritoire()->getId(), 'name' => $test->getTerritoire()->getDisplayName()]];
  130.     }
  131.     return new JsonResponse($response);
  132.   }
  133.   #[Route(path'/'name'lenord_home')]
  134.   public function home(): Response
  135.   {
  136.     $this->params['title'] = "";
  137.     $this->params['meta_description'] = "Le site du Département du Nord présentant ses politiques, ses services, son institution et son actualité";
  138.     $this->params['home'] = $this->em->getRepository(PageAccueil::class)->find(1);
  139.     $this->params['strates'] = $this->getOrderStrates($this->params['home']);
  140.     $this->params['politiques'] = $this->em->getRepository(PolitiqueDepartementale::class)->findBy(['statut' => 5], ['ordre' => 'ASC']);
  141.     $this->params['sites'] = $this->em->getRepository(FooterSites::class)->getForFooter(true);
  142.     $this->params['pages'] = $this->em->getRepository(Pages::class)->getPages(01);
  143.     $this->params['nordinfo_rss'] = null;
  144.     $this->params['rand_image'] = null;
  145.     if ($this->params['home']->getImageActive() == true && $this->params['home']->getImages()->count() > 0) {
  146.       $rand_image random_int(0$this->params['home']->getImages()->count() - 1);
  147.       $this->params['rand_image'] = $rand_image;
  148.     }
  149.     if ($this->params['home']->getNordinfoRss() != null) {
  150.       $this->params['nordinfo_rss'] = $this->rss_service->getArrayArticle($this->params['home']->getNordinfoRss());
  151.     }
  152.     $this->params['home_service'] = $this->em->getRepository(PageAccueilService::class)->find(1);
  153.     $count_services_home $this->params['home_service']->getServices()->count();
  154.     $this->params['services_forcomplete'] = [];
  155.     if ($count_services_home 9) {
  156.       $this->params['services_forcomplete'] = $this->em->getRepository(Service::class)->findBy(['statut' => 5], ['view_count' => 'DESC'], 7);
  157.     }
  158.     $this->params['epingles'] = $this->epingle_service->getEpingles('lenord');
  159.     $epingles_ $this->epingle_service->getEpinglesSection('home_lenord');
  160.     foreach ($epingles_ as $epingle) {
  161.       array_push($this->params['epingles'], $epingle);
  162.     }
  163.     return $this->render('Lenord/Main/home.html.twig'$this->params);
  164.   }
  165.   #[Route(path'/plan-du-site'name'lenord_plandusite')]
  166.   public function lenord_plandusite(Request $request): Response
  167.   {
  168.     $this->params['title'] = "Plan du site";
  169.     $this->params['meta_description'] = "Le plan du site du Département du Nord";
  170.     $this->params['breadcrumb'] = [['alias' => '/''titre' => 'Accueil'], ['alias' => '''titre' => $this->params['title']]];
  171.     $this->params['seo_breadcrumb'] = json_encode($this->seo_service->getSeoBreadcrumb($this->params['breadcrumb'], $request),  JSON_UNESCAPED_SLASHES JSON_HEX_APOS);
  172.     $this->params['referer'] = $request->headers->get('referer');
  173.     $urls = [];
  174.     $urls['index']['parent']['url'] = $this->generateUrl('lenord_home');
  175.     $urls['index']['parent']['name'] = "Accueil";
  176.     $urls['politiques']['parent']['url'] = $this->generateUrl('lenord_nos_politiques');
  177.     $urls['politiques']['parent']['name'] = "Nos politiques";
  178.     $j 0;
  179.     $politiques $this->em->getRepository(PolitiqueDepartementale::class)->findBy(['statut' => 5]);
  180.     foreach ($politiques as $politique) {
  181.       $urls['politiques']['children'][$j]['url'] = $this->generateUrl('lenord_politique', ['alias_url' => $politique->getAliasUrl()]);
  182.       $urls['politiques']['children'][$j]['name'] = $politique->getTitre();
  183.       $j++;
  184.     }
  185.     $urls['institution']['parent']['url'] = $this->generateUrl('lenord_institutions');
  186.     $urls['institution']['parent']['name'] = "L'institution";
  187.     $i 0;
  188.     $cmsPages $this->em->getRepository(Pages::class)->getPages(01);
  189.     foreach ($cmsPages as $item) {
  190.       $urls['institution']['children'][$i]['url'] = $this->generateUrl('lenord_pagecms', ['slug' => $item->getAliasUrl()]);
  191.       $urls['institution']['children'][$i]['name'] = $item->getTitre();
  192.       if ($item->getAliasUrl() == "les-conseillers-departementaux") {
  193.         //Elus
  194.         $h 0;
  195.         $elus $this->em->getRepository(Contact::class)->getContacts_(1);
  196.         foreach ($elus as $elu) {
  197.           $urls['institution']['children'][$i]['children'][$h]['url'] = $this->generateUrl('elus_lenord_detail', ['slug' => $elu->getSlug()]);
  198.           $urls['institution']['children'][$i]['children'][$h]['name'] = $elu->getFirstName() . ' ' $elu->getLastName();
  199.           $h++;
  200.         }
  201.       }
  202.       $i++;
  203.     }
  204.     $urls['cartographie']['parent']['url'] = $this->generateUrl('cartographie');
  205.     $urls['cartographie']['parent']['name'] = "Cartographie";
  206.     $urls['documents']['parent']['url'] = $this->generateUrl('espacedoc');
  207.     $urls['documents']['parent']['name'] = "Espace documentaire";
  208.     $urls['support']['parent']['url'] = $this->generateUrl('lenord_support');
  209.     $urls['support']['parent']['name'] = "Contact";
  210.     $urls['glossaire']['parent']['url'] = $this->generateUrl('lenord_glossaire');
  211.     $urls['glossaire']['parent']['name'] = "Glossaire";
  212.     $urls['recherche']['parent']['url'] = $this->generateUrl('lenord_recherche');
  213.     $urls['recherche']['parent']['name'] = "Recherche";
  214.     $urls['infolettre']['parent']['url'] = $this->generateUrl('lenord_page_legale', ['slug' => 'infolettre']);
  215.     $urls['infolettre']['parent']['name'] = "Infolettre";
  216.     $urls['mentionlegale']['parent']['url'] = $this->generateUrl('lenord_page_legale', ['slug' => 'mentions-legales']);
  217.     $urls['mentionlegale']['parent']['name'] = "Mentions légales";
  218.     $urls['accessibilite']['parent']['url'] = $this->generateUrl('lenord_page_legale', ['slug' => 'accessibilite']);
  219.     $urls['accessibilite']['parent']['name'] = "Accessibilité";
  220.     $urls['donneespersonnelles']['parent']['url'] = $this->generateUrl('lenord_page_legale', ['slug' => 'donnees-personnelles']);
  221.     $urls['donneespersonnelles']['parent']['name'] = "Données personnelles";
  222.     $urls['presse']['parent']['url'] = $this->generateUrl('lenord_page_legale', ['slug' => 'presse']);
  223.     $urls['presse']['parent']['name'] = "Espace Presse";
  224.     $urls['schema']['parent']['url'] = $this->generateUrl('lenord_page_legale', ['slug' => 'schema-pluriannuel-accessibilite-numerique']);
  225.     $urls['schema']['parent']['name'] = "Schéma Pluriannuel d'Accessibilité Numérique 2024-2027";
  226.     $this->params['sites'] = $this->em->getRepository(FooterSites::class)->getForFooter(true);
  227.     $this->params['urls'] = $urls;
  228.     $this->params['epingles'] = $this->epingle_service->getEpingles('lenord');
  229.     if ($request->get('function') == 'download_pdf') {
  230.       $this->params['is_pdf'] = 1;
  231.       $pdfOptions = new Options();
  232.       $pdfOptions->set('defaultFont''Arial');
  233.       $pdfOptions->setIsRemoteEnabled(true);
  234.       $dompdf = new Dompdf($pdfOptions);
  235.       $html $this->renderView('Lenord/Main/plandusite.html.twig'$this->params);
  236.       $dompdf->loadHtml($html);
  237.       $dompdf->setPaper('A4''portrait');
  238.       $dompdf->render();
  239.       $output $dompdf->output();
  240.       $filename sprintf('le-nord-%s.pdf'$this->params['title']);
  241.       return new Response(
  242.         $output,
  243.         200,
  244.         [
  245.           'Content-Type' => 'application/pdf',
  246.           'Content-Disposition' => sprintf('attachment; filename="%s"'"$filename"),
  247.         ]
  248.       );
  249.     } else {
  250.       return $this->render('Lenord/Main/plandusite.html.twig'$this->params);
  251.     }
  252.   }
  253.   #[Route(path'/sitemap.xml'name'lenord_plandusite_xml')]
  254.   public function lenord_plandusite_xml(): Response
  255.   {
  256.     $domain "https://lenord.fr";
  257.     $dom = new \DOMDocument('1.0''UTF-8');
  258.     $rss $dom->createElement('urlset');
  259.     $rss->setAttribute('xmlns''http://www.sitemaps.org/schemas/sitemap/0.9');
  260.     $rss_node $dom->appendChild($rss);
  261.     $url $dom->createElement('url');
  262.     $url_node $rss_node->appendChild($url);
  263.     $url_node->appendChild($dom->createElement('loc'$domain $this->generateUrl('lenord_home')));
  264.     $url $dom->createElement('url');
  265.     $url_node $rss_node->appendChild($url);
  266.     $url_node->appendChild($dom->createElement('loc'$domain $this->generateUrl('lenord_nos_politiques')));
  267.     $j 0;
  268.     $politiques $this->em->getRepository(PolitiqueDepartementale::class)->findBy(['statut' => 5]);
  269.     foreach ($politiques as $politique) {
  270.       $url $dom->createElement('url');
  271.       $url_node $rss_node->appendChild($url);
  272.       $url_node->appendChild($dom->createElement('loc'$domain $this->generateUrl('lenord_politique', ['alias_url' => $politique->getAliasUrl()])));
  273.       $j++;
  274.     }
  275.     $url $dom->createElement('url');
  276.     $url_node $rss_node->appendChild($url);
  277.     $url_node->appendChild($dom->createElement('loc'$domain $this->generateUrl('lenord_institutions')));
  278.     $cmsPages $this->em->getRepository(Pages::class)->getPages(01);
  279.     foreach ($cmsPages as $item) {
  280.       $url $dom->createElement('url');
  281.       $url_node $rss_node->appendChild($url);
  282.       $url_node->appendChild($dom->createElement('loc'$domain $this->generateUrl('lenord_pagecms', ['slug' => $item->getAliasUrl()])));
  283.     }
  284.     $url $dom->createElement('url');
  285.     $url_node $rss_node->appendChild($url);
  286.     $url_node->appendChild($dom->createElement('loc'$domain $this->generateUrl('cartographie')));
  287.     $url $dom->createElement('url');
  288.     $url_node $rss_node->appendChild($url);
  289.     $url_node->appendChild($dom->createElement('loc'$domain $this->generateUrl('espacedoc')));
  290.     $url $dom->createElement('url');
  291.     $url_node $rss_node->appendChild($url);
  292.     $url_node->appendChild($dom->createElement('loc'$domain $this->generateUrl('lenord_support')));
  293.     $url $dom->createElement('url');
  294.     $url_node $rss_node->appendChild($url);
  295.     $url_node->appendChild($dom->createElement('loc'$domain $this->generateUrl('lenord_glossaire')));
  296.     $url $dom->createElement('url');
  297.     $url_node $rss_node->appendChild($url);
  298.     $url_node->appendChild($dom->createElement('loc'$domain $this->generateUrl('lenord_recherche')));
  299.     $url $dom->createElement('url');
  300.     $url_node $rss_node->appendChild($url);
  301.     $url_node->appendChild($dom->createElement('loc'$domain $this->generateUrl('lenord_page_legale', ['slug' => 'infolettre'])));
  302.     $url $dom->createElement('url');
  303.     $url_node $rss_node->appendChild($url);
  304.     $url_node->appendChild($dom->createElement('loc'$domain $this->generateUrl('lenord_page_legale', ['slug' => 'mentions-legales'])));
  305.     $url $dom->createElement('url');
  306.     $url_node $rss_node->appendChild($url);
  307.     $url_node->appendChild($dom->createElement('loc'$domain $this->generateUrl('lenord_page_legale', ['slug' => 'accessibilite'])));
  308.     $url $dom->createElement('url');
  309.     $url_node $rss_node->appendChild($url);
  310.     $url_node->appendChild($dom->createElement('loc'$domain $this->generateUrl('lenord_page_legale', ['slug' => 'presse'])));
  311.     //Elus
  312.     $elus $this->em->getRepository(Contact::class)->getContacts_(1);
  313.     foreach ($elus as $elu) {
  314.       $this->generateUrl('elus_lenord_detail', ['slug' => $elu->getSlug()]);
  315.     }
  316.     $xml $dom->saveXML();
  317.     $response = new Response($xml);
  318.     $response->headers->set('Content-Type''text/xml');
  319.     $response->headers->set('Access-Control-Allow-Origin''*');
  320.     return $response;
  321.   }
  322.   private function getOrderStrates(mixed $home): mixed
  323.   {
  324.     $array_strate = [];
  325.     if ($home->getImageActive() == true) {
  326.       $array_strate[$home->getOrdreImage()] = 'image';
  327.     }
  328.     if ($home->getActuActive() == true) {
  329.       $array_strate[$home->getOrdreActu()] = 'actu';
  330.     }
  331.     if ($home->getActiveCitation() == true) {
  332.       $array_strate[$home->getOrdreCitation()] = 'citation';
  333.     }
  334.     if ($home->getPolitiqueActive() == true) {
  335.       $array_strate[$home->getOrdrePolitique()] = 'politique';
  336.     }
  337.     if ($home->getInstitutionActive() == true) {
  338.       $array_strate[$home->getOrdreInstitution()] = 'institution';
  339.     }
  340.     if ($home->getNordinfoActive() == true) {
  341.       $array_strate[$home->getOrdreNordinfo()] = 'nordinfo';
  342.     }
  343.     if ($home->getTestimonialActive() == true) {
  344.       $array_strate[$home->getOrdreTestimonial()] = 'testimonial';
  345.     }
  346.     if ($home->getMagazineActive() == true) {
  347.       $array_strate[$home->getOrdreMagazine()] = 'magazine';
  348.     }
  349.     if ($home->getContentActive() == true) {
  350.       $array_strate[$home->getOrdreEditable()] = 'editable';
  351.     }
  352.     if ($home->getContentActive2() == true) {
  353.       $array_strate[$home->getOrdreEditable2()] = 'editable2';
  354.     }
  355.     if ($home->getContentActive3() == true) {
  356.       $array_strate[$home->getOrdreEditable3()] = 'editable3';
  357.     }
  358.     if ($home->getContentActive4() == true) {
  359.       $array_strate[$home->getOrdreEditable4()] = 'editable4';
  360.     }
  361.     if ($home->getContacterPresident() == true) {
  362.       $array_strate[$home->getOrdrePresident()] = 'president';
  363.     }
  364.     if ($home->getServicesActive() == true) {
  365.       $array_strate[$home->getOrdreServices()] = 'services';
  366.     }
  367.     if ($home->getNordEvasionActive() == true) {
  368.       $array_strate[$home->getOrdreNordEvasion()] = 'evasion';
  369.     }
  370.     if ($home->getCartographieActive() == true) {
  371.       $array_strate[$home->getCartographieOrdre()] = 'cartographie';
  372.     }
  373.     if ($home->getMagazineActive() == true) {
  374.       $array_strate[$home->getOrdreMagazine()] = 'magazine';
  375.     }
  376.     if ($home->getContentActive() == true) {
  377.       $array_strate[$home->getOrdreEditable()] = 'html1';
  378.     }
  379.     if ($home->getContentActive2() == true) {
  380.       $array_strate[$home->getOrdreEditable2()] = 'html2';
  381.     }
  382.     if ($home->getContentActive3() == true) {
  383.       $array_strate[$home->getOrdreEditable3()] = 'html3';
  384.     }
  385.     if ($home->getContentActive4() == true) {
  386.       $array_strate[$home->getOrdreEditable4()] = 'html4';
  387.     }
  388.     ksort($array_strate);
  389.     return $array_strate;
  390.   }
  391.   #[Route(path'/nos-politiques'name'lenord_nos_politiques')]
  392.   public function nospolitiques(Request $request): Response
  393.   {
  394.     $this->params['title'] = "Nos politiques";
  395.     $this->params['meta_description'] = "Présentation des politiques du Département du Nord : emploi, autonomie, enfance famille jeunesse, collèges...";
  396.     $this->params['politiques'] = $this->em->getRepository(PolitiqueDepartementale::class)->findBy(['statut' => 5], ['ordre' => 'ASC']);
  397.     $this->params['sites'] = $this->em->getRepository(FooterSites::class)->getForFooter(true);
  398.     $this->params['epingles'] = $this->epingle_service->getEpingles('lenord');
  399.     $epingles_politiques $this->epingle_service->getEpinglesSection('politique');
  400.     foreach ($epingles_politiques as $epingle) {
  401.       array_push($this->params['epingles'], $epingle);
  402.     }
  403.     $this->params['breadcrumb'] = [['alias' => '/''titre' => 'Accueil'], ['alias' => '''titre' => 'Nos politiques']];
  404.     $this->params['seo_breadcrumb'] = json_encode($this->seo_service->getSeoBreadcrumb($this->params['breadcrumb'], $request),  JSON_UNESCAPED_SLASHES JSON_HEX_APOS);
  405.     $this->params['referer'] = $request->headers->get('referer');
  406.     return $this->render('Lenord/Main/nospolitiques.html.twig'$this->params);
  407.   }
  408.   #[Route(path'/l-institution'name'lenord_institutions')]
  409.   public function lenord_institutions(Request $request): Response
  410.   {
  411.     $this->params['title'] = "L'institution";
  412.     $this->params['meta_description'] = "Présentation de l'institution du Département du Nord : son fonctionnnement, ses élus, son budget et son histoire";
  413.     $this->params['pages'] = $this->em->getRepository(Pages::class)->getPages(01);
  414.     $this->params['sites'] = $this->em->getRepository(FooterSites::class)->getForFooter(true);
  415.     $this->params['epingles'] = $this->epingle_service->getEpingles('lenord');
  416.     $epingles_politiques $this->epingle_service->getEpinglesSection('institution');
  417.     foreach ($epingles_politiques as $epingle) {
  418.       array_push($this->params['epingles'], $epingle);
  419.     }
  420.     $this->params['breadcrumb'] = [['alias' => '/''titre' => 'Accueil'], ['alias' => '''titre' => 'L\'institution']];
  421.     $this->params['seo_breadcrumb'] = json_encode($this->seo_service->getSeoBreadcrumb($this->params['breadcrumb'], $request),  JSON_UNESCAPED_SLASHES JSON_HEX_APOS);
  422.     $this->params['referer'] = $request->headers->get('referer');
  423.     return $this->render('Lenord/Main/institutions.html.twig'$this->params);
  424.   }
  425.   #[Route(path'/nos-politiques/{alias_url}'name'lenord_politique')]
  426.   public function politique(Request $requeststring $alias_url): Response
  427.   {
  428.     $this->params['politique'] = $this->em->getRepository(PolitiqueDepartementale::class)->findOneBy(['alias_url' => $alias_url]);
  429.     $this->params['title'] = $this->params['politique']->getTitre() . " - Nos politiques";
  430.     $this->params['meta_description'] = $this->params['politique']->getChapo();
  431.     $this->params['content_post'] = $this->feedUtilities->jsonToHtml($this->params['politique']->getContent(), $request$this->params['title']);
  432.     $this->params['nordinfo_rss'] = null;
  433.     $this->params['nordinfo_rss_description'] = null;
  434.     if ($this->params['politique']->getNordinfoRss() != null) {
  435.       $this->params['nordinfo_rss'] = $this->rss_service->getArrayArticle($this->params['politique']->getNordinfoRss());
  436.       $this->params['nordinfo_rss_description'] = $this->params['politique']->getNordinfoRss()->getDescription();
  437.     }
  438.     $this->params['epingles'] = $this->epingle_service->getEpingles('lenord');
  439.     $epingles_politiques $this->epingle_service->getEpinglesSection('politique');
  440.     foreach ($epingles_politiques as $epingle) {
  441.       array_push($this->params['epingles'], $epingle);
  442.     }
  443.     foreach ($this->params['politique']->getEpingles() as $e) {
  444.       if ($e->getActive() == true) {
  445.         array_push($this->params['epingles'], $e);
  446.       }
  447.     }
  448.     $this->params['breadcrumb'] = [['alias' => '/''titre' => 'Accueil'], ['alias' => '/nos-politiques''titre' => 'Nos politiques'], ['alias' => '''titre' => $this->params['politique']->getTitre()]];
  449.     $this->params['seo_breadcrumb'] = json_encode($this->seo_service->getSeoBreadcrumb($this->params['breadcrumb'], $request),  JSON_UNESCAPED_SLASHES JSON_HEX_APOS);
  450.     $this->params['openGraph'] = ["title" => $this->params['politique']->getTitre(), "url" => "https://lenord.fr/" $alias_url"image" => "https://lenord.fr/img/brandmaster/logo-le-nord.svg""type" => "website""description" => $this->params['content_post']];
  451.     $this->params['referer'] = $request->headers->get('referer');
  452.     $this->params['is_page_politique'] = true;
  453.     if ($request->get('function') == 'download_pdf') {
  454.       $this->params['is_pdf'] = 1;
  455.       $pdfOptions = new Options();
  456.       $pdfOptions->set('defaultFont''Arial');
  457.       $pdfOptions->setIsRemoteEnabled(true);
  458.       $dompdf = new Dompdf($pdfOptions);
  459.       $html $this->renderView('Lenord/Main/politique.html.twig'$this->params);
  460.       $dompdf->loadHtml($html);
  461.       $dompdf->setPaper('A4''portrait');
  462.       $dompdf->render();
  463.       $output $dompdf->output();
  464.       $filename sprintf('le-nord-%s.pdf'$this->params['title']);
  465.       return new Response(
  466.         $output,
  467.         200,
  468.         [
  469.           'Content-Type' => 'application/pdf',
  470.           'Content-Disposition' => sprintf('attachment; filename="%s"'"$filename"),
  471.         ]
  472.       );
  473.     } else {
  474.       return $this->render('Lenord/Main/politique.html.twig'$this->params);
  475.     }
  476.   }
  477.   #[Route(path'/departement/lepresident'name'lenord_president')]
  478.   public function lenord_president(Request $request): Response
  479.   {
  480.     $this->params['title'] = "Le Président";
  481.     $this->params['epingles'] = $this->epingle_service->getEpingles('lenord');
  482.     $this->params['breadcrumb'] = [['alias' => '/''titre' => 'Accueil'], ['alias' => '''titre' => $this->params['title']]];
  483.     $this->params['seo_breadcrumb'] = json_encode($this->seo_service->getSeoBreadcrumb($this->params['breadcrumb'], $request),  JSON_UNESCAPED_SLASHES JSON_HEX_APOS);
  484.     $this->params['referer'] = $request->headers->get('referer');
  485.     if ($request->get('function') == 'download_pdf') {
  486.       $this->params['is_pdf'] = 1;
  487.       $pdfOptions = new Options();
  488.       $pdfOptions->set('defaultFont''Arial');
  489.       $pdfOptions->setIsRemoteEnabled(true);
  490.       $dompdf = new Dompdf($pdfOptions);
  491.       $html $this->renderView('Lenord/Main/page.html.twig'$this->params);
  492.       $dompdf->loadHtml($html);
  493.       $dompdf->setPaper('A4''portrait');
  494.       $dompdf->render();
  495.       $output $dompdf->output();
  496.       $filename sprintf('le-nord-%s.pdf'$this->params['title']);
  497.       return new Response(
  498.         $output,
  499.         200,
  500.         [
  501.           'Content-Type' => 'application/pdf',
  502.           'Content-Disposition' => sprintf('attachment; filename="%s"'"$filename"),
  503.         ]
  504.       );
  505.     } else {
  506.       return $this->render('Lenord/Main/page.html.twig'$this->params);
  507.     }
  508.   }
  509.   #[Route(path'/glossaire'name'lenord_glossaire')]
  510.   public function glossaire(Request $request): Response
  511.   {
  512.     $this->params['title'] = "Glossaire";
  513.     $this->params['meta_description'] = "Le glossaire du site du Département du Nord : acronymes et définitions utiles";
  514.     $glossaire $this->em->getRepository(Glossaire::class)->findBy([], ['terme' => 'ASC']);
  515.     $this->params['glossaires'] = $glossaire;
  516.     $this->params['letters'] = $this->em->getRepository(Glossaire::class)->getFirstLetters();
  517.     $this->params['sites'] = $this->em->getRepository(FooterSites::class)->getForFooter(true);
  518.     $this->params['epingles'] = $this->epingle_service->getEpingles('lenord');
  519.     $epingles_ $this->epingle_service->getEpinglesSection('glossaire_lenord');
  520.     foreach ($epingles_ as $epingle) {
  521.       array_push($this->params['epingles'], $epingle);
  522.     }
  523.     $this->params['breadcrumb'] = [['alias' => '/''titre' => 'Accueil'], ['alias' => '''titre' => 'Glossaire']];
  524.     $this->params['seo_breadcrumb'] = json_encode($this->seo_service->getSeoBreadcrumb($this->params['breadcrumb'], $request),  JSON_UNESCAPED_SLASHES JSON_HEX_APOS);
  525.     $this->params['referer'] = $request->headers->get('referer');
  526.     return $this->render('Lenord/Main/glossaire.html.twig'$this->params);
  527.   }
  528.   #[Route(path'/espace-documentaire'name'espacedoc')]
  529.   public function espacedoc(Request $request): Response
  530.   {
  531.     $this->params['title'] = "Espace documentaire";
  532.     $this->params['meta_description'] = "Consulter et télécharger les documents officiels produits par le Département du Nord";
  533.     $this->params['types_document'] = $this->em->getRepository(TypeDocument::class)->findAll();
  534.     $page_number $request->query->getInt('page'1);
  535.     $items_per_page 24;
  536.     $types = [];
  537.     $types_libelle = [];
  538.     if ($request->query->get('types') != null) {
  539.       //$array_fields = array('sousprofils.alias');
  540.       foreach ((array)$request->query->get('types') as $id) {
  541.         array_push($types$id);
  542.         $t $this->em->getRepository(TypeDocument::class)->find($id);
  543.         array_push($types_libelle$t->getTitre());
  544.         $this->params['title'] .= ' ' '"' $t->getTitre() . '"';
  545.       }
  546.     }
  547.     $search $request->query->get('search');
  548.     if ($search == "") {
  549.       $search null;
  550.     }
  551.     if ($request->query->get('_items_per_page') != null) {
  552.       $items_per_page $request->query->get('_items_per_page');
  553.     }
  554.     $this->params['filters'] = $types;
  555.     $this->params['types_libelle'] = $types_libelle;
  556.     $this->params['search'] = $search;
  557.     $this->params['pagination'] = $this->em->getRepository(Document::class)->getDocuments($page_number$types$search$items_per_page);
  558.     $this->params['sites'] = $this->em->getRepository(FooterSites::class)->getForFooter(true);
  559.     $this->params['epingles'] = $this->epingle_service->getEpingles('lenord');
  560.     $epingles_ $this->epingle_service->getEpinglesSection('espace_documentaire');
  561.     foreach ($epingles_ as $epingle) {
  562.       array_push($this->params['epingles'], $epingle);
  563.     }
  564.     $this->params['breadcrumb'] = [['alias' => '/''titre' => 'Accueil'], ['alias' => '''titre' => 'Espace documentaire']];
  565.     $this->params['seo_breadcrumb'] = json_encode($this->seo_service->getSeoBreadcrumb($this->params['breadcrumb'], $request),  JSON_UNESCAPED_SLASHES JSON_HEX_APOS);
  566.     $this->params['referer'] = $request->headers->get('referer');
  567.     return $this->render('Lenord/Main/espacedoc.html.twig'$this->params);
  568.   }
  569.   #[Route(path'/espace-documentaire/{slug}'name'document')]
  570.   public function document(Request $requeststring $slug): Response
  571.   {
  572.     $this->params['document'] = $this->em->getRepository(Document::class)->findOneBy(['alias_url' => $slug]);
  573.     $this->params['title'] = $this->params['document']->getTitre() . " - Espace documentaire";
  574.     $this->params['meta_description'] = "Consulter et télécharger les documents officiels produits par le Département du Nord";
  575.     $this->params['content_post'] = $this->feedUtilities->jsonToHtml($this->params['document']->getContent(), $request$this->params['title']);
  576.     $this->params['documents_lies'] = [];
  577.     if ((is_countable($this->params['document']->getDocumentsLies()) ? count($this->params['document']->getDocumentsLies()) : 0) < 3) {
  578.       $maxResult - (is_countable($this->params['document']->getDocumentsLies()) ? count($this->params['document']->getDocumentsLies()) : 0);
  579.       $types = [];
  580.       foreach ($this->params['document']->getTypes() as $ty) {
  581.         array_push($types$ty->getId());
  582.       }
  583.       $this->params['documents_lies'] = $this->em->getRepository(Document::class)->getSameCategory($this->params['document']->getId(), $maxResult$types);
  584.     }
  585.     $this->params['epingles'] = $this->epingle_service->getEpingles('lenord');
  586.     foreach ($this->params['document']->getEpingles() as $e) {
  587.       if ($e->getActive() == 1) {
  588.         array_push($this->params['epingles'], $e);
  589.       }
  590.     }
  591.     $this->params['breadcrumb'] = [['alias' => '/''titre' => 'Accueil'], ['alias' => '/espace-documentaire''titre' => 'Espace documentaire'], ['alias' => '''titre' => $this->params['document']->getTitre()]];
  592.     $this->params['seo_breadcrumb'] = json_encode($this->seo_service->getSeoBreadcrumb($this->params['breadcrumb'], $request),  JSON_UNESCAPED_SLASHES JSON_HEX_APOS);
  593.     $this->params['referer'] = $request->headers->get('referer');
  594.     $this->params['is_page_document'] = true;
  595.     if ($request->get('function') == 'download_pdf') {
  596.       $this->params['is_pdf'] = 1;
  597.       $pdfOptions = new Options();
  598.       $pdfOptions->set('defaultFont''Arial');
  599.       $pdfOptions->setIsRemoteEnabled(true);
  600.       $dompdf = new Dompdf($pdfOptions);
  601.       $html $this->renderView('Lenord/Main/document.html.twig'$this->params);
  602.       $dompdf->loadHtml($html);
  603.       $dompdf->setPaper('A4''portrait');
  604.       $dompdf->render();
  605.       $output $dompdf->output();
  606.       $filename sprintf('le-nord-%s.pdf'$this->params['title']);
  607.       return new Response(
  608.         $output,
  609.         200,
  610.         [
  611.           'Content-Type' => 'application/pdf',
  612.           'Content-Disposition' => sprintf('attachment; filename="%s"'"$filename"),
  613.         ]
  614.       );
  615.     } else {
  616.       return $this->render('Lenord/Main/document.html.twig'$this->params);
  617.     }
  618.   }
  619.   #[Route(path'/formulaire-de-contact'name'lenord_support')]
  620.   public function lenord_support(Request $request): Response
  621.   {
  622.     $this->params['title'] = "Formulaire de contact";
  623.     $this->params['meta_description'] = "Contacter le Département du Nord et ses services par courriel";
  624.     $this->params['referer'] = $request->headers->get('referer');
  625.     $this->params['caps'] = $this->getCaptcha();
  626.     $this->params['epingles'] = $this->epingle_service->getEpingles('lenord');
  627.     $this->params['breadcrumb'] = [['alias' => '/''titre' => 'Accueil'], ['alias' => '''titre' => 'Formulaire de contact']];
  628.     $this->params['seo_breadcrumb'] = json_encode($this->seo_service->getSeoBreadcrumb($this->params['breadcrumb'], $request),  JSON_UNESCAPED_SLASHES JSON_HEX_APOS);
  629.     $this->params['thematiques'] = $this->em->getRepository(FormulaireThematique::class)->findBy(['bool_lenord' => 1], ['name' => 'ASC']);
  630.     return $this->render('Lenord/Main/support.html.twig'$this->params);
  631.   }
  632.   #[Route(path'/formulaire-de-contact/{thematique}'name'lenord_support_thematique')]
  633.   public function lenord_support_thematique(Request $requeststring $thematique): Response
  634.   {
  635.     $this->params['title'] = "Formulaire de contact";
  636.     $this->params['meta_description'] = "Contacter le Département du Nord et ses services par courriel";
  637.     $this->params['referer'] = $request->headers->get('referer');
  638.     $this->params['caps'] = $this->getCaptcha();
  639.     $this->params['epingles'] = $this->epingle_service->getEpingles('lenord');
  640.     $this->params['breadcrumb'] = [['alias' => '/''titre' => 'Accueil'], ['alias' => '''titre' => 'Formulaire de contact']];
  641.     $this->params['seo_breadcrumb'] = json_encode($this->seo_service->getSeoBreadcrumb($this->params['breadcrumb'], $request),  JSON_UNESCAPED_SLASHES JSON_HEX_APOS);
  642.     $this->params['thematiques'] = $this->em->getRepository(FormulaireThematique::class)->findBy(['bool_lenord' => 1], ['name' => 'ASC']);
  643.     $this->params['chosen_thematique'] = $thematique;
  644.     return $this->render('Lenord/Main/support.html.twig'$this->params);
  645.   }
  646.   /*#[Route(path: '/formulaire-{slug}', name: 'custom_form_lenord', host: "lenord.fr")]
  647.   public function custom_form(string $slug): Response
  648.   {
  649.     $custom_form = $this->em->getRepository(CustomForm::class)->findOneBy(array('alias' => $slug));
  650.     $this->params['caps'] = $this->getCaptcha();
  651.     $this->params['form'] = $custom_form;
  652.     return $this->render('Lenord/Main/custom_form.html.twig', $this->params);
  653.   }*/
  654.   #[Route(path'/send_form_custom/{alias}'name'send_form_custom_lenord'host"lenord.fr")]
  655.   public function send_form_custom(Request $requeststring $alias): Response
  656.   {
  657.     $post $request->request;
  658.     $custom_form $this->em->getRepository(CustomForm::class)->findOneBy(array('alias' => $alias));
  659.     $destinataires_sendgrid = [];
  660.     $objet null;
  661.     $objet "Votre message à " $custom_form->getDestinataire() . " via le site du Département du Nord";
  662.     $emails explode(";", (string) $custom_form->getEmail());
  663.     for ($i 0$i count($emails); $i++) {
  664.       array_push($destinataires_sendgrid$emails[$i]);
  665.     }
  666.     $message $post->get('message');
  667.     //exp
  668.     //destinataire_
  669.     //objet_
  670.     //message_
  671.     //piece_jointe_
  672.     $fileName null;
  673.     $auth_extension = ['png''jpg''jpeg''gif''pdf'];
  674.     $mime_authorized = ['application/pdf''image/jpg''image/jpeg''image/gif''image/png'];
  675.     $file null;
  676.     $newname uniqid();
  677.     if ($request->files != null && $request->files->get('file') != null) {
  678.       $file $request->files->get('file');
  679.       $fileName $file->getClientOriginalName();
  680.       $fileType $file->getClientMimeType();
  681.       if (in_array($file->guessExtension(), $auth_extension) && in_array($fileType$mime_authorized)) {
  682.         /*try {
  683.           $file->move($uploadDir, $newname.'.'.$file->guessExtension());
  684.           array_push($files, array(
  685.             'name' => $newname.'.'.$file->guessExtension(),
  686.             'type' => $fileType,
  687.             'data' => $fileData,
  688.           ));
  689.         } catch (FileException) {
  690.           $file = null;
  691.           return new JsonResponse(['error' => 'File could not be uploaded']);
  692.         }*/
  693.       } else {
  694.         $file null;
  695.         return new JsonResponse(['error' => "Mauvais format d'image"]);
  696.       }
  697.     }
  698.     $date = new DateTime;
  699.     $content "Le message suivant vient de vous être envoyé via le site du Département du Nord par " $post->get('nom_prenom') .
  700.       " - Merci de répondre directement à " $post->get('email') . " : " "\n" $post->get('message') . "\n\n" "Nord, le Département est là - https://lenord.fr/";
  701.     $nom_dest $custom_form->getDestinataire();
  702.     $content_exp "Bonjour, votre message a été transmis à " $nom_dest "." "\n\n" .
  703.       "Message : " $post->get('message');
  704.     if ($fileName !== null) {
  705.       $content_exp .= "\n" "Pièce jointe : " $fileName;
  706.     }
  707.     $content_exp .= "\n\n" "Nord, le Département est là - https://lenord.fr/";
  708.     //envoi mail
  709.     $result_ $post->get('nb1') + $post->get('nb2');
  710.     if ($result_ == $post->get('captcha') && $post->get('raison') == null) {
  711.       try {
  712.         $this->sendgrid_service->send($destinataires_sendgrid$content"Message envoyé par " $post->get('nom_prenom') . " via le site du Département du Nord"null$filefalse$post->get('email'));
  713.         $this->sendgrid_service->send([$post->get('email')], $content_exp$objetnull$filefalse);
  714.       } catch (\Exception) {
  715.         $this->params['message'] = 'Email erreur';
  716.         return $this->render('Lenord/Main/endformerror.html.twig'$this->params);
  717.       }
  718.     } else {
  719.       $this->params['message'] = 'Catcha erreur';
  720.       return $this->render('Lenord/Main/endformerror.html.twig'$this->params);
  721.     }
  722.     return $this->render('Lenord/Main/endform.html.twig'$this->params);
  723.   }
  724.   #[Route(path'/confirmation'name'lenord_send_form')]
  725.   public function sendform(Request $request): Response
  726.   {
  727.     $post $request->request;
  728.     $result_ $post->get('nb1') + $post->get('nb2');
  729.     if ($result_ == $post->get('captcha')) {
  730.       $destinataires_sendgrid = [];
  731.       $message $post->get('message');
  732.       //Thematique
  733.       $thematique null;
  734.       if ($post->get('thematique') !== null) {
  735.         $formThematique $this->em->getRepository(FormulaireThematique::class)->find($post->get('thematique'));
  736.         $thematique $formThematique->getName();
  737.         $emails explode(";", (string) $formThematique->getDestinataires());
  738.         for ($i 0$i count($emails); $i++) {
  739.           array_push($destinataires_sendgrid$emails[$i]);
  740.         }
  741.       } else {
  742.         $thematique 'Message à un(e) élu(e) : ' $request->request->get('dest_nom');
  743.         array_push($destinataires_sendgrid$request->request->get('dest'));
  744.         $mail_elu = new MailElu;
  745.         $userIp $request->getClientIp();
  746.         $mail_elu->setDate(new DateTime())
  747.           ->setElu($request->request->get('dest_nom'))
  748.           ->setContenu($message)
  749.           ->setIp($userIp)
  750.           ->setEmail($post->get('email'));
  751.         $this->em->persist($mail_elu);
  752.         $this->em->flush();
  753.       }
  754.       //exp
  755.       //destinataire_
  756.       //objet_
  757.       //message_
  758.       //piece_jointe_
  759.       $fileName null;
  760.       $auth_extension = ['png''jpg''jpeg''gif''pdf'];
  761.       $mime_authorized = ['application/pdf''image/jpg''image/jpeg''image/gif''image/png'];
  762.       $file null;
  763.       if ($request->files != null && $request->files->get('file') != null) {
  764.         $file $request->files->get('file');
  765.         $fileName $file->getClientOriginalName();
  766.         $fileType $file->getClientMimeType();
  767.         if (in_array($file->guessExtension(), $auth_extension) && in_array($fileType$mime_authorized)) {
  768.           /*try {
  769.           } catch (FileException) {
  770.             $file = null;
  771.             return new JsonResponse(['error' => 'File could not be uploaded']);
  772.           }*/
  773.         } else {
  774.           $file null;
  775.           return new JsonResponse(['error' => "Mauvais format d'image"]);
  776.         }
  777.       }
  778.       $date = new DateTime();
  779.       $content $this->renderView(
  780.         'Lenord/Mails/dest_signalement2.html.twig',
  781.         ['site' => 'lenord'
  782.         'expediteur_email_' => ($post->get('prenom') != null && $post->get('nom') != null) ? $post->get('prenom') . ' ' $post->get('nom') : $post->get('email'), 
  783.         'destinataire_' => "agent en charge du support aux usagers"'objet_' => 'Nouveau message sur le site du Département du Nord - ' $thematique ' / ' "ND" $date->format('dmYHis'), 
  784.         'thematique' => $thematique'message_' => $message
  785.         'email' => $post->get('email'), 'piece_jointe_' => ($fileName != null) ? $fileName "Aucune pièce jointe"
  786.         'date' => "ND" $date->format('dmYHis'), 'ville' => ($post->get('ville') !== null)?$post->get('ville'):null 
  787.         'adresse' => ($post->get('adresse') !== null)?$post->get('adresse'):null,
  788.         'nom' => ($post->get('nom') !== null)?$post->get('nom'):null,
  789.         'prenom' => ($post->get('prenom') !== null)?$post->get('prenom'):null
  790.         
  791.         ]
  792.       );
  793.       $nom_dest 'rédaction du Nord info';
  794.       if ($post->get('dest_nom') != null) {
  795.         $nom_dest $post->get('dest_nom');
  796.       }
  797.       if ($post->get('thematique') === null) {
  798.         $thematique 'Message à un(e) élu(e)';
  799.       }
  800.       $content_exp $this->renderView(
  801.         'Lenord/Mails/exp_signalement2.html.twig',
  802.         ['site' => 'lenord''destinataire_' => $nom_dest'objet_' => 'Votre message sur le site du département du Nord - ' $thematique ' / ' "ND" $date->format('dmYHis'), 'email' => $post->get('email'), 'thematique' => $thematique'message_' => $message'piece_jointe_' => ($fileName != null) ? $fileName "Aucune pièce jointe"'date' => "ND" $date->format('dmYHis')]
  803.       );
  804.       //envoi mail
  805.       //Newsletter
  806.       if ($post->get('newsletter') != null || $post->get('newsletter') === "") {
  807.         $ins $this->em->getRepository(InscritNewsletter::class)->findOneBy(['email' => $post->get('email')]);
  808.         if ($ins == null) {
  809.           $ins = new InscritNewsletter;
  810.           $ins->setEmail($post->get('email'))
  811.             ->setPrenom($post->get('prenom'))
  812.             ->setNom($post->get('nom'))
  813.             ->setDate(new DateTime());
  814.           $this->em->persist($ins);
  815.           $this->em->flush();
  816.         }
  817.       }
  818.       try {
  819.         $this->sendgrid_service->send($destinataires_sendgrid$content'Ce message vient de vous être envoyé sur le site du Département du Nord par ' $post->get('email') . ' - ' $thematique ' / ' "ND" $date->format('dmYHis'), ['automate.nordinfo@lenord.fr'], $file);
  820.         $this->sendgrid_service->send([$post->get('email')], $content_exp'Votre message sur le site du département du Nord - ' $thematique ' / ' "ND" $date->format('dmYHis'), ['automate.nordinfo@lenord.fr'], $file);
  821.       } catch (\Exception $e) {
  822.         $this->params['message'] = 'Email erreur';
  823.         return $this->render('Lenord/Main/endformerror.html.twig'$this->params);
  824.       }
  825.     } else {
  826.       $this->params['message'] = 'Captcha erreur';
  827.       return $this->render('Lenord/Main/endformerror.html.twig'$this->params);
  828.     }
  829.     return $this->render('Lenord/Main/endform.html.twig'$this->params);
  830.   }
  831.   #[Route(path'/infolettre'name'lenord_infolettre')]
  832.   public function infolettre(Request $request): Response
  833.   {
  834.     $this->params['referer'] = $request->headers->get('referer');
  835.     $this->params['breadcrumb'] = [['alias' => '/''titre' => 'Accueil'], ['alias' => '''titre' => 'Infolettre']];
  836.     $this->params['seo_breadcrumb'] = json_encode($this->seo_service->getSeoBreadcrumb($this->params['breadcrumb'], $request),  JSON_UNESCAPED_SLASHES JSON_HEX_APOS);
  837.     //epingle
  838.     $this->params['epingles'] = $this->epingle_service->getEpingles('lenord');
  839.     return $this->render('Lenord/Main/infolettre.html.twig'$this->params);
  840.   }
  841.   #[Route(path'/recherche'name'lenord_recherche')]
  842.   public function lenord_recherche(Request $request): Response
  843.   {
  844.     $this->params['results'] = null;
  845.     $this->params['title'] = 'Recherche "' $request->query->get('search') . '"';
  846.     $this->params['meta_description'] = "Rechercher les contenus du Département du Nord : informations, actualités, services, documents...";
  847.     $this->params['checkservices'] = null;
  848.     $this->params['checkactualites'] = null;
  849.     $this->params['checkevenements'] = null;
  850.     $this->params['checkdocuments'] = null;
  851.     if ($request->query->get('checkservices') == "on") {
  852.       $this->params['checkservices'] = 'on';
  853.     } else {
  854.       $this->params['checkservices'] = 'off';
  855.     }
  856.     if ($request->query->get('checkactualites') == "on") {
  857.       $this->params['checkactualites'] = 'on';
  858.     } else {
  859.       $this->params['checkactualites'] = 'off';
  860.     }
  861.     if ($request->query->get('checkevenements') == "on") {
  862.       $this->params['checkevenements'] = 'on';
  863.     } else {
  864.       $this->params['checkevenements'] = 'off';
  865.     }
  866.     if ($request->query->get('checkdocuments') == "on") {
  867.       $this->params['checkdocuments'] = 'on';
  868.     } else {
  869.       $this->params['checkdocuments'] = 'off';
  870.     }
  871.     if ($request->query->get('search') != null) {
  872.       $search_fields = ['combined'];
  873.       $entity_type 'all';
  874.       //checkservices, checkactualites, checkevenements, checkdocuments
  875.       if (
  876.         $request->query->get('checkservices') == "on" && $request->query->get('checkactualites') == "on"
  877.         && $request->query->get('checkevenements') == "on" && $request->query->get('checkdocuments') == "on"
  878.       ) {
  879.         $entity_type 'all';
  880.       } else {
  881.         $entity_type = [];
  882.         if ($request->query->get('checkservices') == "on") {
  883.           $this->params['checkservices'] = 'on';
  884.           array_push($entity_type'service');
  885.         }
  886.         if ($request->query->get('checkactualites') == "on") {
  887.           $this->params['checkactualites'] = 'on';
  888.           array_push($entity_type'actualites');
  889.         }
  890.         if ($request->query->get('checkevenements') == "on") {
  891.           $this->params['checkevenements'] = 'on';
  892.           array_push($entity_type'evenements');
  893.         }
  894.         if ($request->query->get('checkdocuments') == "on") {
  895.           $this->params['checkdocuments'] = 'on';
  896.           array_push($entity_type'document');
  897.         }
  898.         //array_push($entity_type, 'glossaire');
  899.         array_push($entity_type'elu');
  900.         array_push($entity_type'pages');
  901.         array_push($entity_type'politique');
  902.         array_push($entity_type'commune');
  903.       }
  904.       $results $this->es_service->searchDocuments('lenord'$search_fields$request->query->get('search'), $entity_type, [], [], 50);
  905.       $this->params['results'] = $results;
  906.       //Save log
  907.       $logEs = new LogEs;
  908.       $logEs->setRecherche($request->query->get('search'))
  909.         ->setDate(new DateTime())
  910.         ->setSite("lenord");
  911.       $this->em->persist($logEs);
  912.       $this->em->flush();
  913.     }
  914.     $this->params['search'] = $request->query->get('search');
  915.     $this->params['sites'] = $this->em->getRepository(FooterSites::class)->getForFooter(true);
  916.     $this->params['epingles'] = $this->epingle_service->getEpingles('lenord');
  917.     $this->params['breadcrumb'] = [['alias' => '/''titre' => 'Accueil'], ['alias' => '''titre' => 'Recherche']];
  918.     $this->params['seo_breadcrumb'] = json_encode($this->seo_service->getSeoBreadcrumb($this->params['breadcrumb'], $request),  JSON_UNESCAPED_SLASHES JSON_HEX_APOS);
  919.     $this->params['referer'] = $request->headers->get('referer');
  920.     return $this->render('Lenord/Main/search.html.twig'$this->params);
  921.   }
  922.   #[Route(path'/404'name'error404')]
  923.   public function error404(): Response
  924.   {
  925.     $this->params['title'] = "Erreur";
  926.     return $this->render('Lenord/Main/erreur.html.twig'$this->params);
  927.   }
  928.   #[Route(path'/cartographie'name'cartographie')]
  929.   public function cartographie(Request $request): Response
  930.   {
  931.     $this->params['title'] = "Cartographie";
  932.     $this->params['meta_description'] = "Localiser les établissements du Département du Nord";
  933.     $page_number $request->query->getInt('page'1);
  934.     $this->params['pois'] = $this->wemap_service->getAllPois(10$page_number)->results;
  935.     if ($this->params['pois'] == false) {
  936.       return $this->pagelegales($request'error-404');
  937.     }
  938.     /*$this->params['pagination'] = $this->paginator->paginate(
  939.       $this->params['pois'],
  940.       $page_number,
  941.       10
  942.     );
  943.     $this->params['total'] = count($this->params['pois']);*/
  944.     $categories $this->wemap_service->getCategories();
  945.     $categories $categories->snippet->usetags->tags;
  946.     $array_territoires = [];
  947.     $array_etablissements = [];
  948.     $array_thematiques = [];
  949.     $array_besoins = [];
  950.     //dd($categories);
  951.     $i 0;
  952.     $search  = array('À''Á''Â''Ã''Ä''Å''Ç''È''É''Ê''Ë''Ì''Í''Î''Ï''Ò''Ó''Ô''Õ''Ö''Ù''Ú''Û''Ü''Ý''à''á''â''ã''ä''å''ç''è''é''ê''ë''ì''í''î''ï''ð''ò''ó''ô''õ''ö''ù''ú''û''ü''ý''ÿ');
  953.     $replace = array('A''A''A''A''A''A''C''E''E''E''E''I''I''I''I''O''O''O''O''O''U''U''U''U''Y''a''a''a''a''a''a''c''e''e''e''e''i''i''i''i''o''o''o''o''o''o''u''u''u''u''y''y');
  954.     foreach ($categories as $category) {
  955.       if (property_exists($category"category")) {
  956.         if ($category->category == "type-detablissement") {
  957.           array_push($array_etablissements, ['sort' => str_replace($search$replace$category->name), 'name' => $category->name'slug' => $category->slug]);
  958.         } else if ($category->name == "Tous types") {
  959.           array_push($array_thematiques, ['sort' => str_replace($search$replace$category->name), 'name' => $category->category'slug' => $category->category]);
  960.         } else if ($category->category == "territoire") {
  961.           array_push($array_territoires, ['sort' => str_replace($search$replace$category->name), 'name' => $category->name'slug' => $category->slug]);
  962.         } else {
  963.           array_push($array_besoins, ['sort' => str_replace($search$replace$category->name), 'name' => $category->name'slug' => $category->slug'parent' => $category->category]);
  964.         }
  965.       } else if ($i >= 56 && $i <= 62) {
  966.         //array_push($array_territoires, ['sort'=> str_replace($search, $replace, $category->name), 'name' => $category->name, 'slug' => $category->slug]);
  967.       }
  968.       $i++;
  969.     }
  970.     /*// you can use array_column() instead of the above code
  971.     $volume  = array_column($data, 'volume');
  972.     $edition = array_column($data, 'edition');
  973.     // Sort the data with volume descending, edition ascending
  974.     // Add $data as the last parameter, to sort by the common key
  975.     array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
  976.     */
  977.     $territories_column array_column($array_territoires'sort');
  978.     $etablissements_column array_column($array_etablissements'sort');
  979.     $thematiques_column array_column($array_thematiques'sort');
  980.     $besoins_column array_column($array_besoins'sort');
  981.     array_multisort($territories_columnSORT_ASC SORT_LOCALE_STRING$array_territoires);
  982.     array_multisort($etablissements_columnSORT_ASC SORT_LOCALE_STRING$array_etablissements);
  983.     array_multisort($thematiques_columnSORT_ASC SORT_LOCALE_STRING$array_thematiques);
  984.     array_multisort($besoins_columnSORT_ASC SORT_LOCALE_STRING$array_besoins);
  985.     $this->params['array_territoires'] = $array_territoires;
  986.     $this->params['array_etablissements'] = $array_etablissements;
  987.     $this->params['array_thematiques'] = $array_thematiques;
  988.     $this->params['array_besoins'] = $array_besoins;
  989.     $this->params['sites'] = $this->em->getRepository(FooterSites::class)->getForFooter(true);
  990.     //Epingle
  991.     $this->params['epingles'] = $this->epingle_service->getEpingles('lenord');
  992.     $epingles_ $this->epingle_service->getEpinglesSection('cartographie');
  993.     foreach ($epingles_ as $epingle) {
  994.       array_push($this->params['epingles'], $epingle);
  995.     }
  996.     $this->params['breadcrumb'] = [['alias' => '/''titre' => 'Accueil'], ['alias' => '''titre' => 'Cartographie']];
  997.     $this->params['seo_breadcrumb'] = json_encode($this->seo_service->getSeoBreadcrumb($this->params['breadcrumb'], $request),  JSON_UNESCAPED_SLASHES JSON_HEX_APOS);
  998.     $this->params['referer'] = $request->headers->get('referer');
  999.     $this->params['seo_breadcrumb'] = json_encode($this->seo_service->getSeoBreadcrumb($this->params['breadcrumb'], $request),  JSON_UNESCAPED_SLASHES JSON_HEX_APOS);
  1000.     return $this->render('Lenord/Main/cartographie.html.twig'$this->params);
  1001.   }
  1002.   #[Route(path'/cartographie-simplifiee'name'cartographie_simplifie')]
  1003.   public function cartographie_simplifie(Request $request): Response
  1004.   {
  1005.     $page_number $request->query->getInt('page'1);
  1006.     $this->params['pois'] = $this->wemap_service->getAllPois(10$page_number)->results;
  1007.     $this->params['total'] = $this->wemap_service->getAllPois(10$page_number)->count;
  1008.     $this->params['categories'] = $this->wemap_service->getCategories();
  1009.     $this->params['categories'] = $this->params['categories']->snippet->usetags->tags;
  1010.     $this->params['previous'] = null;
  1011.     if ($page_number 1) {
  1012.       $this->params['previous'] = $page_number 1;
  1013.     }
  1014.     $this->params['current_page'] = $page_number;
  1015.     $this->params['totalPage'] = null;
  1016.     $quotient intdiv($this->params['total'], 10);
  1017.     $reste $this->params['total'] % 10;
  1018.     if ($reste 0) {
  1019.       $quotient++;
  1020.     }
  1021.     $this->params['totalPage'] = $quotient;
  1022.     $this->params['next'] = null;
  1023.     if ($page_number !== $quotient) {
  1024.       $this->params['next'] = $page_number 1;
  1025.     }
  1026.     //Current page + 5 et - 5 ?
  1027.     $this->params['pagesInRange'] = [];
  1028.     $range_max $page_number 5;
  1029.     $range_min $page_number 5;
  1030.     for ($i $range_min$i <= $range_max$i++) {
  1031.       if ($i && $i $this->params['totalPage']) {
  1032.         array_push($this->params['pagesInRange'], $i);
  1033.       }
  1034.     }
  1035.     $this->params['sites'] = $this->em->getRepository(FooterSites::class)->getForFooter(true);
  1036.     return $this->render('Lenord/Main/cartographie_simplifie.html.twig'$this->params);
  1037.   }
  1038.   #[Route(path'/l-institution/les-conseillers-departementaux/recherche'name'lenord_search_contact')]
  1039.   public function search_contacts(Request $request): Response
  1040.   {
  1041.     return $this->lenord_pagecmsges($request'les-conseillers-departementaux');
  1042.   }
  1043.   #[Route(path'/l-institution/les-conseillers-departementaux/{slug}'name'elus_lenord_detail')]
  1044.   public function detail_elu(Request $requeststring $slug): Response
  1045.   {
  1046.     $contact $this->em->getRepository(Contact::class)->getContact_($slug);
  1047.     $this->params['contact'] = $contact;
  1048.     $posts = [];
  1049.     $count_post 0;
  1050.     foreach ($contact->getPosts1() as $pp) {
  1051.       if ($count_post >= 3) {
  1052.         break;
  1053.       }
  1054.       array_push($posts$pp);
  1055.       $count_post++;
  1056.     }
  1057.     if ($count_post 3) {
  1058.       foreach ($contact->getPosts2() as $pp) {
  1059.         if ($count_post >= 3) {
  1060.           break;
  1061.         }
  1062.         array_push($posts$pp);
  1063.         $count_post++;
  1064.       }
  1065.     }
  1066.     if ($count_post 3) {
  1067.       foreach ($contact->getPosts3() as $pp) {
  1068.         if ($count_post >= 3) {
  1069.           break;
  1070.         }
  1071.         array_push($posts$pp);
  1072.         $count_post++;
  1073.       }
  1074.     }
  1075.     $this->params['title'] = $contact->getFirstName() . ' ' $contact->getLastName() . " - Elu";
  1076.     $this->params['meta_description'] = "Elus";
  1077.     $this->params['breadcrumb'] = [
  1078.       ['alias' => '/''titre' => 'Accueil'],
  1079.       ['alias' => '/l-institution''titre' => 'L\'institution'],
  1080.       ['alias' => '/l-institution/les-conseillers-departementaux''titre' => 'Les conseillers départementaux'],
  1081.       ['alias' => '''titre' => $contact->getFirstName() . ' ' $contact->getLastName()]
  1082.     ];
  1083.     $this->params['seo_breadcrumb'] = json_encode($this->seo_service->getSeoBreadcrumb($this->params['breadcrumb'], $request),  JSON_UNESCAPED_SLASHES JSON_HEX_APOS);
  1084.     $this->params['contact_posts'] = $posts;
  1085.     $this->params['referer'] = $request->headers->get('referer');
  1086.     $this->params['caps'] = $this->getCaptcha();
  1087.     //epingle
  1088.     $this->params['epingles'] = $this->epingle_service->getEpingles('lenord');
  1089.     if ($request->get('function') == 'download_pdf') {
  1090.       $this->params['is_pdf'] = 1;
  1091.       $pdfOptions = new Options();
  1092.       $pdfOptions->set('defaultFont''Arial');
  1093.       $pdfOptions->setIsRemoteEnabled(true);
  1094.       $dompdf = new Dompdf($pdfOptions);
  1095.       $html $this->renderView('Lenord/Main/elu.html.twig'$this->params);
  1096.       $dompdf->loadHtml($html);
  1097.       $dompdf->setPaper('A4''portrait');
  1098.       $dompdf->render();
  1099.       $output $dompdf->output();
  1100.       $filename sprintf('nord-info-%s.pdf'$contact->getFirstName());
  1101.       return new Response(
  1102.         $output,
  1103.         200,
  1104.         [
  1105.           'Content-Type' => 'application/pdf',
  1106.           'Content-Disposition' => sprintf('attachment; filename="%s"'"$filename"),
  1107.         ]
  1108.       );
  1109.     } else {
  1110.       return $this->render('Lenord/Main/elu.html.twig'$this->params);
  1111.     }
  1112.   }
  1113.   #[Route(path'/l-institution/{slug}'name'lenord_pagecms')]
  1114.   public function lenord_pagecmsges(Request $requeststring $slug): Response
  1115.   {
  1116.     $result = [];
  1117.     $pageEntity $this->em->getRepository(Pages::class)->findOneBy(['alias_url' => $slug'actif' => 1'lenord' => 1]);
  1118.     if ($pageEntity) {
  1119.       $this->params['page'] = $pageEntity;
  1120.       $this->params['meta_description'] = $this->params['page']->getMetaDescription();
  1121.       $this->params['title'] = $this->params['page']->getTitre() . " - L'institution";
  1122.       if ($this->params['page']->getId() === 9) {
  1123.         $this->params['title'] = $this->params['page']->getTitre();
  1124.       }
  1125.       $content_post null;
  1126.       if ($this->params['page']->getContent() !== null) {
  1127.         $content_post $this->feedUtilities->jsonToHtml($this->params['page']->getContent(), $request$this->params['title']);
  1128.       }
  1129.       $this->params['content_post'] = $content_post;
  1130.       $this->params['nordinfo_rss'] = [];
  1131.       if ($this->params['page']->getNordinfoRss() !== null) {
  1132.         $this->params['nordinfo_rss'] = $this->rss_service->getArrayArticle($this->params['page']->getNordinfoRss());
  1133.         $this->params['nordinfo_rss_description'] = $this->params['page']->getNordinfoRss()->getDescription();
  1134.       } else {
  1135.         $this->params['nordinfo_rss_description'] = null;
  1136.       }
  1137.       $this->params['epingles'] = $this->epingle_service->getEpingles('lenord');
  1138.       foreach ($this->params['page']->getEpingles() as $e) {
  1139.         if ($e->getActive() === true) {
  1140.           $this->params['epingles'][] = $e;
  1141.         }
  1142.       }
  1143.       $this->params['breadcrumb'] = [['alias' => '/''titre' => 'Accueil'], ['alias' => '/l-institution''titre' => 'L\'institution'], ['alias' => '''titre' => $this->params['page']->getTitre()]];
  1144.       $this->params['seo_breadcrumb'] = json_encode($this->seo_service->getSeoBreadcrumb($this->params['breadcrumb'], $request), JSON_THROW_ON_ERROR JSON_UNESCAPED_SLASHES JSON_HEX_APOS);
  1145.       $this->params['openGraph'] = ["title" => $this->params['page']->getTitre(), "url" => "https://lenord.fr/" $slug"image" => "https://lenord.fr/img/brandmaster/logo-le-nord.svg""type" => "website""description" => $this->params['content_post']];
  1146.       $this->params['referer'] = $request->headers->get('referer');
  1147.       $this->params['is_page_institution'] = true;
  1148.       $this->params['isElus'] = false;
  1149.       if ($slug === 'les-conseillers-departementaux') {
  1150.         //lister les elus
  1151.         $this->params['isElus'] = true;
  1152.         $this->params['cantons'] = $this->em->getRepository(Cantons::class)->findBy([], ['canton' => 'ASC']);
  1153.         $search null;
  1154.         $search_id null;
  1155.         $filter_title null;
  1156.         $this->params['is_search'] = 0;
  1157.         if ($request->request->get('function') === 'ajax_search_contacts') {
  1158.           if ($request->request->get('canton_id') !== null) {
  1159.             $search null;
  1160.             $search_id $request->request->get('canton_id');
  1161.             $this->params['is_search'] = 1;
  1162.             $canton $this->em->getRepository(Cantons::class)->find($request->request->get('canton_id'));
  1163.             $filter_title ' résultats pour "' $canton?->getCanton() . '"';
  1164.           } else if ($request->request->get('search') !== "") {
  1165.             $search $request->request->get('search');
  1166.             $search_id null;
  1167.             $this->params['is_search'] = 1;
  1168.             $filter_title ' résultats pour "' $search '"';
  1169.           }
  1170.         } else {
  1171.           if ($request->query->get('canton_id') !== null) {
  1172.             $search null;
  1173.             $search_id $request->query->get('canton_id');
  1174.             $this->params['is_search'] = 1;
  1175.             $canton $this->em->getRepository(Cantons::class)->find($request->query->get('canton_id'));
  1176.             $filter_title ' résultats pour "' $canton?->getCanton() . '"';
  1177.           } else if ($request->query->get('search') != "") {
  1178.             $search $request->query->get("search");
  1179.             $search_id null;
  1180.             $this->params['is_search'] = 1;
  1181.             $filter_title ' résultats pour "' $search '"';
  1182.           }
  1183.         }
  1184.         if ($request->request->get('function') === 'ajax_search_contacts_reset') {
  1185.           $search null;
  1186.           $search_id null;
  1187.         }
  1188.         $this->params['contacts'] = $this->em->getRepository(Contact::class)->getContacts_(1$search$search_id);
  1189.         $this->params['filter_title'] = ($filter_title !== null) ? (is_countable($this->params['contacts']) ? count($this->params['contacts']) : 0) . $filter_title null;
  1190.         if ($request->request->get('function') === 'ajax_search_contacts' || $request->request->get('function') === 'ajax_search_contacts_reset') {
  1191.           $result['html'] = $this->render('/Nordinfo/Main/ajax/contacts_list.html.twig'$this->params)->getContent();
  1192.           $result['filter_title'] = $this->params['filter_title'];
  1193.           return new JsonResponse($result);
  1194.         }
  1195.       }
  1196.       if ($request->get('function') === 'download_pdf') {
  1197.         $this->params['is_pdf'] = 1;
  1198.         $pdfOptions = new Options();
  1199.         $pdfOptions->set('defaultFont''Arial');
  1200.         $pdfOptions->setIsRemoteEnabled(true);
  1201.         $dompdf = new Dompdf($pdfOptions);
  1202.         $html $this->renderView('Lenord/Main/page.html.twig'$this->params);
  1203.         $dompdf->loadHtml($html);
  1204.         $dompdf->setPaper('A4''portrait');
  1205.         $dompdf->render();
  1206.         $output $dompdf->output();
  1207.         $filename sprintf('le-nord-%s.pdf'$this->params['title']);
  1208.         return new Response(
  1209.           $output,
  1210.           200,
  1211.           [
  1212.             'Content-Type' => 'application/pdf',
  1213.             'Content-Disposition' => sprintf('attachment; filename="%s"'"$filename"),
  1214.           ]
  1215.         );
  1216.       }
  1217.       return $this->render('Lenord/Main/page.html.twig'$this->params);
  1218.     }
  1219.     throw $this->createNotFoundException('La page demandée n\'existe pas.');
  1220.   }
  1221.   #[Route(path'/{slug}'name'lenord_page_legale')]
  1222.   public function pagesatellite(Request $requeststring $slug): Response
  1223.   {
  1224.     $this->params['slug'] = $slug;
  1225.     $this->params['referer'] = $request->headers->get('referer');
  1226.     $this->params['politique'] = $this->em->getRepository(PageSatellite::class)->findOneBy(['alias_url' => $slug]);
  1227.     if ($this->params['politique'] == null) {
  1228.       return $this->pagelegales($request$slug);
  1229.     }
  1230.     $this->params['title'] = $this->params['politique']->getTitre();
  1231.     $this->params['meta_description'] = $this->params['politique']->getChapo();
  1232.     $this->params['content_post'] = $this->feedUtilities->jsonToHtml($this->params['politique']->getContent(), $request$this->params['title']);
  1233.     $this->params['nordinfo_rss'] = null;
  1234.     $this->params['nordinfo_rss_description'] = null;
  1235.     if ($this->params['politique']->getNordinfoRss() != null) {
  1236.       $this->params['nordinfo_rss'] = $this->rss_service->getArrayArticle($this->params['politique']->getNordinfoRss());
  1237.       $this->params['nordinfo_rss_description'] = $this->params['politique']->getNordinfoRss()->getDescription();
  1238.     }
  1239.     $this->params['epingles'] = $this->epingle_service->getEpingles('lenord');
  1240.     /*$epingles_politiques = $this->epingle_service->getEpinglesSection('politique');
  1241.     foreach ($epingles_politiques as $epingle) {
  1242.       array_push($this->params['epingles'], $epingle);
  1243.     }*/
  1244.     foreach ($this->params['politique']->getEpingles() as $e) {
  1245.       if ($e->getActive() == true) {
  1246.         array_push($this->params['epingles'], $e);
  1247.       }
  1248.     }
  1249.     $this->params['breadcrumb'] = [['alias' => '/''titre' => 'Accueil'], ['alias' => '''titre' => $this->params['politique']->getTitre()]];
  1250.     $this->params['seo_breadcrumb'] = json_encode($this->seo_service->getSeoBreadcrumb($this->params['breadcrumb'], $request),  JSON_UNESCAPED_SLASHES JSON_HEX_APOS);
  1251.     $this->params['openGraph'] = ["title" => $this->params['politique']->getTitre(), "url" => "https://lenord.fr/" $slug"image" => "https://lenord.fr/img/brandmaster/logo-le-nord.svg""type" => "website""description" => $this->params['content_post']];
  1252.     $this->params['referer'] = $request->headers->get('referer');
  1253.     $this->params['is_page_politique'] = false;
  1254.     if ($request->get('function') == 'download_pdf') {
  1255.       $this->params['is_pdf'] = 1;
  1256.       $pdfOptions = new Options();
  1257.       $pdfOptions->set('defaultFont''Arial');
  1258.       $pdfOptions->setIsRemoteEnabled(true);
  1259.       $dompdf = new Dompdf($pdfOptions);
  1260.       $html $this->renderView('Lenord/Main/politique.html.twig'$this->params);
  1261.       $dompdf->loadHtml($html);
  1262.       $dompdf->setPaper('A4''portrait');
  1263.       $dompdf->render();
  1264.       $output $dompdf->output();
  1265.       $filename sprintf('le-nord-%s.pdf'$this->params['title']);
  1266.       return new Response(
  1267.         $output,
  1268.         200,
  1269.         [
  1270.           'Content-Type' => 'application/pdf',
  1271.           'Content-Disposition' => sprintf('attachment; filename="%s"'"$filename"),
  1272.         ]
  1273.       );
  1274.     } else {
  1275.       return $this->render('Lenord/Main/politique.html.twig'$this->params);
  1276.     }
  1277.   }
  1278.   public function pagelegales(Request $requeststring $slug): Response
  1279.   {
  1280.     $this->params['referer'] = $request->headers->get('referer');
  1281.     $post $this->em->getRepository(PagesLegales::class)->findOneBy(['slug' => $slug'actif' => 1]);
  1282.     if (!$post) {
  1283.       throw $this->createNotFoundException('La page demandée n\'existe pas.');
  1284.     }
  1285.     $this->params['post'] = $post;
  1286.     $this->params['meta_description'] = "La page " $this->params['post']->getTitre() . " du Département du Nord";
  1287.     $this->params['title'] = $this->params['post']->getTitre();
  1288.     $this->params['epingles'] = $this->epingle_service->getEpingles('lenord');
  1289.     $epingles_ $this->epingle_service->getEpinglesSection('legales_lenord');
  1290.     foreach ($epingles_ as $epingle) {
  1291.       array_push($this->params['epingles'], $epingle);
  1292.     }
  1293.     $this->params['breadcrumb'] = [['alias' => '/''titre' => 'Accueil'], ['alias' => '''titre' => $this->params['title']]];
  1294.     $this->params['seo_breadcrumb'] = json_encode($this->seo_service->getSeoBreadcrumb($this->params['breadcrumb'], $request),  JSON_UNESCAPED_SLASHES JSON_HEX_APOS);
  1295.     if ($request->get('function') === 'download_pdf') {
  1296.       $this->params['is_pdf'] = 1;
  1297.       $pdfOptions = new Options();
  1298.       $pdfOptions->set('defaultFont''Arial');
  1299.       $pdfOptions->setIsRemoteEnabled(true);
  1300.       $dompdf = new Dompdf($pdfOptions);
  1301.       $html $this->renderView('Lenord/Main/detail_page_legale.html.twig'$this->params);
  1302.       $dompdf->loadHtml($html);
  1303.       $dompdf->setPaper('A4''portrait');
  1304.       $dompdf->render();
  1305.       $output $dompdf->output();
  1306.       $filename sprintf('le-nord-%s.pdf'$this->params['post']->getTitre());
  1307.       return new Response(
  1308.         $output,
  1309.         200,
  1310.         [
  1311.           'Content-Type' => 'application/pdf',
  1312.           'Content-Disposition' => sprintf('attachment; filename="%s"'"$filename"),
  1313.         ]
  1314.       );
  1315.     } else {
  1316.       return $this->render('Lenord/Main/detail_page_legale.html.twig'$this->params);
  1317.     }
  1318.   }
  1319.   #[Route(path'/ajax/getServicesAll'name'services_ajax_getServicesAllLenNord')]
  1320.   public function getServicesAll(Request $request): Response
  1321.   {
  1322.     $services $this->em->getRepository(Service::class)->getServicesByGrandprofil($request->request->get('alias'));
  1323.     return new JsonResponse(['datas' => $services]);
  1324.   }
  1325.   private function getCaptcha(): mixed
  1326.   {
  1327.     $captchaCh = [012345678910];
  1328.     $captchaLe = ["zéro""un""deux""trois""quatre""cinq""six""sept""huit""neuf""dix"];
  1329.     $testcap array_merge($captchaCh$captchaLe);
  1330.     $rnd array_rand($testcap2);
  1331.     $i1 $rnd[0];
  1332.     if ($rnd[0] >= 11) {
  1333.       $i1 $rnd[0] - 11;
  1334.     }
  1335.     $i2 $rnd[1];
  1336.     if ($rnd[1] >= 11) {
  1337.       $i2 $rnd[1] - 11;
  1338.     }
  1339.     $capp = ["valeur1" => ["libelle" => $testcap[$rnd[0]], "valeur" => $captchaCh[$i1]], "valeur2" => ["libelle" => $testcap[$rnd[1]], "valeur" => $captchaCh[$i2]]];
  1340.     return $capp;
  1341.   }
  1342. }