[], 'admin_title' => '', 'title' => '', ]; } /** * {@inheritdoc} */ public function prepare(array &$element, WebformSubmissionInterface $webform_submission = NULL) { parent::prepare($element, $webform_submission); $element['#element_validate'][] = [[$this, 'validate']]; } public function calcularDiasTotalSinSuperposiciones($rangosFechas) { $periodos = []; foreach ($rangosFechas as $rango) { $fechaInicio = new DateTime($rango[0]); $fechaFin = new DateTime($rango[1]); $periodos[] = new DatePeriod($fechaInicio, new DateInterval('P1D'), $fechaFin->modify('+1 day')); } $fechasUnicas = []; foreach ($periodos as $periodo) { foreach ($periodo as $fecha) { $fechasUnicas[$fecha->format('d-m-Y')] = 1; } } return count($fechasUnicas); } /** * Webform submission validate handler. */ public function validate(array &$element, FormStateInterface $form_state, array &$complete_form) { // Obtenemos los rangos de fechas del formulario $rangosFechas = $element['#rangos_fechas']; // Llamamos a la función calcularDiasTotalSinSuperposiciones $diasTotalSinSuperposiciones = $this->calcularDiasTotalSinSuperposiciones($rangosFechas); // Aquí puedes agregar mensajes de validación en función del resultado // Por ejemplo, si deseas mostrar un mensaje de error cuando el total de días es menor a un límite específico: //$limiteDias = 10; //if ($diasTotalSinSuperposiciones < $limiteDias) { // $form_state->setError($element, t('La cantidad total de días sin superposiciones es menor a @limiteDias.', ['@limiteDias' => $limiteDias])); //} } }