src/Controller/TagController.php line 65

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\Routing\Annotation\Route;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\HttpFoundation\JsonResponse;
  7. use App\Entity\Article;
  8. use App\Entity\Event;
  9. use App\Entity\QuestionAnswer;
  10. use App\Entity\Structure;
  11. use App\Entity\Tag;
  12. use App\Form\RechercheType;
  13. class TagController extends AbstractController
  14. {
  15.     /**
  16.      * @Route("/tags", name="tagsList")
  17.      */
  18.     public function tagsList(Request $request)
  19.     {
  20.         /* // -> rendered in template
  21.         $searchForm = $this->createForm(RechercheType::class); // cf. https://symfony.com/doc/current/form/without_class.html
  22.         $searchForm->handleRequest($request);
  23.         if ($searchForm->isSubmitted() && $searchForm->isValid()) {
  24.             $term = $searchForm->getData()["term"];
  25.             // $term = $request->request->get('recherche')["term"]; // fonctionne aussi
  26.             // dump($searchForm->getData()); dump($request->request->get('recherche')["term"]); exit;
  27.             return $this->redirect($this->generateUrl('showTagBySlug', ['slug' => $term]));
  28.         }
  29.         */
  30.         $tagRepository $this->getDoctrine()->getRepository(Tag::class);
  31.         $tags $tagRepository->findAllOrdered();
  32.         return $this->render('tag/list.html.twig', [
  33.             'tags' => $tags,
  34.             // 'searchForm' => $searchForm->createView(),
  35.         ]);
  36.     }
  37.     /**
  38.     * @Route("/tag/autocomp_tag/", name="autocomp_tag")
  39.     */
  40.     public function autocompleteTag(Request $request) {
  41.         $q $request->query->get('term'); // use "term" instead of "q" for jquery-ui
  42.         $autocompleteResults $this->getDoctrine()->getRepository(Tag::class)->findLikeName($q);
  43.         // dump($autocompleteResults);exit;
  44.         $tagNames = [];
  45.         foreach ($autocompleteResults as $tag) {
  46.             $tagNames[] = ["label" => $tag->getName(), "value" => $tag->getSlug()];
  47.         }
  48.         $response = new JsonResponse();
  49.         $response->setData([
  50.             'items' => $tagNames
  51.         ]);
  52.         return $response;
  53.     }
  54.     /**
  55.      * @Route("/tag/show-form", name="showTagForm")
  56.      */
  57.     public function showTagForm(Request $request)
  58.     {
  59.         $searchForm $this->createForm(RechercheType::class, null, [
  60.             'action' => $this->generateUrl('showTagFormResult'),
  61.         ]); 
  62.         // cf. https://symfony.com/doc/current/form/without_class.html
  63.         // cf. https://symfony.com/doc/current/forms.html#changing-the-action-and-http-method 
  64.         return $this->render('tag/showForm.html.twig', [
  65.             'searchForm' => $searchForm->createView(),
  66.         ]);
  67.     }
  68.     /**
  69.      * @Route("/tag/show-form-result", name="showTagFormResult")
  70.      */
  71.     public function showTagFormResult(Request $request)
  72.     {
  73.         $term $request->request->get('recherche')["term"];
  74.         if($term) {
  75.             $tagRepository $this->getDoctrine()->getRepository(Tag::class);
  76.             $tag $tagRepository->findOneBySlug($term);
  77.             if($tag) {
  78.                 return $this->redirect($this->generateUrl('showTagBySlug', ['slug' => $term]));
  79.             } else {
  80.                 $errorMsg 'Pas de mot-clé correspondant à "' $term '" !';
  81.             }
  82.         } else {
  83.             $errorMsg 'Vous n\'avez pas défini de terme!';
  84.         }
  85.         $this->addFlash(
  86.             'error-popup',
  87.             $errorMsg
  88.         );
  89.         $referer $request->headers->get('referer');
  90.         if ($referer != null) {
  91.             return $this->redirect($referer);
  92.         } else {
  93.             return $this->redirect($this->generateUrl('home'));
  94.         }
  95.     }
  96.     
  97.     /**
  98.      * @Route("/tag/{id}", name="showTag", requirements={"id"="\d+"})
  99.      */
  100.     public function showTag($id)
  101.     {
  102.         $tag $this->getDoctrine()->getRepository(Tag::class)->find($id);
  103.         if (!$tag) {
  104.             throw $this->createNotFoundException('Pas de tag avec l\'id ' $id '.');
  105.         }
  106.         $slug $tag->getSlug();
  107.         if($slug && $slug !== "") {
  108.             return $this->redirect($this->generateUrl('showTagBySlug', ['slug' => $slug]));
  109.         } else {
  110.             $entities $this->_getEntitiesForTag($tag);
  111.             extract($entities);
  112.             $events = []; // on ne veut pas les évènements...
  113.             return $this->render('tag/show.html.twig', [
  114.                 'tag' => $tag,
  115.                 'articles' => $articles,
  116.                 'events' => $events,
  117.                 'questionAnswers' => $questionAnswers,
  118.                 'structures' => $structures
  119.             ]);
  120.         }
  121.     }
  122.     /**
  123.      * @Route("/tag/{slug}", name="showTagBySlug")
  124.      * @param bool $listWithThumbnails si on veut afficher une liste d'images, sinon liste textuelle 
  125.      */
  126.     public function showTagBySlug($slug$listWithThumbnails true)
  127.     {
  128.         $tagRepository $this->getDoctrine()->getRepository(Tag::class);
  129.         $tag $tagRepository->findOneBySlug($slug);
  130.         if ($tag) {
  131.             $entities $this->_getEntitiesForTag($tag);
  132.             extract($entities);
  133.         } else {
  134.             // throw $this->createNotFoundException('Pas de tag avec le slug ' . $slug . '.');
  135.             $tag null;
  136.             $articles = [];
  137.             $events = [];
  138.             $questionAnswers = [];
  139.             $structures = [];
  140.         }
  141.         
  142.         return $this->render('tag/show.html.twig', [
  143.             'listWithThumbnails' => $listWithThumbnails,
  144.             'slug' => $slug,
  145.             'tag' => $tag,
  146.             'articles' => $articles,
  147.             'events' => $events,
  148.             'questionAnswers' => $questionAnswers,
  149.             'structures' => $structures
  150.         ]);
  151.     }
  152.     
  153.     /**
  154.      * @param Tag $tag 
  155.      * @return array $entities ["articles", "events", "questionAnswers", "structures"]
  156.      */
  157.     private function _getEntitiesForTag($tag) {
  158.         $articleRepository $this->getDoctrine()->getRepository(Article::class);
  159.         $eventRepository $this->getDoctrine()->getRepository(Event::class);
  160.         $questionAnswerRepository $this->getDoctrine()->getRepository(QuestionAnswer::class);
  161.         $structureRepository $this->getDoctrine()->getRepository(Structure::class);
  162.         
  163.         $articles = [];
  164.         // on ne veut pas les articles...
  165.         // $articlesByTag = $articleRepository->findAllByTag($tag);
  166.         // foreach ($articlesByTag as $article) {
  167.         //     if( ! isset($articles[$article->getId()]) ) $articles[$article->getId()] = $article;
  168.         // }
  169.         
  170.         $events = []; 
  171.         // on ne veut pas les évènements...
  172.         // $eventsByTag = $eventRepository->findAllByTag($tag);
  173.         // foreach ($eventsByTag as $event) {
  174.         //     if( ! isset($events[$event->getId()]) ) $events[$event->getId()] = $event;
  175.         // }
  176.         $questionAnswers = [];
  177.         $questionAnswersByTag $questionAnswerRepository->findAllByTag($tag);
  178.         foreach ($questionAnswersByTag as $questionAnswer) {
  179.             if( ! isset($questionAnswers[$questionAnswer->getId()]) ) $questionAnswers[$questionAnswer->getId()] = $questionAnswer;
  180.         }
  181.         $structures = [];
  182.         $structuresByTag $structureRepository->findAllByTag($tag);
  183.         foreach ($structuresByTag as $structure) {
  184.             if( ! isset($structures[$structure->getId()]) ) $structures[$structure->getId()] = $structure;
  185.         }
  186.         $entities = [
  187.             "articles" => $articles,
  188.             "events" => $events,
  189.             "questionAnswers" => $questionAnswers,
  190.             "structures" => $structures
  191.         ];
  192.         return $entities;
  193.     }
  194. }