src/Controller/Admin/PageController.php line 148

  1. <?php
  2. namespace App\Controller\Admin;
  3. use App\Entity\BlocAccordeon;
  4. use App\Entity\BlocColonne;
  5. use App\Entity\BlocDiaporama;
  6. use App\Entity\BlocTextImage;
  7. use App\Entity\Page;
  8. use App\Entity\Position;
  9. use App\Entity\User;
  10. use App\Repository\BlocAccordeonItemRepository;
  11. use App\Repository\BlocAccordeonRepository;
  12. use App\Repository\BlocColonneItemRepository;
  13. use App\Repository\BlocColonnePageRepository;
  14. use App\Repository\BlocColonneRepository;
  15. use App\Repository\BlocDiaporamaItemRepository;
  16. use App\Repository\BlocDiaporamaRepository;
  17. use App\Repository\BlocTextImageRepository;
  18. use App\Repository\MediaRepository;
  19. use App\Repository\PageRepository;
  20. use App\Repository\PoleRepository;
  21. use App\Services\Forms\PageFormService;
  22. use App\Services\Methods\Methods;
  23. use App\Services\User\UserPolesServices;
  24. use Doctrine\ORM\EntityManagerInterface;
  25. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  26. use Symfony\Component\HttpFoundation\Request;
  27. use Symfony\Component\HttpFoundation\Response;
  28. use Symfony\Component\Routing\Annotation\Route;
  29. use Symfony\Component\String\Slugger\SluggerInterface;
  30. #[Route('/admin')]
  31. class PageController extends AbstractController
  32. {
  33.     public function __construct(
  34.         private pageFormService $pageFormService,
  35.         private Methods $methods,
  36.         private EntityManagerInterface $em,
  37.         private UserPolesServices $userPolesServices
  38.     ) {
  39.     }
  40.     #[Route('/', name: 'app_page_index', methods: ['GET'])]
  41.     public function index(PageRepository $pageRepository): Response
  42.     {
  43.         return $this->render('admin/post_type/page/index.html.twig');
  44.     }
  45.     #[Route('/pages', name: 'app_create_page_index', methods: ['GET'])]
  46.     public function createPage(PageRepository $pageRepository): Response
  47.     {
  48.         /** @var User $user */
  49.         $user = $this->getUser();
  50.         $arrayPolesId = $this->userPolesServices->getPolesIdAsArray($user);
  51.         $pages = $pageRepository->getPagesPerPolesUserPaginated($arrayPolesId);
  52.         return $this->render('admin/post_type/page.html.twig', [
  53.             'pages' => $pages,
  54.         ]);
  55.     }
  56.     #[Route('/pages/nouvelle', name: 'app_page_new', methods: ['GET', 'POST'])]
  57.     public function new(
  58.         Request $request,
  59.         PageRepository $pageRepository,
  60.         PoleRepository $poleRepository,
  61.     ): Response {
  62.         $page = new Page();
  63.         $blocColonne = new BlocColonne();
  64.         $blocAccordeon = new BlocAccordeon();
  65.         $blocDiaporama = new BlocDiaporama();
  66.         $blocTextImage = new BlocTextImage();
  67.         $this->pageFormService->initForms(
  68.             $request,
  69.             $page,
  70.             $pageForm,
  71.             $blocColonne,
  72.             $blocColonneForm,
  73.             $blocAccordeon,
  74.             $blocAccordeonForm,
  75.             $blocTextImage,
  76.             $blocTextImageForm,
  77.             $blocDiaporama,
  78.             $blocDiaporamaForm,
  79.             $blocVideo,
  80.             $blocVideoForm
  81.         );
  82.         if ($pageForm->isSubmitted() && $pageForm->isValid()) {
  83.             $pageExist = $pageRepository->findOneBy(['titre' => $page->getTitre()]);
  84.             if (null !== $pageExist) {
  85.                 $this->addFlash('danger', 'Une page existe déjà sous ce nom');
  86.             }
  87.             try {
  88.                 $this->pageFormService->pageForm($request, $poleRepository, $page, $pageRepository, true);
  89.             } catch (\Exception $e) {
  90.                 $this->addFlash('danger', $e->getMessage());
  91.                 return $this->redirectToRoute('app_page_new');
  92.             }
  93.             return $this->redirectToRoute('app_page_edit', ['id' => $page->getId(), 'disabled' => 0], Response::HTTP_SEE_OTHER);
  94.         }
  95.         // Return arborescence pôle page
  96.         $newTab = $this->methods->getTree();
  97.         return $this->renderForm('admin/post_type/page/new.html.twig', [
  98.             'page' => $page,
  99.             'pageForm' => $pageForm,
  100.             'blocColonnes' => $blocColonneForm,
  101.             'blocAccordeon' => $blocAccordeonForm,
  102.             'blocDiaporama' => $blocDiaporamaForm,
  103.             'blocTextImage' => $blocTextImageForm,
  104.             'poles' => $poleRepository->findAll(),
  105.             'pages' => $newTab,
  106.             'disabled' => 1,
  107.             'blocColonnesPage' => null,
  108.             'bloc_video' => $blocVideoForm,
  109.         ]);
  110.     }
  111.     #[Route('/pages/{id}/voir', name: 'app_page_show', methods: ['GET'])]
  112.     public function show(Page $page): Response
  113.     {
  114.         if ($page->getSlug()) {
  115.             return $this->redirectToRoute('page_front_slug',
  116.                 [
  117.                     'slug' => $page->getSlug(),
  118.                 ]
  119.             );
  120.         }
  121.         return $this->redirectToRoute('page_front',
  122.             [
  123.                 'id' => $page->getId(),
  124.             ]
  125.         );
  126.     }
  127.     #[Route('/pages/{id}/edition', name: 'app_page_edit', methods: ['GET', 'POST'])]
  128.     public function edit(
  129.         Request $request,
  130.         Page $page,
  131.         SluggerInterface $slugger,
  132.         PageRepository $pageRepository,
  133.         PoleRepository $poleRepository,
  134.         BlocTextImageRepository $blocTextImageRepository,
  135.         BlocColonneRepository $blocColonneRepository,
  136.         BlocColonneItemRepository $blocColonneItemRepository,
  137.         BlocColonnePageRepository $positionRepository,
  138.         BlocDiaporamaRepository $blocDiaporamaRepository,
  139.         MediaRepository $mediaRepository,
  140.         BlocDiaporamaItemRepository $blocDiaporamaItemRepository,
  141.         BlocAccordeonItemRepository $blocAccordeonItemRepository,
  142.         BlocAccordeonRepository $blocAccordeonRepository,
  143.         EntityManagerInterface $em
  144.     ): Response {
  145.         $this->pageFormService->initForms(
  146.             $request,
  147.             $page,
  148.             $pageForm,
  149.             $blocColonne,
  150.             $blocColonneForm,
  151.             $blocAccordeon,
  152.             $blocAccordeonForm,
  153.             $blocTextImage,
  154.             $blocTextImageForm,
  155.             $blocDiaporama,
  156.             $blocDiaporamaForm,
  157.             $blocVideo,
  158.             $blocVideoForm
  159.         );
  160.         if ($pageForm->isSubmitted() && $pageForm->isValid()) {
  161.             try {
  162.                 $this->pageFormService->pageForm($request, $poleRepository, $page, $pageRepository);
  163.             } catch (\Exception $e) {
  164.                 $this->addFlash('danger', $e->getMessage());
  165.             }
  166.             return $this->redirectToRoute('app_page_edit', ['id' => $page->getId(), 'disabled' => 0], Response::HTTP_SEE_OTHER);
  167.         }
  168.         if ($blocColonneForm->isSubmitted() && $blocColonneForm->isValid()) {
  169.             $this->em->flush();
  170.             $position = new Position();
  171.             $position->setColonneId($blocColonne);
  172.             $position->setPageId($page);
  173.             $count = \count($pageRepository->getAllBlocks($page->getId()));
  174.             $position->setPosition($count + 1);
  175.             $positionRepository->add($position, true);
  176.             return $this->redirectToRoute('app_page_edit', ['id' => $page->getId()], Response::HTTP_SEE_OTHER);
  177.         }
  178.         if ($blocDiaporamaForm->isSubmitted() && $blocDiaporamaForm->isValid()) {
  179.             $this->em->flush();
  180.             $position = new Position();
  181.             $position->setBlocDiaporama($blocDiaporama);
  182.             $position->setPageId($page);
  183.             $count = \count($pageRepository->getAllBlocks($page->getId()));
  184.             $position->setPosition($count + 1);
  185.             $positionRepository->add($position, true);
  186.             return $this->redirectToRoute('app_page_edit', ['id' => $page->getId()], Response::HTTP_SEE_OTHER);
  187.         }
  188.         if ($blocAccordeonForm->isSubmitted() && $blocAccordeonForm->isValid()) {
  189.             $this->em->flush();
  190.             $position = new Position();
  191.             $position->setBlocAccordeon($blocAccordeon);
  192.             $position->setPageId($page);
  193.             $count = \count($pageRepository->getAllBlocks($page->getId()));
  194.             $position->setPosition($count + 1);
  195.             $positionRepository->add($position, true);
  196.             return $this->redirectToRoute('app_page_edit', ['id' => $page->getId()], Response::HTTP_SEE_OTHER);
  197.         }
  198.         if ($blocTextImageForm->isSubmitted() && $blocTextImageForm->isValid()) {
  199.             if ('centre' !== $request->request->all()['bloc_text_image']['positionBlocTextImage'] && '' === $request->request->all()['bloc_text_image']['media']) {
  200.                 $this->addFlash('danger', 'Veuillez inserer une image ou selectionner l\'option "centré sans image"');
  201.                 return $this->redirectToRoute('app_page_edit', ['id' => $page->getId()], Response::HTTP_SEE_OTHER);
  202.             }
  203.             $this->em->flush();
  204.             $position = new Position();
  205.             $position->setTextImageId($blocTextImage);
  206.             $position->setPageId($page);
  207.             $count = \count($pageRepository->getAllBlocks($page->getId()));
  208.             $position->setPosition($count + 1);
  209.             $positionRepository->add($position, true);
  210.             return $this->redirectToRoute('app_page_edit', ['id' => $page->getId()], Response::HTTP_SEE_OTHER);
  211.         }
  212.         if ($blocVideoForm->isSubmitted() && $blocVideoForm->isValid()) {
  213.             $this->em->flush();
  214.             $position = new Position();
  215.             $position->setBlocVideo($blocVideo);
  216.             $position->setPageId($page);
  217.             $count = \count($pageRepository->getAllBlocks($page->getId()));
  218.             $position->setPosition($count + 1);
  219.             $positionRepository->add($position, true);
  220.             return $this->redirectToRoute('app_page_edit', ['id' => $page->getId()], Response::HTTP_SEE_OTHER);
  221.         }
  222.         // Return arborescence pôle page
  223.         $newTab = $this->methods->getTree();
  224.         $blocColonnesPage = $pageRepository->getAllBlocksS($page->getId());
  225.         return $this->renderForm('admin/post_type/page/new.html.twig', [
  226.             'page' => $page,
  227.             'pageForm' => $pageForm,
  228.             'blocColonnes' => $blocColonneForm,
  229.             'blocAccordeon' => $blocAccordeonForm,
  230.             'blocDiaporama' => $blocDiaporamaForm,
  231.             'blocTextImage' => $blocTextImageForm,
  232.             'bloc_video' => $blocVideoForm,
  233.             'poles' => $poleRepository->findAll(),
  234.             'disabled' => 0,
  235.             'pages' => $newTab,
  236.             'blocColonnesPage' => $blocColonnesPage,
  237.         ]);
  238.     }
  239.     #[Route('/pages/{id}', name: 'app_page_delete', methods: ['POST'])]
  240.     public function delete(Request $request, Page $page, PageRepository $pageRepository): Response
  241.     {
  242.         if ($this->isCsrfTokenValid('delete'.$page->getId(), $request->request->get('_token'))) {
  243.             try {
  244.                 $pageRepository->remove($page, true);
  245.             } catch (\Exception $e) {
  246.                 $this->addFlash('danger', $e->getMessage());
  247.             }
  248.         }
  249.         return $this->redirectToRoute('app_create_page_index', [], Response::HTTP_SEE_OTHER);
  250.     }
  251.     #[Route('/pages/{id}/blocs', name: 'app_page_delete_bloc', methods: ['POST'])]
  252.     public function deleteBloc(
  253.         Request $request,
  254.         Page $page,
  255.         BlocColonnePageRepository $positionRepository,
  256.     ): Response {
  257.         if ($this->isCsrfTokenValid('delete_bloc'.$page->getId(), $request->request->get('token'))) {
  258.             $blocId = $request->request->get('blocId');
  259.             $this->pageFormService->deleteBloc(
  260.                 $request,
  261.                 $positionRepository,
  262.                 $blocId,
  263.                 'pageId',
  264.                 $page,
  265.                 'textImageId',
  266.                 'blocDiaporama',
  267.                 'colonne_id',
  268.                 'blocAccordeon',
  269.                 'blocVideo'
  270.             );
  271.         }
  272.         return $this->redirectToRoute('app_page_edit', ['id' => $page->getId()], Response::HTTP_SEE_OTHER);
  273.     }
  274. }