src/Controller/CategoryController.php line 33

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Blog;
  4. use App\Entity\Category;
  5. use App\Form\CategoryType;
  6. use App\Entity\PresidentsSlide;
  7. use App\Controller\AppController;
  8. use App\Service\FileUploaderService;
  9. use App\Repository\CategoryRepository;
  10. use Doctrine\ORM\EntityManagerInterface;
  11. use App\Repository\PresidentsSlideRepository;
  12. use DateTime;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. use Symfony\Component\HttpFoundation\JsonResponse;
  17. use Symfony\Component\String\Slugger\SluggerInterface;
  18. use Symfony\Component\HttpFoundation\File\UploadedFile;
  19. use Symfony\Component\Filesystem\Filesystem;
  20. use Symfony\Component\Finder\Finder;
  21. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  22. use Symfony\Component\HttpFoundation\File\Exception\FileException;
  23. class CategoryController extends AppController
  24. {
  25.     /**
  26.      * @Route("/{_locale<%app.supported_locales%>}/{slug}", name="category_view", priority=-1)
  27.      */
  28.     public function view($slugRequest $request)
  29.     {
  30.         /**
  31.          * @var CategoryRepository
  32.          */
  33.         $categoryRepository $this->em->getRepository(Category::class);
  34.         $category $categoryRepository->findOneBy([
  35.             'slug'    => $slug
  36.         ]);
  37.         if (!$category) {
  38.             throw new NotFoundHttpException();
  39.         }
  40.         //Sécurisation du contenu
  41.         if ($category->getIsSecure()) {
  42.             $session $request->getSession();
  43.             $isAuth $session->get('isAuth'null);
  44.             $now = new DateTime('now');
  45.             $diff $now $isAuth;
  46.             if (!$diff) {
  47.                 return $this->redirectToRoute('secure_page_index');
  48.             }
  49.         }
  50.         $pageParams = [
  51.             'controllerName' => 'Category',
  52.             'category' => $category,
  53.             // 'blocs' => $blocs
  54.         ];
  55.         if ($category->getIsBlogPage()) {
  56.             /**
  57.              * @var BlogRepository
  58.              */
  59.             $repo $this->em->getRepository(Blog::class);
  60.             $limit  21;
  61.             $page   $request->query->getInt("page"1);
  62.             $total  $repo->count([]);
  63.             $posts $repo->getPosts($page$limit);
  64.             $pageParams['posts'] = $posts;
  65.             $pageParams['page'] = $page;
  66.             $pageParams['limit'] = $limit;
  67.             $pageParams['total'] = $total;
  68.             $pageParams['totalPages'] = ceil($total $limit);
  69.         }
  70.         if ($category->getDisplayPresidentsSlide()) {
  71.             /**
  72.              * @var PresidentsSlideRepository
  73.              */
  74.             $repo $this->em->getRepository(PresidentsSlide::class);
  75.             $presidentsSlide $repo->findBy(['online' => 1], ['date' => 'ASC']);
  76.             $pageParams['presidentsSlide'] = $presidentsSlide;
  77.         }
  78.         if ($category->getGetChildrenInContent()) {
  79.             $children $categoryRepository->children($category);
  80.             $pageParams['children'] = $children;
  81.         }
  82.         return $this->render('category/view.html.twig'$pageParams);
  83.     }
  84.     /**
  85.      * @Route("/admin/category/list", name="category_admin_list")
  86.      */
  87.     public function adminList(Request $request): Response
  88.     {
  89.         /**
  90.          * @var CategoryRepository
  91.          */
  92.         $query $this->em->createQueryBuilder()
  93.             ->select('node.id, node.title, node.content''node.slug''node.level')
  94.             ->from(Category::class, 'node')
  95.             ->andWhere('node.level > :level')
  96.             ->setParameter('level'0)
  97.             ->orderBy('node.root')
  98.             ->addOrderBy('node.lft')
  99.             ->getQuery();
  100.         return $this->render('category/adminList.html.twig', [
  101.             'controllerName' => 'Category',
  102.             'items' => $query->getArrayResult()
  103.         ]);
  104.     }
  105.     /**
  106.      * @Route("/admin/category/add", name="category_admin_add")
  107.      */
  108.     public function adminAdd(Request $requestFileUploaderService $fileUploader)
  109.     {
  110.         $category = new Category;
  111.         $form $this->createForm(CategoryType::class, $category);
  112.         $form->handleRequest($request);
  113.         if ($form->isSubmitted() && $form->isValid()) {
  114.             if ($category->getParent() != null) {
  115.                 $category
  116.                     ->setParentTitle($category->getParent()->getTitle())
  117.                     ->setParentSlug($category->getParent()->getSlug());
  118.             }
  119.             /**
  120.              * @var UploadedFile 
  121.              */
  122.             $illustration $form->get('illustration')->getData();
  123.             if ($illustration) {
  124.                 $illustrationName $fileUploader->upload($illustration'category/');
  125.                 $category->setIllustration('uploads/images/category/' $illustrationName);
  126.             }
  127.             $this->em->persist($category);
  128.             $this->em->flush();
  129.             //Ajout des index de recherche
  130.             $this->searchEngineService->manage(
  131.                 Category::class,
  132.                 $category->getId(),
  133.                 [
  134.                     'name' => 'category_view',
  135.                     'params' => [
  136.                         'slug' => $category->getSlug()
  137.                     ]
  138.                 ],
  139.                 [
  140.                     $category->getTitle(),
  141.                     $category->getSubtitle(),
  142.                     $category->getContent(),
  143.                     $category->getParentTitle()
  144.                 ],
  145.                 [
  146.                     'title' => $category->getSeoTitle(),
  147.                     'description' => $category->getSeoDescription()
  148.                 ]
  149.             );
  150.             $successMessage $this->translator->trans('addMessage', [], 'commun');
  151.             $this->addFlash('success'$successMessage);
  152.             return $this->redirectToRoute('category_admin_list');
  153.         }
  154.         $formView $form->createView();
  155.         return $this->render('category/adminAdd.html.twig', [
  156.             'controllerName' => 'Category',
  157.             'controllerFunction' => 'adminAdd',
  158.             'formView' => $formView
  159.         ]);
  160.     }
  161.     /**
  162.      * @Route("/admin/category/{id}/edit", name="category_admin_edit")
  163.      */
  164.     public function adminEdit($idRequest $requestFileUploaderService $fileUploader)
  165.     {
  166.         /**
  167.          * @var CategoryRepository
  168.          */
  169.         $categoryRepository $this->em->getRepository(Category::class);
  170.         $category $categoryRepository->findOneBy([
  171.             'id'    => $id
  172.         ]);
  173.         if (!$category) {
  174.             throw new NotFoundHttpException();
  175.         }
  176.         $form $this->createForm(CategoryType::class, $category);
  177.         $form->handleRequest($request);
  178.         if ($form->isSubmitted() && $form->isValid()) {
  179.             if ($category->getParent() != null) {
  180.                 $category
  181.                     ->setParentTitle($category->getParent()->getTitle())
  182.                     ->setParentSlug($category->getParent()->getSlug());
  183.             }
  184.             /**
  185.              * @var UploadedFile 
  186.              */
  187.             $illustration $form->get('illustration')->getData();
  188.             if ($illustration) {
  189.                 $illustrationName $fileUploader->upload($illustration'category/');
  190.                 $category->setIllustration('uploads/images/category/' $illustrationName);
  191.             }
  192.             $this->em->persist($category);
  193.             $this->em->flush();
  194.             //Ajout des index de recherche            
  195.             $this->searchEngineService->manage(
  196.                 Category::class,
  197.                 $category->getId(),
  198.                 [
  199.                     'name' => 'category_view',
  200.                     'params' => [
  201.                         'slug' => $category->getSlug()
  202.                     ]
  203.                 ],
  204.                 [
  205.                     $category->getTitle(),
  206.                     $category->getSubtitle(),
  207.                     $category->getContent(),
  208.                     $category->getParentTitle()
  209.                 ],
  210.                 [
  211.                     'title' => $category->getSeoTitle(),
  212.                     'description' => $category->getSeoDescription()
  213.                 ]
  214.             );
  215.             $successMessage $this->translator->trans('updateMessage', [], 'commun');
  216.             $this->addFlash('success'$successMessage);
  217.             return $this->redirectToRoute('category_admin_list');
  218.         }
  219.         $formView $form->createView();
  220.         return $this->render('category/adminEdit.html.twig', [
  221.             'controllerName' => 'Category',
  222.             'controllerFunction' => 'adminEdit',
  223.             'formView' => $formView
  224.         ]);
  225.     }
  226.     /**
  227.      * @Route("/admin/category/{id}/editor", name="category_admin_editor")
  228.      */
  229.     public function categoryEditor(Request $requestint $id$size "light"): Response
  230.     {
  231.         /**
  232.          * @var CategoryRepository
  233.          */
  234.         $categoryRepository $this->em->getRepository(Category::class);
  235.         $category $categoryRepository->findOneBy([
  236.             'id'    => $id
  237.         ]);
  238.         if (!$category) {
  239.             throw new NotFoundHttpException();
  240.         }
  241.         $twig 'category/adminEditor.html.twig';
  242.         if (!empty($request->query->get('size')) && $request->query->get('size') == "full") {
  243.             $size 'full';
  244.             $twig 'category/adminEditorFull.html.twig';
  245.         }
  246.         return $this->render($twig, [
  247.             'controllerName' => 'Category',
  248.             'itemId' => $category->getId(),
  249.             'controllerFunction' => 'adminEdit',
  250.             'size' => $size
  251.         ]);
  252.     }
  253.     /**
  254.      * @Route("/admin/save-template", name="admin_save_template")
  255.      */
  256.     public function saveTemplate(Request $requestEntityManagerInterface $em)
  257.     {
  258.         $data = [];
  259.         if ($request->isXMLHttpRequest()) {
  260.             foreach ($request->request as $key => $value) {
  261.                 $data[$key] = $value;
  262.             }
  263.             $response $this->grapesService->saveTemplate($data['id'], Category::class, $data);
  264.             //
  265.             $categoryRepository $this->em->getRepository(Category::class);
  266.             $category $categoryRepository->findOneBy([
  267.                 'id'    => $data['id']
  268.             ]);
  269.             $this->searchEngineService->manage(
  270.                 Category::class,
  271.                 $category->getId(),
  272.                 [
  273.                     'name' => 'category_view',
  274.                     'params' => [
  275.                         'slug' => $category->getSlug()
  276.                     ]
  277.                 ],
  278.                 [
  279.                     $category->getTitle(),
  280.                     $category->getSubtitle(),
  281.                     $category->getContent(),
  282.                     $category->getParentTitle()
  283.                 ],
  284.                 [
  285.                     'title' => $category->getSeoTitle(),
  286.                     'description' => $category->getSeoDescription()
  287.                 ]
  288.             );
  289.             return new JsonResponse(null);
  290.         }
  291.         return new JsonResponse("pas de l'ajax");
  292.     }
  293.     /**
  294.      * @Route("/admin/load-template", name="admin_load_template")
  295.      */
  296.     public function loadTemplate(Request $requestEntityManagerInterface $em)
  297.     {
  298.         if ($request->isXMLHttpRequest()) {
  299.             $templateId = (int) $request->request->get('id');
  300.             $template $this->grapesService->loadTemplate($templateIdCategory::class);
  301.             return new JsonResponse($template);
  302.         }
  303.         return new JsonResponse("pas de l'ajax");
  304.     }
  305.     /**
  306.      * Get Images from project dir
  307.      * @Route("/admin/get-editor-assets", name="admin_get_editor_assets")
  308.      */
  309.     public function getAssets(): JsonResponse
  310.     {
  311.         $data = [];
  312.         $fileFinder = new Finder;
  313.         $fileFinder->files()->in($this->getParameter('ASSETS_DIR'));
  314.         foreach ($fileFinder as $file) {
  315.             $data['data'][] = $this->getParameter('ASSETS_URL') . $file->getFilename();
  316.         }
  317.         return new JsonResponse($data);
  318.     }
  319.     /**
  320.      * Upload Image
  321.      * @Route("/admin/post-editor-assets", name="admin_post_editor_assets")
  322.      */
  323.     public function postAssets(Request $requestSluggerInterface $slugger): JsonResponse
  324.     {
  325.         $assetFile null;
  326.         $data = ['data' => []]; // Prototype data
  327.         if (!empty($request->files->get('files'))) {
  328.             $assetFile $request->files->get('files')[0];
  329.             $originalFilename pathinfo($assetFile->getClientOriginalName(), PATHINFO_FILENAME);
  330.             // this is needed to safely include the file name as part of the URL
  331.             $safeFilename $slugger->slug($originalFilename);
  332.             $newFilename $safeFilename '-' uniqid() . '.' $assetFile->guessExtension();
  333.         }
  334.         // Move the file to the directory where brochures are stored
  335.         try {
  336.             $assetFile->move(
  337.                 $this->getParameter('ASSETS_DIR'),
  338.                 $newFilename
  339.             );
  340.             $data['data'][] = $this->getParameter('ASSETS_URL') . $newFilename;
  341.         } catch (FileException $e) {
  342.             // ... handle exception if something happens during file upload
  343.         }
  344.         return new JsonResponse($data);
  345.     }
  346.     /**
  347.      * Delete Images from project dir
  348.      * @Route("/admin/delete-editor-assets", name="admin_delete_editor_assets")
  349.      */
  350.     public function deleteAssets(Request $request): JsonResponse
  351.     {
  352.         $data = [];
  353.         $fileSystem = new Filesystem;
  354.         if ($request->request->get('assetId')) {
  355.             $data $request->request->get('assetId');
  356.             $assetName explode('/'$data)[5];
  357.             $fileSystem->remove($this->getParameter('ASSETS_DIR') . $assetName);
  358.             return new JsonResponse('Image deleted');
  359.         }
  360.         return new JsonResponse('Image not found');
  361.     }
  362.     /**
  363.      * @Route("/admin/category/{id}/remove", name="category_admin_remove")
  364.      */
  365.     public function adminRemove($id)
  366.     {
  367.         /**
  368.          * @var CategoryRepository
  369.          */
  370.         $categoryRepository $this->em->getRepository(Category::class);
  371.         $category $categoryRepository->findOneBy([
  372.             'id'    => $id
  373.         ]);
  374.         if (!$category) {
  375.             throw new NotFoundHttpException();
  376.         }
  377.         $this->em->remove($category);
  378.         $this->em->flush();
  379.         //Suppression des index de recherche
  380.         $this->searchEngineService->manage(
  381.             Category::class,
  382.             $id,
  383.             [],
  384.             [],
  385.             [],
  386.             false
  387.         );
  388.         $successMessage $this->translator->trans('deleteMessage', [], 'commun');
  389.         $this->addFlash('success'$successMessage);
  390.         return $this->redirectToRoute('category_admin_list');
  391.     }
  392.     /**
  393.      * @Route("/admin/category/{id}/up/{top}", name="category_admin_up")
  394.      */
  395.     public function adminUp($id$top 0)
  396.     {
  397.         /**
  398.          * @var CategoryRepository
  399.          */
  400.         $repo $this->em->getRepository(Category::class);
  401.         $node $repo->findOneById($id);
  402.         if ($top) {
  403.             $repo->moveUp($nodetrue);
  404.         } else {
  405.             $repo->moveUp($node);
  406.         }
  407.         $successMessage $this->translator->trans('movedUp', [], 'Category');
  408.         $this->addFlash('success'$successMessage);
  409.         return $this->redirectToRoute('category_admin_list');
  410.     }
  411.     /**
  412.      * @Route("/admin/category/{id}/down/{bottom}", name="category_admin_down")
  413.      */
  414.     public function adminDown($id$bottom 0)
  415.     {
  416.         /**
  417.          * @var CategoryRepository
  418.          */
  419.         $repo $this->em->getRepository(Category::class);
  420.         $node $repo->findOneById($id);
  421.         if ($bottom) {
  422.             $repo->moveDown($nodetrue);
  423.         } else {
  424.             $repo->moveDown($node);
  425.         }
  426.         $successMessage $this->translator->trans('movedUp', [], 'Category');
  427.         $this->addFlash('success'$successMessage);
  428.         return $this->redirectToRoute('category_admin_list');
  429.     }
  430. }