<?php
namespace App\Controller;
use App\Entity\Departement;
use App\Entity\Diaporama;
use App\Entity\Etablissement;
use App\Entity\Region;
use App\Entity\Ville;
use App\Service\Slugify;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Cache;
class DiaporamaController extends AbstractController
{
private const LIMIT = 100;
private const HEADERLIMIT = 2; // Nbre de diaporama à afficher dans l'onglet du header
/** @var Slugify */
private $slugify;
public function __construct(Slugify $slugify)
{
$this->slugify = $slugify;
}
/**
* @Route("/diaporamas/slider/{id}", name="diaporama-slider", methods={"GET"}, options = { "expose" = true })
*/
public function slider(?Diaporama $diaporama): Response
{
return $this->render('fiche/_includes/diapo-slide.html.twig', [
'diaporama' => $diaporama,
]);
}
/**
* @Route("/diaporamas/{lieu}/{etablissement}", name="diaporama-liste", defaults={"etablissement": null, "lieu":"default"}, methods={"GET", "POST"})
*/
public function list(?Etablissement $etablissement, Request $request, string $lieu=null): Response
{
$filter = [];
if ($etablissement) {
$filter['etablissement'] = $etablissement->getId();
}
$currentURL = $request->getPathInfo();
if ($lieu != 'default') {
return $this->redirectToRoute('diaporama-liste', [], 301);
// $currentURL = explode("/", $currentURL );
// array_pop($currentURL);
// $currentURL = implode("/", $currentURL );
}
$types = [];
$ecole = [];
$college = [];
$lycee = [];
$professionnel = [];
$superieur = [];
$niveaux = $request->request->get('niveau');
if($niveaux){
if(in_array('ecole', $niveaux))
$ecole = ['02-ELEM', '03-PRIM', '01-MATER'];
if(in_array('college', $niveaux))
$college = ['04-COLL'];
if(in_array('lycee', $niveaux))
$lycee = ['05-LGEN', '06-LTECH', '07-LEGT'];
if(in_array('professionnel', $niveaux))
$professionnel = ['08-LAGRI', '09-LPROF', '10-LEAP'];
if(in_array('superieur', $niveaux))
$superieur = ['12-SUP'];
$types = array_merge($ecole, $college, $lycee, $professionnel, $superieur);
}
$lieu = $this->slugify->revealLieu($lieu);
$regions = $this->getDoctrine()->getRepository(Region::class)->findAll();
$repositoryDepartement = $this->getDoctrine()->getRepository(Departement::class);
$repositoryVille = $this->getDoctrine()->getRepository(Ville::class);
$departements = $repositoryDepartement->findRelatifsAuLieu($lieu);
$villes = $repositoryVille->findRelatifsAuLieu($lieu);
$repositoryDiaporama = $this->getDoctrine()->getRepository(Diaporama::class);
$diaporamas = $repositoryDiaporama->findByLieu($lieu, self::LIMIT, $filter, $types);
shuffle($diaporamas);
return $this->render('diaporama/list.html.twig', [
'etablissement' => $etablissement,
'diaporamas' => $diaporamas,
'regions' => $regions,
'departements' => $departements,
'villes' => $villes,
'niveaux' => $niveaux,
'currentURL' => $currentURL,
'lieu' => $lieu,
'robots_tag' => "noindex,follow",
]);
}
/**
* @Route("/diaporamas/fiche/{id}", name="diaporama-etab", methods={"GET", "POST"})
*/
public function fiche(?Diaporama $diaporama): Response
{
if (!$diaporama) {
return $this->redirectToRoute('diaporama-liste');
}
// $this->etabNonLuService->markAsRead($actualite);
return $this->render('diaporama/fiche.html.twig', [
'diaporama' => $diaporama,
]);
}
/**
* @Route(
* "/diaporama/header",
* name="diaporama-header",
* methods={"GET"}
* )
* @Cache(expires="+1 minutes")
*/
public function headerList(): Response
{
$diaporamas = $this->getDoctrine()->getRepository(Diaporama::class)->findBy(
[],
['date' => 'DESC'],
self::HEADERLIMIT
);
return $this->render('diaporama/dropdown.html.twig', [
'diaporamas' => $diaporamas,
]);
}
public function blocDiaposALaUne($type = null): Response
{
// Bloc "Diaporamas à la une"
$diapos = $this->getDoctrine()->getRepository(Diaporama::class)->findAlaUne(15); // bizarrement ça retourne parfois moins que la limite ! du coup on récupère plusieurs ...
\shuffle($diapos);
$diapos = array_slice($diapos, 0, 5); // ... et en n'en garde que 5
return $this->render('partial/diapo-une.html.twig', [
'diapos' => $diapos,
'type' => $type
]);
}
}