src/Controller/JurisprudenceController.php line 177

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.                 'important' => 'DESC',
  94.                 'createdAt' => 'DESC'
  95.             ]);
  96.         } else {
  97.             //sinon, chercher tous les catégories descendantes de la catégorie demandée (sur 1+5 générations)
  98.             $children[] = $category;
  99.             $test[0] = [];
  100.             $directChildren $category->getChildrens();
  101.             foreach ($directChildren as $child) {
  102.                 $test[0][] = $child;
  103.                 $children[] = $child;
  104.             }
  105.             for ($i=0$i 8$i++) { 
  106.                 if (sizeof($test[$i]) == 0) {
  107.                 break;
  108.                 }
  109.                 $test[$i+1] = [];
  110.                 foreach ($test[$i] as $child) {
  111.                     $poufs $child->getChildrens();
  112.                     foreach ($poufs as $pouf) {
  113.                         $children[] = $pouf;
  114.                         $test[$i+1][] = $pouf;
  115.                     }
  116.                 }
  117.             }
  118.             $jurisprudences $this->jurisprudenceRepository->FindJPByCategory($children);
  119.             //et chercher les jp présentes dans toutes ces catégories
  120.             /*$jurisprudences = $this->jurisprudenceRepository->findBy([
  121.                 'active' => true,
  122.                 'category' => $children
  123.             ], [
  124.                 'important' => 'ASC',
  125.                 'createdAt' => 'DESC'
  126.             ]);*/
  127.             /*foreach ($children as $child) {
  128.                 $jps = $child->getJps();
  129.                 foreach ($jps as $jp) {
  130.                     if (!array_key_exists($jp->getCreatedAt()->getTimestamp(), $jurisprudences) && $jp->isActive() === true) {
  131.                         $jurisprudences[$jp->getCreatedAt()->getTimestamp()] = $jp;
  132.                     }
  133.                 }
  134.             }*/
  135.         }
  136.         $jurisprudencesClean = [];
  137.         foreach ($jurisprudences as $jurisprudence) {
  138.             $content $jurisprudence->getContent();
  139.             $contentClean strip_tags($content);
  140.             $contentClean str_replace("&rsquo;""'"$contentClean);
  141.             $contentClean str_replace("&#39;""'"$contentClean);
  142.             $jurisprudence->setContent($contentClean);
  143.             $jurisprudencesClean[] = $jurisprudence;
  144.         }
  145.         return $this->render('jurisprudence/list.html.twig', [
  146.             'jurisprudences' => $jurisprudencesClean,
  147.             'category' => $category,
  148.         ]);
  149.     }
  150.     /**
  151.      * @Route("/jurisprudence/{jurisprudenceId}", name="jurisprudence_show")
  152.      */
  153.     public function jurisprudenceShow(string $jurisprudenceId): Response
  154.     {
  155.         $jurisprudence $this->jurisprudenceRepository->find((int) $jurisprudenceId);
  156.         if (null === $jurisprudence) {
  157.             throw new NotFoundHttpException();
  158.         }
  159.         //Obtenir les catégories parentes de la jurisprudence
  160.         $jpData = [];
  161.         $i=1;
  162.         $jpCategoriesId $jurisprudence->getCategory();
  163.         foreach ($jpCategoriesId as $category) {
  164.             $jpData[$i][] = [
  165.                 'name' => $category->getName(),
  166.             ];
  167.             $parent $category;
  168.             while (null != $parent->getParent()) {
  169.                 $jpData[$i][] = [
  170.                     'name' => $parent->getParent()->getName(),
  171.                 ];
  172.                 $parent $parent->getParent();
  173.             }
  174.             $jpData[$i] = array_reverse($jpData[$i]);     
  175.             $i=$i+1;
  176.         }
  177.           
  178.         // Count visitors
  179.         $this->visitorCountManager->incrementStats($jurisprudence);
  180.         return $this->render('jurisprudence/show.html.twig', [
  181.             'jurisprudence' => $jurisprudence,
  182.             //'jpCategory' => $jurisprudenceCategory,
  183.             'jpData' => $jpData,
  184.             'active_menu' => 'jp'
  185.         ]);
  186.     }
  187.     /**
  188.      * @Route("/jurisprudences-mot-cle/{tag}", name="jurisprudences_by_tag")
  189.      */
  190.     public function jurisprudencesByTag(string $tag): Response
  191.     {
  192.         $jurisprudences $this->jurisprudenceRepository->findJurisprudencesByTag($tag);
  193.         return $this->render('jurisprudence/jurisprudences_by_tag.html.twig', [
  194.             'jurisprudences' => $jurisprudences,
  195.             'active_menu' => 'jp',
  196.             'tag' => $tag
  197.         ]);
  198.     }
  199. }