<?php
namespace App\Controller;
use App\Entity\Products;
use App\Entity\PropertySearch;
use App\Entity\SearchData;
use App\Entity\SearchHomeData;
use App\Entity\Statistiques;
use App\Form\PropertySearchType;
use App\Form\SearchHomeType;
use App\Form\SearchType;
use App\Repository\ProductsRepository;
use App\Repository\StatistiquesRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\Persistence\ManagerRegistry;
#[Route('/produits', name: 'app_products_')]
class ProductsController extends AbstractController
{
//////
#[Route('/home/{page?1}/{nbre?100}', name: 'index')]
public function index(ManagerRegistry $mr, $page, $nbre, Request $request,
ProductsRepository $productsRepository, StatistiquesRepository $statistiquesRepository): Response
{
$searchHomeData = new SearchHomeData();
$form = $this->createForm(SearchHomeType::class, $searchHomeData);
$allStatistiques = $statistiquesRepository->findBy(['page' => 'DETAIL_PRODUCT']);
$form = $form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid())
{
$allProducts = $productsRepository->findBySearchHome($searchHomeData, ['id' => 'DESC']);
if($allProducts > 0)
{
return $this->render('products/index.html.twig',[
'form' => $form->createView(),
'allProducts' => $allProducts,
'allStatistiques' => $allStatistiques
]);
}
}
//////////////////////
$idUserConnect = $this->getUser();
$session = $request->getSession(); // Equivalent à session_star()
$elementVisite = new Statistiques();
$pageStat = 'ACCUEIL_PRODUCTS';
/// $idElementStat = $id;
$nameElementStat = 'PAGE_PRODUCTS_INDEX';
$idUserStat = $idUserConnect;
if(($session != null) and ($idUserConnect != null))
{
$visitorIdentityStat = 'Email';
$elementVisite->setPage($pageStat);
$elementVisite->setElement($nameElementStat);
/// $elementVisite->setIdElement($idElementStat);
$elementVisite->setUsers($idUserStat);
$elementVisite->setVisitorIdentity($visitorIdentityStat);
}
else
{
if(($session != null) and ($idUserConnect <= 0))
{
$visitorIdentityStat = 'INCONNU';
$elementVisite->setPage($pageStat);
$elementVisite->setElement($nameElementStat);
/// $elementVisite->setIdElement($idElementStat);
$elementVisite->setUsers($idUserStat);
$elementVisite->setVisitorIdentity($visitorIdentityStat);
}
}
$em = $mr->getManager();
$em->persist($elementVisite);
$em->flush();
///////////////////
$productsRepo = $mr->getRepository(Products::class);
$nbProducts = $productsRepo->count([]);
$nbrePage = ceil($nbProducts / $nbre);
$allProducts = $productsRepo->findBy([], ['id' => 'DESC'], $nbre, ($page - 1) * $nbre);
return $this->render('products/index.html.twig', [
'form' => $form->createView(),
'allProducts' => $allProducts,
'isPaginated' => true,
'nbrePage' => $nbrePage,
'page' => $page,
'nbre' => $nbre,
'allStatistiques' => $allStatistiques
]);
}
#[Route('/similaire/{catego}', name: 'similars')]
public function similars($catego, ManagerRegistry $mr, ProductsRepository $productsRepository,
StatistiquesRepository $statistiquesRepository, Request $request): Response
{
$searchHomeData = new SearchHomeData();
$catSimilar = $catego;
$form = $this->createForm(SearchHomeType::class, $searchHomeData);
$allStatistiques = $statistiquesRepository->findBy(['page' => 'DETAIL_PRODUCT']);
$form = $form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid())
{
$productsSimilars = $productsRepository->findBySearchHome($searchHomeData, ['city' => 'ASC']);
if($productsSimilars > 0)
{
return $this->render('products/similars.html.twig', [
'form' => $form->createView(),
'productsSimilars' => $productsSimilars,
'catSimilar' => $catSimilar,
'allStatistiques' => $allStatistiques
]);
}
$this->addFlash('danger', 'Aucun élement trouvé. Vérifiez l\'orthographe ou Utilisez les synonymes:' . $searchHomeData);
return $this->render('products/similars.html.twig', [
'form' => $form->createView(),
'productsSimilars' => $productsSimilars,
'allStatistiques' => $allStatistiques
]);
}
$productsSimilars = $mr->getRepository(Products::class)->findBy(['categories' => $catego], ['city' => 'ASC']);
return $this->render('products/similars.html.twig', [
'form' => $form->createView(),
'productsSimilars' => $productsSimilars,
'catSimilar' => $catSimilar,
'allStatistiques' => $allStatistiques
]);
}
#[Route('/{slug}/{id}', name: 'details')]
public function details($id, ManagerRegistry $mr, ProductsRepository $productsRepository,
StatistiquesRepository $statistiquesRepository, Request $request): Response
{
///////////////////////////
$idUserConnect = $this->getUser();
$session = $request->getSession(); // Equivalent à session_star()
$elementVisite = new Statistiques();
$pageStat = 'DETAIL_PRODUCT';
$idElementStat = $id;
$nameElementStat = 'NOM_PRODUCT';
$idUserStat = $idUserConnect;
if(($session != null) and ($idUserConnect != null))
{
$visitorIdentityStat = 'Email';
$elementVisite->setPage($pageStat);
$elementVisite->setElement($nameElementStat);
$elementVisite->setIdElement($idElementStat);
$elementVisite->setUsers($idUserStat);
$elementVisite->setVisitorIdentity($visitorIdentityStat);
}
else
{
if(($session != null) and ($idUserConnect <= 0))
{
$visitorIdentityStat = 'INCONNU';
$elementVisite->setPage($pageStat);
$elementVisite->setElement($nameElementStat);
$elementVisite->setIdElement($idElementStat);
$elementVisite->setUsers($idUserStat);
$elementVisite->setVisitorIdentity($visitorIdentityStat);
}
}
$em = $mr->getManager();
$em->persist($elementVisite);
$em->flush();
///////////////////
$allStatistiques = $statistiquesRepository->findBy(['page' => 'DETAIL_PRODUCT']);
$productProperties = $mr->getRepository(Products::class)->findOneBy(['id' => $id]);
// return $this->render('products/details.html.twig', compact('product'));
return $this->render('products/details.html.twig', [
'productProperties' => $productProperties,
'allStatistiques' => $allStatistiques
]);
}
}