<?php
namespace App\Controller;
use App\Entity\Article;
use App\Entity\User;
use App\Entity\ListesFavoris;
use App\Entity\Category;
use App\Entity\SousCategory;
use App\Entity\Indicateurs;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
use ACSEO\TypesenseBundle\Finder\TypesenseQuery;
use Doctrine\ORM\EntityManagerInterface;
class SearchController extends AbstractController
{
private $articleFinder;
private $entityManager;
public function __construct($articleFinder,EntityManagerInterface $entityManager)
{
$this->articleFinder = $articleFinder;
$this->entityManager = $entityManager;
}
/**
* @Route("/search", name="search")
*/
public function search(Request $request)
{
$category = $this->entityManager->getRepository(Category::class)->findAll();
$sousCategory = $this->entityManager->getRepository(SousCategory::class)->findAll();
$indi = 0;
$indicateur = $this->entityManager->getRepository(Indicateurs::class)->findOneBy([
'id' => 1
]);
$indi = $indicateur->getNombreRechercheMoteur();
$indi = $indi + 1;
$indicateur->setNombreRechercheMoteur($indi);
$this->entityManager->persist($indicateur);
$this->entityManager->flush();
return $this->render('search/index.html.twig', [
'search' => $request->query->get('q'),
'category'=> $category,
'sousCategory'=> $sousCategory,
]);
}
/**
* @Route("/search/ajaxSearch", name="searchAjax")
*/
public function ajaxSearchArticles(Request $request) {
if($request->isXmlHttpRequest())
{
$user = $this->entityManager->getRepository(User::class)->find($request->get('userId'));
$listeFavs = $this->entityManager->getRepository(ListesFavoris::class)->findBy( [
'user' => ($user)]);
$sortReq = $request->get('sorting');
switch($sortReq){
case 1 :
$sort = "vues:asc";
break;
case 2 :
$sort = "vues:desc";
break;
case 3 :
$sort = "date:desc";
break;
case 4 :
$sort = "date:asc";
break;
default:
$sort = "";
}
$query = new TypesenseQuery($request->get('q'),'title,description,content,categories,tags,keywords,author,type');
$query->addParameter('per_page',12);
$query->addParameter('page',$request->get('page'));
$query->sortBy($sort);
$resQuery = $this->articleFinder->rawQuery($query);
$articlesFavsIds = [];
foreach($listeFavs as $fav){
$articlesFavs = $fav->getArticlesFavoris();
foreach($articlesFavs as $articleFav){
array_push($articlesFavsIds, $articleFav->getArticle()->getId());
}
}
$res = [
'results' => $resQuery->getResults(),
'nbResults' => $resQuery->getFound(),
'favs' => $articlesFavsIds,
];
return new JsonResponse($res);
} else {
return $this->redirectToRoute('home');
}
}
/**
* @Route("/search/ajaxNews")
*/
public function getNewArticles(Request $request){
if ($request->isXmlHttpRequest()){
$data = $this->entityManager->getRepository(Article::class)->findBy(
[],
['date' => 'DESC'],
4
);
$finalArticles = [];
foreach ($data as $article){
$finalArticles[] = $article->toArray();
}
return new JsonResponse($finalArticles);
}
else
{
return $this->redirectToRoute('home');
}
}
}