templates/guest/index.html.twig line 1

  1. {% extends 'base.html.twig' %}
  2. {% block title %}Registro PBA - Fundación MAPFRE{% endblock %}
  3. {% block javascripts %}
  4. <script src="https://www.google.com/recaptcha/api.js?render={{ site_key }}"></script>
  5. {% endblock %}
  6. {% block body %}
  7.     <div class="publicHeader">
  8.     <h1>Regístrate</h1>
  9.     <h3>Para poder solicitar las ayudas de Fundación MAPFRE debes registrarte a través del siguiente formulario:</h3>
  10.     {# <p><div class="formError">{{ form_errors(guest_form.document_number) }}</div></p> #}
  11.     </div>
  12.     <div class="formRegistro">
  13.         {{ form_start(guest_form) }}
  14.         <div class="row">
  15.            <div class="col-md-6">
  16.             {{ form_row(guest_form.name, {'attr': {'tabindex': '1'}}) }}
  17.             {{ form_row(guest_form.document_type, {'attr': {'tabindex': '3'}}) }}
  18.         </div>
  19.         <div class="col-md-6">
  20.             {{ form_row(guest_form.surname, {'attr': {'tabindex': '2'}}) }}
  21.             {{ form_label(guest_form.document_number) }}
  22.             {{ form_widget(guest_form.document_number, {'attr': {'tabindex': '4'}}) }}
  23.             <div id="documentError" class="formError alert alert-danger mt-1" style="display: none;">{{ form_errors(guest_form.document_number) }}</div>
  24.         </div>
  25.             
  26.         </div>
  27.         <div class="row">
  28.             <div class="col-md-12">
  29.                 
  30.                 {{ form_row(guest_form.email) }}
  31.                 <label for="guest_form_email_confirm">Repetir correo electrónico*</label>
  32.                 <input type="text" id="guest_form_email_confirm" required="required" maxlength="255">
  33.                 <div id="emailError" class="alert alert-danger mt-3" style="display: none;">Los correos electrónicos deben coincidir.</div>
  34.                 <p class="m-3 ms-0">* Campos obligatorios</p>
  35.                 <p>Fundación MAPFRE como responsable del tratamiento utilizará sus datos para la gestión y envío de nuestra revista digital, así como el envío de proyectos sociales que apoyamos, exposiciones y eventos que organizamos, o información de Fundación MAPFRE, envíos que podrán realizarse por medios electrónicos, para lo que podríamos necesitar realizar comunicaciones a terceros por obligación legal y podrán realizarse transferencias de datos a terceros países en los términos señalados en la Política de Privacidad. </p><br>
  36.                 <p>La persona interesada garantiza la exactitud y veracidad de los datos personales facilitados. En caso de que los datos se refieran a terceras personas distintas del interesado/a, garantiza haber informado y recabado el consentimiento con carácter previo a la inclusión de los datos en el presente formulario. </p><br>
  37.                     <p>Podrá ejercitar, en cualquier momento, sus derechos de acceso, rectificación, supresión, limitación, oposición o portabilidad tal y como se indica en el <a href={{ href_p }}> tratamiento de datos personales</a>.</p>
  38.                 <span class="politica">
  39.                     <input type="checkbox" name="aceptar" id="aceptar" value="aceptar" required>
  40.                     <label for="aceptar">Acepto el <a href={{ href_checkbox }}>Tratamiento de datos personales</a>.</label>
  41.                 </span>
  42.                 {{ form_row(guest_form.Enviar) }}
  43.             </div>
  44.         </div>
  45.         <input type="hidden" id="{{ guest_form._token.vars.id }}" name="{{ guest_form._token.vars.full_name }}" value="{{ guest_form._token.vars.value }}">
  46.         <div class="row">
  47.             <div class="col-md-12">
  48.                 {{ form_end(guest_form, {'render_rest': false}) }}
  49.             </div>
  50.         </div>
  51.     </div>
  52. {% endblock %}
  53. {% block extra_js %}
  54. const email = document.querySelector('#guest_form_email');
  55. const emailConfirm = document.querySelector('#guest_form_email_confirm');
  56. const emailError = document.querySelector('#emailError');
  57. const submitButton = document.querySelector('#guest_form_Enviar');
  58. const documentNumber = document.querySelector('#guest_form_document_number');
  59. var documentError = document.getElementById('documentError');
  60. const form = document.querySelector('form[name="guest_form"]');
  61. form.addEventListener('input', lockUnlockSubmitButton);
  62. emailConfirm.addEventListener('paste', function(e) {
  63.   e.preventDefault();
  64.   return false;
  65. });
  66. let emailValidationTimeoutId = null;
  67. function checkEmails() {
  68.   if (emailValidationTimeoutId !== null) {
  69.     clearTimeout(emailValidationTimeoutId); // Limpia el temporizador anterior
  70.   }
  71.   emailValidationTimeoutId = setTimeout(function() {
  72.     if (emailConfirm.value !== '') { // Solo valida si hay algo en el campo de confirmación
  73.       if (email.value !== emailConfirm.value) {
  74.         emailError.style.display = 'block';
  75.         submitButton.disabled = true;
  76.       } else {
  77.         emailError.style.display = 'none';
  78.         submitButton.disabled = false;
  79.       }
  80.     }
  81.     emailValidationTimeoutId = null; // Restablece el temporizador
  82.   }, 1000);
  83. }
  84. email.addEventListener('input', checkEmails);
  85. emailConfirm.addEventListener('input', checkEmails);
  86. document.getElementById('guest_form_document_type').addEventListener('focus', function() {
  87.   this.size = this.options.length;
  88. });
  89. document.getElementById('guest_form_document_type').addEventListener('blur', function() {
  90.   this.size = 0;
  91. });
  92. document.getElementById('guest_form_document_type').addEventListener('change', function() {
  93.     documentError.style.display = 'none';
  94. });
  95. function lockUnlockSubmitButton() {
  96.     var name = document.getElementById('guest_form_name').value;
  97.     var surname = document.getElementById('guest_form_surname').value;
  98.     var email = document.getElementById('guest_form_email').value;
  99.     var emailConfirm = document.getElementById('guest_form_email_confirm').value;
  100.   if (documentError.style.display === 'none' && emailError.style.display === 'none' && name !== '' && surname !== '' && email !== '' && emailConfirm !== '') {
  101.     submitButton.disabled = false;
  102.   } else {
  103.     submitButton.disabled = true;
  104.   }
  105. }
  106. function validateDocumentNumber() {
  107.   var value = documentNumber.value.trim();
  108.   if (value.length === 9 && !isValidDniNie(value)) { // Solo valida si hay 9 caracteres
  109.     documentError.style.display = 'block';
  110.   } else {
  111.     documentError.style.display = 'none';
  112.   }
  113. }
  114. function validateDocumentNumberOnLoad() {
  115.   var value = documentNumber.value.trim();
  116.   if (documentError.innerHTML !== "" && value.length > 0 || !isValidDniNie(value)) { // Valida si hay algún carácter
  117.     documentError.style.display = 'block';
  118.     submitButton.disabled = true;
  119.   } else {
  120.     documentError.style.display = 'none';
  121.     submitButton.disabled = false;
  122.   }
  123. }
  124. documentNumber.addEventListener('input', validateDocumentNumber);
  125. // Validación inmediata al cargar la página si hay contenido en el campo
  126. if (documentNumber.value.trim() !== "") {
  127.   validateDocumentNumberOnLoad();
  128. }
  129. function isValidDniNie(value) {
  130.   var dniPattern = /^\d{8}[A-Za-z]$/;
  131.   if (dniPattern.test(value)) {
  132.     var letters = "TRWAGMYFPDXBNJZSQVHLCKET";
  133.     var number = parseInt(value.substring(0, 8), 10);
  134.     var letter = value.charAt(8).toUpperCase();
  135.     return letter === letters.charAt(number % 23);
  136.   }
  137.   var niePattern = /^[XYZ]\d{7}[A-Za-z]$/;
  138.   if (niePattern.test(value)) {
  139.     var number = value
  140.       .replace('X', '0')
  141.       .replace('Y', '1')
  142.       .replace('Z', '2')
  143.       .substring(0, 8);
  144.     var letter = value.charAt(8).toUpperCase();
  145.     return letter === "TRWAGMYFPDXBNJZSQVHLCKET".charAt(number % 23);
  146.   }
  147.   return false;
  148. }
  149. document.addEventListener('DOMContentLoaded', function() {
  150.   grecaptcha.ready(function() {
  151.     grecaptcha.execute('{{ site_key }}', {action: 'formulario'}).then(function(token) {
  152.       // Añade un campo oculto con el token al formulario
  153.       var form = document.querySelector('form[name="guest_form"]');
  154.       if (form) { 
  155.         var input = document.createElement('input');
  156.         input.type = 'hidden';
  157.         input.name = 'g-recaptcha-response';
  158.         input.value = token;
  159.         form.appendChild(input);
  160.       } else {
  161.         console.error('Formulario no encontrado');
  162.       }
  163.     });
  164.   });
  165. });
  166. {% endblock %}