src/Controller/JurisprudenceController.php line 157

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\JurisprudenceCategory;
  4. use App\Repository\JurisprudenceCategoryRepository;
  5. use App\Repository\JurisprudenceRepository;
  6. use App\Services\VisitorCountManager;
  7. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. class JurisprudenceController extends AbstractController
  13. {
  14.     private JurisprudenceCategoryRepository $jurisprudenceCategoryRepository;
  15.     private JurisprudenceRepository $jurisprudenceRepository;
  16.     private VisitorCountManager $visitorCountManager;
  17.     public function __construct(
  18.         JurisprudenceCategoryRepository $jurisprudenceCategoryRepository,
  19.         JurisprudenceRepository $jurisprudenceRepository,
  20.         VisitorCountManager $visitorCountManager
  21.     ) {
  22.         $this->jurisprudenceCategoryRepository $jurisprudenceCategoryRepository;
  23.         $this->jurisprudenceRepository $jurisprudenceRepository;
  24.         $this->visitorCountManager $visitorCountManager;
  25.     }
  26.     /**
  27.      * @Route("/trouver-une-jurisprudence", name="jurisprudences_search")
  28.      */
  29.     public function jurisprudences(Request $request): Response
  30.     {
  31.         $jpData = [];
  32.         $jurisprudencesAll $this->jurisprudenceCategoryRepository->findBy([
  33.             'enabled' => true
  34.         ]);
  35.         // Everything in php because the first version need too many SQL requests (14sec doctrine debug)
  36.         /** @var JurisprudenceCategory $jurisprudenceCategory */
  37.         foreach ($jurisprudencesAll as $jurisprudenceCategory) {
  38.             if (null === $jurisprudenceCategory->getParent()) {
  39.                 $jpData[0][] = [
  40.                     'id' => $jurisprudenceCategory->getId(),
  41.                     'name' => $jurisprudenceCategory->getName(),
  42.                     'enabled' => true,
  43.                     'parentId' => null,
  44.                     'createdAt' => $jurisprudenceCategory->getCreatedAt(),
  45.                 ];
  46.             }
  47.         }
  48.         for ($i=1;$i<30;$i++) {
  49.             /** @var JurisprudenceCategory $jurisprudenceCategory */
  50.             foreach ($jurisprudencesAll as $jurisprudenceCategory) {
  51.                 // Category has no parent, stop iteration
  52.                 if (null === $jurisprudenceCategory->getParent()) {
  53.                     continue;
  54.                 }
  55.                 // Previous iteration does not exist, stop the loop
  56.                 if (!array_key_exists($i-1$jpData)) {
  57.                     break;
  58.                 }
  59.                 if (array_search($jurisprudenceCategory->getParent()->getId(), array_column($jpData[$i-1], 'id')) !== false) {
  60.                     $jpData[$i][] = [
  61.                         'id' => $jurisprudenceCategory->getId(),
  62.                         'name' => $jurisprudenceCategory->getName(),
  63.                         'enabled' => true,
  64.                         'parentId' => $jurisprudenceCategory->getParent()->getId(),
  65.                         'createdAt' => $jurisprudenceCategory->getCreatedAt(),
  66.                     ];
  67.                 }
  68.             }
  69.         }
  70.         return $this->render('jurisprudence/default.html.twig', [
  71.             'controller_name' => 'JurisprudenceController',
  72.             'active_menu' => 'jp',
  73.             'jpData' => $jpData,
  74.         ]);
  75.     }
  76.     /**
  77.      * @Route("/jurisprudences-liste", name="jurisprudences_list")
  78.      */
  79.     public function jurisprudencesList(Request $request): Response
  80.     {
  81.         /*if (!$request->query->has('categorie')) {
  82.             return new Response();
  83.         }*/
  84.         $category $this->jurisprudenceCategoryRepository->find((int) $request->query->get('categorie'));
  85.         $jurisprudences=[];
  86.         $children=[];
  87.         $test=[];
  88.         if ($category === null) {
  89.             //si la requête est : toutes les jurisprudences
  90.             $jurisprudences $this->jurisprudenceRepository->findBy([
  91.                 'active' => true
  92.             ], [
  93.                 'createdAt' => 'DESC'
  94.             ]);
  95.         } else {
  96.             //sinon, chercher tous les catégories descendantes de la catégorie demandée (sur 1+5 générations)
  97.             $children[] = $category;
  98.             $directChildren $category->getChildrens();
  99.             foreach ($directChildren as $child) {
  100.                 $test[0][] = $child;
  101.                 $children[] = $child;
  102.             }
  103.             for ($i=0$i 8$i++) { 
  104.                 if (sizeof($test[$i]) == 0) {
  105.                     break;
  106.                 }
  107.                 $test[$i+1] = [];
  108.                 foreach ($test[$i] as $child) {
  109.                     $poufs $child->getChildrens();
  110.                     foreach ($poufs as $pouf) {
  111.                         $children[] = $pouf;
  112.                         $test[$i+1][] = $pouf;
  113.                     }
  114.                 }
  115.             }
  116.             //et chercher les jp présentes dans toutes ces catégories
  117.             $jurisprudences $this->jurisprudenceRepository->findBy([
  118.                 'active' => true,
  119.                 'category' => $children
  120.             ], [
  121.                 'createdAt' => 'DESC'
  122.             ]);
  123.         }
  124.         $jurisprudencesClean = [];
  125.         foreach ($jurisprudences as $jurisprudence) {
  126.             $content $jurisprudence->getContent();
  127.             $contentClean strip_tags($content'<br/><br>');
  128.             $contentClean str_replace("&rsquo;""'"$contentClean);
  129.             $contentClean str_replace("&#39;""'"$contentClean);
  130.             $jurisprudence->setContent($contentClean);
  131.             $jurisprudencesClean[] = $jurisprudence;
  132.         }
  133.         return $this->render('jurisprudence/list.html.twig', [
  134.             'jurisprudences' => $jurisprudencesClean,
  135.         ]);
  136.     }
  137.     /**
  138.      * @Route("/jurisprudence/{jurisprudenceId}", name="jurisprudence_show")
  139.      */
  140.     public function jurisprudenceShow(string $jurisprudenceId): Response
  141.     {
  142.         $jurisprudence $this->jurisprudenceRepository->find((int) $jurisprudenceId);
  143.         if (null === $jurisprudence) {
  144.             throw new NotFoundHttpException();
  145.         }
  146.         //Obtenir les catégories parentes de la jurisprudence
  147.         $jpData = [];
  148.         $jurisprudenceCategoryId $jurisprudence->getCategory()->getId();
  149.         $jurisprudenceCategory $this->jurisprudenceCategoryRepository->find((int) $jurisprudenceCategoryId);
  150.         while (null != $jurisprudenceCategory->getParent()) {
  151.             $retour $jurisprudenceCategory->getParent()->getId();
  152.             $jurisprudenceCategory $this->jurisprudenceCategoryRepository->find((int) $retour);
  153.             $jpData[] = [
  154.                 'name' => $jurisprudenceCategory->getName(),
  155.             ];
  156.         }
  157.         $jpData array_reverse($jpData);        
  158.         // Count visitors
  159.         $this->visitorCountManager->incrementStats($jurisprudence);
  160.         return $this->render('jurisprudence/show.html.twig', [
  161.             'jurisprudence' => $jurisprudence,
  162.             'jpCategory' => $jurisprudenceCategory,
  163.             'jpData' => $jpData,
  164.             'active_menu' => 'jp',
  165.         ]);
  166.     }
  167.     /**
  168.      * @Route("/jurisprudences-mot-cle/{tag}", name="jurisprudences_by_tag")
  169.      */
  170.     public function jurisprudencesByTag(string $tag): Response
  171.     {
  172.         $jurisprudences $this->jurisprudenceRepository->findJurisprudencesByTag($tag);
  173.         return $this->render('jurisprudence/jurisprudences_by_tag.html.twig', [
  174.             'jurisprudences' => $jurisprudences,
  175.             'active_menu' => 'jp',
  176.             'tag' => $tag
  177.         ]);
  178.     }
  179. }