<?php
namespace App\Controller;
use App\Entity\Membre;
use App\Form\MembreType;
use App\Repository\LienUtilsRepository;
use App\Repository\ManifestationRepository;
use App\Repository\MembreRepository;
use App\Repository\ProjetRepository;
use App\Repository\PublicationsRepository;
use App\Repository\TitlesMembersRepository;
use Container0pFyOPx\getLoginFormAuthenticatorService;
use DateTimeImmutable;
use App\Entity\Article;
use App\Entity\Partner;
use App\Form\ArticleType;
use App\Form\PartnerType;
use App\Repository\ArticleRepository;
use App\Repository\PartnerRepository;
use Doctrine\ORM\EntityManagerInterface;
use Knp\Component\Pager\PaginatorInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
class ActualiteController extends AbstractController
{
/**
* @Route("/dashboard/news", name="actualite_index", methods={"GET"})
* @Security("is_granted('ROLE_ADMINISTRATEUR') or is_granted('ROLE_MEMBRE')")
*/
public function index(ArticleRepository $articleRepository, PaginatorInterface $paginator,Request $request): Response
{
$title = null;
$articles = $articleRepository->findBy(["isDeleted" => 0], ['createdAt' => 'desc']);
$userConnectedId = $this->get('security.token_storage')->getToken()->getUser();
if (!(in_array('ROLE_ADMINISTRATEUR', $userConnectedId->getRoles()))) {
$membreId = $userConnectedId->getMembre()->getId();
}else{
$membreId= NUll;
}
return $this->render('actualite/index.html.twig', [ 'title'=>'Actualité',
'articles' =>$articles,
'title' => $title,
'membreId'=>$membreId
]);
}
/**
* @Route("/dashboard/add", name="article_new", methods={"GET","POST"})
* @Security("is_granted('ROLE_ADMINISTRATEUR') or is_granted('ROLE_MEMBRE')")
*/
public function newArticle(Request $request, EntityManagerInterface $manager): Response
{
$destination = $this->getParameter('kernel.project_dir') . '/public/admin/uploads';
$article = new Article();
$form = $this->createForm(ArticleType::class, $article);
$form->handleRequest($request);
$userConnectedId = $this->get('security.token_storage')->getToken()->getUser();
$dql = "SELECT m FROM App\Entity\Membre m WHERE identity(m.user) = :userId";
$userConnected = $manager->createQuery($dql)->setParameter('userId', $userConnectedId)->getOneOrNullResult();
if ($request->isMethod('post')) {
if (!(in_array('ROLE_ADMINISTRATEUR', $userConnectedId->getRoles()))) {
$article->setCreatedBy($userConnected->getId());
}
$title = $request->request->get("title");
$article->setTitle($title);
$content = $request->request->get("content");
$article->setContent($content);
$article->setCreatedAt(new DateTimeImmutable());
$image = $request->files->get('image');
$image_name = "Actualite" . '-' . uniqid() . '.' . $image->guessExtension();
$image->move(
$destination,
$image_name
);
$article->setImage($image_name);
$piece = $request->files->get('pieceJoindre');
if ($piece != null){
$piece_name = "doc" . '-' . uniqid() . '.' . $piece->guessExtension();
$piece->move(
$destination,
$piece_name
);
$article->setPieceJoindre($piece_name);
}
$manager->persist($article);
$manager->flush();
return $this->redirectToRoute('actualite_index', [], Response::HTTP_SEE_OTHER);
}
return $this->render('actualite/new.html.twig', [
'title'=>'Actualité',
'article' => $article,
'form' => $form->createView(),
]);
}
/**
* @Route("/dashboard/news/{id}/edit", name="article_edit", methods={"GET","POST"})
* @Security("is_granted('ROLE_ADMINISTRATEUR') or is_granted('ROLE_MEMBRE')")
*/
public function editArticle(Request $request, Article $article, EntityManagerInterface $manager): Response
{
$destination = $this->getParameter('kernel.project_dir') . '/public/admin/uploads';
$form = $this->createForm(ArticleType::class, $article);
$form->handleRequest($request);
if ($request->isMethod('post')) {
$title = $request->request->get("title");
$article->setTitle($title);
$content = $request->request->get("content");
$article->setContent($content);
if($request->files->get('image')!=null){
$image = $request->files->get('image');
$image_name = "Article" . '-' . uniqid() . '.' . $image->guessExtension();
$image->move(
$destination,
$image_name
);
$article->setImage($image_name);
}
if($request->files->get('pieceJoindre')!=null) {
$piece = $request->files->get('pieceJoindre');
$piece_name = "doc" . '-' . uniqid() . '.' . $piece->guessExtension();
$piece->move(
$destination,
$piece_name
);
$article->setPieceJoindre($piece_name);
}
$manager->flush();
return $this->redirectToRoute('actualite_index', [], Response::HTTP_SEE_OTHER);
}
return $this->render('actualite/edit.html.twig', [
"title"=>"Actualité",
'article' => $article,
'form' => $form->createView(),
]);
}
/**
* @Route("/dashboard/news/filter", name="article_filter_title", methods={"GET","POST"})
*/
public function filtredByTitle(ArticleRepository $articlesRepository, Request $request, PaginatorInterface $paginator): Response
{
$title = $request->request->get('title');
if ($title == null) {
$title='';
}
$articles = $articlesRepository->findByTitle($title);
$pagination = $paginator->paginate(
$articles, /* query NOT result */
$request->query->getInt('page', 1), /*page number*/
3 /*limit per page*/
);
return $this->render('actualite/index.html.twig', [
'title' => $title,
'articles' => $pagination,
]);
}
/**
* @Route("/dashboard/news/{id}", name="article_delete", methods={"POST"})
* @Security("is_granted('ROLE_ADMINISTRATEUR') or is_granted('ROLE_MEMBRE')")
*/
public function delete(Request $request, Article $article, EntityManagerInterface $manager): Response
{
if ($this->isCsrfTokenValid('delete'.$article->getId(), $request->request->get('_token'))) {
$article->setIsDeleted(1);
$manager->flush();
}
return $this->redirectToRoute('actualite_index', [], Response::HTTP_SEE_OTHER);
}
/**
* @Route("/", name="index_show")
*/
public function showIndex(MembreRepository $membreRepository,PublicationsRepository $publicationsRepository,PartnerRepository $partnerRepository,Request $request, ArticleRepository $repo,ManifestationRepository $manifestationRepository,LienUtilsRepository $lienUtilsRepository, AuthenticationUtils $authenticationUtils): Response
{
$error = $authenticationUtils->getLastAuthenticationError();
$lastUsername = $authenticationUtils->getLastUsername();
$articles = $repo->findBy(["isDeleted" => 0], ['createdAt' => 'desc']);
$lienUtils = $lienUtilsRepository->findBy(["isDeleted" => 0], ['id' => 'desc']);
$partners = $partnerRepository->findBy(["isDeleted" => 0], ['id' => 'desc']);
$allmembers=$membreRepository->findBy(["isDeleted" => 0]);
$allpublications=$publicationsRepository->findAll();
$allpartners=$partnerRepository->findBy(["isDeleted" => 0]);
$allmanifestation=$manifestationRepository->findBy(["isDeleted" => 0]);
return $this->render('index.html.twig', [
'articles' => $articles,
'partners' => $partners,
'lienUtils' => $lienUtils,
'last_username' => $lastUsername,
'error' => $error,
'allmembers'=>$allmembers,
'allpublications'=> $allpublications,
'allpartners'=>$allpartners,
'allmanifestation'=>$allmanifestation
]);
}
/**
* @Route("/news", name="actualite_show")
*/
public function show(ArticleRepository $repo,ManifestationRepository $manifestationRepository, PaginatorInterface $paginator,Request $request,MembreRepository $membreRepository,PublicationsRepository $publicationsRepository,PartnerRepository $partnerRepository): Response
{
$articles = $repo->findBy(["isDeleted" => 0], ['createdAt' => 'desc']);
$pagination = $paginator->paginate(
$articles, /* query NOT result */
$request->query->getInt('page', 1), /*page number*/
3 /*limit per page*/
);
$allmembers=$membreRepository->findBy(["isDeleted" => 0]);
$allpublications=$publicationsRepository->findAll();
$allpartners=$partnerRepository->findBy(["isDeleted" => 0]);
$allmanifestation=$manifestationRepository->findBy(["isDeleted" => 0]);
return $this->render('actualite/news.html.twig', [
'articles' => $pagination,
'allmembers'=>$allmembers,
'allpublications'=>$allpublications,
'allpartners'=>$allpartners,
'allmanifestation'=>$allmanifestation
]);
}
/**
* @Route("/actulalite/details/{id}", name="actualite_details")
*/
public function show_details(ArticleRepository $repo, Article $article, ManifestationRepository $manifestationRepository, PaginatorInterface $paginator,Request $request,MembreRepository $membreRepository,PublicationsRepository $publicationsRepository,PartnerRepository $partnerRepository): Response
{
$allmembers=$membreRepository->findBy(["isDeleted" => 0]);
$allpublications=$publicationsRepository->findAll();
$allpartners=$partnerRepository->findAll();
$allmanifestation=$manifestationRepository->findAll();
return $this->render('actualite/details.html.twig', [
'article' => $article,
'allmembers'=>$allmembers,
'allpublications'=>$allpublications,
'allpartners'=>$allpartners,
'allmanifestation'=>$allmanifestation
]);
}
}