src/Controller/NewsController.php line 46

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\News;
  4. //use App\Entity\NewsTargetNvl;
  5. use App\Form\NewsType;
  6. use App\Model\User;
  7. use App\Repository\NewsCategoryRepository;
  8. use App\Service\Helper\HtmlTreeGenerator;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\HttpFoundation\Response;
  13. use Symfony\Component\Routing\Annotation\Route;
  14. /**
  15.  * @Route("/news")
  16.  */
  17. class NewsController extends AbstractController
  18. {
  19.     /**
  20.      * @var EntityManagerInterface
  21.      */
  22.     private $em;
  23.     /**
  24.      * @var NewsCategoryRepository
  25.      */
  26.     private $newsCategoryRepository;
  27.     /**
  28.      * @param EntityManagerInterface $em
  29.      * @param NewsCategoryRepository $newsCategoryRepository
  30.      */
  31.     public function __construct(EntityManagerInterface $emNewsCategoryRepository $newsCategoryRepository)
  32.     {
  33.         $this->em                     $em;
  34.         $this->newsCategoryRepository $newsCategoryRepository;
  35.     }
  36.     /**
  37.      * @Route("/", name="NEWS_INDEX")
  38.      */
  39.     public function index(Request $request): Response
  40.     {
  41.         $newsList $this->em->getRepository(News::class)->getNewsFull(
  42.             $request->query->get('page'1)
  43.         );
  44.         return $this->render('news/index.html.twig', [
  45.             'newslist' => $newsList,
  46.         ]);
  47.     }
  48.     /**
  49.      * @Route("/new", name="NEW_NEWS", methods={"GET","POST"})
  50.      *
  51.      * @param Request $request
  52.      *
  53.      * @return Response
  54.      */
  55.     public function new(Request $request): Response
  56.     {
  57.         /** @var User $user */
  58.         $user $this->getUser();
  59.         $rootNodes $this->newsCategoryRepository->getRootNodes('title');
  60.         $htmlTree  HtmlTreeGenerator::generate($rootNodes);
  61.         if (true !== $this->newsCategoryRepository->verify()) {
  62.             $this->newsCategoryRepository->recover();
  63.         }
  64.         $this->em->flush();
  65.         $news = new News();
  66.         $form $this->createForm(NewsType::class, $news, [
  67.             'contexts' => $user->getAvailableContexts(),
  68.         ]);
  69.         $form->handleRequest($request);
  70.         if ($form->isSubmitted() && $form->isValid()) {
  71.             $this->em->persist($news);
  72.             $this->em->flush();
  73.             return $this->redirectToRoute('NEWS_INDEX');
  74.         }
  75.         return $this->render('news/new.html.twig', [
  76.             'form'     => $form->createView(),
  77.             'htmlTree' => $htmlTree,
  78.         ]);
  79.     }
  80.     /**
  81.      * @Route("/edit/{id}", name="EDIT_NEWS", methods={"GET","POST"})
  82.      *
  83.      * @param Request $request
  84.      * @param string  $id
  85.      *
  86.      * @return Response
  87.      */
  88.     public function edit(Request $requeststring $id): Response
  89.     {
  90.         /** @var User $user */
  91.         $user $this->getUser();
  92.         $rootNodes $this->newsCategoryRepository->getRootNodes('title');
  93.         $htmlTree  HtmlTreeGenerator::generate($rootNodes);
  94.         $news $this->em->getRepository(News::class)->getOneNewsFull($id);
  95.         $form $this->createForm(NewsType::class, $news, [
  96.             'contexts' => $user->getAvailableContexts(),
  97.         ]);
  98.         $form->handleRequest($request);
  99.         if ($form->isSubmitted() && $form->isValid()) {
  100.             $this->em->persist($news);
  101.             $this->em->flush();
  102.             return $this->redirectToRoute('NEWS_INDEX');
  103.         }
  104.         return $this->render('news/edit.html.twig', [
  105.             'form'     => $form->createView(),
  106.             'news'     => $news,
  107.             'htmlTree' => $htmlTree,
  108.         ]);
  109.     }
  110.     /**
  111.      * Création de la route "show"
  112.      * @Route("/show/{id}", name="NEWS_SHOW", methods={"GET"})
  113.      *
  114.      * @param string $id
  115.      *
  116.      * @return Response
  117.      */
  118.     public function show(string $id): Response
  119.     {
  120.         $news $this->em
  121.             ->getRepository(News::class)
  122.             ->getOneNewsFull($id);
  123.         return $this->render('news/show.html.twig', [
  124.             'news' => $news,
  125.         ]);
  126.     }
  127.     /**
  128.      * @Route("/delete/{id}", name="NEWS_DELETE", methods={"GET","POST"})
  129.      *
  130.      * @param Request $request
  131.      * @param News    $news
  132.      *
  133.      * @return Response
  134.      */
  135.     public function delete(Request $requestNews $news): Response
  136.     {
  137.         if ($this->isCsrfTokenValid('delete_news_' $news->getId(), $request->request->get('_token'))) {
  138.             $this->em->remove($news);
  139.             $this->em->flush();
  140.             $this->addFlash('success''News supprimée');
  141.         }
  142.         return $this->redirectToRoute('NEWS_INDEX', [], Response::HTTP_SEE_OTHER);
  143.     }
  144. }