<?php
namespace App\Controller;
use App\Entity\AdminMaintenance;
use App\Entity\Menu;
use App\Entity\MenuFooter;
use App\Entity\MenuHeader;
use App\Entity\Pages;
use App\Entity\PagesContent;
use App\Entity\SectionsAccueil;
use App\Entity\SectionsFooter;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Asset\PathPackage;
use Symfony\Component\Asset\VersionStrategy\EmptyVersionStrategy;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Core\Security;
use Symfony\Component\Asset\Packages;
class PublicController extends AbstractController
{
private UrlGeneratorInterface $urlGenerator;
public function __construct(UserPasswordHasherInterface $passwordHasher, UrlGeneratorInterface $urlGenerator, ManagerRegistry $doctrine, Security $security,Packages $packages)
{
$this->passwordHasher = $passwordHasher;
$this->urlGenerator = $urlGenerator;
$this->doctrine = $doctrine;
$this->security = $security;
$this->packages = $packages;
}
/**
* @Route("/{url}/{forEdit}", name="publicPages", defaults={"url":"Maintenance-en-systemes-de-securite-incendie-Formation","forEdit":false})
*/
public function publicPages(Request $request,$url,$forEdit) // ULR !!!!!
{
//Variables
$template = 'public/pages/blog.html.twig';
//On recherche la page
$PagesEntity = $this->doctrine->getManager()->getRepository(Pages::class)->findOneBy(array('url'=>$url, 'actif'=>1));
//Par defaut on redirige vers la page d'accueil => pas ouf comme technique
if(!$PagesEntity || $PagesEntity->getId() == 7) {
$PagesEntity = $this->doctrine->getManager()->getRepository(Pages::class)->findOneBy(array('id'=>7));
//SEO
$seoFull = array(
'seotitre' => $PagesEntity->getSeotitre(),
'seometa' => $PagesEntity->getSeometa()
);
//Choix du content
$PagesContentEntity = $this->doctrine->getManager()->getRepository(PagesContent::class)->findOneBy(array('pages'=>$PagesEntity, 'actif'=>1));
//Variables
$template = 'public/pages/frontPage.html.twig';
$sectionsAccueilEntity = $this->doctrine->getManager()->getRepository(SectionsAccueil::class)->findBy([],['ordre'=>'ASC']);
//roue des services
$arrayServices = [];
$roueServicesEntity = $this->doctrine->getManager()->getRepository(SectionsAccueil::class)->findOneBy(['id'=>2]);
foreach($roueServicesEntity->getSectionsAccueilItem() as $services){
$singleServices = [
'titre' => $services->getNom(),
'text' => $services->getText(),
'lien' => $services->getLien(),
'image' => $this->packages->getUrl($services->getImg1()),
'imageSVG' => $this->packages->getUrl($services->getImg2()),
];
$arrayServices[] = $singleServices;
}
foreach($roueServicesEntity->getSectionsAccueilItem() as $services){
$singleServices = [
'titre' => $services->getNom(),
'text' => $services->getText(),
'lien' => $services->getLien(),
'image' => $this->packages->getUrl($services->getImg1()),
'imageSVG' => $this->packages->getUrl($services->getImg2()),
];
$arrayServices[] = $singleServices;
}
//Sinon c'est la vue classique
return $this->render($template, [
'seo' => $seoFull,
'pageInfo' => $PagesEntity,
'PagesContentEntity' => $PagesContentEntity,
'sectionsAccueilEntity' => $sectionsAccueilEntity,
'itemsdivWheelnav' => $arrayServices,
]);
}
if($PagesEntity) {
//SEO
$seoFull = array(
'seotitre' => $PagesEntity->getSeotitre(),
'seometa' => $PagesEntity->getSeometa()
);
//Choix du content
$PagesContentEntity = $this->doctrine->getManager()->getRepository(PagesContent::class)->findOneBy(array('pages'=>$PagesEntity, 'actif'=>1));
//ATTENTION ICI !
$user = $this->security->getUser();
//Si super Admin OU propriétaire de la page on redirige vers l'éditeur
if( $forEdit === 'true' && ($PagesEntity->getUser() === $user || $this->isGranted('ROLE_SUPER_ADMIN')) )
{
$template = 'public/pages/blogEditor.html.twig';
}
//Sinon c'est la vue classique
return $this->render($template, [
'seo' => $seoFull,
'pageInfo' => $PagesEntity,
'PagesContentEntity' => $PagesContentEntity
]);
}
$this->addFlash('warning', "Cette page n'existe pas...");
return $this->redirectToRoute('publicPages');
}
//*************************************
//*************** RENDER **************
//*************************************
public function navHeaderRender() //Ok Gauthier
{
//On appel le menu
$menus = $this->doctrine->getManager()->getRepository(MenuHeader::class)->findAll();
//On formate le menu pour qu'il soit exploitable
$returnMenuArray = [];
foreach ($menus as $menu) {
$arrayTemp = [
'nom' => $menu->getNom(),
'urlname' => $menu->getUrlname(),
'id' => $menu->getPage()->getId(),
'child' => []
];
//Suivant le niveau on classe le tableau
switch($menu->getNiveau()) {
case 0:
$returnMenuArray[$menu->getId()] = $arrayTemp;
break;
case 1:
$returnMenuArray[$menu->getParent()]['child'][$menu->getId()] = $arrayTemp;
break;
case 2:
$returnMenuArray[$menu->getMenuparent()]['child'][$menu->getParent()]['child'][$menu->getId()] = $arrayTemp;
break;
}
}
return $this->render('public/nav/nav.html.twig', [
'returnMenuArray' => $returnMenuArray
]);
}
public function navFooterRender() //Ok Gauthier
{
//On appel le menu
$menus = $this->doctrine->getManager()->getRepository(MenuFooter::class)->findAll();
//On formate le menu pour qu'il soit exploitable
$returnMenuArray = [];
foreach ($menus as $menu) {
$arrayTemp = [
'nom' => $menu->getNom(),
'urlname' => $menu->getUrlname(),
'id' => $menu->getPage()->getId(),
'child' => []
];
//Suivant le niveau on classe le tableau
switch($menu->getNiveau()) {
case 0:
$returnMenuArray[$menu->getId()] = $arrayTemp;
break;
case 1:
$returnMenuArray[$menu->getParent()]['child'][$menu->getId()] = $arrayTemp;
break;
case 2:
$returnMenuArray[$menu->getMenuparent()]['child'][$menu->getParent()]['child'][$menu->getId()] = $arrayTemp;
break;
}
}
return $this->render('public/nav/navFooter.html.twig', [
'returnMenuArray' => $returnMenuArray
]);
}
public function navPreFooterRender() //Ok Gauthier
{
//On appel le footerSection
$SectionsFooter = $this->doctrine->getManager()->getRepository(SectionsFooter::class)->findOneBy(['id'=>1]);
return $this->render('public/nav/preFooter.html.twig', [
'SectionsFooter' => $SectionsFooter
]);
}
}