<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
use App\Entity\Annonces;
use App\Entity\VillesFrance;
use App\Entity\Visiteurs;
use App\Entity\PostLike;
use App\Controller\Fonctions\Fonctions;
use App\Repository\VillesFranceRepository;
use App\Repository\AnnoncesRepository;
use Doctrine\Persistence\ManagerRegistry;
class IndexController extends AbstractController
{
#[Route('/', name: 'app_index')]
public function index(VillesFranceRepository $villesfranceRepository, AnnoncesRepository $annoncesRepository, ManagerRegistry $doctrine, Request $request): Response
{
$entityManager = $doctrine->getManager();
$fonction = new Fonctions();
$userRepo = $entityManager->getRepository(VillesFrance::class);
$queryBuilder = $entityManager->createQueryBuilder();
$nbr = 0;
$config = 1;
// recuperation de la date en Session
$session = $request->getSession();
$transaction = $session->get('transaction');
// condition pour l'ordre des onglets.
if ($transaction == 0) {
$config = 1;
}
if ($transaction == 'sejour') {
$config = 1;
}
if ($transaction == 'achat') {
$config = 2;
}
if ($transaction == 'location') {
$config = 3;
}
$image = '';
$datemenu = '' . date(" Y") . '-' . date('m') . '-' . date('d') . '';
$annemax = date(" Y") + 2;
$datemax = '' . $annemax . '' . date('m') . '' . date('d') . '';
$datepickk = array("datemax" => $datemax, "datemenu" => $datemenu);
$villesession = $session->get('ville');
$codepostalesession = $session->get('codepostale');
$transaction = $session->get('transaction');
$url = $fonction->FonctionUrl();
$like = '';
$ip = $fonction->NomIp();
$logo = $fonction->FonctionLogo();
// recuperation des like
$user = $this->getUser();
if ($user == true) {
// déterminer le like
$userRepo = $entityManager->getRepository(PostLike::class);
$like = $userRepo->findOneBy(["user" => $user]);
}
// condition pour verrifier si la ssession ville et code postale sont remplie
if ((strlen($villesession) != 0) and (strlen($codepostalesession) != 0)) {
$ville = $villesession;
$codepostale = $codepostalesession;
$fr = 1;
} else {
// localisation de l'acheteur
$ville = $fonction->FonctionOujesuis($ip);
$ville = $ville['ville'];
$pays = $fonction->FonctionOujesuis($ip);
$country = $pays['country'];
$codepostale = $pays['postal'];
$codepostale = '';
// condition pour faire la séléction de la variable pour un utulisateur en France ou à l'etranger.
if ($country == 'FR') {
$fr = 1;
} else {
$fr = 0;
}
}
// condition pour faire la séléction de resulta des villes selon un utulisateur en France ou à l'etranger.
if ($fr == 1) {
// localisation d u département de l'acheuteur
$userRepo = $entityManager->getRepository(VillesFrance::class);
$VilleFrance = $userRepo->findOneBy(["ville_slug" => $ville]);
$departement = $VilleFrance->getVilleDepartement($ville);
$numdepartement = $departement;
$ville_departement = $VilleFrance->getVilleDepartement($ville);
$ville_code_postal = $VilleFrance->getVilleCodePostal($ville);
$ville_slug_selec = $VilleFrance->getVilleSlug($ville);
$VilleNomReel = $VilleFrance->getVilleNomReel($ville);
$ville_latitude_deg = $VilleFrance->getvilleLatitudeDeg($ville);
$ville_longitude_deg = $VilleFrance->getvilleLongitudeDeg($ville);
$ville_population_2012 = $VilleFrance->getvillepopulation2012($ville);
$departement = $fonction->FonctionDepartement($departement);
$region = $fonction->FonctionRegion($numdepartement);
$departement = str_replace(" ", "", $departement);
$rechimage = 1;
$image = '';
$queryBuilder->select('u')
->from(VillesFrance::class, 'u')
->where('u.ville_departement IN (:ville_departement)')
->orwhere('u.ville_code_postal IN (:ville_code_postal)')
->setParameter('ville_departement', [$ville_departement])
->setParameter('ville_code_postal', [$ville_code_postal])
->addOrderBy('u.ville_population_2012', 'DESC')
->setMaxResults(6);
$query = $queryBuilder->getQuery();
$donnees = $query->getResult();
$fra = 1;
} else {
$fra = 1;
$departement = '0';
$region = '0';
$nbrimageexp = '0';
$queryBuilder->select('u')
->from(VillesFrance::class, 'u')
->addOrderBy('u.ville_population_2012', 'DESC')
->setMaxResults(6);
$query = $queryBuilder->getQuery();
$donnees = $query->getResult();
}
// condition pour Paris afin d'elargir la recherche autour.
if ($ville == 'PARIS') {
$ville_latitude_deg = '48.856614';
$ville_longitude_deg = '2.3522219';
$meters = 1500;
$coordonne = $fonction->FonctionRayon($ville_latitude_deg, $ville_longitude_deg, $meters);
$SouthLat = $coordonne['SouthLat'];
$WestLong = $coordonne['WestLong'];
$NorthLat = $coordonne['NorthLat'];
$EastLong = $coordonne['EastLong'];
$queryBuilderVille = $entityManager->createQueryBuilder();
$queryBuilderVille->select('u')
->from(VillesFrance::class, 'u')
->where('u.ville_longitude_deg >= :ville_longitude_deg_west')
->andwhere('u.ville_longitude_deg <= :ville_longitude_deg_east')
->andwhere('u.ville_latitude_deg >= :ville_latitude_deg_south')
->andwhere('u.ville_latitude_deg <= :ville_latitude_deg_north')
->setParameter('ville_longitude_deg_west', [$WestLong])
->setParameter('ville_longitude_deg_east', [$EastLong])
->setParameter('ville_latitude_deg_south', [$SouthLat])
->setParameter('ville_latitude_deg_north', [$NorthLat])
->addOrderBy('u.ville_population_2012', 'DESC')
->setMaxResults(6);
// fin teste sur la liste des ville
$query = $queryBuilderVille->getQuery();
$donnees = $query->getResult();
}
$listeville = $donnees;
$nbr = 0;
$nbrimage = 0;
$nbrannonce = 0;
$imagenbrdefaut = 0;
// variable pour debuter le compteur pour faire le derrnier tableau image.
$nbrimagetab = 1;
// condition pour faire la premier ligne du tableau
if (strlen($villesession) != 0) {
// variable pour debuter le compteur pour faire le derrnier tableau image.
$nbrimagetab = 2;
$nbr = 1;
$userRepo = $entityManager->getRepository(Annonces::class);
$usersByRolepost = $userRepo->findBy(["ville" => $villesession, "codepostal" => $ville_code_postal, "transaction" => 1, "etat" => 1]);
$nbrannonce = 0;
foreach ($usersByRolepost as $userimmage) {
$nbrannonce++;
}
$tabpropos[$nbr] = array("VilleNomReel" => $VilleNomReel, "ville" => $ville, "villeslug" => $ville_slug_selec, "nbrannonce" => $nbrannonce, "ville_population_2012" => $ville_population_2012);
}
foreach ($donnees as $user) {
$ville_nom = $user->getVilleNom();
$ville_slug = $user->getVilleSlug();
$VilleNomReel = $user->getVilleNomReel();
$ville_population_2012 = $user->getvillepopulation2012($ville);
$nbr++;
$nbrimage++;
$ville_nomteste[$nbr] = $user->getVilleNomReel();
// variable pour evier une erreur de typpe key inconnue pour la gallerie photo
$varnbrimage = $nbrimage;
$userRepo = $entityManager->getRepository(Annonces::class);
$usersByRolepost = $userRepo->findBy(["ville" => $ville_nom, "etat" => 1]);
$nbrannonce = 0;
foreach ($usersByRolepost as $userimmage) {
$nbrannonce++;
}
if ($ville_nom != $villesession) {
$tabpropos[$nbr] = array("VilleNomReel" => $VilleNomReel, "ville" => $ville_nom, "villeslug" => $ville_slug, "nbrannonce" => $nbrannonce, "ville_population_2012" => $ville_population_2012);
}
}
$tabparbanque = $tabpropos;
$rechimage = 0;
$classenbr = 0;
foreach ($tabparbanque as $user) {
// condition pour insérer les classe dans le carouselle
if ($classenbr == 0) {
$classe = '1';
}
if ($classenbr == 1) {
$classe = '2';
}
if ($classenbr == 2) {
$classe = '2';
}
if ($classenbr == 3) {
$classe = '1';
}
if ($classenbr == 4) {
$classe = '1';
}
if ($classenbr == 5) {
$classe = '2';
}
$classenbr++;
$rechimage++;
// condition de la selection de l'image en pour un utulisateur hors de france
if ($departement == 0) {
// varible pour indiquer la premiere image
$nbrimageexp++;
$imagearr = $fonction->FonctionImageVille($user['villeslug'], $rechimage, $departement);
$imagepropo = $imagearr['webformatURL'];
$imageacceuil = $imagearr['largeImageURL'];
$premiereimage = $imagearr['premiereimage'];
$premieretag = $imagearr['premieretag'];
$imageliste1 = $imagearr['imageliste1'];
$imageliste2 = $imagearr['imageliste2'];
if ($nbrimageexp == 1) {
$image = $imageacceuil;
}
$message = '';
$recherche = '';
$nbr++;
if ($imagepropo == true) {
// insertion des images
$current = file_get_contents($imagepropo);
$new_str = str_replace('https://pixabay.com/get/', '', $imagepropo);
$file = 'uploads/index/' . $new_str . '';
file_put_contents($file, $current);
}
$tabparligne[$rechimage] = array("VilleNom" => $user['VilleNomReel'], "ville_slug" => $user['villeslug'], "nbrannonce" => $user['nbrannonce'], "image" => $imagepropo, "classe" => $classe, "message" => $message, "recherche" => $recherche, "imagemini" => $new_str);
} else {
// condition de la selection de l'image en fonction du nombre de population
if ($user['ville_population_2012'] > 40000) {
$imagearr = $fonction->FonctionImageVille($user['VilleNomReel'], $rechimage, $departement);
$imagepropo = $imagearr['webformatURL'];
$imageacceuil = $imagearr['largeImageURL'];
$premiereimage = $imagearr['premiereimage'];
$premieretag = $imagearr['premieretag'];
$imageliste1 = $imagearr['imageliste1'];
$imageliste2 = $imagearr['imageliste2'];
if ($imagepropo == 0) {
$imagepropo = $imageliste2;
$imageacceuil = $imageliste1;
}
$tag = $imagearr['tag'];
$tag = ucwords($tag);
} else {
$imagearr = $fonction->FonctionImage($user['ville'], $rechimage);
$imagepropo = $imagearr['webformatURL'];
$imageacceuil = $imagearr['largeImageURL'];
$premiereimage = $imagearr['premiereimage'];
$premieretag = $imagearr['premieretag'];
$tag = $imagearr['tag'];
$tag = ucwords($tag);
}
// teste avec la premiere image trouver
if ((strlen($imagepropo) == 1) and (strlen($premiereimage) != 0)) {
$tag = $premieretag;
$tag = ucwords($tag);
$imagepropo = $premiereimage;
}
// condition pour verrifier si l'image à était touver
$erreur = 0;
if (strlen($imagepropo) != 1) {
// Si l'image est touver on verrifie si elle correspond.
if ($tag == $user['VilleNomReel']) {
$erreur = 1;
}
}
// variable pour faire apparaitre si la photo correspond à la ville.
$recherche = 0;
$VilleNomReel = $ville_nomteste[$nbrimagetab];
$nbrimage++;
$message = '';
if ($erreur == 0) {
$imagearr = $fonction->FonctionImage($departement, $rechimage);
$imagepropo = $imagearr['webformatURL'];
$tag = $imagearr['tag'];
$message = $fonction->NomLocalite($tag);
$recherche = 1;
if (strlen($imagepropo) == 1) {
// boucle pour affiner la recherce de l'image
for ($i = 1; $i <= 3; $i++) {
if (($i == 1) and ($imagepropo == 0)) {
$imagenbrdefaut++;
$recherche = 1;
$imagearr = $fonction->FonctionImage($region, $imagenbrdefaut);
$imagepropo = $imagearr['webformatURL'];
$tag = $imagearr['tag'];
$message = $fonction->NomLocalite($tag);
}
}
}
}
// condition pour inserer l'image d'acceuil
if ($rechimage == 1) {
$image = $imageacceuil;
}
// condition pour inserer l'image d'acceuil si elle est vide à la premiere.
if (($rechimage > 1) and ($image == 0)) {
$image = $imageacceuil;
}
// insertion des images
$current = file_get_contents($imagepropo);
$new_str = str_replace('https://pixabay.com/get/', '', $imagepropo);
$file = 'uploads/index/' . $new_str . '';
file_put_contents($file, $current);
$tabparligne[$rechimage] = array("VilleNom" => $user['VilleNomReel'], "ville_slug" => $user['villeslug'], "nbrannonce" => $user['nbrannonce'], "image" => $imagepropo, "classe" => $classe, "message" => $message, "recherche" => $recherche, "imagemini" => $new_str);
}
}
// insertion des images testimonial
$current = file_get_contents($image);
$new_str = str_replace('https://pixabay.com/get/', '', $image);
$testimonial = 'uploads/index/' . $new_str . '';
file_put_contents($testimonial, $current);
$testimonial = str_replace('uploads/index/', '', $testimonial);
$listeville = $tabparligne;
$query = $queryBuilder->getQuery();
$visiteurs = $query->getResult();
// recuperation des derrniere annonce de la ville
// localisation d u département de l'acheuteur
// condition pour la recherche des proposition des visiteurs en France
if ($fr == 1) {
$meters = 1500;
// recuperation des coordonne sur x Km
$coordonne = $fonction->FonctionRayon($ville_latitude_deg, $ville_longitude_deg, $meters);
$SouthLat = $coordonne['SouthLat'];
$WestLong = $coordonne['WestLong'];
$NorthLat = $coordonne['NorthLat'];
$EastLong = $coordonne['EastLong'];
$orderBytypeOrder = 'ASC';
$orderBytype = 'a.created_at';
$queryBuilder = $entityManager->createQueryBuilder();
$queryBuilder->select('a')
->from(Annonces::class, 'a')
->where('a.longitude >= :ville_longitude_deg_west')
->andwhere('a.longitude <= :ville_longitude_deg_east')
->andwhere('a.latitude >= :ville_latitude_deg_south')
->andwhere('a.latitude <= :ville_latitude_deg_north')
->setParameter('ville_longitude_deg_west', [$WestLong])
->setParameter('ville_longitude_deg_east', [$EastLong])
->setParameter('ville_latitude_deg_south', [$SouthLat])
->setParameter('ville_latitude_deg_north', [$NorthLat])
->orderBy($orderBytype, $orderBytypeOrder)
->setMaxResults(50);
$query = $queryBuilder->getQuery();
$donnees = $query->getResult();
}
// condition pour la recherche des proposition des visiteurs hors de France
if ($fr == 0) {
$userRepo = $entityManager->getRepository(Annonces::class);
$usersByRole = $userRepo->findBy(["ville" => "angouleme"]);
$donnees = $usersByRole;
}
// fonction pour envoyer l'id du journal ou de l'utilisateur
$iduser = $this->getUser();
$userRepo = $entityManager->getRepository(PostLike::class);
$usersByRolepost = $userRepo->findBy(["user" => $iduser]);
$poste = $usersByRolepost;
$date = $this->date = new \DateTime('now');
// recuperation du tableau des visiteurs
$queryBuilder = $entityManager->createQueryBuilder();
$queryBuilder->select('u')
->from(Visiteurs::class, 'u')
->where('u.user IN (:user)')
->orwhere('u.adresseip IN (:adresseip)')
->setParameter('user', [$iduser])
->setParameter('adresseip', [$ip]);
$query = $queryBuilder->getQuery();
$visiteurs = $query->getResult();
return $this->renderForm('index/index.html.twig', [
'image' => $image,
'logo' => $logo,
'propositions' => $donnees,
'date' => $date,
'post' => $poste,
'listeville' => $listeville,
'like' => $like,
'url' => $url,
'visiteurs' => $visiteurs,
'testimonial' => $testimonial,
'config' => $config,
'datepickk' => $datepickk,
'fra' => $fra,
]);
}
}