templates/contact/index.html.twig line 1

  1. {% extends 'basev2.html.twig' %}
  2. {% block stylesheets %}
  3. {% for r in referencements %}
  4.     <meta name="description" content="{{ r.description }}">
  5. {% endfor %}
  6. <link href="{{ asset('assets/images/favicon.ico') }}" rel="icon">
  7. {% endblock %}
  8. {% block body %}
  9. <div class="header">
  10.     <div class="inner-header flex" id="free-quote">
  11.         <center>
  12.             <div class="section-heading wow fadeIn" data-wow-duration="1s" data-wow-delay="0.3s">
  13.                 <br><br><br><br>
  14.                 <h4 style="color: white;" class="center">Je veux en savoir plus, recontactez-moi !</h4>
  15.                 <br><br>
  16.             </div>
  17.         </center>
  18.     </div>
  19.     <div>
  20.         <svg class="waves" xmlns="http://www.w3.org/2000/svg" viewBox="0 24 150 28" preserveAspectRatio="none" shape-rendering="auto">
  21.             <defs>
  22.                 <path id="gentle-wave" d="M-160 44c30 0 58-18 88-18s 58 18 88 18 58-18 88-18 58 18 88 18 v44h-352z" />
  23.             </defs>
  24.             <g class="parallax">
  25.                 <use xlink:href="#gentle-wave" x="48" y="0" fill="rgba(255,255,255,0.7)" />
  26.                 <use xlink:href="#gentle-wave" x="48" y="3" fill="rgba(255,255,255,0.5)" />
  27.                 <use xlink:href="#gentle-wave" x="48" y="5" fill="rgba(255,255,255,0.3)" />
  28.                 <use xlink:href="#gentle-wave" x="48" y="7" fill="#fff" />
  29.             </g>
  30.         </svg>
  31.     </div>
  32. </div>
  33. {% for message in app.flashes('success') %}
  34. <div class="alert me-4 mt-4 colororange">
  35.     <center class="center">{{ message }}</center>
  36. </div>
  37. {% endfor %}
  38. <div id="contact" class="contact-us section mb-150">
  39.     <div class="container">
  40.         <div class="row">
  41.             <div class="col-lg-12 wow fadeInUp" data-wow-duration="0.5s" data-wow-delay="0.25s">
  42.                 {{ form_start(form, {'attr': {'id': 'contact-form', 'enctype': 'multipart/form-data'}}) }}
  43.                 <div class="row">
  44.                     <div class="col-lg-12">
  45.                         <div class="contact-dec">
  46.                             <img src="{{ asset('assets/images/nvimage/contact-FERGUSS.png') }}" alt="">
  47.                         </div>
  48.                     </div>
  49.                     <div class="col-lg-5">
  50.                         <div id="map">
  51.                             <iframe src="https://maps.google.com/maps?width=100%25&amp;height=600&amp;hl=fr&amp;q=8%20zac%20la%20donniere+(Nom%20de%20votre%20%C3%A9tablissement)&amp;t=&amp;z=14&amp;ie=UTF8&amp;iwloc=B&amp;output=embed" width="100%" height="1000px" frameborder="0" style="border:0" allowfullscreen></iframe>
  52.                         </div>
  53.                     </div>
  54.                     <div class="col-lg-7">
  55.                         <div class="fill-form">
  56.                             <div class="row">
  57.                                 <div class="col-lg-12"><fieldset>{{ form_row(form.email) }}</fieldset></div>
  58.                                 <div class="col-lg-6"><fieldset>{{ form_row(form.Nom) }}</fieldset></div>
  59.                                 <div class="col-lg-6"><fieldset>{{ form_row(form.prenom, {'label': 'Prénom'}) }}</fieldset></div>
  60.                                 <div class="col-lg-12"><fieldset>{{ form_row(form.sujet) }}</fieldset></div>
  61.                                 <div class="col-lg-12"><fieldset>{{ form_row(form.message) }}</fieldset></div>
  62.                                 <div class="row">
  63.                                     <div class="col-lg-2"></div>
  64.                                     <div class="col-lg-8">{{ form_row(form.extension) }}</div>
  65.                                 </div>
  66.                                 {# Champ reCAPTCHA hidden #}
  67.                                 {{ form_widget(form.recaptchaToken) }}
  68.                                 <fieldset>{{ form_row(form.submit) }}</fieldset>
  69.                             </div>
  70.                         </div>
  71.                     </div>
  72.                 </div>
  73.                 {{ form_end(form) }}
  74.             </div>
  75.         </div>
  76.     </div>
  77. </div>
  78. {% endblock %}
  79. {% block js_scripts %}
  80. {{ parent() }}
  81. <script src="https://www.google.com/recaptcha/enterprise.js?render={{ google_sitekey }}"></script>
  82. <script>
  83. document.addEventListener('DOMContentLoaded', function () {
  84.     const form = document.getElementById('contact-form');
  85.     if (!form) return;
  86.     form.addEventListener('submit', function (e) {
  87.         e.preventDefault();
  88.         const hiddenInput = document.querySelector('input[name="{{ form.recaptchaToken.vars.full_name }}"]');
  89.         if (!hiddenInput) {
  90.             console.error('[reCAPTCHA] Champ recaptchaToken introuvable.');
  91.             alert('Erreur : reCAPTCHA non initialisé.');
  92.             return;
  93.         }
  94.         if (typeof grecaptcha === 'undefined' || typeof grecaptcha.enterprise === 'undefined') {
  95.             console.error('[reCAPTCHA] grecaptcha.enterprise non chargé.');
  96.             alert('Erreur : reCAPTCHA non chargé.');
  97.             return;
  98.         }
  99.         grecaptcha.enterprise.ready(function () {
  100.             grecaptcha.enterprise.execute('{{ google_sitekey }}', { action: 'LOGIN' })
  101.             .then(function (token) {
  102.                 hiddenInput.value = token; // ✅ token injecté
  103.                 form.submit();             // submit réel après token
  104.             })
  105.             .catch(function (error) {
  106.                 console.error('[reCAPTCHA] Erreur lors de l’exécution :', error);
  107.                 alert('Erreur lors de la validation reCAPTCHA.');
  108.             });
  109.         });
  110.     });
  111. });
  112. </script>
  113. {% endblock %}