<?php
namespace App\EventListener;
use App\Entity\Footer;
use App\Entity\MenuLibelle;
use App\Entity\PagesLegales;
use App\Service\EpingleService;
use App\Service\SeoService;
use Doctrine\ORM\EntityManagerInterface;
use Dompdf\Dompdf;
use Dompdf\Options;
use Symfony\Component\HttpKernel\Event\ExceptionEvent;
use Symfony\Component\HttpFoundation\Response;
use Twig\Environment;
class ExceptionListener
{
public mixed $params = [];
public function __construct(
private EntityManagerInterface $em,
private EpingleService $epingle_service,
private Environment $twig,
private SeoService $seo_service
) {
$this->params['menusTop'] = $this->em->getRepository(MenuLibelle::class)->findBy(['ordre' => 0]);
$this->params['menusprofile'] = $this->em->getRepository(MenuLibelle::class)->getMenuProfile();
}
public function onKernelException(ExceptionEvent $event)
{
$request = $event->getRequest();
$this->params['referer'] = $request->headers->get('referer');
$this->params['footer'] = $this->em->getRepository(Footer::class)->find(1);
$this->params['post'] = $this->em->getRepository(PagesLegales::class)->findOneBy(['slug' => 'erreur404']);
$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');
$this->params['is_pdf'] = 0;
$this->params['is_preview'] = 0;
$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' => "Erreur 404"]];
$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->twig->render('Lenord/Main/detail_page_legale.html.twig', $this->params);
$dompdf->loadHtml($html);
$dompdf->setPaper('A4', 'portrait');
$dompdf->render();
$output = $dompdf->output();
$title = null;
if ($this->params['post'] != null) {
$title = $this->params['post']->getTitre();
} else {
$title = uniqid();
}
$filename = sprintf('le-nord-%s.pdf', $title);
return new Response(
$output,
200,
[
'Content-Type' => 'application/pdf',
'Content-Disposition' => sprintf('attachment; filename="%s"', "$filename"),
]
);
} else {
$response = new Response();
if ($request->getHost() !== 'nordinfo.spontaneit.fr' && $request->getHost() !== 'lenord.spontaneit.fr' && $request->getHost() !== 'serviceslenord.spontaneit.fr' && $request->getHost() !== 'nordinfo5.local' && $request->getHost() !== 'lenord.local' && $request->getHost() !== 'services.local' && $request->getHost() !== 'localhost') {
$html = $this->twig->render('bundles/TwigBundle/Exception/error404.html.twig', $this->params);
$response->setContent($html);
$event->setResponse($response);
}
}
}
}