src/Controller/VitrineController.php line 161

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Service\FranchiseService;
  4. use App\Service\HcaptchaService;
  5. use App\Service\JsonDataService;
  6. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  7. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\Mailer\MailerInterface;
  11. use Symfony\Component\Mime\Address;
  12. use Symfony\Component\Routing\Annotation\Route;
  13. class VitrineController extends AbstractController
  14. {
  15.     public function __construct(
  16.         private JsonDataService $jsonDataService,
  17.         private HcaptchaService $hcaptchaService,
  18.         private MailerInterface $mailer,
  19.         private FranchiseService $franchiseService,
  20.         private string $mailSenderAddress,
  21.         private string $mailSenderName,
  22.         private string $mailNotifiedAddress,
  23.     ) {}
  24.     #[Route('/'name'home')]
  25.     public function index(): Response
  26.     {
  27.         $reviews $this->jsonDataService->getTripAdvisorReviews();
  28.         return $this->render('vitrine/pages/home.html.twig', [
  29.             'reviews' => $reviews,
  30.         ]);
  31.     }
  32.     #[Route('/faq'name'faq')]
  33.     public function faq(): Response
  34.     {
  35.         $faqData $this->jsonDataService->getFAQData();
  36.         $categories array_keys($faqData);
  37.         return $this->render('vitrine/pages/faq.html.twig', [
  38.             'faqData' => $faqData,
  39.             'categories' => $categories,
  40.         ]);
  41.     }
  42.     #[Route('/about'name'about')]
  43.     public function about(): Response
  44.     {
  45.         return $this->render('vitrine/pages/about.html.twig');
  46.     }
  47.     #[Route('/strasbourg'name'franchise_detail')]
  48.     public function franchiseDetail(): Response
  49.     {
  50.         return $this->render('vitrine/pages/franchise_detail.html.twig');
  51.     }
  52.     #[Route('/franchise'name'franchise')]
  53.     public function franchise(Request $request): Response
  54.     {
  55.         $siteKeyHcaptcha $this->getParameter('hcaptcha_site_key');
  56.         return $this->render('vitrine/pages/franchise.html.twig', [
  57.             'siteKeyHcaptcha' => $siteKeyHcaptcha,
  58.         ]);
  59.     }
  60.     #[Route('/franchise/form'name'franchise_form'methods: ['POST'])]
  61.     public function franchiseForm(Request $request): Response
  62.     {
  63.         if ($this->isCsrfTokenValid('franchise_form'$request->request->get('_token'))) {
  64.             if (!$this->hcaptchaService->validateHcaptcha($request)) {
  65.                 $this->addFlash('error''Le captcha n\'a pas été validé, veuillez réessayer.');
  66.                 return $this->redirectToRoute('franchise');
  67.             }
  68.             $formData = [
  69.                 'firstname' => $request->request->get('firstname'),
  70.                 'lastname' => $request->request->get('lastname'),
  71.                 'email' => $request->request->get('email'),
  72.                 'phone' => $request->request->get('phone'),
  73.                 'postal_code' => $request->request->get('postal_code'),
  74.                 'city' => $request->request->get('city'),
  75.                 'favorite' => $request->request->get('favorite'),
  76.                 'source' => $request->request->get('source'),
  77.                 'invest' => $request->request->get('invest'),
  78.                 'location' => $request->request->get('location'),
  79.                 'date' => $request->request->get('date'),
  80.                 'operative' => $request->request->get('operative'),
  81.                 'partner' => $request->request->get('partner'),
  82.                 'textwhy' => $request->request->get('textwhy'),
  83.                 'textabout' => $request->request->get('textabout'),
  84.             ];
  85.             $this->franchiseService->handleFranchiseForm($formData);
  86.             return $this->render('franchise/confirmation.html.twig');
  87.         }
  88.         $this->addFlash('error''Une erreur est survenue');
  89.         return $this->redirectToRoute('franchise');
  90.     }
  91.     #[Route('/contact'name'contact')]
  92.     public function contact(): Response
  93.     {
  94.         $siteKeyHcaptcha $this->getParameter('hcaptcha_site_key');
  95.         return $this->render('vitrine/pages/contact.html.twig', [
  96.             'siteKeyHcaptcha' => $siteKeyHcaptcha,
  97.         ]);
  98.     }
  99.     #[Route('/contact/form'name'contact_form'methods: ['POST'])]
  100.     public function contactForm(Request $requestHcaptchaService $hcaptchaService): Response
  101.     {
  102.         if ($this->isCsrfTokenValid('contact_form'$request->request->get('_token'))) {
  103.             
  104.             // Utilisation du service HcaptchaService pour valider hCaptcha
  105.             if (!$hcaptchaService->validateHcaptcha($request)) {
  106.                 return $this->redirectToRoute('contact');
  107.             }
  108.             // Si le hCaptcha est validé, continue le traitement du formulaire
  109.             $formData = [
  110.                 'name' => $request->request->get('name'),
  111.                 'email' => $request->request->get('email'),
  112.                 'phone' => $request->request->get('phone'),
  113.                 'city' => $request->request->get('city'),
  114.                 'message' => $request->request->get('message'),
  115.             ];
  116.             $emailContact = (new TemplatedEmail())
  117.                 ->from(new Address($this->mailSenderAddress$this->mailSenderName))
  118.                 ->to($this->mailNotifiedAddress)
  119.                 ->subject('Nouvelle demande de contact')
  120.                 ->htmlTemplate('mail/contact/email.html.twig')
  121.                 ->context(['formData' => $formData]);
  122.             $this->mailer->send($emailContact);
  123.             $this->addFlash('success''Votre message a été envoyé.');
  124.             return $this->redirectToRoute('contact');
  125.         } else {
  126.             $this->addFlash('error''Bien joué');
  127.             return $this->redirectToRoute('contact');
  128.         }
  129.     }
  130.     #[Route('/gallery'name'gallery')]
  131.     public function gallery(): Response
  132.     {
  133.         return $this->render('vitrine/pages/gallery.html.twig');
  134.     }
  135.     #[Route('/legal-terms'name'legal-terms')]
  136.     public function legalTerms(): Response
  137.     {
  138.         return $this->render('vitrine/pages/legal_terms.html.twig');
  139.     }
  140.     #[Route('/privacy-policy'name'privacy-policy')]
  141.     public function privacyPolicy(): Response
  142.     {
  143.         return $this->render('vitrine/pages/privacyPolicy.html.twig');
  144.     }
  145.     #[Route('/cgv'name'cgv')]
  146.     public function cgv(): Response
  147.     {
  148.         return $this->render('vitrine/pages/cgv.html.twig');
  149.     }
  150.     //    public function franchiseSubmit(Request $request): Response
  151.     //    {
  152.     //        $result = $this->reCaptcha
  153.     //            ->setExpectedHostname($request->getHost())
  154.     //            ->verify($request->request->get('g-recaptcha-response'), $request->getClientIp());
  155.     //
  156.     //        if (!$result->isSuccess()) {
  157.     //            $this->addFlash(
  158.     //                'error',
  159.     //                'Le captcha n\'a pas été validé, veuillez réessayer.'
  160.     //            );
  161.     //            return $this->redirectToRoute('franchise');
  162.     //        }
  163.     //
  164.     //        $formData = [
  165.     //            'firstname' => $request->request->get('firstname'),
  166.     //            'lastname' => $request->request->get('lastname'),
  167.     //            'email' => $request->request->get('email'),
  168.     //            'phone' => $request->request->get('phone'),
  169.     //            'postal_code' => $request->request->get('postal-code'),
  170.     //            'city' => $request->request->get('city'),
  171.     //            'favorite' => $request->request->get('favorite'),
  172.     //            'source' => $request->request->get('source'),
  173.     //            'invest' => $request->request->get('invest'),
  174.     //            'location' => $request->request->get('location'),
  175.     //            'date' => $request->request->get('date'),
  176.     //            'operative' => $request->request->get('operative'),
  177.     //            'partner' => $request->request->get('partner'),
  178.     //            'textwhy' => $request->request->get('textwhy'),
  179.     //            'textabout' => $request->request->get('textabout'),
  180.     //        ];
  181.     //
  182.     //        $emailFranchise = (new TemplatedEmail())
  183.     //            ->from(new Address($this->mailSenderAddress, $this->mailSenderName))
  184.     //            ->to($this->mailNotifiedAddress)
  185.     //            ->subject('Nouvelle demande de franchise')
  186.     //            ->htmlTemplate('mail/franchise/franchise_email.html.twig')
  187.     //            ->context(['formData' => $formData]);
  188.     //
  189.     //        $this->mailService->sendMail($emailFranchise, null, MailService::TYPE_MAIL_DEMANDE_FRANCHISE);
  190.     //
  191.     //        $emailFranchiseConfirmation = (new TemplatedEmail())
  192.     //            ->from(new Address("$this->mailSenderAddress", $this->mailSenderName))
  193.     //            ->to(new Address($formData['email'], $formData['firstname'] . ' ' . $formData['lastname']))
  194.     //            ->subject('Votre demande de franchise')
  195.     //            ->htmlTemplate('mail/franchise/franchise_email_confirmation.html.twig')
  196.     //            ->context(['formData' => $formData]);
  197.     //
  198.     //        $this->mailService->sendMail($emailFranchiseConfirmation, null, MailService::TYPE_MAIL_CONFIRMATION_DEMANDE_FRANCHISE);
  199.     //
  200.     //        return $this->render('vitrine/pages/confirmation/confirmedFranchise.html.twig');
  201.     //    }
  202. }