<?php
namespace App\Controller;
use App\Entity\News;
//use App\Entity\NewsTargetNvl;
use App\Form\NewsType;
use App\Model\User;
use App\Repository\NewsCategoryRepository;
use App\Service\Helper\HtmlTreeGenerator;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
/**
* @Route("/news")
*/
class NewsController extends AbstractController
{
/**
* @var EntityManagerInterface
*/
private $em;
/**
* @var NewsCategoryRepository
*/
private $newsCategoryRepository;
/**
* @param EntityManagerInterface $em
* @param NewsCategoryRepository $newsCategoryRepository
*/
public function __construct(EntityManagerInterface $em, NewsCategoryRepository $newsCategoryRepository)
{
$this->em = $em;
$this->newsCategoryRepository = $newsCategoryRepository;
}
/**
* @Route("/", name="NEWS_INDEX")
*/
public function index(Request $request): Response
{
$newsList = $this->em->getRepository(News::class)->getNewsFull(
$request->query->get('page', 1)
);
return $this->render('news/index.html.twig', [
'newslist' => $newsList,
]);
}
/**
* @Route("/new", name="NEW_NEWS", methods={"GET","POST"})
*
* @param Request $request
*
* @return Response
*/
public function new(Request $request): Response
{
/** @var User $user */
$user = $this->getUser();
$rootNodes = $this->newsCategoryRepository->getRootNodes('title');
$htmlTree = HtmlTreeGenerator::generate($rootNodes);
if (true !== $this->newsCategoryRepository->verify()) {
$this->newsCategoryRepository->recover();
}
$this->em->flush();
$news = new News();
$form = $this->createForm(NewsType::class, $news, [
'contexts' => $user->getAvailableContexts(),
]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$this->em->persist($news);
$this->em->flush();
return $this->redirectToRoute('NEWS_INDEX');
}
return $this->render('news/new.html.twig', [
'form' => $form->createView(),
'htmlTree' => $htmlTree,
]);
}
/**
* @Route("/edit/{id}", name="EDIT_NEWS", methods={"GET","POST"})
*
* @param Request $request
* @param string $id
*
* @return Response
*/
public function edit(Request $request, string $id): Response
{
/** @var User $user */
$user = $this->getUser();
$rootNodes = $this->newsCategoryRepository->getRootNodes('title');
$htmlTree = HtmlTreeGenerator::generate($rootNodes);
$news = $this->em->getRepository(News::class)->getOneNewsFull($id);
$form = $this->createForm(NewsType::class, $news, [
'contexts' => $user->getAvailableContexts(),
]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$this->em->persist($news);
$this->em->flush();
return $this->redirectToRoute('NEWS_INDEX');
}
return $this->render('news/edit.html.twig', [
'form' => $form->createView(),
'news' => $news,
'htmlTree' => $htmlTree,
]);
}
/**
* Création de la route "show"
* @Route("/show/{id}", name="NEWS_SHOW", methods={"GET"})
*
* @param string $id
*
* @return Response
*/
public function show(string $id): Response
{
$news = $this->em
->getRepository(News::class)
->getOneNewsFull($id);
return $this->render('news/show.html.twig', [
'news' => $news,
]);
}
/**
* @Route("/delete/{id}", name="NEWS_DELETE", methods={"GET","POST"})
*
* @param Request $request
* @param News $news
*
* @return Response
*/
public function delete(Request $request, News $news): Response
{
if ($this->isCsrfTokenValid('delete_news_' . $news->getId(), $request->request->get('_token'))) {
$this->em->remove($news);
$this->em->flush();
$this->addFlash('success', 'News supprimée');
}
return $this->redirectToRoute('NEWS_INDEX', [], Response::HTTP_SEE_OTHER);
}
}