src/Controller/HomeController.php line 807
<?phpnamespace App\Controller;use App\Entity\LikedBuilding;use App\Entity\UserForm;use App\Services\Mails\Mails;use App\Services\RecaptchaService;use App\Form\ContactForm;use App\Form\UserForm\AttestationUserFormType;use App\Form\UserForm\OwnerUserFormType;use App\Form\UserForm\TenantUserFormType;use App\Form\UserForm\NewsletterUserFormType;use App\Entity\User;use App\Entity\Building;use App\Repository\UserFormRepository;use App\Repository\LikedBuildingRepository;use App\Repository\BuildingRepository;use App\Repository\CityRepository;use Symfony\Contracts\Translation\TranslatorInterface;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\Routing\Annotation\Route;use Doctrine\ORM\EntityManagerInterface;use Symfony\Component\Mailer\MailerInterface;use Symfony\Component\Mime\Email;use Symfony\Component\HttpFoundation\JsonResponse;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;class HomeController extends AbstractController{private $cityRepository;private $likedBuildingRepository;private $translator;private $userFormRepository;private $entityManager;private string $googleMapKey;private RecaptchaService $recaptchaService;public function __construct(CityRepository $cityRepository,LikedBuildingRepository $likedBuildingRepository,TranslatorInterface $translator,UserFormRepository $userFormRepository,EntityManagerInterface $entityManager,ParameterBagInterface $params,RecaptchaService $recaptchaService) {$this->cityRepository = $cityRepository;$this->likedBuildingRepository = $likedBuildingRepository;$this->translator = $translator;$this->userFormRepository = $userFormRepository;$this->entityManager = $entityManager;$this->googleMapKey = $params->get('app.googlemapkey');$this->recaptchaService = $recaptchaService;}#[Route(path: ["fr" => "/", "en" => "/en/",], name: 'home')]public function index(BuildingRepository $buildingRepository, LikedBuildingRepository $likedBuildingRepository, Request $request){$userForm = false; //fiche d'attente formulaire utilisateur$landing = true;if($landing == true) return $this->redirectToRoute('landing');if($userForm == true) return $this->redirectToRoute('userForm');$lng = $request->query->get('lng');$lat = $request->query->get('lat');$city = $request->query->get('city');$selectedCity = null;$selectedBuildings = [];if ($userForm == true) {return $this->redirectToRoute('userForm');}if ($landing == true) {return $this->redirectToRoute('landing');}$lng = $request->query->get('lng');$lat = $request->query->get('lat');$city = $request->query->get('city');$selectedCity = null;$selectedBuildings = [];if ($city != "null") {$selectedCity = $this->cityRepository->findOneBy(['city' => $city]);if ($selectedCity != null) {$selectedBuildings = $buildingRepository->findBy(['cityEntity' => $selectedCity->getId(), 'isEnd' => true, 'isActive' => true],['id' => 'DESC']);}}$cities = $this->cityRepository->findBy(['isInsideHomepage' => true]);$filter = $request->query->get('filter');$filterChoice = match ($filter) {'appartement' => "typeBien.appartement",'chambre_privee' => "typeBien.chambrePrivee",'chambre_partagee' => "typeBien.chambrePartagee",'bons_plans' => "Bon plan",default => null,};$buildingss = [];foreach ($cities as $city) {$buildingss[$city->getCity()] = $buildingRepository->findByIsInHomepage($city->getId(), $filterChoice);}// Récupérer l'utilisateur actuel$user = $this->getUser();$buildings = $buildingRepository->findBy(['isEnd' => true, 'isActive' => true], ['id' => 'DESC']);$likedBuildings = [];foreach ($buildings as $building) {$isLiked = $this->likedBuildingRepository->findOneBy(['user' => $user, 'building' => $building]) !== null;$likedBuildings[$building->getId()] = $isLiked;}$buildingsLast = ($filterChoice != null)? $buildingRepository->findBy(['format' => $filterChoice, 'isEnd' => true, 'isActive' => true], ['id' => 'DESC']): $buildingRepository->findBy(['isEnd' => true, 'isActive' => true], ['id' => 'DESC'], 8);$buildingsMap = [];$buildingsMapData = $buildingRepository->findByLatAndLngNotNull();foreach ($buildingsMapData as $building) {$buildingsMap[] = ['lat' => $building->getLat(),'lng' => $building->getLng(),'id' => $building->getId(),];}$liked = $likedBuildingRepository->findOneBy(['user' => $this->getUser(), 'building' => $building]);return $this->render('home/index.html.twig', ['building' => $building,'likedBuildings' => $likedBuildings,'liked' => $liked,'cities' => $cities,'lastBuildings' => $buildingsLast,'arrayBuildings' => $buildingss,'selectedCity' => $selectedCity,'selectedBuildings' => $selectedBuildings,'buildingsMap' => $buildingsMap,'filter' => $filter,]);}#[Route(path: ["fr" => "/mentions-legales", "en" => "/en/mentions-legales",], name: 'mentions_legales')]public function mentionsLegales(){return $this->render('mentionslegales/mentions_legales.html.twig', []);}public function enleveaccents($param){$param = strtr($param,["À" => 'A',"Á" => 'A',"Â" => 'A',"Ã" => 'A',"Ä" => 'A',"Å" => 'A',"à" => 'a',"á" => 'a',"â" => 'a',"ã" => 'a',"ä" => 'a',"å" => 'a',"Ò" => 'O',"Ó" => 'O',"Ô" => 'O',"Õ" => 'O',"Ö" => 'O',"Ø" => 'O',"ò" => 'o',"ó" => 'o',"ô" => 'o',"õ" => 'o',"ö" => 'o',"ø" => 'o',"È" => 'E',"É" => 'E',"Ê" => 'E',"Ë" => 'E',"è" => 'e',"é" => 'e',"ê" => 'e',"ë" => 'e',"Ç" => 'C',"ç" => 'c',"Ì" => 'I',"Í" => 'I',"Î" => 'I',"Ï" => 'I',"ì" => 'i',"í" => 'i',"î" => 'i',"ï" => 'i',"Ù" => 'U',"Ú" => 'U',"Û" => 'U',"Ü" => 'U',"ù" => 'u',"ú" => 'u',"û" => 'u',"ü" => 'u',"ÿ" => 'y',"Ñ" => 'N',"ñ" => 'n']);return $param;}#[Route(path: ["fr" => "/search/advanced","en" => "/en/search/advanced",], name: 'advanced_search')]public function advancedSearch(BuildingRepository $buildingRepository, Request $request, LikedBuildingRepository $likedBuildingRepository): Response{$lng = $request->query->get('lng');$lat = $request->query->get('lat');$city = $request->query->get('city');$checkboxCountry = $request->query->get('selectCountry');$page = $request->query->getInt('page', 1);$limit = 16; // Nombre de logements par page$countryAcronym = ["FR" => "France","BE" => "Belgique","DE" => "Allemagne","ES" => "Espagne","IT" => "Italie","PT" => "Portugal","CA" => "Canada","LU" => "Luxembourg"];(isset($countryAcronym[$checkboxCountry]) && $checkboxCountry) ? $country = $countryAcronym[$checkboxCountry] : $country = "France";if (empty($city) || empty($lng) || empty($lat)) {if(!empty($city)){$apiKey = $this->googleMapKey;$url = "https://maps.googleapis.com/maps/api/geocode/json?address={$city}&key={$apiKey}";$response = file_get_contents($url);$data = json_decode($response, true);if ($data['status'] === 'OK') {$lat = $data['results'][0]['geometry']['location']['lat'];$lng = $data['results'][0]['geometry']['location']['lng'];}}}$selectedCity = $this->cityRepository->findOneBy(['city' => $city]);if (!$selectedCity) {$city = str_replace("-", " ", $city);$city = $this->enleveaccents($city);$cityCaps = mb_strtoupper($city);$selectedCity = $this->cityRepository->findOneBy(['city' => $cityCaps]);}if (!$selectedCity) {$city = str_replace(["Saint ", " Saint", " Saint "], ["ST ", " ST ", " ST "], $city);$cityCaps = mb_strtoupper($city);$selectedCity = $this->cityRepository->findOneBy(['city' => $cityCaps]);}$criteria = ['cityId' => $selectedCity && $city ? $selectedCity->getId() : (!$selectedCity && $city ? 'VILLE_INEXISTANTE' : ''),'city' => $selectedCity && $city ? $selectedCity->getCity() : (!$selectedCity && $city ? 'VILLE_INEXISTANTE' : ''),'country' => $country ?? '','acronym' => $checkboxCountry ?? '','minPrice' => $request->query->get('minPrice') ? $request->query->get('minPrice') : '0','maxPrice' => $request->query->get('maxPrice'),'type' => $request->query->get('type'),'isShared' => $request->query->get('isShared'),'isFurnished' => $request->query->get('isFurnished'),'bathroomType' => $request->query->get('bathroomType'),'isAidEligible' => $request->query->get('isAidEligible'),'dpe' => $request->query->get('dpe'),'minSurface' => $request->query->get('minSurface'),'maxSurface' => $request->query->get('maxSurface'),'buildingPro' => $request->query->get('buildingPro')];$selectedBuildings = $buildingRepository->findBySearchCriteria($criteria, $page, $limit);$totalItems = $buildingRepository->countBySearchCriteria($criteria);$pagesCount = ceil($totalItems / $limit);// Création de la map pour afficher les résultats$buildingsMap = [];foreach ($selectedBuildings as $building) {if ($building->getLng() !== null && $building->getLat() !== null) {$buildingsMap[] = ['lat' => $building->getLat(),'lng' => $building->getLng(),'id' => $building->getId(),];}}// Gestion des bâtiments likés$likedBuildings = [];$user = $this->getUser();if ($user) {foreach ($selectedBuildings as $building) {$isLiked = $likedBuildingRepository->findOneBy(['user' => $user, 'building' => $building]) !== null;$likedBuildings[$building->getId()] = $isLiked;}}$selectedBuildingsArray = array_map(function ($building) {return ['id' => $building->getId(),'latitude' => $building->getLat(),'longitude' => $building->getLng(),];}, $selectedBuildings);return $this->render('home/search.html.twig', ['selectedBuildingsMap' => $selectedBuildingsArray,'selectedBuildings' => $selectedBuildings,'city' => $city,'lat' => $lat,'lng' => $lng,'checkboxCountry' => $checkboxCountry,'likedBuildings' => $likedBuildings,'buildingsMap' => $buildingsMap,'totalItems' => $totalItems,'pagesCount' => $pagesCount,'currentPage' => $page,'query' => $request->query->all(), // Passer les paramètres de requête au template'selectedDPE' => $request->query->get('dpe'),]);}#[Route(path: ["fr" => "/cgv","en" => "/en/cgv",], name: 'cgv')]public function cgv(){return $this->render('cgv/cgv.html.twig');}#[Route(path: ["fr" => "/cookies","en" => "/en/cookies",], name: 'cookies')]public function cookies(){return $this->render('cookies/index.html.twig');}#[Route(path: ["fr" => "/assurance","en" => "/en/assurance",], name: 'assurance')]public function assurance(){return $this->render('assurance/index.html.twig');}#[Route(path: ["fr" => "/attestation","en" => "/en/attestation",], name: 'attestation')]public function attestation(){return $this->render('attestation/index.html.twig');}#[Route(path: ["fr" => "/qui","en" => "/en/qui",], name: 'qui')]public function qui(){return $this->render('qui/index.html.twig');}#[Route(path: ["fr" => "/services","en" => "/en/services",], name: 'services')]public function services(){return $this->render('services/index.html.twig');}#[Route(path: ["fr" => "/partenaire","en" => "/en/partenaire",], name: 'partenaire')]public function partenaire(){return $this->render('partenaire/index.html.twig');}#[Route(path: ["fr" => "/why_us","en" => "/en/why_us",], name: 'why_us')]public function why_us(){return $this->render('why_us/index.html.twig');}#[Route(path: ["fr" => "/contact","en" => "/en/contact",], name: 'contact')]public function contact(Request $request, Mails $mails){$form = $this->createForm(ContactForm::class);$form->handleRequest($request);if ($form->isSubmitted() && $form->isValid()) {$captchaResponse = $request->request->get('g-recaptcha-response');if (!$this->recaptchaService->verify($captchaResponse)) {return new JsonResponse(['error' => 'Captcha invalide'], 400);}$to = ['contact@roomlers.com', 'julie@roomlers.com', 'geraldlegoff@appyness.fr'];$data = $form->getData();$email = $mails->createEmail('mails/contactUs.html.twig', ["prenom" => $data['firstName'],"nom" => $data['lastName'],"email" => $data['email'],"tel" => $data['phone'],"requestType" => $data['requestType'],"problemType" => $data['problemType'],"message" => $data['message']])->to(...$to)->subject('Formulaire Roomlers');$mails->send($email);$this->addFlash('notice', 'Le formulaire de contact a bien été envoyé.');return $this->redirectToRoute('contact');}return $this->render('contact/index.html.twig', ['form' => $form,]);}#[Route(path: ["fr" => "/privacy","en" => "/en/privacy",], name: 'privacy')]public function privacy(){return $this->render('privacy/index.html.twig');}#[Route(path: ["fr" => "/plan","en" => "/en/plan",], name: 'plan')]public function plan(){return $this->render('plan/index.html.twig');}#[Route('/userForm/attestation', name: 'userFormAttestation')]public function userFormAttestation(Request $request, MailerInterface $mailer){$userForm = new UserForm();$form = $this->createForm(AttestationUserFormType::class, $userForm);$form->handleRequest($request);if ($form->isSubmitted() && $form->isValid()) {$email = $userForm->getEmail();$emailExists = $this->userFormRepository->findByEmailFormAttestation($email);if ($emailExists) {return new JsonResponse(['error' => 'Une erreur est survenue, veuillez vérifier vos informations. ❌','errors' => ['email' => 'Cet email est déjà utilisé.']], 400);}$userForm->setAttestationPrereservation(true);$this->entityManager->persist($userForm);$this->entityManager->flush();$messageContent = "Nom: " . $userForm->getFirstName() . "Prénom: " . $userForm->getLastName() . "Date de naissance: " . $userForm->getBirthDate()->format('Y-m-d') . "Nationalité: " . $userForm->getNationality() . "Email: " . $userForm->getEmail() . "Téléphone: " . $userForm->getPhone() . "Ville: " . $userForm->getCity() . "Type de logement: " . $userForm->getType() . "Budget: " . $userForm->getBudget() . "N° de passeport: " . $userForm->getPassportNumber() . "Expiration du passeport: " . $userForm->getPassportExpirationDate()->format('Y-m-d') . "Ecole: " . $userForm->getSchool() . "Date de rentrée: " . $userForm->getStartDateSchool()->format('Y-m-d') . "Consulat/Ambassade: " . $userForm->getConsulate() . "Inscription à la newsletter: " . ($userForm->getAcceptNewsletter() ? 'Oui' : 'Non') . "";$emailRoomlers = (new Email())->from('noreply@roomlers.com')->to('geraldlegoff@appyness.fr')->cc('contact@roomlers.com', 'julie@roomlers.com')->subject('Obtenir une attestation de pré-réservation de logement dans le cadre d’une demande de visa')->text('Obtenir une attestation de pré-réservation de logement dans le cadre d’une demande de visa' . $messageContent);$mailer->send($emailRoomlers);$messageContent = "Votre demande a bien été prise en compte. Nous vous remercions pour la confiance accordée à Roomlers.Un membre de notre équipe prendra rapidement contact avec vous.";$emailCustomer = (new Email())->from('noreply@roomlers.com')->to($email)->subject('Formulaire de Pré-réservation de Logement')->text('Formulaire de Pré-réservation de Logement ' . $messageContent);$mailer->send($emailCustomer);return new JsonResponse(['success' => 'Formulaire soumis et email envoyé avec succès!'], 200);}return $this->render('userForm/attestation.html.twig', ['form' => $form->createView(),]);}#[Route('/userForm/owner', name: 'userFormOwner')]public function userFormOwner(Request $request, MailerInterface $mailer){$userForm = new UserForm();$form = $this->createForm(OwnerUserFormType::class, $userForm);$form->handleRequest($request);if ($form->isSubmitted() && $form->isValid()) {$captcha_response = $request->request->get('captcha');$captcha_num1 = $request->request->get('captcha_num1');$captcha_num2 = $request->request->get('captcha_num2');// Vérifier la réponse du captchaif ((int)$captcha_response !== ((int)$captcha_num1 + (int)$captcha_num2)) {return new JsonResponse(['error' => 'Captcha incorrect. Veuillez réessayer.',], 400);}$email = $userForm->getEmail();$emailExists = $this->userFormRepository->findByEmailFormOwner($email);if ($emailExists) {return new JsonResponse(['error' => 'Une erreur est survenue, veuillez vérifier vos informations. ❌','errors' => ['email' => 'Cet email est déjà utilisé.']], 400);}$userForm->setOwner(true);$this->entityManager->persist($userForm);$this->entityManager->flush();$messageContent = "Nom: " . $userForm->getFirstName() . "Prénom: " . $userForm->getLastName() . "Nationalité: " . $userForm->getNationality() . "Email: " . $userForm->getEmail() . "Téléphone: " . $userForm->getPhone() . "Ville: " . $userForm->getCity() . "Type de logement: " . $userForm->getType() . "Loyer mensuel charges comprises: " . $userForm->getMonthlyRent() . "Charges mensuelles: " . $userForm->getMonthlyCharges() . "Disponible à partir de: " . $userForm->getAvailableFrom()->format('Y-m-d') . "Présentez-nous brièvement votre logement: " . $userForm->getDescription() . "Inscription à la newsletter: " . ($userForm->getAcceptNewsletter() ? 'Oui' : 'Non') . "";$emailRoomlers = (new Email())->from('noreply@roomlers.com')->to('mohamedouzammad@appyness.fr')->cc('contact@roomlers.com', 'julie@roomlers.com')->subject('Proposer votre logement à la location à plus de 4500 potentiels locataires')->text('Proposer votre logement à la location à plus de 4500 potentiels locataires' . $messageContent);$mailer->send($emailRoomlers);$messageContent = "Votre demande a bien été prise en compte. Nous vous remercions pour la confiance accordée à Roomlers. `\n` Un membre de notre équipe prendra rapidement contact avec vous.";$emailCustomer = (new Email())->from('noreply@roomlers.com')->to($email)->subject('Proposer votre logement à la location à plus de 4500 potentiels locataires')->text('Proposer votre logement à la location à plus de 4500 potentiels locataires' . $messageContent);$mailer->send($emailCustomer);return new JsonResponse(['success' => 'Formulaire soumis et email envoyé avec succès!'], 200);}return $this->render('userForm/owner.html.twig', ['form' => $form->createView(),]);}#[Route('/userForm/tenant', name: 'userFormTenant')]public function userFormTenant(Request $request, MailerInterface $mailer){$userForm = new UserForm();$form = $this->createForm(TenantUserFormType::class, $userForm);$form->handleRequest($request);if ($form->isSubmitted() && $form->isValid()) {$captcha_response = $request->request->get('captcha');$captcha_num1 = $request->request->get('captcha_num1');$captcha_num2 = $request->request->get('captcha_num2');// Vérifier la réponse du captchaif ((int)$captcha_response !== ((int)$captcha_num1 + (int)$captcha_num2)) {return new JsonResponse(['error' => 'Captcha incorrect. Veuillez réessayer.',], 400);}$email = $userForm->getEmail();$emailExists = $this->userFormRepository->findByEmailFormTenant($email);if ($emailExists) {return new JsonResponse(['error' => 'Une erreur est survenue, veuillez vérifier vos informations. ❌','errors' => ['email' => 'Cet email est déjà utilisé.']], 400);}$userForm->setTenant(true);$this->entityManager->persist($userForm);$this->entityManager->flush();$messageContent = "Nom: " . $userForm->getFirstName() . "Prénom: " . $userForm->getLastName() . "Date de naissance: " . $userForm->getBirthDate()->format('Y-m-d') . "Nationalité: " . $userForm->getNationality() . "Email: " . $userForm->getEmail() . "Téléphone: " . $userForm->getPhone() . "Ville: " . $userForm->getCity() . "Type de logement: " . $userForm->getType() . "Budget: " . $userForm->getBudget() . "Durée de location (nombre de mois): " . $userForm->getRentalDuration() . "Date de début de location: " . $userForm->getRentalDate()->format('Y-m-d') . "Autre information: " . $userForm->getAdditionalInformation() . "Inscription à la newsletter: " . ($userForm->getAcceptNewsletter() ? 'Oui' : 'Non') . "";$emailRoomlers = (new Email())->from('noreply@roomlers.com')->to('mohamedouzammad@appyness.fr')->cc('contact@roomlers.com', 'julie@roomlers.com')->subject('Formulaire de réservation de logement')->text('Formulaire de réservation de logement : colocation, coliving, studio, appartement… ' . $messageContent);$mailer->send($emailRoomlers);$messageContent = "Votre demande a bien été prise en compte. Nous vous remercions pour votre confiance.Un membre de notre équipe prendra rapidement contact avec vous.";$emailCustomer = (new Email())->from('noreply@roomlers.com')->to($email)->subject('Formulaire de réservation de logement')->text('Formulaire de réservation de logement : colocation, coliving, studio, appartement… ' . $messageContent);$mailer->send($emailCustomer);return new JsonResponse(['success' => 'Formulaire soumis et email envoyé avec succès!'], 200);}return $this->render('userForm/tenant.html.twig', ['form' => $form->createView(),]);}// #[Route('/userForm', name: 'userForm')]// public function userForm(Request $request): Response// {// $formChoice = $request->get('form_choice');// if ($formChoice) {// switch ($formChoice) {// case 'attestation':// return $this->redirectToRoute('userFormAttestation');// case 'tenant':// return $this->redirectToRoute('userFormTenant');// case 'owner':// return $this->redirectToRoute('userFormOwner');// default:// $this->addFlash('error', 'Choix de formulaire invalide.');// return $this->redirectToRoute('userForm');// }// }// // 🛠️ Ajout du formulaire manquant// $userForm = new UserForm();// $form = $this->createForm(NewsletterUserFormType::class, $userForm);// return $this->render('userForm/index.html.twig', [// 'form' => $form->createView(), // Assurez-vous que la variable "form" est bien transmise// ]);// }#[Route('/userForm/newsletter', name: 'userFormNewsletter')]public function userFormNewsletter(Request $request, MailerInterface $mailer){$userForm = new UserForm();$form = $this->createForm(NewsletterUserFormType::class, $userForm);$form->handleRequest($request);$honeypot = $request->request->get('input');if (!empty($honeypot)) {return new JsonResponse(['error' => 'Error'], 400);}$captchaResponse = $request->request->get('g-recaptcha-response');if (!$this->recaptchaService->verify($captchaResponse)) {return new JsonResponse(['error' => 'Captcha invalide'], 400);}if ($form->isSubmitted() && $form->isValid()) {$email = $userForm->getEmail();$emailExists = $this->userFormRepository->findByEmailFormNewsletter($email);if ($emailExists) {return new JsonResponse(['error' => 'Veuillez vérifier vos informations. ❌','errors' => ['email' => 'Veuillez vérifier vos informations. ❌']], 400);}$userForm->setNewsletter(true);$this->entityManager->persist($userForm);$this->entityManager->flush();$messageContent = "Nom: " . $userForm->getFirstName() . "Prénom: " . $userForm->getLastName() . "Email: " . $userForm->getEmail() . "";$emailRoomlers = (new Email())->from('noreply@roomlers.com')->to('julie@roomlers.com')->cc('contact@roomlers.com', 'hello@appyness.fr')->subject('Inscription à la newsletter Roomlers')->text('Nouvelle inscription à la newsletter : ' . $messageContent);$mailer->send($emailRoomlers);$messageContent = "Merci de vous être inscrit à la newsletter Roomlers. Vous recevrez bientôt des informations exclusives et des offres spéciales.";$emailCustomer = (new Email())->from('noreply@roomlers.com')->to($email)->subject('Confirmation d\'inscription à la newsletter Roomlers')->text($messageContent);$mailer->send($emailCustomer);return new JsonResponse(['success' => 'Inscription à la newsletter confirmée!'], 200);}return $this->render('userForm/index.html.twig', ['form' => $form->createView(),]);}#[Route(path: ["fr" => "/home", "en" => "/en/home"], name: 'landing')]public function landing(BuildingRepository $buildingRepository, Request $request): Response{$data = $this->getBuildingsByCountry($buildingRepository, $request);return $this->render('home/landing_page.html.twig', $data);}#[Route('/buildings-country', name: 'buildings_country')]public function buildingsCountry(BuildingRepository $buildingRepository, Request $request): Response{$data = $this->getBuildingsByCountry($buildingRepository, $request);return $this->render('components/sectionAccommodationCountry.html.twig', $data);}private function getBuildingsByCountry(BuildingRepository $buildingRepository, Request $request): array{$countryCode = $request->query->get('acronym', 'FR');$countryNames = ['FR' => 'France','BE' => 'Belgique','DE' => 'Allemagne','ES' => 'Espagne','IT' => 'Italie','PT' => 'Portugal','CA' => 'Canada','LU' => 'Luxembourg'];$country = $countryNames[$countryCode] ?? 'France';$recentBuildingsOqoro = $buildingRepository->recentBuildingsOqoro($country, $countryCode);$recentBuildingsColonies = $buildingRepository->recentBuildingsColonies($country, $countryCode);$recentBuildingsPrivate = $buildingRepository->recentBuildingsPrivate($country, $countryCode);//4 Logements Oqoro max + 4 Logements Colonies max + 4 Logements privés max$buildingsOqoro = array_slice($recentBuildingsOqoro, 0, 4);$buildingsColonies = array_slice($recentBuildingsColonies, 0, 4);$buildingsPrivate = array_slice($recentBuildingsPrivate, 0, 4);$buildings = array_merge($buildingsOqoro, $buildingsColonies, $buildingsPrivate);//S'il n'y a pas 12 logements alors on pioche dans les pro BackUp Oqoroif(count($buildings)!= 12){$buildingsPROBackUp = array_slice($recentBuildingsOqoro, 4, 13);$activeBuildings = array_slice($buildingsPROBackUp, 0, 12 - count($buildings));$buildings = array_merge($buildings, $activeBuildings);}// Trier les logements actifs par date de création et limiter à 12 (3 lignes)usort($buildings, function($a, $b) {return $b->getCreatedAt() <=> $a->getCreatedAt();});$buildings = array_slice($buildings, 0, 12);// Récupérer les documents associés aux bâtiments actifs$buildingDocuments = [];foreach ($buildings as $building) {$buildingDocuments[$building->getId()] = $building->getBuildingDocuments();}return ['recentBuildings' => $buildings,'buildingDocuments' => $buildingDocuments,];}}