<?php
namespace App\Controller;
use App\Entity\Articles;
use App\Entity\Boutiques;
use App\Entity\Categories;
use App\Repository\ArticlesRepository;
use App\Repository\CategoriesRepository;
use App\Repository\ImmeublesRepository;
use App\Repository\PubImageRepository;
use App\Repository\UserRepository;
use App\Repository\VehiculesRepository;
use App\Repository\ZoneRepository;
use Knp\Component\Pager\PaginatorInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
#[Route('/', name: 'app_home_')]
class HomeController extends AbstractController
{
private ArticlesRepository $articlesRepository ;
private CategoriesRepository $categoriesRepository ;
private PubImageRepository $pubImageRepository;
private ZoneRepository $zoneRepository ;
private ImmeublesRepository $immeublesRepository ;
private VehiculesRepository $vehiculesRepository ;
private UserRepository $userRepository ;
/**
* @param ArticlesRepository $articlesRepository
* @param CategoriesRepository $categoriesRepository
* @param PubImageRepository $pubImageRepository
* @param ZoneRepository $zoneRepository
* @param ImmeublesRepository $immeublesRepository
* @param VehiculesRepository $vehiculesRepository
*/
public function __construct(ArticlesRepository $articlesRepository, CategoriesRepository $categoriesRepository,
PubImageRepository $pubImageRepository, ZoneRepository $zoneRepository, ImmeublesRepository $immeublesRepository,
VehiculesRepository $vehiculesRepository, UserRepository $userRepository )
{
$this->articlesRepository = $articlesRepository;
$this->categoriesRepository = $categoriesRepository;
$this->pubImageRepository = $pubImageRepository;
$this->zoneRepository = $zoneRepository;
$this->immeublesRepository = $immeublesRepository;
$this->vehiculesRepository= $vehiculesRepository;
$this->userRepository= $userRepository;
}
#[Route('/', name: 'index')]
public function index( Request $request, PaginatorInterface $paginator): Response
{
$immeubles = $this->immeublesRepository->findBy(["status"=> UtilsFunctions::PUBLICATION_STATUS], ["pubDate"=>"DESC"],2);
$vehicules = $this->vehiculesRepository->findBy(["status"=>UtilsFunctions::PUBLICATION_STATUS], ["pubDate"=>"DESC"],2);
$varticles = $this->articlesRepository->findBy(["status"=>UtilsFunctions::PUBLICATION_STATUS], ["pubDate"=>"DESC"],1); // article vip
$donnees = $this->articlesRepository->findBy(["status"=>UtilsFunctions::PUBLICATION_STATUS], ["pubDate"=>"DESC",], 1000);
$articles = $paginator->paginate(
$donnees,
$request->query->getInt('page', 1),20);
return $this->render('home/index.html.twig', [
'articles' => $articles,
'immeubles'=>$immeubles,
'vehicules'=>$vehicules,
"varticles"=>$varticles
]);
}
#[Route('boutique/{id}', name: 'boutique')]
public function articlesBoutiques( Boutiques $boutiques, Request $request, PaginatorInterface $paginator):Response
{
$users = $this->userRepository->findBy(['shop'=>$boutiques]);
$immeubles= null ;
$vehicules= null ;
$articles=null;
if(count($users)>0){
$donnees = $this->articlesRepository->findBy(["createdBy"=>$users], ["pubDate"=>"DESC",], 1000);
$articles = $paginator->paginate(
$donnees,
$request->query->getInt('page', 1),20);
$donneesImeubles = $this->immeublesRepository->findBy(['vendeur'=>$users], ["pubDate"=>"DESC",], 1000);
$immeubles = $paginator->paginate(
$donneesImeubles,
$request->query->getInt('page', 1),15);
$donneesVehicules = $this->vehiculesRepository->findBy(['vendeur'=>$users], ["pubDate"=>"DESC",], 1000);
$vehicules = $paginator->paginate(
$donneesVehicules,
$request->query->getInt('page', 1),15);
}
return $this->render('home/boutique-home.html.twig', [
'boutique' => $boutiques,
'articles' => $articles,
'immeubles'=>$immeubles,
'vehicules'=>$vehicules,
]);
}
#[Route('detail/{slug}', name: 'detail')]
public function detailArticle(ArticlesRepository $articlesRepository, Articles $article): Response{
$articles = $this->articlesRepository->findBy(["categorie"=>$article->getCategorie(), "status"=> UtilsFunctions::PUBLICATION_STATUS], ["pubDate"=>"DESC"], 36);
return $this->render('home/detail.html.twig', [
'article' => $article,
'articles'=>$articles
]);
}
#[Route('search', name: 'search')]
public function searchByCategorie( Request $request, PaginatorInterface $paginator): Response
{
$donnees=[];
$searchVar = null;
$searchCategorie = null ;
if($request->isMethod("POST") && ($this->isCsrfTokenValid('search-Token', $request->request->get('token')))) {
$categs = $request->request->get("categorie");
$search = $request->request->get("search");
$searchVar = $search ;
if(!empty($categs) || $categs > 0){
$categorie = $this->categoriesRepository->find($categs);
$searchCategorie = $categorie ;
if(!empty($categorie)){
if($categorie->getCode()==UtilsFunctions::VEHICULE_CODE || $categorie->getParent()?->getCode()==UtilsFunctions::VEHICULE_CODE ){
return $this->redirectToRoute('app_vehiculecategorie',['slugCategorie'=>$categorie->getSlug()]);
}elseif ($categorie->getCode() == UtilsFunctions::IMMO_CODE || $categorie->getParent()?->getCode()==UtilsFunctions::IMMO_CODE){
return $this->redirectToRoute('app_immeublecategorie',['slugCategorie'=>$categorie->getSlug()]);
}else{
$donnees = $this->articlesRepository->findBy(["status"=>UtilsFunctions::PUBLICATION_STATUS, "categorie"=>$categorie], ["pubDate"=>"DESC",], 1000);
if(!empty($search)){
$donnees = $this->articlesRepository->searchByCategorieAndsearch($search, $categorie);
}
}
}
}else if(!empty($search)){
$donnees = $this->articlesRepository->searchBysearch($search);
}
}
$articles = $paginator->paginate(
$donnees,
$request->query->getInt('page', 1),20);
return $this->render('home/search.html.twig', [
'articles' => $articles,
'searchVar'=>$searchVar,
'searchCategorie'=>$searchCategorie
]);
}
#[Route('search/{slug}', name: 'search_slug_categorie')]
public function searchBySlugCategorie( Request $request ,Categories $categorie, PaginatorInterface $paginator): Response
{
$donnees=[];
$searchVar = null;
$searchCategorie = null ;
if(!empty($categorie)){
if($categorie->getCode()==UtilsFunctions::VEHICULE_CODE || $categorie->getParent()?->getCode()==UtilsFunctions::VEHICULE_CODE ){
return $this->redirectToRoute('app_vehiculecategorie',['slugCategorie'=>$categorie->getSlug()]);
}elseif ($categorie->getCode() == UtilsFunctions::IMMO_CODE || $categorie->getParent()?->getCode()==UtilsFunctions::IMMO_CODE){
return $this->redirectToRoute('app_immeublecategorie',['slugCategorie'=>$categorie->getSlug()]);
}else{
$donnees = $this->articlesRepository->findBy(["status"=>UtilsFunctions::PUBLICATION_STATUS, "categorie"=>$categorie], ["pubDate"=>"DESC",], 1000);
}
}
$articles = $paginator->paginate(
$donnees,
$request->query->getInt('page', 1),20);
return $this->render('home/search.html.twig', [
'articles' => $articles,
'categorie'=>$categorie,
'searchCategorie'=>$searchCategorie
]);
}
}