src/Controller/HomeController.php line 347
<?php
namespace App\Controller;
use App\Entity\LikedBuilding;
use App\Entity\UserForm;
use App\Services\Mails\Mails;
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;
public function __construct(
CityRepository $cityRepository,
LikedBuildingRepository $likedBuildingRepository,
TranslatorInterface $translator,
UserFormRepository $userFormRepository,
EntityManagerInterface $entityManager,
ParameterBagInterface $params
) {
$this->cityRepository = $cityRepository;
$this->likedBuildingRepository = $likedBuildingRepository;
$this->translator = $translator;
$this->userFormRepository = $userFormRepository;
$this->entityManager = $entityManager;
$this->googleMapKey = $params->get('app.googlemapkey');
}
#[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');
$page = $request->query->getInt('page', 1);
$limit = 16; // Nombre de logements par page
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'];
} else {
$this->addFlash('error', 'Impossible de trouver les coordonnées de la ville');
return $this->redirectToRoute('home');
}
}
// $this->addFlash('error', $this->translator->trans('nav.notFoundSearch'));
// return $this->redirectToRoute('home');
}
$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]);
}
if (!$selectedCity) {
$this->addFlash('error', 'Aucune ville trouvée');
return $this->redirectToRoute('home');
}
$criteria = [
'cityId' => $selectedCity->getId(),
'city' => $selectedCity->getCity(),
'minPrice' => $request->query->get('minPrice'),
'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' => array_keys($request->query->all('dpe')),
'minSurface' => $request->query->get('minSurface'),
'maxSurface' => $request->query->get('maxSurface'),
];
$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;
}
}
//dd($selectedBuildings);
$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,
'likedBuildings' => $likedBuildings,
'buildingsMap' => $buildingsMap,
'totalItems' => $totalItems,
'pagesCount' => $pagesCount,
'currentPage' => $page,
'query' => $request->query->all(), // Passer les paramètres de requête au template
'selectedDPE' => array_keys($request->query->all('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()) {
$to = ['contact@roomlers.com', 'julie@roomlers.com'];
$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 captcha
if ((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 captcha
if ((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');
$secretKey = '6LdBVfEqAAAAAOLSsi_uSd3Hfh7aySkQpnwqbOWY';
$url = 'https://www.google.com/recaptcha/api/siteverify';
$data = [
'secret' => $secretKey,
'response' => $captchaResponse
];
$options = [
'http' => [
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query($data),
],
];
$context = stream_context_create($options);
$verify = file_get_contents($url, false, $context);
$captchaSuccess = json_decode($verify);
if (!$captchaSuccess->success) {
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(): Response
{
// Récupérer les 50 derniers logements
$recentBuildings = $this->entityManager->getRepository(Building::class)
->findBy([], ['createdAt' => 'DESC'], 50);
// Filtrer les logements actifs
$activeBuildings = array_filter($recentBuildings, function($building) {
return $building->getIsActive();
});
// Trier les logements actifs par date de création et limiter à 8
usort($activeBuildings, function($a, $b) {
return $b->getCreatedAt() <=> $a->getCreatedAt();
});
$activeBuildings = array_slice($activeBuildings, 0, 8);
// Récupérer les documents associés aux bâtiments actifs
$buildingDocuments = [];
foreach ($activeBuildings as $building) {
$buildingDocuments[$building->getId()] = $building->getBuildingDocuments();
}
return $this->render('home/landing_page.html.twig', [
'recentBuildings' => $activeBuildings,
'buildingDocuments' => $buildingDocuments,
]);
}
}