src/Controller/ArticleController.php line 256

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\Routing\Annotation\Route;
  6. use App\Repository\ArticleRepository;
  7. use App\Repository\CategorieRepository;
  8. use App\Entity\Article;
  9. use App\Form\ArticleType;
  10. use Doctrine\ORM\EntityManagerInterface;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use App\Utils\Text;
  13. use App\Entity\Categorie;
  14. use Symfony\Component\Security\Core\Security;
  15. use App\Repository\PostRepository;
  16. class ArticleController extends AbstractController
  17. {
  18.     private $security;
  19.     public function __construct(Security $security)
  20.     {
  21.         # gérer l'authentification et les autorisations user avec new qui va recup l'user Co
  22.         $this->security $security;
  23.     }
  24.     #[Route('/article'name'app_article')]
  25.     public function index(): Response
  26.     {
  27.         return $this->render('article/index.html.twig', [
  28.             'controller_name' => 'ArticleController',
  29.         ]);
  30.     }
  31.     #[Route('/articleliste'name'app_liste_article')]
  32.     public function list(ArticleRepository $articleRepositoryCategorieRepository $categorieRepository): Response
  33.     {
  34.         $articles $articleRepository->findAll();
  35.         $categories $categorieRepository->findAll();
  36.         return $this->render('article/list.html.twig', [
  37.             'articles' => $articles,
  38.             'categories' => $categories,
  39.         ]);
  40.     }
  41.     #[Route('/articleajout'name'app_ajout_article')]
  42.     public function new(Request $request,CategorieRepository $categorieRepositoryEntityManagerInterface $entityManager Security $security): Response
  43.     {
  44.         // Récupérer l'user connecté
  45.         $user $security->getUser();
  46.         // Récupérer tt les catégories depuis BDD
  47.         $categories $this->getDoctrine()->getRepository(Categorie::class)->findAll();
  48.         // Modifier les catégories en un tableau associatif d'objet Categorie => nom
  49.         $categoryChoix = [];
  50.         foreach ($categories as $category) {
  51.             $categoryChoix[$category->getName()] = $category;
  52.         }
  53.         $article = new Article();
  54.         $article->setCreationDate(new \DateTime());
  55.         $article->setUser($user);
  56.         
  57.         //Créer formulaire
  58.         $form $this->createForm(ArticleType::class, $article, ['categorie' => $categoryChoix]);
  59.         //traite la requête pour gérer les données soumise au form
  60.         $form->handleRequest($request);
  61.         if ($form->isSubmitted() && $form->isValid()) {
  62.             //prepare user à l'ajout ds la bdd
  63.             $entityManager->persist($article);
  64.             //execute
  65.             $entityManager->flush();
  66.             // Ajouter le message après avoir persisté et flushé l'article
  67.             $this->addFlash('success''Article ajouté avec succès!');
  68.             return $this->redirectToRoute('app_creer_un_post');
  69.         }
  70.         return $this->render('article/new.html.twig', [
  71.             'form' => $form->createView(),
  72.             'categories' => $categories,
  73.         ]);
  74.     }
  75. //REVOIR LE BOUTON SUPPRESSION BUG APRES LE CLIC SUR LE BOUTON
  76. #[Route('/articlesuppression/{id}'name'app_suppression_article')]
  77. public function delete(Request $requestEntityManagerInterface $entityManager $id): Response
  78. {
  79.     // Trouver la catégorie par ID
  80.     $article $entityManager->getRepository(Article::class)->find($id);
  81.     if (!$article) {
  82.         throw $this->createNotFoundException('Article non trouvé');
  83.     }
  84.     
  85.     // Vérifier que l'utilisateur connecté est le créateur de la catégorie
  86.     $user $this->getUser();
  87.     if ($article->getUser() !== $user) {
  88.         throw $this->createAccessDeniedException('Vous n\'êtes pas autorisé à supprimer cette catégorie');
  89.     }
  90.         $entityManager->remove($article);
  91.         $entityManager->flush();
  92.         return $this->redirectToRoute('app_mes_articles'); 
  93. }
  94. #[Route('/articlemodification/{id}'name'app_modification_article')]
  95. public function edit(Request $request,Article $articleCategorieRepository $categorieRepositoryEntityManagerInterface $entityManager$id): Response
  96. {
  97.     // Trouver l'article par ID
  98.     $article $entityManager->getRepository(Article::class)->find($id);
  99.     $categories $categorieRepository->findAll();
  100.     $form $this->createForm(ArticleType::class, $article);
  101.     $form->handleRequest($request);
  102.     if (!$article) {
  103.         throw $this->createNotFoundException('Article non trouvé');
  104.     }
  105.     // Vérifier que l'utilisateur connecté est le créateur de l'article
  106.     $user $this->getUser();
  107.     if ($article->getUser() !== $user) {
  108.         throw $this->createAccessDeniedException('Vous n\'êtes pas autorisé à modifier cet article');
  109.     }
  110.     if ($form->isSubmitted() && $form->isValid()) {
  111.         // Mettre à jour la date de modification
  112.         $article->setCreationDate(new \DateTime());
  113.         $this->getDoctrine()->getManager()->flush();
  114.         return $this->redirectToRoute('app_mes_articles');
  115.     }
  116.     return $this->render('article/edit.html.twig', [
  117.         'article' => $article,
  118.         'form' => $form->createView(),
  119.         'categories' => $categories,
  120.     ]);
  121. }
  122.     //AFFICHE LES CATEGORIES MAIS montre qu'1 catégorie -> se réfere au ID de table CATEGORIE
  123.    #[Route('/MesArticles'name'app_mes_articles')]
  124.    public function mesarticles(EntityManagerInterface $entityManagerCategorieRepository $categorieRepository): Response
  125.    {
  126.         $categories $categorieRepository->findAll();
  127.        // Récupérer l'user connecté
  128.        $user $this->security->getUser();
  129.        // Récupérer toutes les articles créées par un mm USER
  130.        $articles $entityManager->getRepository(Article::class)->findBy(['user' => $user]);
  131.        return $this->render('article/mesarticles.html.twig', [
  132.            'articles' => $articles,
  133.            'categories' => $categories,
  134.        ]);
  135.    }
  136.    #ARTICLE PAR CATEGORIE
  137.    #[Route('/articles-par-categorie/{id}'name'app_articles_par_categorie')]
  138.    public function articlesParCategorie($idArticleRepository $articleRepository,CategorieRepository $categorieRepositoryPostRepository $postRepository): Response
  139.    {
  140.        // Trouver la catégorie par ID
  141.        $categorieparID $categorieRepository->find($id);
  142.        if (!$categorieparID) {
  143.            throw $this->createNotFoundException('Catégorie non trouvée');
  144.        }
  145.        
  146.        // Récupérer les articles appartenant à cette catégorie
  147.        $articles $articleRepository->findBy(['categorie' => $categorieparID]);
  148.        // Vérifier s'il y a des articles dans cette catégorie
  149.        if (empty($articles)) {
  150.            return $this->redirectToRoute('app_articles_par_categorie_vide', ['id' => $id]);
  151.        }
  152.            
  153.        // Récupérer les posts associés aux articles
  154.        $firstPostByArticle = [];
  155.        foreach ($articles as $article) {
  156.            $posts $postRepository->findBy(['article' => $article]);
  157.            if (!empty($posts)) {
  158.                $firstPostByArticle[$article->getId()] = $posts[0]; // Récupérer le premier post
  159.            } else {
  160.                $firstPostByArticle[$article->getId()] = null// Pas de post associé
  161.            }
  162.        }
  163.    
  164.        // Récupérer toutes les catégories pour affichage
  165.        $categories $categorieRepository->findAll();
  166.    
  167.        return $this->render('article/articles_par_categorie.html.twig', [
  168.            'articles' => $articles,
  169.            'categorie' => $categorieparID,
  170.            'categories' => $categories,
  171.            'firstPostByArticle' => $firstPostByArticle
  172.        ]);
  173.    }
  174.    
  175.    #[Route('/articles-par-categorie-vide/{id}'name'app_articles_par_categorie_vide')]
  176.    public function articlesParCategorieVide($idCategorieRepository $categorieRepository): Response
  177.    {    
  178.      // Récupérer l'user connecté
  179.      $user $this->security->getUser();
  180.     // Vérifier si l'utilisateur est connecté
  181.     if (!$user) {
  182.         return $this->redirectToRoute('app_login');
  183.     }
  184.        $categories $categorieRepository->findAll();
  185.        // Trouver la catégorie par ID
  186.        $categorieparID $categorieRepository->find($id);
  187.    
  188.        // Vérifier que la catégorie existe
  189.        if (!$categorieparID) {
  190.            throw $this->createNotFoundException('Catégorie non trouvée');
  191.        }
  192.    
  193.        return $this->render('article/articles_par_categorie_vide.html.twig', [
  194.            'categorieparID' => $categorieparID,
  195.            'categories' => $categories,
  196.        ]);
  197.    }
  198.    
  199. }