src/Controller/SearchController.php line 48

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Jurisprudence;
  4. use App\Entity\News;
  5. use App\Entity\Tuto;
  6. use App\Entity\Keywords;
  7. use App\Repository\JurisprudenceRepository;
  8. use App\Repository\NewsRepository;
  9. use App\Repository\TutoRepository;
  10. use App\Repository\KeywordsRepository;
  11. use App\Repository\LaBaseCategoryRepository;
  12. use App\Repository\NewsCategoryRepository;
  13. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. class SearchController extends AbstractController
  17. {
  18.     private NewsRepository $newsRepository;
  19.     private TutoRepository $tutoRepository;
  20.     private JurisprudenceRepository $jurisprudenceRepository;
  21.     private KeywordsRepository $keywordsRepository;
  22.     private LaBaseCategoryRepository $labaseCategoryRepository;
  23.     private NewsCategoryRepository $newsCategoryRepository;
  24.     public function __construct(
  25.         NewsRepository $newsRepository,
  26.         TutoRepository $tutoRepository,
  27.         JurisprudenceRepository $jurisprudenceRepository,
  28.         KeywordsRepository $keywordsRepository,
  29.         LaBaseCategoryRepository $labaseCategoryRepository,
  30.         NewsCategoryRepository $newsCategoryRepository
  31.     )
  32.     {
  33.         $this->newsRepository $newsRepository;
  34.         $this->tutoRepository $tutoRepository;
  35.         $this->jurisprudenceRepository $jurisprudenceRepository;
  36.         $this->keywordsRepository $keywordsRepository;
  37.         $this->labaseCategoryRepository $labaseCategoryRepository;
  38.         $this->newsCategoryRepository $newsCategoryRepository;
  39.     }
  40.     /**
  41.      * @Route("/chercher", name="search")
  42.      */
  43.     public function search(Request $request)
  44.     {
  45.         if (!$request->query->has('search')) {
  46.             return $this->redirectToRoute('homepage');
  47.         }
  48.         $data = [];
  49.         $search $request->query->get('search');
  50.         $newsCategory $this->newsCategoryRepository->findBy([
  51.             'enabled' => true
  52.         ], [
  53.             'position' => 'asc'
  54.         ]);
  55.         $labaseCategory $this->labaseCategoryRepository->findBy([
  56.             'enabled' => true
  57.         ], [
  58.             'position' => 'asc'
  59.         ]);
  60.         $category $request->query->get('categorie');
  61.         $catId$request->query->get('id');
  62.         if ('' !== $search) {
  63.             $keywords $this->keywordsRepository->findByKeyword($search);
  64.             if (null === $category || 'infos' === $category) {
  65.                 // Recherche news dans le titre
  66.                 $news $this->newsRepository->findNewsByTitle($search);
  67.                 // Recherche news par keyword
  68.                 foreach ($keywords as $keyword) {
  69.                     $keywordnews $keyword->getMentionsNews();
  70.                     foreach ($keywordnews as $new) {
  71.                         $news[] = $new;
  72.                     }
  73.                 }
  74.                 if (null === $catId) {
  75.                     /** @var News $new */
  76.                     foreach ($news as $new) {
  77.                         $newsData = [
  78.                             'title' => $new->getTitle(),
  79.                             'content' => $this->cleanContent($new->getContent()),
  80.                             'type' => 'news',
  81.                             'id' => $new->getId(),
  82.                             'chapo' => $new->getChapo()
  83.                         ];
  84.                         // Vérifier que la news n'est pas déjà dans le tableau
  85.                         if (!array_key_exists($new->getCreatedAt()->getTimestamp(), $data) && $new->isActive() === true) {
  86.                             $data[$new->getCreatedAt()->getTimestamp()] = $newsData;
  87.                         }
  88.                     }
  89.                 } else {
  90.                     /** @var News $new */
  91.                     foreach ($news as $new) {
  92.                         if ($new->getCategory()->getId() == $catId) {
  93.                             $newsData = [
  94.                                 'title' => $new->getTitle(),
  95.                                 'content' => $this->cleanContent($new->getContent()),
  96.                                 'type' => 'news',
  97.                                 'id' => $new->getId(),
  98.                                 'chapo' => $new->getChapo()
  99.                             ];
  100.     
  101.                             // Vérifier que la news n'est pas déjà dans le tableau
  102.                             if (!array_key_exists($new->getCreatedAt()->getTimestamp(), $data) && $new->isActive() === true) {
  103.                                 $data[$new->getCreatedAt()->getTimestamp()] = $newsData;
  104.                             } 
  105.                         }
  106.                     }
  107.                 }
  108.             }
  109.             if (null === $category || 'tutos' === $category) {
  110.                 // Recherche tutos dans le titre
  111.                 $tutos $this->tutoRepository->findTutosByTitle($search);
  112.                 // Recherche tutos par keyword
  113.                 foreach ($keywords as $keyword) {
  114.                     $keywordtuto $keyword->getMentionsTutos();
  115.                     foreach ($keywordtuto as $tuto) {
  116.                         $tutos[] = $tuto;
  117.                     }
  118.                 }
  119.                 if (null === $catId) {
  120.                     /** @var Tuto $tuto */
  121.                     foreach ($tutos as $tuto) {
  122.                         $tutoData = [
  123.                             'title' => $tuto->getTitle(),
  124.                             'content' => $this->cleanContent($tuto->getContent()),
  125.                             'type' => 'tuto',
  126.                             'id' => $tuto->getId(),
  127.                             'chapo' => $tuto->getChapo()
  128.                         ];
  129.                         // Vérifier que le tuto n'est pas déjà dans le tableau + qu'il est active
  130.                         if (!array_key_exists($tuto->getCreatedAt()->getTimestamp(), $data) && $tuto->isActive() === true) {
  131.                             $data[$tuto->getCreatedAt()->getTimestamp()] = $tutoData;
  132.                         }
  133.                     }
  134.                 } else {
  135.                     foreach ($tutos as $tuto) {
  136.                         if ($tuto->getCategory()->getId() == $catId) {
  137.                             $tutoData = [
  138.                                 'title' => $tuto->getTitle(),
  139.                                 'content' => $this->cleanContent($tuto->getContent()),
  140.                                 'type' => 'tuto',
  141.                                 'id' => $tuto->getId(),
  142.                                 'chapo' => $tuto->getChapo()
  143.                             ];
  144.                             // Vérifier que le tuto n'est pas déjà dans le tableau + qu'il est active
  145.                             if (!array_key_exists($tuto->getCreatedAt()->getTimestamp(), $data) && $tuto->isActive() === true) {
  146.                                 $data[$tuto->getCreatedAt()->getTimestamp()] = $tutoData;
  147.                             }
  148.                             
  149.                         }
  150.                     }
  151.                 }
  152.             }
  153.             if (null === $category || 'jurisprudences' === $category) {
  154.                 // Get jp
  155.                 $jurisprudences $this->jurisprudenceRepository->findJPByTitle($search);
  156.                 //recherche jp par rg
  157.                 $RgJp $this->jurisprudenceRepository->findJPByRg($search);
  158.                 foreach ($RgJp as $jp) {
  159.                     $jurisprudences[] = $jp;
  160.                 }
  161.                 //recherche jp par keyword
  162.                 foreach ($keywords as $keyword) {
  163.                     $keywordjp $keyword->getMentionsJp();
  164.                     foreach ($keywordjp as $jp) {
  165.                         $jurisprudences[] = $jp;
  166.                     }
  167.                 }
  168.                 /** @var Jurisprudence $jurisprudence */
  169.                 foreach ($jurisprudences as $jurisprudence) {
  170.                     $jpData = [
  171.                         'title' => $jurisprudence->getName(),
  172.                         'content' => $this->cleanContent($jurisprudence->getContent()),
  173.                         'type' => 'jurisprudence',
  174.                         'id' => $jurisprudence->getId(),
  175.                         'chapo' => $jurisprudence->getChapo()
  176.                     ];
  177.                     // Vérifier que la JP n'est pas déjà dans le tableau
  178.                     if (!array_key_exists($jurisprudence->getCreatedAt()->getTimestamp(), $data) && $jurisprudence->isActive() === true) {
  179.                         $data[$jurisprudence->getCreatedAt()->getTimestamp()] = $jpData;
  180.                     }
  181.                 }
  182.             }
  183.         }
  184.         ksort($data);
  185.         return $this->render('search/search.html.twig', [
  186.             'controller_name' => 'HomepageController',
  187.             'active_menu' => 'homepage',
  188.             'dataContent' => $data,
  189.             'categoryRequest' => $category,
  190.             'search' => $search,
  191.             'catId' => $catId,
  192.             'newsCategory' => $newsCategory,
  193.             'labaseCategory' => $labaseCategory
  194.         ]);
  195.     }
  196.     private function cleanContent(string $content)
  197.     {
  198.         $contentClean strip_tags($content);
  199.         $contentClean str_replace("&rsquo;""'"$contentClean);
  200.         $contentClean str_replace("&#39;""'"$contentClean);
  201.         return $contentClean;
  202.     }
  203. }