src/Controller/JurisprudenceController.php line 34

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