<?php
namespace App\Controller\Lenord;
use App\Entity\Cantons;
use App\Entity\Commune;
use App\Entity\Contact;
use App\Entity\CustomForm;
use App\Entity\Document;
use App\Entity\Footer;
use App\Entity\FooterSites;
use App\Entity\FormulaireThematique;
use App\Entity\Glossaire;
use App\Entity\InscritNewsletter;
use App\Entity\LogEs;
use App\Entity\MailElu;
use App\Entity\PageAccueil;
use App\Entity\PageAccueilService;
use App\Entity\Pages;
use App\Entity\PageSatellite;
use App\Entity\PagesLegales;
use App\Entity\PolitiqueDepartementale;
use App\Entity\Service;
use App\Entity\TypeDocument;
use App\Entity\User;
use DateTime;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Doctrine\ORM\EntityManagerInterface;
use App\Utilities\Feed;
use App\Service\ElasticsearchService;
use App\Service\EpingleService;
use App\Service\OfficeMailService;
use App\Service\WemapService;
use App\Service\RssService;
use App\Service\SendgridMailService;
use App\Service\SeoService;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Dompdf\Dompdf;
use Dompdf\Options;
/**
* @method User getUser()
*/
//#[Route(host: "lenord.local")]
#[Route(host: "lenord.spontaneit.fr")]
//#[Route(host: "lenord.fr")]
//#[Route(host:"localhost")]
class MainLenordController extends AbstractController
{
protected mixed $params = [];
public function __construct(
private EntityManagerInterface $em,
private Feed $feedUtilities,
private ElasticsearchService $es_service,
private WemapService $wemap_service,
private RssService $rss_service,
private EpingleService $epingle_service,
private SendgridMailService $sendgrid_service,
private SeoService $seo_service
) {
$this->params['title'] = "";
$this->params['meta_description'] = "";
$this->params['footer'] = $this->em->getRepository(Footer::class)->find(1);
$this->params['epingles'] = [];
$this->params['is_pdf'] = 0;
$this->params['is_preview'] = 0;
$this->params['breadcrumb'] = [];
}
#[Route(path: '/test_email', name: 'lenord_test_email')]
public function lenord_test_email(OfficeMailService $mail_service){
dd($mail_service->testsend());
}
#[Route(path: '/store_preferences', name: 'lenord_store_preferences')]
public function storeUserPreferences(Request $request): Response
{
$post = $request->request;
$function = $post->get('function');
$user = $this->getUser();
switch ($function) {
case 'store_dark_mode':
$user->setDarkMode((int)$post->get('dark_mode'));
$this->em->persist($user);
$this->em->flush();
break;
case 'store_font_size':
$user->setFontSize($post->get('font_size'));
$this->em->persist($user);
$this->em->flush();
break;
case 'store_font_family':
$user->setFontFamily($post->get('font_family'));
$this->em->persist($user);
$this->em->flush();
break;
}
return new JsonResponse(['success' => true]);
}
#[Route(path: '/compte-cree/{token}', name: 'user_activate')]
public function activateUser(string $token): Response
{
$user = $this->em->getRepository(User::class)->findOneBy(['token_activation' => $token]);
if ($user == null) {
$this->params['message'] = 'Compte déjà activé ou inexistant';
return $this->render('Nordinfo/Main/endformerror.html.twig', $this->params);
}
$user->setTokenActivation(null)
->setActive(true);
$this->em->persist($user);
$this->em->flush();
$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.";
if ($user->getRole() == "vip") {
$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.
Mon profil premium me permet d'accéder à des contenus exclusifs ou en avant-première.
Ces contenus sont indiqués par un cadenas vert dans L'info, Vidéos et dans Mes actus.";
}
return $this->render('Nordinfo/Main/endregister.html.twig', $this->params);
}
#[Route(path: '/ajax/territory_lenord', name: 'ajax_territory_lenord')]
public function searchTerritoryLenord(Request $request): Response
{
$search = $request->request->get('search');
//$test = $this->em->getRepository(Cantons::class)->searchCommune($search);
$test = $this->em->getRepository(Commune::class)->findOneBy(array('commune' => $search));
if ($test == null) {
$response = ['error' => 'Aucun territoire trouvé'];
} else {
$response = ['error' => false, 't' => ['id' => $test->getTerritoire()->getId(), 'name' => $test->getTerritoire()->getDisplayName()]];
}
return new JsonResponse($response);
}
#[Route(path: '/', name: 'lenord_home')]
public function home(): Response
{
$this->params['title'] = "";
$this->params['meta_description'] = "Le site du Département du Nord présentant ses politiques, ses services, son institution et son actualité";
$this->params['home'] = $this->em->getRepository(PageAccueil::class)->find(1);
$this->params['strates'] = $this->getOrderStrates($this->params['home']);
$this->params['politiques'] = $this->em->getRepository(PolitiqueDepartementale::class)->findBy(['statut' => 5], ['ordre' => 'ASC']);
$this->params['sites'] = $this->em->getRepository(FooterSites::class)->getForFooter(true);
$this->params['pages'] = $this->em->getRepository(Pages::class)->getPages(0, 1);
$this->params['nordinfo_rss'] = null;
$this->params['rand_image'] = null;
if ($this->params['home']->getImageActive() == true && $this->params['home']->getImages()->count() > 0) {
$rand_image = random_int(0, $this->params['home']->getImages()->count() - 1);
$this->params['rand_image'] = $rand_image;
}
if ($this->params['home']->getNordinfoRss() != null) {
$this->params['nordinfo_rss'] = $this->rss_service->getArrayArticle($this->params['home']->getNordinfoRss());
}
$this->params['home_service'] = $this->em->getRepository(PageAccueilService::class)->find(1);
$count_services_home = $this->params['home_service']->getServices()->count();
$this->params['services_forcomplete'] = [];
if ($count_services_home < 9) {
$this->params['services_forcomplete'] = $this->em->getRepository(Service::class)->findBy(['statut' => 5], ['view_count' => 'DESC'], 7);
}
$this->params['epingles'] = $this->epingle_service->getEpingles('lenord');
$epingles_ = $this->epingle_service->getEpinglesSection('home_lenord');
foreach ($epingles_ as $epingle) {
array_push($this->params['epingles'], $epingle);
}
return $this->render('Lenord/Main/home.html.twig', $this->params);
}
#[Route(path: '/plan-du-site', name: 'lenord_plandusite')]
public function lenord_plandusite(Request $request): Response
{
$this->params['title'] = "Plan du site";
$this->params['meta_description'] = "Le plan du site du Département du Nord";
$this->params['breadcrumb'] = [['alias' => '/', 'titre' => 'Accueil'], ['alias' => '', 'titre' => $this->params['title']]];
$this->params['seo_breadcrumb'] = json_encode($this->seo_service->getSeoBreadcrumb($this->params['breadcrumb'], $request), JSON_UNESCAPED_SLASHES | JSON_HEX_APOS);
$this->params['referer'] = $request->headers->get('referer');
$urls = [];
$urls['index']['parent']['url'] = $this->generateUrl('lenord_home');
$urls['index']['parent']['name'] = "Accueil";
$urls['politiques']['parent']['url'] = $this->generateUrl('lenord_nos_politiques');
$urls['politiques']['parent']['name'] = "Nos politiques";
$j = 0;
$politiques = $this->em->getRepository(PolitiqueDepartementale::class)->findBy(['statut' => 5]);
foreach ($politiques as $politique) {
$urls['politiques']['children'][$j]['url'] = $this->generateUrl('lenord_politique', ['alias_url' => $politique->getAliasUrl()]);
$urls['politiques']['children'][$j]['name'] = $politique->getTitre();
$j++;
}
$urls['institution']['parent']['url'] = $this->generateUrl('lenord_institutions');
$urls['institution']['parent']['name'] = "L'institution";
$i = 0;
$cmsPages = $this->em->getRepository(Pages::class)->getPages(0, 1);
foreach ($cmsPages as $item) {
$urls['institution']['children'][$i]['url'] = $this->generateUrl('lenord_pagecms', ['slug' => $item->getAliasUrl()]);
$urls['institution']['children'][$i]['name'] = $item->getTitre();
if ($item->getAliasUrl() == "les-conseillers-departementaux") {
//Elus
$h = 0;
$elus = $this->em->getRepository(Contact::class)->getContacts_(1);
foreach ($elus as $elu) {
$urls['institution']['children'][$i]['children'][$h]['url'] = $this->generateUrl('elus_lenord_detail', ['slug' => $elu->getSlug()]);
$urls['institution']['children'][$i]['children'][$h]['name'] = $elu->getFirstName() . ' ' . $elu->getLastName();
$h++;
}
}
$i++;
}
$urls['cartographie']['parent']['url'] = $this->generateUrl('cartographie');
$urls['cartographie']['parent']['name'] = "Cartographie";
$urls['documents']['parent']['url'] = $this->generateUrl('espacedoc');
$urls['documents']['parent']['name'] = "Espace documentaire";
$urls['support']['parent']['url'] = $this->generateUrl('lenord_support');
$urls['support']['parent']['name'] = "Contact";
$urls['glossaire']['parent']['url'] = $this->generateUrl('lenord_glossaire');
$urls['glossaire']['parent']['name'] = "Glossaire";
$urls['recherche']['parent']['url'] = $this->generateUrl('lenord_recherche');
$urls['recherche']['parent']['name'] = "Recherche";
$urls['infolettre']['parent']['url'] = $this->generateUrl('lenord_page_legale', ['slug' => 'infolettre']);
$urls['infolettre']['parent']['name'] = "Infolettre";
$urls['mentionlegale']['parent']['url'] = $this->generateUrl('lenord_page_legale', ['slug' => 'mentions-legales']);
$urls['mentionlegale']['parent']['name'] = "Mentions légales";
$urls['accessibilite']['parent']['url'] = $this->generateUrl('lenord_page_legale', ['slug' => 'accessibilite']);
$urls['accessibilite']['parent']['name'] = "Accessibilité";
$urls['donneespersonnelles']['parent']['url'] = $this->generateUrl('lenord_page_legale', ['slug' => 'donnees-personnelles']);
$urls['donneespersonnelles']['parent']['name'] = "Données personnelles";
$urls['presse']['parent']['url'] = $this->generateUrl('lenord_page_legale', ['slug' => 'presse']);
$urls['presse']['parent']['name'] = "Espace Presse";
$urls['schema']['parent']['url'] = $this->generateUrl('lenord_page_legale', ['slug' => 'schema-pluriannuel-accessibilite-numerique']);
$urls['schema']['parent']['name'] = "Schéma Pluriannuel d'Accessibilité Numérique 2024-2027";
$this->params['sites'] = $this->em->getRepository(FooterSites::class)->getForFooter(true);
$this->params['urls'] = $urls;
$this->params['epingles'] = $this->epingle_service->getEpingles('lenord');
if ($request->get('function') == 'download_pdf') {
$this->params['is_pdf'] = 1;
$pdfOptions = new Options();
$pdfOptions->set('defaultFont', 'Arial');
$pdfOptions->setIsRemoteEnabled(true);
$dompdf = new Dompdf($pdfOptions);
$html = $this->renderView('Lenord/Main/plandusite.html.twig', $this->params);
$dompdf->loadHtml($html);
$dompdf->setPaper('A4', 'portrait');
$dompdf->render();
$output = $dompdf->output();
$filename = sprintf('le-nord-%s.pdf', $this->params['title']);
return new Response(
$output,
200,
[
'Content-Type' => 'application/pdf',
'Content-Disposition' => sprintf('attachment; filename="%s"', "$filename"),
]
);
} else {
return $this->render('Lenord/Main/plandusite.html.twig', $this->params);
}
}
#[Route(path: '/sitemap.xml', name: 'lenord_plandusite_xml')]
public function lenord_plandusite_xml(): Response
{
$domain = "https://lenord.fr";
$dom = new \DOMDocument('1.0', 'UTF-8');
$rss = $dom->createElement('urlset');
$rss->setAttribute('xmlns', 'http://www.sitemaps.org/schemas/sitemap/0.9');
$rss_node = $dom->appendChild($rss);
$url = $dom->createElement('url');
$url_node = $rss_node->appendChild($url);
$url_node->appendChild($dom->createElement('loc', $domain . $this->generateUrl('lenord_home')));
$url = $dom->createElement('url');
$url_node = $rss_node->appendChild($url);
$url_node->appendChild($dom->createElement('loc', $domain . $this->generateUrl('lenord_nos_politiques')));
$j = 0;
$politiques = $this->em->getRepository(PolitiqueDepartementale::class)->findBy(['statut' => 5]);
foreach ($politiques as $politique) {
$url = $dom->createElement('url');
$url_node = $rss_node->appendChild($url);
$url_node->appendChild($dom->createElement('loc', $domain . $this->generateUrl('lenord_politique', ['alias_url' => $politique->getAliasUrl()])));
$j++;
}
$url = $dom->createElement('url');
$url_node = $rss_node->appendChild($url);
$url_node->appendChild($dom->createElement('loc', $domain . $this->generateUrl('lenord_institutions')));
$cmsPages = $this->em->getRepository(Pages::class)->getPages(0, 1);
foreach ($cmsPages as $item) {
$url = $dom->createElement('url');
$url_node = $rss_node->appendChild($url);
$url_node->appendChild($dom->createElement('loc', $domain . $this->generateUrl('lenord_pagecms', ['slug' => $item->getAliasUrl()])));
}
$url = $dom->createElement('url');
$url_node = $rss_node->appendChild($url);
$url_node->appendChild($dom->createElement('loc', $domain . $this->generateUrl('cartographie')));
$url = $dom->createElement('url');
$url_node = $rss_node->appendChild($url);
$url_node->appendChild($dom->createElement('loc', $domain . $this->generateUrl('espacedoc')));
$url = $dom->createElement('url');
$url_node = $rss_node->appendChild($url);
$url_node->appendChild($dom->createElement('loc', $domain . $this->generateUrl('lenord_support')));
$url = $dom->createElement('url');
$url_node = $rss_node->appendChild($url);
$url_node->appendChild($dom->createElement('loc', $domain . $this->generateUrl('lenord_glossaire')));
$url = $dom->createElement('url');
$url_node = $rss_node->appendChild($url);
$url_node->appendChild($dom->createElement('loc', $domain . $this->generateUrl('lenord_recherche')));
$url = $dom->createElement('url');
$url_node = $rss_node->appendChild($url);
$url_node->appendChild($dom->createElement('loc', $domain . $this->generateUrl('lenord_page_legale', ['slug' => 'infolettre'])));
$url = $dom->createElement('url');
$url_node = $rss_node->appendChild($url);
$url_node->appendChild($dom->createElement('loc', $domain . $this->generateUrl('lenord_page_legale', ['slug' => 'mentions-legales'])));
$url = $dom->createElement('url');
$url_node = $rss_node->appendChild($url);
$url_node->appendChild($dom->createElement('loc', $domain . $this->generateUrl('lenord_page_legale', ['slug' => 'accessibilite'])));
$url = $dom->createElement('url');
$url_node = $rss_node->appendChild($url);
$url_node->appendChild($dom->createElement('loc', $domain . $this->generateUrl('lenord_page_legale', ['slug' => 'presse'])));
//Elus
$elus = $this->em->getRepository(Contact::class)->getContacts_(1);
foreach ($elus as $elu) {
$this->generateUrl('elus_lenord_detail', ['slug' => $elu->getSlug()]);
}
$xml = $dom->saveXML();
$response = new Response($xml);
$response->headers->set('Content-Type', 'text/xml');
$response->headers->set('Access-Control-Allow-Origin', '*');
return $response;
}
private function getOrderStrates(mixed $home): mixed
{
$array_strate = [];
if ($home->getImageActive() == true) {
$array_strate[$home->getOrdreImage()] = 'image';
}
if ($home->getActuActive() == true) {
$array_strate[$home->getOrdreActu()] = 'actu';
}
if ($home->getActiveCitation() == true) {
$array_strate[$home->getOrdreCitation()] = 'citation';
}
if ($home->getPolitiqueActive() == true) {
$array_strate[$home->getOrdrePolitique()] = 'politique';
}
if ($home->getInstitutionActive() == true) {
$array_strate[$home->getOrdreInstitution()] = 'institution';
}
if ($home->getNordinfoActive() == true) {
$array_strate[$home->getOrdreNordinfo()] = 'nordinfo';
}
if ($home->getTestimonialActive() == true) {
$array_strate[$home->getOrdreTestimonial()] = 'testimonial';
}
if ($home->getMagazineActive() == true) {
$array_strate[$home->getOrdreMagazine()] = 'magazine';
}
if ($home->getContentActive() == true) {
$array_strate[$home->getOrdreEditable()] = 'editable';
}
if ($home->getContentActive2() == true) {
$array_strate[$home->getOrdreEditable2()] = 'editable2';
}
if ($home->getContentActive3() == true) {
$array_strate[$home->getOrdreEditable3()] = 'editable3';
}
if ($home->getContentActive4() == true) {
$array_strate[$home->getOrdreEditable4()] = 'editable4';
}
if ($home->getContacterPresident() == true) {
$array_strate[$home->getOrdrePresident()] = 'president';
}
if ($home->getServicesActive() == true) {
$array_strate[$home->getOrdreServices()] = 'services';
}
if ($home->getNordEvasionActive() == true) {
$array_strate[$home->getOrdreNordEvasion()] = 'evasion';
}
if ($home->getCartographieActive() == true) {
$array_strate[$home->getCartographieOrdre()] = 'cartographie';
}
if ($home->getMagazineActive() == true) {
$array_strate[$home->getOrdreMagazine()] = 'magazine';
}
if ($home->getContentActive() == true) {
$array_strate[$home->getOrdreEditable()] = 'html1';
}
if ($home->getContentActive2() == true) {
$array_strate[$home->getOrdreEditable2()] = 'html2';
}
if ($home->getContentActive3() == true) {
$array_strate[$home->getOrdreEditable3()] = 'html3';
}
if ($home->getContentActive4() == true) {
$array_strate[$home->getOrdreEditable4()] = 'html4';
}
ksort($array_strate);
return $array_strate;
}
#[Route(path: '/nos-politiques', name: 'lenord_nos_politiques')]
public function nospolitiques(Request $request): Response
{
$this->params['title'] = "Nos politiques";
$this->params['meta_description'] = "Présentation des politiques du Département du Nord : emploi, autonomie, enfance famille jeunesse, collèges...";
$this->params['politiques'] = $this->em->getRepository(PolitiqueDepartementale::class)->findBy(['statut' => 5], ['ordre' => 'ASC']);
$this->params['sites'] = $this->em->getRepository(FooterSites::class)->getForFooter(true);
$this->params['epingles'] = $this->epingle_service->getEpingles('lenord');
$epingles_politiques = $this->epingle_service->getEpinglesSection('politique');
foreach ($epingles_politiques as $epingle) {
array_push($this->params['epingles'], $epingle);
}
$this->params['breadcrumb'] = [['alias' => '/', 'titre' => 'Accueil'], ['alias' => '', 'titre' => 'Nos politiques']];
$this->params['seo_breadcrumb'] = json_encode($this->seo_service->getSeoBreadcrumb($this->params['breadcrumb'], $request), JSON_UNESCAPED_SLASHES | JSON_HEX_APOS);
$this->params['referer'] = $request->headers->get('referer');
return $this->render('Lenord/Main/nospolitiques.html.twig', $this->params);
}
#[Route(path: '/l-institution', name: 'lenord_institutions')]
public function lenord_institutions(Request $request): Response
{
$this->params['title'] = "L'institution";
$this->params['meta_description'] = "Présentation de l'institution du Département du Nord : son fonctionnnement, ses élus, son budget et son histoire";
$this->params['pages'] = $this->em->getRepository(Pages::class)->getPages(0, 1);
$this->params['sites'] = $this->em->getRepository(FooterSites::class)->getForFooter(true);
$this->params['epingles'] = $this->epingle_service->getEpingles('lenord');
$epingles_politiques = $this->epingle_service->getEpinglesSection('institution');
foreach ($epingles_politiques as $epingle) {
array_push($this->params['epingles'], $epingle);
}
$this->params['breadcrumb'] = [['alias' => '/', 'titre' => 'Accueil'], ['alias' => '', 'titre' => 'L\'institution']];
$this->params['seo_breadcrumb'] = json_encode($this->seo_service->getSeoBreadcrumb($this->params['breadcrumb'], $request), JSON_UNESCAPED_SLASHES | JSON_HEX_APOS);
$this->params['referer'] = $request->headers->get('referer');
return $this->render('Lenord/Main/institutions.html.twig', $this->params);
}
#[Route(path: '/nos-politiques/{alias_url}', name: 'lenord_politique')]
public function politique(Request $request, string $alias_url): Response
{
$this->params['politique'] = $this->em->getRepository(PolitiqueDepartementale::class)->findOneBy(['alias_url' => $alias_url]);
$this->params['title'] = $this->params['politique']->getTitre() . " - Nos politiques";
$this->params['meta_description'] = $this->params['politique']->getChapo();
$this->params['content_post'] = $this->feedUtilities->jsonToHtml($this->params['politique']->getContent(), $request, $this->params['title']);
$this->params['nordinfo_rss'] = null;
$this->params['nordinfo_rss_description'] = null;
if ($this->params['politique']->getNordinfoRss() != null) {
$this->params['nordinfo_rss'] = $this->rss_service->getArrayArticle($this->params['politique']->getNordinfoRss());
$this->params['nordinfo_rss_description'] = $this->params['politique']->getNordinfoRss()->getDescription();
}
$this->params['epingles'] = $this->epingle_service->getEpingles('lenord');
$epingles_politiques = $this->epingle_service->getEpinglesSection('politique');
foreach ($epingles_politiques as $epingle) {
array_push($this->params['epingles'], $epingle);
}
foreach ($this->params['politique']->getEpingles() as $e) {
if ($e->getActive() == true) {
array_push($this->params['epingles'], $e);
}
}
$this->params['breadcrumb'] = [['alias' => '/', 'titre' => 'Accueil'], ['alias' => '/nos-politiques', 'titre' => 'Nos politiques'], ['alias' => '', 'titre' => $this->params['politique']->getTitre()]];
$this->params['seo_breadcrumb'] = json_encode($this->seo_service->getSeoBreadcrumb($this->params['breadcrumb'], $request), JSON_UNESCAPED_SLASHES | JSON_HEX_APOS);
$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']];
$this->params['referer'] = $request->headers->get('referer');
$this->params['is_page_politique'] = true;
if ($request->get('function') == 'download_pdf') {
$this->params['is_pdf'] = 1;
$pdfOptions = new Options();
$pdfOptions->set('defaultFont', 'Arial');
$pdfOptions->setIsRemoteEnabled(true);
$dompdf = new Dompdf($pdfOptions);
$html = $this->renderView('Lenord/Main/politique.html.twig', $this->params);
$dompdf->loadHtml($html);
$dompdf->setPaper('A4', 'portrait');
$dompdf->render();
$output = $dompdf->output();
$filename = sprintf('le-nord-%s.pdf', $this->params['title']);
return new Response(
$output,
200,
[
'Content-Type' => 'application/pdf',
'Content-Disposition' => sprintf('attachment; filename="%s"', "$filename"),
]
);
} else {
return $this->render('Lenord/Main/politique.html.twig', $this->params);
}
}
#[Route(path: '/departement/lepresident', name: 'lenord_president')]
public function lenord_president(Request $request): Response
{
$this->params['title'] = "Le Président";
$this->params['epingles'] = $this->epingle_service->getEpingles('lenord');
$this->params['breadcrumb'] = [['alias' => '/', 'titre' => 'Accueil'], ['alias' => '', 'titre' => $this->params['title']]];
$this->params['seo_breadcrumb'] = json_encode($this->seo_service->getSeoBreadcrumb($this->params['breadcrumb'], $request), JSON_UNESCAPED_SLASHES | JSON_HEX_APOS);
$this->params['referer'] = $request->headers->get('referer');
if ($request->get('function') == 'download_pdf') {
$this->params['is_pdf'] = 1;
$pdfOptions = new Options();
$pdfOptions->set('defaultFont', 'Arial');
$pdfOptions->setIsRemoteEnabled(true);
$dompdf = new Dompdf($pdfOptions);
$html = $this->renderView('Lenord/Main/page.html.twig', $this->params);
$dompdf->loadHtml($html);
$dompdf->setPaper('A4', 'portrait');
$dompdf->render();
$output = $dompdf->output();
$filename = sprintf('le-nord-%s.pdf', $this->params['title']);
return new Response(
$output,
200,
[
'Content-Type' => 'application/pdf',
'Content-Disposition' => sprintf('attachment; filename="%s"', "$filename"),
]
);
} else {
return $this->render('Lenord/Main/page.html.twig', $this->params);
}
}
#[Route(path: '/glossaire', name: 'lenord_glossaire')]
public function glossaire(Request $request): Response
{
$this->params['title'] = "Glossaire";
$this->params['meta_description'] = "Le glossaire du site du Département du Nord : acronymes et définitions utiles";
$glossaire = $this->em->getRepository(Glossaire::class)->findBy([], ['terme' => 'ASC']);
$this->params['glossaires'] = $glossaire;
$this->params['letters'] = $this->em->getRepository(Glossaire::class)->getFirstLetters();
$this->params['sites'] = $this->em->getRepository(FooterSites::class)->getForFooter(true);
$this->params['epingles'] = $this->epingle_service->getEpingles('lenord');
$epingles_ = $this->epingle_service->getEpinglesSection('glossaire_lenord');
foreach ($epingles_ as $epingle) {
array_push($this->params['epingles'], $epingle);
}
$this->params['breadcrumb'] = [['alias' => '/', 'titre' => 'Accueil'], ['alias' => '', 'titre' => 'Glossaire']];
$this->params['seo_breadcrumb'] = json_encode($this->seo_service->getSeoBreadcrumb($this->params['breadcrumb'], $request), JSON_UNESCAPED_SLASHES | JSON_HEX_APOS);
$this->params['referer'] = $request->headers->get('referer');
return $this->render('Lenord/Main/glossaire.html.twig', $this->params);
}
#[Route(path: '/espace-documentaire', name: 'espacedoc')]
public function espacedoc(Request $request): Response
{
$this->params['title'] = "Espace documentaire";
$this->params['meta_description'] = "Consulter et télécharger les documents officiels produits par le Département du Nord";
$this->params['types_document'] = $this->em->getRepository(TypeDocument::class)->findAll();
$page_number = $request->query->getInt('page', 1);
$items_per_page = 24;
$types = [];
$types_libelle = [];
if ($request->query->get('types') != null) {
//$array_fields = array('sousprofils.alias');
foreach ((array)$request->query->get('types') as $id) {
array_push($types, $id);
$t = $this->em->getRepository(TypeDocument::class)->find($id);
array_push($types_libelle, $t->getTitre());
$this->params['title'] .= ' ' . '"' . $t->getTitre() . '"';
}
}
$search = $request->query->get('search');
if ($search == "") {
$search = null;
}
if ($request->query->get('_items_per_page') != null) {
$items_per_page = $request->query->get('_items_per_page');
}
$this->params['filters'] = $types;
$this->params['types_libelle'] = $types_libelle;
$this->params['search'] = $search;
$this->params['pagination'] = $this->em->getRepository(Document::class)->getDocuments($page_number, $types, $search, $items_per_page);
$this->params['sites'] = $this->em->getRepository(FooterSites::class)->getForFooter(true);
$this->params['epingles'] = $this->epingle_service->getEpingles('lenord');
$epingles_ = $this->epingle_service->getEpinglesSection('espace_documentaire');
foreach ($epingles_ as $epingle) {
array_push($this->params['epingles'], $epingle);
}
$this->params['breadcrumb'] = [['alias' => '/', 'titre' => 'Accueil'], ['alias' => '', 'titre' => 'Espace documentaire']];
$this->params['seo_breadcrumb'] = json_encode($this->seo_service->getSeoBreadcrumb($this->params['breadcrumb'], $request), JSON_UNESCAPED_SLASHES | JSON_HEX_APOS);
$this->params['referer'] = $request->headers->get('referer');
return $this->render('Lenord/Main/espacedoc.html.twig', $this->params);
}
#[Route(path: '/espace-documentaire/{slug}', name: 'document')]
public function document(Request $request, string $slug): Response
{
$this->params['document'] = $this->em->getRepository(Document::class)->findOneBy(['alias_url' => $slug]);
$this->params['title'] = $this->params['document']->getTitre() . " - Espace documentaire";
$this->params['meta_description'] = "Consulter et télécharger les documents officiels produits par le Département du Nord";
$this->params['content_post'] = $this->feedUtilities->jsonToHtml($this->params['document']->getContent(), $request, $this->params['title']);
$this->params['documents_lies'] = [];
if ((is_countable($this->params['document']->getDocumentsLies()) ? count($this->params['document']->getDocumentsLies()) : 0) < 3) {
$maxResult = 3 - (is_countable($this->params['document']->getDocumentsLies()) ? count($this->params['document']->getDocumentsLies()) : 0);
$types = [];
foreach ($this->params['document']->getTypes() as $ty) {
array_push($types, $ty->getId());
}
$this->params['documents_lies'] = $this->em->getRepository(Document::class)->getSameCategory($this->params['document']->getId(), $maxResult, $types);
}
$this->params['epingles'] = $this->epingle_service->getEpingles('lenord');
foreach ($this->params['document']->getEpingles() as $e) {
if ($e->getActive() == 1) {
array_push($this->params['epingles'], $e);
}
}
$this->params['breadcrumb'] = [['alias' => '/', 'titre' => 'Accueil'], ['alias' => '/espace-documentaire', 'titre' => 'Espace documentaire'], ['alias' => '', 'titre' => $this->params['document']->getTitre()]];
$this->params['seo_breadcrumb'] = json_encode($this->seo_service->getSeoBreadcrumb($this->params['breadcrumb'], $request), JSON_UNESCAPED_SLASHES | JSON_HEX_APOS);
$this->params['referer'] = $request->headers->get('referer');
$this->params['is_page_document'] = true;
if ($request->get('function') == 'download_pdf') {
$this->params['is_pdf'] = 1;
$pdfOptions = new Options();
$pdfOptions->set('defaultFont', 'Arial');
$pdfOptions->setIsRemoteEnabled(true);
$dompdf = new Dompdf($pdfOptions);
$html = $this->renderView('Lenord/Main/document.html.twig', $this->params);
$dompdf->loadHtml($html);
$dompdf->setPaper('A4', 'portrait');
$dompdf->render();
$output = $dompdf->output();
$filename = sprintf('le-nord-%s.pdf', $this->params['title']);
return new Response(
$output,
200,
[
'Content-Type' => 'application/pdf',
'Content-Disposition' => sprintf('attachment; filename="%s"', "$filename"),
]
);
} else {
return $this->render('Lenord/Main/document.html.twig', $this->params);
}
}
#[Route(path: '/formulaire-de-contact', name: 'lenord_support')]
public function lenord_support(Request $request): Response
{
$this->params['title'] = "Formulaire de contact";
$this->params['meta_description'] = "Contacter le Département du Nord et ses services par courriel";
$this->params['referer'] = $request->headers->get('referer');
$this->params['caps'] = $this->getCaptcha();
$this->params['epingles'] = $this->epingle_service->getEpingles('lenord');
$this->params['breadcrumb'] = [['alias' => '/', 'titre' => 'Accueil'], ['alias' => '', 'titre' => 'Formulaire de contact']];
$this->params['seo_breadcrumb'] = json_encode($this->seo_service->getSeoBreadcrumb($this->params['breadcrumb'], $request), JSON_UNESCAPED_SLASHES | JSON_HEX_APOS);
$this->params['thematiques'] = $this->em->getRepository(FormulaireThematique::class)->findBy(['bool_lenord' => 1], ['name' => 'ASC']);
return $this->render('Lenord/Main/support.html.twig', $this->params);
}
#[Route(path: '/formulaire-de-contact/{thematique}', name: 'lenord_support_thematique')]
public function lenord_support_thematique(Request $request, string $thematique): Response
{
$this->params['title'] = "Formulaire de contact";
$this->params['meta_description'] = "Contacter le Département du Nord et ses services par courriel";
$this->params['referer'] = $request->headers->get('referer');
$this->params['caps'] = $this->getCaptcha();
$this->params['epingles'] = $this->epingle_service->getEpingles('lenord');
$this->params['breadcrumb'] = [['alias' => '/', 'titre' => 'Accueil'], ['alias' => '', 'titre' => 'Formulaire de contact']];
$this->params['seo_breadcrumb'] = json_encode($this->seo_service->getSeoBreadcrumb($this->params['breadcrumb'], $request), JSON_UNESCAPED_SLASHES | JSON_HEX_APOS);
$this->params['thematiques'] = $this->em->getRepository(FormulaireThematique::class)->findBy(['bool_lenord' => 1], ['name' => 'ASC']);
$this->params['chosen_thematique'] = $thematique;
return $this->render('Lenord/Main/support.html.twig', $this->params);
}
/*#[Route(path: '/formulaire-{slug}', name: 'custom_form_lenord', host: "lenord.fr")]
public function custom_form(string $slug): Response
{
$custom_form = $this->em->getRepository(CustomForm::class)->findOneBy(array('alias' => $slug));
$this->params['caps'] = $this->getCaptcha();
$this->params['form'] = $custom_form;
return $this->render('Lenord/Main/custom_form.html.twig', $this->params);
}*/
#[Route(path: '/send_form_custom/{alias}', name: 'send_form_custom_lenord', host: "lenord.fr")]
public function send_form_custom(Request $request, string $alias): Response
{
$post = $request->request;
$custom_form = $this->em->getRepository(CustomForm::class)->findOneBy(array('alias' => $alias));
$destinataires_sendgrid = [];
$objet = null;
$objet = "Votre message à " . $custom_form->getDestinataire() . " via le site du Département du Nord";
$emails = explode(";", (string) $custom_form->getEmail());
for ($i = 0; $i < count($emails); $i++) {
array_push($destinataires_sendgrid, $emails[$i]);
}
$message = $post->get('message');
//exp
//destinataire_
//objet_
//message_
//piece_jointe_
$fileName = null;
$auth_extension = ['png', 'jpg', 'jpeg', 'gif', 'pdf'];
$mime_authorized = ['application/pdf', 'image/jpg', 'image/jpeg', 'image/gif', 'image/png'];
$file = null;
$newname = uniqid();
if ($request->files != null && $request->files->get('file') != null) {
$file = $request->files->get('file');
$fileName = $file->getClientOriginalName();
$fileType = $file->getClientMimeType();
if (in_array($file->guessExtension(), $auth_extension) && in_array($fileType, $mime_authorized)) {
/*try {
$file->move($uploadDir, $newname.'.'.$file->guessExtension());
array_push($files, array(
'name' => $newname.'.'.$file->guessExtension(),
'type' => $fileType,
'data' => $fileData,
));
} catch (FileException) {
$file = null;
return new JsonResponse(['error' => 'File could not be uploaded']);
}*/
} else {
$file = null;
return new JsonResponse(['error' => "Mauvais format d'image"]);
}
}
$date = new DateTime;
$content = "Le message suivant vient de vous être envoyé via le site du Département du Nord par " . $post->get('nom_prenom') .
" - Merci de répondre directement à " . $post->get('email') . " : " . "\n" . $post->get('message') . "\n\n" . "Nord, le Département est là - https://lenord.fr/";
$nom_dest = $custom_form->getDestinataire();
$content_exp = "Bonjour, votre message a été transmis à " . $nom_dest . "." . "\n\n" .
"Message : " . $post->get('message');
if ($fileName !== null) {
$content_exp .= "\n" . "Pièce jointe : " . $fileName;
}
$content_exp .= "\n\n" . "Nord, le Département est là - https://lenord.fr/";
//envoi mail
$result_ = $post->get('nb1') + $post->get('nb2');
if ($result_ == $post->get('captcha') && $post->get('raison') == null) {
try {
$this->sendgrid_service->send($destinataires_sendgrid, $content, "Message envoyé par " . $post->get('nom_prenom') . " via le site du Département du Nord", null, $file, false, $post->get('email'));
$this->sendgrid_service->send([$post->get('email')], $content_exp, $objet, null, $file, false);
} catch (\Exception) {
$this->params['message'] = 'Email erreur';
return $this->render('Lenord/Main/endformerror.html.twig', $this->params);
}
} else {
$this->params['message'] = 'Catcha erreur';
return $this->render('Lenord/Main/endformerror.html.twig', $this->params);
}
return $this->render('Lenord/Main/endform.html.twig', $this->params);
}
#[Route(path: '/confirmation', name: 'lenord_send_form')]
public function sendform(Request $request): Response
{
$post = $request->request;
$result_ = $post->get('nb1') + $post->get('nb2');
if ($result_ == $post->get('captcha')) {
$destinataires_sendgrid = [];
$message = $post->get('message');
//Thematique
$thematique = null;
if ($post->get('thematique') !== null) {
$formThematique = $this->em->getRepository(FormulaireThematique::class)->find($post->get('thematique'));
$thematique = $formThematique->getName();
$emails = explode(";", (string) $formThematique->getDestinataires());
for ($i = 0; $i < count($emails); $i++) {
array_push($destinataires_sendgrid, $emails[$i]);
}
} else {
$thematique = 'Message à un(e) élu(e) : ' . $request->request->get('dest_nom');
array_push($destinataires_sendgrid, $request->request->get('dest'));
$mail_elu = new MailElu;
$userIp = $request->getClientIp();
$mail_elu->setDate(new DateTime())
->setElu($request->request->get('dest_nom'))
->setContenu($message)
->setIp($userIp)
->setEmail($post->get('email'));
$this->em->persist($mail_elu);
$this->em->flush();
}
//exp
//destinataire_
//objet_
//message_
//piece_jointe_
$fileName = null;
$auth_extension = ['png', 'jpg', 'jpeg', 'gif', 'pdf'];
$mime_authorized = ['application/pdf', 'image/jpg', 'image/jpeg', 'image/gif', 'image/png'];
$file = null;
if ($request->files != null && $request->files->get('file') != null) {
$file = $request->files->get('file');
$fileName = $file->getClientOriginalName();
$fileType = $file->getClientMimeType();
if (in_array($file->guessExtension(), $auth_extension) && in_array($fileType, $mime_authorized)) {
/*try {
} catch (FileException) {
$file = null;
return new JsonResponse(['error' => 'File could not be uploaded']);
}*/
} else {
$file = null;
return new JsonResponse(['error' => "Mauvais format d'image"]);
}
}
$date = new DateTime();
$content = $this->renderView(
'Lenord/Mails/dest_signalement2.html.twig',
['site' => 'lenord',
'expediteur_email_' => ($post->get('prenom') != null && $post->get('nom') != null) ? $post->get('prenom') . ' ' . $post->get('nom') : $post->get('email'),
'destinataire_' => "agent en charge du support aux usagers", 'objet_' => 'Nouveau message sur le site du Département du Nord - ' . $thematique . ' / ' . "ND" . $date->format('dmYHis'),
'thematique' => $thematique, 'message_' => $message,
'email' => $post->get('email'), 'piece_jointe_' => ($fileName != null) ? $fileName : "Aucune pièce jointe",
'date' => "ND" . $date->format('dmYHis'), 'ville' => ($post->get('ville') !== null)?$post->get('ville'):null ,
'adresse' => ($post->get('adresse') !== null)?$post->get('adresse'):null,
'nom' => ($post->get('nom') !== null)?$post->get('nom'):null,
'prenom' => ($post->get('prenom') !== null)?$post->get('prenom'):null
]
);
$nom_dest = 'rédaction du Nord info';
if ($post->get('dest_nom') != null) {
$nom_dest = $post->get('dest_nom');
}
if ($post->get('thematique') === null) {
$thematique = 'Message à un(e) élu(e)';
}
$content_exp = $this->renderView(
'Lenord/Mails/exp_signalement2.html.twig',
['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')]
);
//envoi mail
//Newsletter
if ($post->get('newsletter') != null || $post->get('newsletter') === "") {
$ins = $this->em->getRepository(InscritNewsletter::class)->findOneBy(['email' => $post->get('email')]);
if ($ins == null) {
$ins = new InscritNewsletter;
$ins->setEmail($post->get('email'))
->setPrenom($post->get('prenom'))
->setNom($post->get('nom'))
->setDate(new DateTime());
$this->em->persist($ins);
$this->em->flush();
}
}
try {
$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);
$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);
} catch (\Exception $e) {
$this->params['message'] = 'Email erreur';
return $this->render('Lenord/Main/endformerror.html.twig', $this->params);
}
} else {
$this->params['message'] = 'Captcha erreur';
return $this->render('Lenord/Main/endformerror.html.twig', $this->params);
}
return $this->render('Lenord/Main/endform.html.twig', $this->params);
}
#[Route(path: '/infolettre', name: 'lenord_infolettre')]
public function infolettre(Request $request): Response
{
$this->params['referer'] = $request->headers->get('referer');
$this->params['breadcrumb'] = [['alias' => '/', 'titre' => 'Accueil'], ['alias' => '', 'titre' => 'Infolettre']];
$this->params['seo_breadcrumb'] = json_encode($this->seo_service->getSeoBreadcrumb($this->params['breadcrumb'], $request), JSON_UNESCAPED_SLASHES | JSON_HEX_APOS);
//epingle
$this->params['epingles'] = $this->epingle_service->getEpingles('lenord');
return $this->render('Lenord/Main/infolettre.html.twig', $this->params);
}
#[Route(path: '/recherche', name: 'lenord_recherche')]
public function lenord_recherche(Request $request): Response
{
$this->params['results'] = null;
$this->params['title'] = 'Recherche "' . $request->query->get('search') . '"';
$this->params['meta_description'] = "Rechercher les contenus du Département du Nord : informations, actualités, services, documents...";
$this->params['checkservices'] = null;
$this->params['checkactualites'] = null;
$this->params['checkevenements'] = null;
$this->params['checkdocuments'] = null;
if ($request->query->get('checkservices') == "on") {
$this->params['checkservices'] = 'on';
} else {
$this->params['checkservices'] = 'off';
}
if ($request->query->get('checkactualites') == "on") {
$this->params['checkactualites'] = 'on';
} else {
$this->params['checkactualites'] = 'off';
}
if ($request->query->get('checkevenements') == "on") {
$this->params['checkevenements'] = 'on';
} else {
$this->params['checkevenements'] = 'off';
}
if ($request->query->get('checkdocuments') == "on") {
$this->params['checkdocuments'] = 'on';
} else {
$this->params['checkdocuments'] = 'off';
}
if ($request->query->get('search') != null) {
$search_fields = ['combined'];
$entity_type = 'all';
//checkservices, checkactualites, checkevenements, checkdocuments
if (
$request->query->get('checkservices') == "on" && $request->query->get('checkactualites') == "on"
&& $request->query->get('checkevenements') == "on" && $request->query->get('checkdocuments') == "on"
) {
$entity_type = 'all';
} else {
$entity_type = [];
if ($request->query->get('checkservices') == "on") {
$this->params['checkservices'] = 'on';
array_push($entity_type, 'service');
}
if ($request->query->get('checkactualites') == "on") {
$this->params['checkactualites'] = 'on';
array_push($entity_type, 'actualites');
}
if ($request->query->get('checkevenements') == "on") {
$this->params['checkevenements'] = 'on';
array_push($entity_type, 'evenements');
}
if ($request->query->get('checkdocuments') == "on") {
$this->params['checkdocuments'] = 'on';
array_push($entity_type, 'document');
}
//array_push($entity_type, 'glossaire');
array_push($entity_type, 'elu');
array_push($entity_type, 'pages');
array_push($entity_type, 'politique');
array_push($entity_type, 'commune');
}
$results = $this->es_service->searchDocuments('lenord', $search_fields, $request->query->get('search'), $entity_type, [], [], 50);
$this->params['results'] = $results;
//Save log
$logEs = new LogEs;
$logEs->setRecherche($request->query->get('search'))
->setDate(new DateTime())
->setSite("lenord");
$this->em->persist($logEs);
$this->em->flush();
}
$this->params['search'] = $request->query->get('search');
$this->params['sites'] = $this->em->getRepository(FooterSites::class)->getForFooter(true);
$this->params['epingles'] = $this->epingle_service->getEpingles('lenord');
$this->params['breadcrumb'] = [['alias' => '/', 'titre' => 'Accueil'], ['alias' => '', 'titre' => 'Recherche']];
$this->params['seo_breadcrumb'] = json_encode($this->seo_service->getSeoBreadcrumb($this->params['breadcrumb'], $request), JSON_UNESCAPED_SLASHES | JSON_HEX_APOS);
$this->params['referer'] = $request->headers->get('referer');
return $this->render('Lenord/Main/search.html.twig', $this->params);
}
#[Route(path: '/404', name: 'error404')]
public function error404(): Response
{
$this->params['title'] = "Erreur";
return $this->render('Lenord/Main/erreur.html.twig', $this->params);
}
#[Route(path: '/cartographie', name: 'cartographie')]
public function cartographie(Request $request): Response
{
$this->params['title'] = "Cartographie";
$this->params['meta_description'] = "Localiser les établissements du Département du Nord";
$page_number = $request->query->getInt('page', 1);
$this->params['pois'] = $this->wemap_service->getAllPois(10, $page_number)->results;
if ($this->params['pois'] == false) {
return $this->pagelegales($request, 'error-404');
}
/*$this->params['pagination'] = $this->paginator->paginate(
$this->params['pois'],
$page_number,
10
);
$this->params['total'] = count($this->params['pois']);*/
$categories = $this->wemap_service->getCategories();
$categories = $categories->snippet->usetags->tags;
$array_territoires = [];
$array_etablissements = [];
$array_thematiques = [];
$array_besoins = [];
//dd($categories);
$i = 0;
$search = array('À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'à', 'á', 'â', 'ã', 'ä', 'å', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ð', 'ò', 'ó', 'ô', 'õ', 'ö', 'ù', 'ú', 'û', 'ü', 'ý', 'ÿ');
$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');
foreach ($categories as $category) {
if (property_exists($category, "category")) {
if ($category->category == "type-detablissement") {
array_push($array_etablissements, ['sort' => str_replace($search, $replace, $category->name), 'name' => $category->name, 'slug' => $category->slug]);
} else if ($category->name == "Tous types") {
array_push($array_thematiques, ['sort' => str_replace($search, $replace, $category->name), 'name' => $category->category, 'slug' => $category->category]);
} else if ($category->category == "territoire") {
array_push($array_territoires, ['sort' => str_replace($search, $replace, $category->name), 'name' => $category->name, 'slug' => $category->slug]);
} else {
array_push($array_besoins, ['sort' => str_replace($search, $replace, $category->name), 'name' => $category->name, 'slug' => $category->slug, 'parent' => $category->category]);
}
} else if ($i >= 56 && $i <= 62) {
//array_push($array_territoires, ['sort'=> str_replace($search, $replace, $category->name), 'name' => $category->name, 'slug' => $category->slug]);
}
$i++;
}
/*// you can use array_column() instead of the above code
$volume = array_column($data, 'volume');
$edition = array_column($data, 'edition');
// Sort the data with volume descending, edition ascending
// Add $data as the last parameter, to sort by the common key
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
*/
$territories_column = array_column($array_territoires, 'sort');
$etablissements_column = array_column($array_etablissements, 'sort');
$thematiques_column = array_column($array_thematiques, 'sort');
$besoins_column = array_column($array_besoins, 'sort');
array_multisort($territories_column, SORT_ASC | SORT_LOCALE_STRING, $array_territoires);
array_multisort($etablissements_column, SORT_ASC | SORT_LOCALE_STRING, $array_etablissements);
array_multisort($thematiques_column, SORT_ASC | SORT_LOCALE_STRING, $array_thematiques);
array_multisort($besoins_column, SORT_ASC | SORT_LOCALE_STRING, $array_besoins);
$this->params['array_territoires'] = $array_territoires;
$this->params['array_etablissements'] = $array_etablissements;
$this->params['array_thematiques'] = $array_thematiques;
$this->params['array_besoins'] = $array_besoins;
$this->params['sites'] = $this->em->getRepository(FooterSites::class)->getForFooter(true);
//Epingle
$this->params['epingles'] = $this->epingle_service->getEpingles('lenord');
$epingles_ = $this->epingle_service->getEpinglesSection('cartographie');
foreach ($epingles_ as $epingle) {
array_push($this->params['epingles'], $epingle);
}
$this->params['breadcrumb'] = [['alias' => '/', 'titre' => 'Accueil'], ['alias' => '', 'titre' => 'Cartographie']];
$this->params['seo_breadcrumb'] = json_encode($this->seo_service->getSeoBreadcrumb($this->params['breadcrumb'], $request), JSON_UNESCAPED_SLASHES | JSON_HEX_APOS);
$this->params['referer'] = $request->headers->get('referer');
$this->params['seo_breadcrumb'] = json_encode($this->seo_service->getSeoBreadcrumb($this->params['breadcrumb'], $request), JSON_UNESCAPED_SLASHES | JSON_HEX_APOS);
return $this->render('Lenord/Main/cartographie.html.twig', $this->params);
}
#[Route(path: '/cartographie-simplifiee', name: 'cartographie_simplifie')]
public function cartographie_simplifie(Request $request): Response
{
$page_number = $request->query->getInt('page', 1);
$this->params['pois'] = $this->wemap_service->getAllPois(10, $page_number)->results;
$this->params['total'] = $this->wemap_service->getAllPois(10, $page_number)->count;
$this->params['categories'] = $this->wemap_service->getCategories();
$this->params['categories'] = $this->params['categories']->snippet->usetags->tags;
$this->params['previous'] = null;
if ($page_number > 1) {
$this->params['previous'] = $page_number - 1;
}
$this->params['current_page'] = $page_number;
$this->params['totalPage'] = null;
$quotient = intdiv($this->params['total'], 10);
$reste = $this->params['total'] % 10;
if ($reste > 0) {
$quotient++;
}
$this->params['totalPage'] = $quotient;
$this->params['next'] = null;
if ($page_number !== $quotient) {
$this->params['next'] = $page_number + 1;
}
//Current page + 5 et - 5 ?
$this->params['pagesInRange'] = [];
$range_max = $page_number + 5;
$range_min = $page_number - 5;
for ($i = $range_min; $i <= $range_max; $i++) {
if ($i > 0 && $i < $this->params['totalPage']) {
array_push($this->params['pagesInRange'], $i);
}
}
$this->params['sites'] = $this->em->getRepository(FooterSites::class)->getForFooter(true);
return $this->render('Lenord/Main/cartographie_simplifie.html.twig', $this->params);
}
#[Route(path: '/l-institution/les-conseillers-departementaux/recherche', name: 'lenord_search_contact')]
public function search_contacts(Request $request): Response
{
return $this->lenord_pagecmsges($request, 'les-conseillers-departementaux');
}
#[Route(path: '/l-institution/les-conseillers-departementaux/{slug}', name: 'elus_lenord_detail')]
public function detail_elu(Request $request, string $slug): Response
{
$contact = $this->em->getRepository(Contact::class)->getContact_($slug);
$this->params['contact'] = $contact;
$posts = [];
$count_post = 0;
foreach ($contact->getPosts1() as $pp) {
if ($count_post >= 3) {
break;
}
array_push($posts, $pp);
$count_post++;
}
if ($count_post < 3) {
foreach ($contact->getPosts2() as $pp) {
if ($count_post >= 3) {
break;
}
array_push($posts, $pp);
$count_post++;
}
}
if ($count_post < 3) {
foreach ($contact->getPosts3() as $pp) {
if ($count_post >= 3) {
break;
}
array_push($posts, $pp);
$count_post++;
}
}
$this->params['title'] = $contact->getFirstName() . ' ' . $contact->getLastName() . " - Elu";
$this->params['meta_description'] = "Elus";
$this->params['breadcrumb'] = [
['alias' => '/', 'titre' => 'Accueil'],
['alias' => '/l-institution', 'titre' => 'L\'institution'],
['alias' => '/l-institution/les-conseillers-departementaux', 'titre' => 'Les conseillers départementaux'],
['alias' => '', 'titre' => $contact->getFirstName() . ' ' . $contact->getLastName()]
];
$this->params['seo_breadcrumb'] = json_encode($this->seo_service->getSeoBreadcrumb($this->params['breadcrumb'], $request), JSON_UNESCAPED_SLASHES | JSON_HEX_APOS);
$this->params['contact_posts'] = $posts;
$this->params['referer'] = $request->headers->get('referer');
$this->params['caps'] = $this->getCaptcha();
//epingle
$this->params['epingles'] = $this->epingle_service->getEpingles('lenord');
if ($request->get('function') == 'download_pdf') {
$this->params['is_pdf'] = 1;
$pdfOptions = new Options();
$pdfOptions->set('defaultFont', 'Arial');
$pdfOptions->setIsRemoteEnabled(true);
$dompdf = new Dompdf($pdfOptions);
$html = $this->renderView('Lenord/Main/elu.html.twig', $this->params);
$dompdf->loadHtml($html);
$dompdf->setPaper('A4', 'portrait');
$dompdf->render();
$output = $dompdf->output();
$filename = sprintf('nord-info-%s.pdf', $contact->getFirstName());
return new Response(
$output,
200,
[
'Content-Type' => 'application/pdf',
'Content-Disposition' => sprintf('attachment; filename="%s"', "$filename"),
]
);
} else {
return $this->render('Lenord/Main/elu.html.twig', $this->params);
}
}
#[Route(path: '/l-institution/{slug}', name: 'lenord_pagecms')]
public function lenord_pagecmsges(Request $request, string $slug): Response
{
$result = [];
$pageEntity = $this->em->getRepository(Pages::class)->findOneBy(['alias_url' => $slug, 'actif' => 1, 'lenord' => 1]);
if ($pageEntity) {
$this->params['page'] = $pageEntity;
$this->params['meta_description'] = $this->params['page']->getMetaDescription();
$this->params['title'] = $this->params['page']->getTitre() . " - L'institution";
if ($this->params['page']->getId() === 9) {
$this->params['title'] = $this->params['page']->getTitre();
}
$content_post = null;
if ($this->params['page']->getContent() !== null) {
$content_post = $this->feedUtilities->jsonToHtml($this->params['page']->getContent(), $request, $this->params['title']);
}
$this->params['content_post'] = $content_post;
$this->params['nordinfo_rss'] = [];
if ($this->params['page']->getNordinfoRss() !== null) {
$this->params['nordinfo_rss'] = $this->rss_service->getArrayArticle($this->params['page']->getNordinfoRss());
$this->params['nordinfo_rss_description'] = $this->params['page']->getNordinfoRss()->getDescription();
} else {
$this->params['nordinfo_rss_description'] = null;
}
$this->params['epingles'] = $this->epingle_service->getEpingles('lenord');
foreach ($this->params['page']->getEpingles() as $e) {
if ($e->getActive() === true) {
$this->params['epingles'][] = $e;
}
}
$this->params['breadcrumb'] = [['alias' => '/', 'titre' => 'Accueil'], ['alias' => '/l-institution', 'titre' => 'L\'institution'], ['alias' => '', 'titre' => $this->params['page']->getTitre()]];
$this->params['seo_breadcrumb'] = json_encode($this->seo_service->getSeoBreadcrumb($this->params['breadcrumb'], $request), JSON_THROW_ON_ERROR | JSON_UNESCAPED_SLASHES | JSON_HEX_APOS);
$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']];
$this->params['referer'] = $request->headers->get('referer');
$this->params['is_page_institution'] = true;
$this->params['isElus'] = false;
if ($slug === 'les-conseillers-departementaux') {
//lister les elus
$this->params['isElus'] = true;
$this->params['cantons'] = $this->em->getRepository(Cantons::class)->findBy([], ['canton' => 'ASC']);
$search = null;
$search_id = null;
$filter_title = null;
$this->params['is_search'] = 0;
if ($request->request->get('function') === 'ajax_search_contacts') {
if ($request->request->get('canton_id') !== null) {
$search = null;
$search_id = $request->request->get('canton_id');
$this->params['is_search'] = 1;
$canton = $this->em->getRepository(Cantons::class)->find($request->request->get('canton_id'));
$filter_title = ' résultats pour "' . $canton?->getCanton() . '"';
} else if ($request->request->get('search') !== "") {
$search = $request->request->get('search');
$search_id = null;
$this->params['is_search'] = 1;
$filter_title = ' résultats pour "' . $search . '"';
}
} else {
if ($request->query->get('canton_id') !== null) {
$search = null;
$search_id = $request->query->get('canton_id');
$this->params['is_search'] = 1;
$canton = $this->em->getRepository(Cantons::class)->find($request->query->get('canton_id'));
$filter_title = ' résultats pour "' . $canton?->getCanton() . '"';
} else if ($request->query->get('search') != "") {
$search = $request->query->get("search");
$search_id = null;
$this->params['is_search'] = 1;
$filter_title = ' résultats pour "' . $search . '"';
}
}
if ($request->request->get('function') === 'ajax_search_contacts_reset') {
$search = null;
$search_id = null;
}
$this->params['contacts'] = $this->em->getRepository(Contact::class)->getContacts_(1, $search, $search_id);
$this->params['filter_title'] = ($filter_title !== null) ? (is_countable($this->params['contacts']) ? count($this->params['contacts']) : 0) . $filter_title : null;
if ($request->request->get('function') === 'ajax_search_contacts' || $request->request->get('function') === 'ajax_search_contacts_reset') {
$result['html'] = $this->render('/Nordinfo/Main/ajax/contacts_list.html.twig', $this->params)->getContent();
$result['filter_title'] = $this->params['filter_title'];
return new JsonResponse($result);
}
}
if ($request->get('function') === 'download_pdf') {
$this->params['is_pdf'] = 1;
$pdfOptions = new Options();
$pdfOptions->set('defaultFont', 'Arial');
$pdfOptions->setIsRemoteEnabled(true);
$dompdf = new Dompdf($pdfOptions);
$html = $this->renderView('Lenord/Main/page.html.twig', $this->params);
$dompdf->loadHtml($html);
$dompdf->setPaper('A4', 'portrait');
$dompdf->render();
$output = $dompdf->output();
$filename = sprintf('le-nord-%s.pdf', $this->params['title']);
return new Response(
$output,
200,
[
'Content-Type' => 'application/pdf',
'Content-Disposition' => sprintf('attachment; filename="%s"', "$filename"),
]
);
}
return $this->render('Lenord/Main/page.html.twig', $this->params);
}
throw $this->createNotFoundException('La page demandée n\'existe pas.');
}
#[Route(path: '/{slug}', name: 'lenord_page_legale')]
public function pagesatellite(Request $request, string $slug): Response
{
$this->params['slug'] = $slug;
$this->params['referer'] = $request->headers->get('referer');
$this->params['politique'] = $this->em->getRepository(PageSatellite::class)->findOneBy(['alias_url' => $slug]);
if ($this->params['politique'] == null) {
return $this->pagelegales($request, $slug);
}
$this->params['title'] = $this->params['politique']->getTitre();
$this->params['meta_description'] = $this->params['politique']->getChapo();
$this->params['content_post'] = $this->feedUtilities->jsonToHtml($this->params['politique']->getContent(), $request, $this->params['title']);
$this->params['nordinfo_rss'] = null;
$this->params['nordinfo_rss_description'] = null;
if ($this->params['politique']->getNordinfoRss() != null) {
$this->params['nordinfo_rss'] = $this->rss_service->getArrayArticle($this->params['politique']->getNordinfoRss());
$this->params['nordinfo_rss_description'] = $this->params['politique']->getNordinfoRss()->getDescription();
}
$this->params['epingles'] = $this->epingle_service->getEpingles('lenord');
/*$epingles_politiques = $this->epingle_service->getEpinglesSection('politique');
foreach ($epingles_politiques as $epingle) {
array_push($this->params['epingles'], $epingle);
}*/
foreach ($this->params['politique']->getEpingles() as $e) {
if ($e->getActive() == true) {
array_push($this->params['epingles'], $e);
}
}
$this->params['breadcrumb'] = [['alias' => '/', 'titre' => 'Accueil'], ['alias' => '', 'titre' => $this->params['politique']->getTitre()]];
$this->params['seo_breadcrumb'] = json_encode($this->seo_service->getSeoBreadcrumb($this->params['breadcrumb'], $request), JSON_UNESCAPED_SLASHES | JSON_HEX_APOS);
$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']];
$this->params['referer'] = $request->headers->get('referer');
$this->params['is_page_politique'] = false;
if ($request->get('function') == 'download_pdf') {
$this->params['is_pdf'] = 1;
$pdfOptions = new Options();
$pdfOptions->set('defaultFont', 'Arial');
$pdfOptions->setIsRemoteEnabled(true);
$dompdf = new Dompdf($pdfOptions);
$html = $this->renderView('Lenord/Main/politique.html.twig', $this->params);
$dompdf->loadHtml($html);
$dompdf->setPaper('A4', 'portrait');
$dompdf->render();
$output = $dompdf->output();
$filename = sprintf('le-nord-%s.pdf', $this->params['title']);
return new Response(
$output,
200,
[
'Content-Type' => 'application/pdf',
'Content-Disposition' => sprintf('attachment; filename="%s"', "$filename"),
]
);
} else {
return $this->render('Lenord/Main/politique.html.twig', $this->params);
}
}
public function pagelegales(Request $request, string $slug): Response
{
$this->params['referer'] = $request->headers->get('referer');
$post = $this->em->getRepository(PagesLegales::class)->findOneBy(['slug' => $slug, 'actif' => 1]);
if (!$post) {
throw $this->createNotFoundException('La page demandée n\'existe pas.');
}
$this->params['post'] = $post;
$this->params['meta_description'] = "La page " . $this->params['post']->getTitre() . " du Département du Nord";
$this->params['title'] = $this->params['post']->getTitre();
$this->params['epingles'] = $this->epingle_service->getEpingles('lenord');
$epingles_ = $this->epingle_service->getEpinglesSection('legales_lenord');
foreach ($epingles_ as $epingle) {
array_push($this->params['epingles'], $epingle);
}
$this->params['breadcrumb'] = [['alias' => '/', 'titre' => 'Accueil'], ['alias' => '', 'titre' => $this->params['title']]];
$this->params['seo_breadcrumb'] = json_encode($this->seo_service->getSeoBreadcrumb($this->params['breadcrumb'], $request), JSON_UNESCAPED_SLASHES | JSON_HEX_APOS);
if ($request->get('function') === 'download_pdf') {
$this->params['is_pdf'] = 1;
$pdfOptions = new Options();
$pdfOptions->set('defaultFont', 'Arial');
$pdfOptions->setIsRemoteEnabled(true);
$dompdf = new Dompdf($pdfOptions);
$html = $this->renderView('Lenord/Main/detail_page_legale.html.twig', $this->params);
$dompdf->loadHtml($html);
$dompdf->setPaper('A4', 'portrait');
$dompdf->render();
$output = $dompdf->output();
$filename = sprintf('le-nord-%s.pdf', $this->params['post']->getTitre());
return new Response(
$output,
200,
[
'Content-Type' => 'application/pdf',
'Content-Disposition' => sprintf('attachment; filename="%s"', "$filename"),
]
);
} else {
return $this->render('Lenord/Main/detail_page_legale.html.twig', $this->params);
}
}
#[Route(path: '/ajax/getServicesAll', name: 'services_ajax_getServicesAllLenNord')]
public function getServicesAll(Request $request): Response
{
$services = $this->em->getRepository(Service::class)->getServicesByGrandprofil($request->request->get('alias'));
return new JsonResponse(['datas' => $services]);
}
private function getCaptcha(): mixed
{
$captchaCh = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
$captchaLe = ["zéro", "un", "deux", "trois", "quatre", "cinq", "six", "sept", "huit", "neuf", "dix"];
$testcap = array_merge($captchaCh, $captchaLe);
$rnd = array_rand($testcap, 2);
$i1 = $rnd[0];
if ($rnd[0] >= 11) {
$i1 = $rnd[0] - 11;
}
$i2 = $rnd[1];
if ($rnd[1] >= 11) {
$i2 = $rnd[1] - 11;
}
$capp = ["valeur1" => ["libelle" => $testcap[$rnd[0]], "valeur" => $captchaCh[$i1]], "valeur2" => ["libelle" => $testcap[$rnd[1]], "valeur" => $captchaCh[$i2]]];
return $capp;
}
}