<?php
namespace App\Controller;
use App\Entity\Annonces;
use App\Entity\Immobiliers;
use App\Entity\SearchData;
use App\Entity\SearchHomeData;
use App\Entity\Statistiques;
use App\Form\SearchHomeType;
use App\Form\SearchType;
use App\Repository\AnnoncesRepository;
use App\Repository\ImmobiliersRepository;
use App\Repository\StatistiquesRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Component\HttpFoundation\Request;
#[Route('/annonces', name: 'app_annonces_')]
class AnnoncesController extends AbstractController
{
#[Route('/home/{page?1}/{nbre?100}', name: 'index')]
public function index(ManagerRegistry $mr, $page, $nbre, Request $request,
AnnoncesRepository $annoncesRepository, StatistiquesRepository $statistiquesRepository): Response
{
$searchHomeData = new SearchHomeData();
$form = $this->createForm(SearchHomeType::class, $searchHomeData);
/// $allStatistiques = $statistiquesRepository->findBy([],['page' => 'DETAIL_ANNONCE']);
$allStatistiques = $statistiquesRepository->findBy(['page' => 'DETAIL_ANNONCE']);
$form = $form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid())
{
$allAnnonces = $annoncesRepository->findBySearchHome($searchHomeData, ['ville' => 'ASC']);
if($allAnnonces > 0)
{
return $this->render('annonces/index.html.twig', [
'form' => $form->createView(),
'allAnnonces' => $allAnnonces,
'allStatistiques' => $allStatistiques
]);
}
$this->addFlash('danger', 'Aucun élement trouvé. Vérifiez l\'orthographe ou Utilisez les synonymes:' . $searchHomeData);
return $this->render('annonces/index.html.twig', [
'form' => $form->createView(),
'allAnnonces' => $allAnnonces,
'allStatistiques' => $allStatistiques
]);
}
///////////////////////////
$idUserConnect = $this->getUser();
$session = $request->getSession(); // Equivalent à session_star()
$elementVisite = new Statistiques();
$pageStat = 'ACCUEIL_ANNONCES';
/// $idElementStat = $id;
$nameElementStat = 'PAGE_ANNONCES_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();
///////////////////
$annoncesRepo = $mr->getRepository(Annonces::class);
$nbAnnonces = $annoncesRepo->count([]);
$nbrePage = ceil($nbAnnonces / $nbre);
$allAnnonces = $annoncesRepo->findBy([], ['created_at' => 'DESC'], $nbre, ($page - 1) * $nbre);
return $this->render('annonces/index.html.twig', [
'form' => $form->createView(),
'allAnnonces' => $allAnnonces,
'isPaginated' => true,
'nbrePage' => $nbrePage,
'page' => $page,
'nbre' => $nbre,
'allStatistiques' => $allStatistiques
]);
}
/////
#[Route('/similaire/{catego}', name: 'similars')]
public function similars($catego, ManagerRegistry $mr, AnnoncesRepository $annoncesRepository,
StatistiquesRepository $statistiquesRepository, Request $request): Response
{
$searchHomeData = new SearchHomeData();
$catSimilar = $catego;
$form = $this->createForm(SearchHomeType::class, $searchHomeData);
$allStatistiques = $statistiquesRepository->findBy(['page' => 'DETAIL_ANNONCE']);
$form = $form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid())
{
$annoncesSimilars = $annoncesRepository->findBySearchHome($searchHomeData, ['ville' => 'ASC']);
if($annoncesSimilars > 0)
{
return $this->render('annonces/similars.html.twig', [
'form' => $form->createView(),
'annoncesSimilars' => $annoncesSimilars,
'catSimilar' => $catSimilar,
'allStatistiques' => $allStatistiques
]);
}
else
{
$this->addFlash('danger', 'Aucun élement trouvé. Vérifiez l\'orthographe ou Utilisez les synonymes:' . $searchHomeData);
return $this->render('annonces/similars.html.twig', [
'form' => $form->createView(),
'annoncesSimilars' => $annoncesSimilars,
'catSimilar' => $catSimilar,
'allStatistiques' => $allStatistiques
]);
}
}
$annoncesSimilars = $mr->getRepository(Annonces::class)->findBy(['categoriesannonces' => $catego]);
return $this->render('annonces/similars.html.twig', [
'form' => $form->createView(),
'annoncesSimilars' => $annoncesSimilars,
'catSimilar' => $catSimilar,
'allStatistiques' => $allStatistiques
]);
}
#[Route('/{slug}/{id}', name: 'details')]
public function details($id, ManagerRegistry $mr, Request $request,
StatistiquesRepository $statistiquesRepository): Response
{
///////////////////////////
$idUserConnect = $this->getUser();
$session = $request->getSession(); // Equivalent à session_star()
$elementVisite = new Statistiques();
$pageStat = 'DETAIL_ANNONCE';
$idElementStat = $id;
$nameElementStat = 'NOM_ANNONCE';
$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_ANNONCE']);
$annonceProperties = $mr->getRepository(Annonces::class)->findOneBy(['id' => $id]);
// return $this->render('annonces/details.html.twig', compact('annonce'));
return $this->render('annonces/details.html.twig', [
'annonceProperties' => $annonceProperties,
'allStatistiques' => $allStatistiques
]);
}
}