<?php
namespace App\Controller;
use App\Service\FranchiseService;
use App\Service\HcaptchaService;
use App\Service\JsonDataService;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Address;
use Symfony\Component\Routing\Annotation\Route;
class VitrineController extends AbstractController
{
public function __construct(
private JsonDataService $jsonDataService,
private HcaptchaService $hcaptchaService,
private MailerInterface $mailer,
private FranchiseService $franchiseService,
private string $mailSenderAddress,
private string $mailSenderName,
private string $mailNotifiedAddress,
) {}
#[Route('/', name: 'home')]
public function index(): Response
{
$reviews = $this->jsonDataService->getTripAdvisorReviews();
return $this->render('vitrine/pages/home.html.twig', [
'reviews' => $reviews,
]);
}
#[Route('/faq', name: 'faq')]
public function faq(): Response
{
$faqData = $this->jsonDataService->getFAQData();
$categories = array_keys($faqData);
return $this->render('vitrine/pages/faq.html.twig', [
'faqData' => $faqData,
'categories' => $categories,
]);
}
#[Route('/about', name: 'about')]
public function about(): Response
{
return $this->render('vitrine/pages/about.html.twig');
}
#[Route('/strasbourg', name: 'franchise_detail')]
public function franchiseDetail(): Response
{
return $this->render('vitrine/pages/franchise_detail.html.twig');
}
#[Route('/franchise', name: 'franchise')]
public function franchise(Request $request): Response
{
$siteKeyHcaptcha = $this->getParameter('hcaptcha_site_key');
return $this->render('vitrine/pages/franchise.html.twig', [
'siteKeyHcaptcha' => $siteKeyHcaptcha,
]);
}
#[Route('/franchise/form', name: 'franchise_form', methods: ['POST'])]
public function franchiseForm(Request $request): Response
{
if ($this->isCsrfTokenValid('franchise_form', $request->request->get('_token'))) {
if (!$this->hcaptchaService->validateHcaptcha($request)) {
$this->addFlash('error', 'Le captcha n\'a pas été validé, veuillez réessayer.');
return $this->redirectToRoute('franchise');
}
$formData = [
'firstname' => $request->request->get('firstname'),
'lastname' => $request->request->get('lastname'),
'email' => $request->request->get('email'),
'phone' => $request->request->get('phone'),
'postal_code' => $request->request->get('postal_code'),
'city' => $request->request->get('city'),
'favorite' => $request->request->get('favorite'),
'source' => $request->request->get('source'),
'invest' => $request->request->get('invest'),
'location' => $request->request->get('location'),
'date' => $request->request->get('date'),
'operative' => $request->request->get('operative'),
'partner' => $request->request->get('partner'),
'textwhy' => $request->request->get('textwhy'),
'textabout' => $request->request->get('textabout'),
];
$this->franchiseService->handleFranchiseForm($formData);
return $this->render('franchise/confirmation.html.twig');
}
$this->addFlash('error', 'Une erreur est survenue');
return $this->redirectToRoute('franchise');
}
#[Route('/contact', name: 'contact')]
public function contact(): Response
{
$siteKeyHcaptcha = $this->getParameter('hcaptcha_site_key');
return $this->render('vitrine/pages/contact.html.twig', [
'siteKeyHcaptcha' => $siteKeyHcaptcha,
]);
}
#[Route('/contact/form', name: 'contact_form', methods: ['POST'])]
public function contactForm(Request $request, HcaptchaService $hcaptchaService): Response
{
if ($this->isCsrfTokenValid('contact_form', $request->request->get('_token'))) {
// Utilisation du service HcaptchaService pour valider hCaptcha
if (!$hcaptchaService->validateHcaptcha($request)) {
return $this->redirectToRoute('contact');
}
// Si le hCaptcha est validé, continue le traitement du formulaire
$formData = [
'name' => $request->request->get('name'),
'email' => $request->request->get('email'),
'phone' => $request->request->get('phone'),
'city' => $request->request->get('city'),
'message' => $request->request->get('message'),
];
$emailContact = (new TemplatedEmail())
->from(new Address($this->mailSenderAddress, $this->mailSenderName))
->to($this->mailNotifiedAddress)
->subject('Nouvelle demande de contact')
->htmlTemplate('mail/contact/email.html.twig')
->context(['formData' => $formData]);
$this->mailer->send($emailContact);
$this->addFlash('success', 'Votre message a été envoyé.');
return $this->redirectToRoute('contact');
} else {
$this->addFlash('error', 'Bien joué');
return $this->redirectToRoute('contact');
}
}
#[Route('/gallery', name: 'gallery')]
public function gallery(): Response
{
return $this->render('vitrine/pages/gallery.html.twig');
}
#[Route('/legal-terms', name: 'legal-terms')]
public function legalTerms(): Response
{
return $this->render('vitrine/pages/legal_terms.html.twig');
}
#[Route('/privacy-policy', name: 'privacy-policy')]
public function privacyPolicy(): Response
{
return $this->render('vitrine/pages/privacyPolicy.html.twig');
}
#[Route('/cgv', name: 'cgv')]
public function cgv(): Response
{
return $this->render('vitrine/pages/cgv.html.twig');
}
// public function franchiseSubmit(Request $request): Response
// {
// $result = $this->reCaptcha
// ->setExpectedHostname($request->getHost())
// ->verify($request->request->get('g-recaptcha-response'), $request->getClientIp());
//
// if (!$result->isSuccess()) {
// $this->addFlash(
// 'error',
// 'Le captcha n\'a pas été validé, veuillez réessayer.'
// );
// return $this->redirectToRoute('franchise');
// }
//
// $formData = [
// 'firstname' => $request->request->get('firstname'),
// 'lastname' => $request->request->get('lastname'),
// 'email' => $request->request->get('email'),
// 'phone' => $request->request->get('phone'),
// 'postal_code' => $request->request->get('postal-code'),
// 'city' => $request->request->get('city'),
// 'favorite' => $request->request->get('favorite'),
// 'source' => $request->request->get('source'),
// 'invest' => $request->request->get('invest'),
// 'location' => $request->request->get('location'),
// 'date' => $request->request->get('date'),
// 'operative' => $request->request->get('operative'),
// 'partner' => $request->request->get('partner'),
// 'textwhy' => $request->request->get('textwhy'),
// 'textabout' => $request->request->get('textabout'),
// ];
//
// $emailFranchise = (new TemplatedEmail())
// ->from(new Address($this->mailSenderAddress, $this->mailSenderName))
// ->to($this->mailNotifiedAddress)
// ->subject('Nouvelle demande de franchise')
// ->htmlTemplate('mail/franchise/franchise_email.html.twig')
// ->context(['formData' => $formData]);
//
// $this->mailService->sendMail($emailFranchise, null, MailService::TYPE_MAIL_DEMANDE_FRANCHISE);
//
// $emailFranchiseConfirmation = (new TemplatedEmail())
// ->from(new Address("$this->mailSenderAddress", $this->mailSenderName))
// ->to(new Address($formData['email'], $formData['firstname'] . ' ' . $formData['lastname']))
// ->subject('Votre demande de franchise')
// ->htmlTemplate('mail/franchise/franchise_email_confirmation.html.twig')
// ->context(['formData' => $formData]);
//
// $this->mailService->sendMail($emailFranchiseConfirmation, null, MailService::TYPE_MAIL_CONFIRMATION_DEMANDE_FRANCHISE);
//
// return $this->render('vitrine/pages/confirmation/confirmedFranchise.html.twig');
// }
}