<?php
namespace App\Controller;
use App\Entity\Article;
use App\Entity\User;
use App\Entity\ListesFavoris;
use App\Entity\Recommandation;
use App\Entity\Category;
use App\Entity\SousCategory;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Doctrine\ORM\EntityManagerInterface;
class RecoController extends AbstractController
{
public function index(EntityManagerInterface $entityManager): Response
{
$category = $entityManager->getRepository(Category::class)->findAll();
$sousCategory = $entityManager->getRepository(SousCategory::class)->findAll();
/** @var User $user */
$user = $this->getUser();
$user != null ? $userId = $user->getEmail() : $userId = 'mostpopular@ac-nancy-metz.fr';
$clustersUser = $entityManager->getRepository(Recommandation::class)->findClustersByUserId($userId);
$size = count($clustersUser);
$clustersPopular = array();
if($size < 4) {
$clustersPopular = $entityManager
->getRepository(Recommandation::class)
->findClustersByUserId('mostpopular@ac-nancy-metz.fr');
}
$articlesRecommandes = array();
foreach($clustersUser as $clusterId){
$r = $entityManager->getRepository(Recommandation::class)->findByClusterIdAndUserId($clusterId,$userId);
$articles = array();
foreach($r as $reco){
$article = $entityManager->getRepository(Article::class)->findOneByURL($reco->getUrl());
$articles[] = $article;
}
$articlesRecommandes[] = $articles;
}
foreach($clustersPopular as $clusterId){
$r = $entityManager->getRepository(Recommandation::class)->findByClusterIdAndUserId($clusterId,'mostpopular@ac-nancy-metz.fr');
$articles = array();
foreach($r as $reco){
$article = $entityManager->getRepository(Article::class)->findOneByURL($reco->getUrl());
$articles[] = $article;
}
//vérifier que le chemin mostpopular n'existe pas déjà dans les recommandations
if(!in_array($articles,$articlesRecommandes)){
$articlesRecommandes[] = $articles;
}
if(count($articlesRecommandes) == 4){
break;
}
}
$articlesFavsIds = [];
if($user != null){
$listeFavs = $entityManager->getRepository(ListesFavoris::class)->findByUser($user);
// $articlesFavsIds = [];
foreach($listeFavs as $fav){
$articlesFavs = $fav->getArticlesFavoris();
foreach($articlesFavs as $articleFav){
$articlesFavsIds [] = $articleFav->getArticle()->getId();
}
}
}
// $favs = $this->getFavorites($user);
return $this->render('recommandation/index.html.twig', [
'controller_name' => 'RecoController',
'articlesRecos' => $articlesRecommandes,
'favs' => $articlesFavsIds,
'category'=> $category,
'sousCategory'=> $sousCategory,
]);
}
}