src/Controller/SearchController.php line 44

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Article;
  4. use App\Entity\User;
  5. use App\Entity\ListesFavoris;
  6. use App\Entity\Category;
  7. use App\Entity\SousCategory;
  8. use App\Entity\Indicateurs;
  9. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  10. use Symfony\Component\HttpFoundation\JsonResponse;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use ACSEO\TypesenseBundle\Finder\TypesenseQuery;
  14. use Doctrine\ORM\EntityManagerInterface;
  15. class SearchController extends AbstractController
  16. {
  17.     private $articleFinder;
  18.     private $entityManager;
  19.     public function __construct($articleFinder,EntityManagerInterface $entityManager)
  20.     {
  21.         $this->articleFinder $articleFinder;
  22.         $this->entityManager $entityManager;
  23.     }
  24.     /**
  25.      * @Route("/search", name="search")
  26.      */
  27.     public function search(Request $request)
  28.     {   
  29.         $category $this->entityManager->getRepository(Category::class)->findAll();
  30.         $sousCategory $this->entityManager->getRepository(SousCategory::class)->findAll();
  31.         $indi 0;
  32.         $indicateur $this->entityManager->getRepository(Indicateurs::class)->findOneBy([
  33.             'id' => 1
  34.         ]);
  35.         $indi $indicateur->getNombreRechercheMoteur();
  36.         $indi $indi 1;
  37.         $indicateur->setNombreRechercheMoteur($indi);
  38.         $this->entityManager->persist($indicateur);
  39.         $this->entityManager->flush();
  40.         return $this->render('search/index.html.twig', [
  41.             'search' => $request->query->get('q'),
  42.             'category'=> $category,
  43.             'sousCategory'=> $sousCategory,
  44.         ]);
  45.     }
  46.     
  47.     /**
  48.      * @Route("/search/ajaxSearch", name="searchAjax")
  49.      */
  50.     public function ajaxSearchArticles(Request $request) {
  51.         if($request->isXmlHttpRequest()) 
  52.         {
  53.             $user $this->entityManager->getRepository(User::class)->find($request->get('userId'));
  54.             $listeFavs $this->entityManager->getRepository(ListesFavoris::class)->findBy( [
  55.                 'user' => ($user)]);
  56.             $sortReq $request->get('sorting');
  57.             switch($sortReq){
  58.                 case :
  59.                     $sort "vues:asc";
  60.                     break;
  61.                 case 
  62.                     $sort "vues:desc";
  63.                     break;
  64.                 case 
  65.                     $sort "date:desc";
  66.                     break;
  67.                 case 
  68.                     $sort "date:asc";
  69.                     break;
  70.                 default:
  71.                     $sort "";
  72.             }
  73.             $query = new TypesenseQuery($request->get('q'),'title,description,content,categories,tags,keywords,author,type');
  74.             $query->addParameter('per_page',12);
  75.             $query->addParameter('page',$request->get('page'));
  76.             $query->sortBy($sort);
  77.             
  78.             $resQuery $this->articleFinder->rawQuery($query);
  79.             
  80.             $articlesFavsIds = [];
  81.             foreach($listeFavs as $fav){
  82.                 $articlesFavs $fav->getArticlesFavoris();
  83.                 foreach($articlesFavs as $articleFav){
  84.                     array_push($articlesFavsIds$articleFav->getArticle()->getId());
  85.                 }
  86.             }
  87.             $res = [
  88.                 'results' => $resQuery->getResults(),
  89.                 'nbResults' => $resQuery->getFound(),
  90.                 'favs' => $articlesFavsIds,
  91.             ];
  92.             return new JsonResponse($res);
  93.             
  94.             
  95.         } else {
  96.             return $this->redirectToRoute('home');
  97.         }
  98.     }
  99.     /**
  100.      * @Route("/search/ajaxNews")
  101.      */
  102.     public function getNewArticles(Request $request){
  103.         if ($request->isXmlHttpRequest()){
  104.             $data $this->entityManager->getRepository(Article::class)->findBy(
  105.                 [],
  106.                 ['date' => 'DESC'],
  107.                 4
  108.             );
  109.             $finalArticles = [];
  110.             foreach ($data as $article){
  111.                 $finalArticles[] = $article->toArray();
  112.             }
  113.             return new JsonResponse($finalArticles);
  114.         }
  115.         else
  116.         {
  117.             return $this->redirectToRoute('home');
  118.         }
  119.     }   
  120. }