<?php
namespace App\Controller;
use App\Entity\Video;
use App\Entity\Ville;
use App\Entity\Region;
use App\Service\Slugify;
use App\Entity\Departement;
use App\Entity\Etablissement;
use Knp\Component\Pager\PaginatorInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Cache;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class VideoController extends AbstractController
{
private const LIMIT = 1000;
private const HEADERLIMIT = 2; // Nbre de video à afficher dans l'onglet du header
private const PER_PAGE = 15;
/** @var Slugify */
private $slugify;
/** @var PaginatorInterface */
private $paginator;
public function __construct(Slugify $slugify, PaginatorInterface $paginator)
{
$this->slugify = $slugify;
$this->paginator = $paginator;
}
/**
* @Route("/videos/{lieu}/{etablissement}", name="video-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('video-liste', [], 301);
// $currentURL = explode("/", $currentURL );
// array_pop($currentURL);
// $currentURL = implode("/", $currentURL );
}
$types = [];
$ecole = [];
$college = [];
$lycee = [];
$professionnel = [];
$superieur = [];
$niveaux = $request->query->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);
if ($lieu == null)
return $this->redirectToRoute('video-liste', [], 301);
$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);
$repositoryVideo = $this->getDoctrine()->getRepository(Video::class);
$videos = $repositoryVideo->findByLieu($lieu, self::LIMIT, $filter, $types);
$videos = $this->paginator->paginate(
$videos,
$request->query->getInt('page', 1),
self::PER_PAGE
);
// Pour le SEO
$lieuLibelle = null;
if ($lieu) {
if ($lieu instanceof Ville)
$lieuLibelle = $lieu->getLibelle() . " - " . $lieu->getCodePostal();
elseif ($lieu instanceof Departement)
$lieuLibelle = $lieu->getLibelle() . " (" . $lieu->getId() . ")";
else
$lieuLibelle = $lieu->getLibelle();
}
return $this->render('video/list.html.twig', [
'etablissement' => $etablissement,
'videos' => $videos,
'regions' => $regions,
'departements' => $departements,
'villes' => $villes,
'niveaux' => $niveaux,
'currentURL' => $currentURL,
'lieu' => $lieu,
'lieuLibelle' => $lieuLibelle,
'robots_tag' => "noindex,follow",
]);
}
/**
* @Route("/videos/fiche/{id}", name="video-etab", methods={"GET", "POST"})
*/
public function fiche(?Video $video): Response
{
if (!$video) {
return $this->redirectToRoute('video-liste', [], 301);
}
// $this->etabNonLuService->markAsRead($actualite);
return $this->render('video/fiche.html.twig', [
'video' => $video,
]);
}
/**
* @Route(
* "/video/header",
* name="video-header",
* methods={"GET"}
* )
* @Cache(expires="+1 minutes")
*/
public function headerList(): Response
{
$videos = $this->getDoctrine()->getRepository(Video::class)->findBy(
[],
['dateCrea' => 'DESC'],
self::HEADERLIMIT
);
return $this->render('video/dropdown.html.twig', [
'videos' => $videos,
]);
}
public function blocVideosALaUne($type = null): Response
{
// Bloc "Videos à la une"
$videos = $this->getDoctrine()->getRepository(Video::class)->findAlaUne(5);
return $this->render('partial/video-une.html.twig', [
'videos' => $videos,
'type' => $type
]);
}
}