src/Controller/Front/FrontController.php line 38

  1. <?php
  2. namespace App\Controller\Front;
  3. use App\Entity\Actualite;
  4. use App\Entity\Contact;
  5. use App\Entity\ContactInfos;
  6. use App\Entity\Contrats;
  7. use App\Entity\Diplomes;
  8. use App\Entity\Domaines;
  9. use App\Entity\Pole;
  10. use App\Form\ContactType;
  11. use App\Repository\ActualiteRepository;
  12. use App\Repository\AgendaRepository;
  13. use App\Repository\BlocAccordeonRepository;
  14. use App\Repository\BlocColonneRepository;
  15. use App\Repository\BlocDiaporamaRepository;
  16. use App\Repository\BlocTextImageRepository;
  17. use App\Repository\BlocVideoRepository;
  18. use App\Repository\FormationRepository;
  19. use App\Repository\OffreEmploiRepository;
  20. use App\Repository\PageRepository;
  21. use Doctrine\ORM\EntityManagerInterface;
  22. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  23. use Symfony\Component\HttpFoundation\Request;
  24. use Symfony\Component\HttpFoundation\Response;
  25. use Symfony\Component\Routing\Annotation\Route;
  26. use Ttskch\PaginatorBundle\Context;
  27. use Ttskch\PaginatorBundle\Entity\Criteria;
  28. class FrontController extends AbstractController
  29. {
  30.     public function __construct(private EntityManagerInterface $entityManager)
  31.     {
  32.     }
  33.     #[Route('/'name'app_front')]
  34.     public function index(Request $requestPageRepository $pageRepository): Response
  35.     {
  36.         $poles $this->entityManager->getRepository(Pole::class)->findAll();
  37.         $domaines $this->entityManager->getRepository(Domaines::class)->findAll();
  38.         $diplomes $this->entityManager->getRepository(Diplomes::class)->findAll();
  39.         $contrats $this->entityManager->getRepository(Contrats::class)->findAll();
  40.         $actualites $this->entityManager->getRepository(Actualite::class)->findAll();
  41.         $firstLabel $request->get('firstLabel');
  42.         $secondLabelEleve = (string) $request->get('secondLabelEleve');
  43.         $secondLabelParent = (string) $request->get('secondLabelParent');
  44.         $secondLabelEtudiant = (string) $request->get('secondLabelEtudiant');
  45.         switch ($firstLabel) {
  46.             case 'eleve':
  47.                 if ('Pôle 6 5 4' === $secondLabelEleve) {
  48.                     $slug $pageRepository->findOneBy(['titre' => 'Pôle 6e 5e 4e'])->getSlug();
  49.                     return $this->redirect($this->generateUrl('page_front_slug', ['slug' => $slug]));
  50.                 } elseif ('Actualité pôle 6 5 4' === $secondLabelEleve) {
  51.                     return $this->redirect($this->generateUrl('app_actualite_list', ['pole' => '6,5,4ème']));
  52.                 } elseif ('Agenda pôle 6 5 4' === $secondLabelEleve) {
  53.                     return $this->redirect($this->generateUrl('app_evenement_list', ['pole' => '6,5,4ème']));
  54.                 } elseif ('Info pratique pôle 6 5 4' === $secondLabelEleve) {
  55.                     return $this->redirect($this->generateUrl('page_front_slug', ['slug' => 'infos-pratiques-pole-6-5-4']));
  56.                 } elseif ('Pôle 3 2' === $secondLabelEleve) {
  57.                     $slug $pageRepository->findOneBy(['titre' => 'Pôle 3e 2de'])->getSlug();
  58.                     return $this->redirect($this->generateUrl('page_front_slug', ['slug' => $slug]));
  59.                 } elseif ('Actualité pôle 3 2' === $secondLabelEleve) {
  60.                     return $this->redirect($this->generateUrl('app_actualite_list', ['pole' => '3ème & 2de']));
  61.                 } elseif ('Agenda pôle 3 2' === $secondLabelEleve) {
  62.                     return $this->redirect($this->generateUrl('app_evenement_list', ['pole' => '3ème & 2de']));
  63.                 } elseif ('Info pratique pôle 3 2' === $secondLabelEleve) {
  64.                     return $this->redirect($this->generateUrl('page_front_slug', ['slug' => 'infos-pratiques-pole-3-2']));
  65.                 } elseif ('Pôle 1 T' === $secondLabelEleve) {
  66.                     $slug $pageRepository->findOneBy(['titre' => 'Pôle 1re / Terminale'])->getSlug();
  67.                     return $this->redirect($this->generateUrl('page_front_slug', ['slug' => $slug]));
  68.                 } elseif ('Actualité pôle 1 T' === $secondLabelEleve) {
  69.                     return $this->redirect($this->generateUrl('app_actualite_list', ['pole' => '1re & Terminal']));
  70.                 } elseif ('Agenda pôle 1 T' === $secondLabelEleve) {
  71.                     return $this->redirect($this->generateUrl('app_evenement_list', ['pole' => '1re & Terminal']));
  72.                 } elseif ('Info pratique pôle 1 T' === $secondLabelEleve) {
  73.                     return $this->redirect($this->generateUrl('page_front_slug', ['slug' => 'infos-pratiques-pole-1-t']));
  74.                 }
  75.                 break;
  76.             case 'parent':
  77.                 if ('Agenda pôle 6 5 4' === $secondLabelParent) {
  78.                     return $this->redirect($this->generateUrl('app_evenement_list', ['pole' => '6,5,4ème']));
  79.                 } elseif ('Info pratique pôle 3 2' === $secondLabelParent) {
  80.                     return $this->redirect($this->generateUrl('page_front_slug', ['slug' => 'infos-pratiques-pole-6-5-4']));
  81.                 } elseif ('Agenda pôle 3 2' === $secondLabelParent) {
  82.                     return $this->redirect($this->generateUrl('app_evenement_list', ['pole' => '3ème & 2de']));
  83.                 } elseif ('Info pratique pôle 3 2' === $secondLabelParent) {
  84.                     return $this->redirect($this->generateUrl('page_front_slug', ['slug' => 'infos-pratiques-pole-3-2']));
  85.                 } elseif ('Agenda pôle 1 T' === $secondLabelParent) {
  86.                     return $this->redirect($this->generateUrl('app_evenement_list', ['pole' => '1re & Terminal']));
  87.                 } elseif ('Info pratique pôle 1 T' === $secondLabelParent) {
  88.                     return $this->redirect($this->generateUrl('page_front_slug', ['slug' => 'infos-pratiques-pole-1-t']));
  89.                 } elseif ('Pôle 6 5 4' === $secondLabelParent) {
  90.                     $slug $pageRepository->findOneBy(['titre' => 'Pôle 6e 5e 4e'])->getSlug();
  91.                     return $this->redirect($this->generateUrl('page_front_slug', ['slug' => $slug]));
  92.                 } elseif ('Actualité pôle Lycée Pro' === $secondLabelParent) {
  93.                     return $this->redirect($this->generateUrl('app_actualite_list', ['pole' => 'Lycée Professionnel']));
  94.                 } elseif ('Agenda pôle Lycée Pro' === $secondLabelParent) {
  95.                     return $this->redirect($this->generateUrl('app_evenement_list', ['pole' => 'Lycée Professionnel']));
  96.                 } elseif ('Info pratique pôle Lycée Pro' === $secondLabelParent) {
  97.                     return $this->redirect($this->generateUrl('page_front_slug', ['slug' => 'infos-pratiques-pole-lycee-professionnel']));
  98.                 }
  99.                 break;
  100.             case 'etudiant':
  101.                 if ('Pôle ES' === $secondLabelEtudiant) {
  102.                     $slug $pageRepository->findOneBy(['titre' => 'Pôle Enseignement Supérieur'])->getSlug();
  103.                     return $this->redirect($this->generateUrl('page_front_slug', ['slug' => $slug]));
  104.                 } elseif ('Actualité pôle ES' === $secondLabelEtudiant) {
  105.                     return $this->redirect($this->generateUrl('app_actualite_list', ['pole' => 'Enseignement Supérieur']));
  106.                 } elseif ('Agenda pôle ES' === $secondLabelEtudiant) {
  107.                     return $this->redirect($this->generateUrl('app_evenement_list', ['pole' => 'Enseignement Supérieur']));
  108.                 } elseif ('Info pratique pôle ES' === $secondLabelEtudiant) {
  109.                     return $this->redirect($this->generateUrl('page_front_slug', ['slug' => 'infos-pratiques-enseignement-superieur']));
  110.                 } elseif ('Pôle Centre de formation' === $secondLabelEtudiant) {
  111.                     $slug $pageRepository->findOneBy(['titre' => 'Pôle Centre de formation'])->getSlug();
  112.                     return $this->redirect($this->generateUrl('page_front_slug', ['slug' => $slug]));
  113.                 } elseif ('Actualité pôle Centre de formation' === $secondLabelEtudiant) {
  114.                     return $this->redirect($this->generateUrl('app_actualite_list', ['pole' => 'Centre de formation']));
  115.                 } elseif ('Agenda pôle Centre de formation' === $secondLabelEtudiant) {
  116.                     return $this->redirect($this->generateUrl('app_evenement_list', ['pole' => 'Centre de formation']));
  117.                 } elseif ('Info pratique pôle Centre de formation' === $secondLabelEtudiant) {
  118.                     return $this->redirect($this->generateUrl('page_front_slug', ['slug' => 'infos-pratiques-centre-de-formation']));
  119.                 }
  120.                 break;
  121.         }
  122.         return $this->render('front/index.html.twig', [
  123.             'poles' => $poles,
  124.             'domaines' => $domaines,
  125.             'diplomes' => $diplomes,
  126.             'contrats' => $contrats,
  127.             'actualites' => $actualites,
  128.         ]);
  129.     }
  130.     #[
  131.         Route('/page/{id<[1-9]\d*>}'name'page_front'),
  132.         Route('/page/{slug}'name'page_front_slug')
  133.     ]
  134.     public function page(
  135.         PageRepository $pageRepository,
  136.         BlocTextImageRepository $blocTextImageRepository,
  137.         BlocAccordeonRepository $blocAccordeonRepository,
  138.         BlocColonneRepository $blocColonneRepository,
  139.         BlocDiaporamaRepository $blocDiaporamaRepository,
  140.         BlocVideoRepository $blocVideoRepository,
  141.         ?int $id,
  142.         ?string $slug
  143.     ): Response {
  144.         if (null !== $slug) {
  145.             $page $pageRepository->findOneBy(['slug' => $slug]);
  146.         } else {
  147.             $page $pageRepository->findOneBy(['id' => $id]);
  148.         }
  149.         if (null === $page || (!$this->isGranted('ROLE_ADMIN') && false === $page->isVisible())) {
  150.             throw $this->createNotFoundException('Page not found');
  151.         }
  152.         if ($this->isGranted('ROLE_ADMIN') && false === $page->isVisible()) {
  153.             $this->addFlash('success''Cette page est visible car vous ête administrateur');
  154.         }
  155.         if ($page->getSeoParent()) {
  156.             $redirection301 $page->getSeoParent()->getRedirection301();
  157.             if ('' !== $redirection301) {
  158.                 return $this->redirect($redirection301301);
  159.             }
  160.         }
  161.         $id $page->getId();
  162.         $blocks $pageRepository->getAllBlocks($id);
  163.         $i 0;
  164.         $blocs[] = [];
  165.         foreach ($blocks as $bloc) {
  166.             if (null !== $bloc['text_image_id_id']) {
  167.                 if (null !== $pageRepository->getImageId($bloc['text_image_id_id'])) {
  168.                     $blocs[$i]['textImage'] = $blocTextImageRepository->findOneBy(['id' => $bloc['text_image_id_id']]);
  169.                     // $blocs[$i]['textImage'] = $pageRepository->getImageId($bloc['text_image_id_id']);
  170.                 }
  171.             } elseif (null !== $bloc['bloc_diaporama_id']) {
  172.                 // $blocs = array_merge($blocs, $bloc);
  173.                 if (null !== $pageRepository->getDiaporamaId($bloc['bloc_diaporama_id'])) {
  174.                     // $blocs[$i]['titre'] = $bloc['titre_bloc_diaporama'];
  175.                     $blocs[$i]['diaporama'] = $blocDiaporamaRepository->findOneBy(['id' => $bloc['bloc_diaporama_id']]);
  176.                     // $blocs[$i]['diaporama'] = $pageRepository->getDiaporamaId($bloc['bloc_diaporama_id']);
  177.                 }
  178.             } elseif (null !== $bloc['bloc_accordeon_id']) {
  179.                 if (null !== $pageRepository->getAccordeonId($bloc['bloc_accordeon_id'])) {
  180.                     // $blocs[$i]['titre'] = $bloc['titre_bloc_accordeon'];
  181.                     $blocs[$i]['accordeon'] = $blocAccordeonRepository->findOneBy(['id' => $bloc['bloc_accordeon_id']]);
  182.                 }
  183.             } elseif (null !== $bloc['colonne_id_id']) {
  184.                 if (null !== $pageRepository->getColonneId($bloc['colonne_id_id'])) {
  185.                     // $blocs[$i]['titre'] = $bloc['titre_bloc_colonne'];
  186.                     $blocs[$i]['colonne'] = $blocColonneRepository->findOneBy(['id' => $bloc['colonne_id_id']]);
  187.                 }
  188.             } elseif (null !== $bloc['bloc_video_id']) {
  189.                 if (null !== $pageRepository->getBlocVideo($bloc['bloc_video_id'])) {
  190.                     // $blocs[$i]['titre'] = $bloc['titre_bloc_texte'];
  191.                     $blocs[$i]['blocVideo'] = $blocVideoRepository->findOneBy(['id' => $bloc['bloc_video_id']]);
  192.                 }
  193.             }
  194.             ++$i;
  195.         }
  196.         return $this->render('front/page.html.twig', [
  197.             'page' => $page,
  198.             'blocs' => $blocs,
  199.         ]);
  200.     }
  201.     #[Route('/contact'name'app_page_contact')]
  202.     public function contact(Request $request): Response
  203.     {
  204.         $contact = new Contact();
  205.         $form $this->createForm(ContactType::class, $contact);
  206.         $contactInfo $this->entityManager->getRepository(ContactInfos::class)->findOneBy(['id' => ContactInfos::ID_CONTACTINFOS]);
  207.         $form->handleRequest($request);
  208.         if ($form->isSubmitted() && $form->isValid()) {
  209.             $contact $form->getData();
  210.             $this->entityManager->persist($contact);
  211.             $this->entityManager->flush();
  212.             $contact = new Contact();
  213.             $form $this->createForm(ContactType::class, $contact);
  214.         }
  215.         return $this->render('front/contact.html.twig', [
  216.             'form' => $form->createView(),
  217.             'contact_info' => $contactInfo,
  218.         ]);
  219.     }
  220.     #[Route('/recherche'name'app_page_recherche')]
  221.     public function recherche(
  222.         Request $request,
  223.         ActualiteRepository $actualiteRepository,
  224.         AgendaRepository $evenementRepository,
  225.         FormationRepository $formationRepository,
  226.         OffreEmploiRepository $offreEmploiRepository,
  227.         Context $context
  228.     ): Response {
  229.         $search $request->get('search');
  230.         $arraySearch = [];
  231.         if (null !== $search) {
  232.             foreach ($actualiteRepository->search($search) as $actu) {
  233.                 $arraySearch[] = $actu;
  234.             }
  235.             foreach ($evenementRepository->search($search) as $evenement) {
  236.                 $arraySearch[] = $evenement;
  237.             }
  238.             foreach ($formationRepository->search($search) as $formation) {
  239.                 $arraySearch[] = $formation;
  240.             }
  241.             foreach ($offreEmploiRepository->search($search) as $offre) {
  242.                 $arraySearch[] = $offre;
  243.             }
  244.         }
  245.         $context->initialize(
  246.             'id',
  247.             function (Criteria $criteria) use ($arraySearch) {
  248.                 return \array_slice($arraySearch$criteria->limit * ($criteria->page 1), $criteria->limit);
  249.             },
  250.             function () use ($arraySearch) {
  251.                 return \count($arraySearch);
  252.             }
  253.         );
  254.         $nbSearcheResult $context->count;
  255.         return $this->render('front/recherche.html.twig', [
  256.             'search' => $search,
  257.             'arraySearch' => $context->slice,
  258.             'nbSearcheResult' => $nbSearcheResult,
  259.         ]);
  260.     }
  261. }