You are here

public static function DateList::validateDatelist in Webform 6.x

Same name and namespace in other branches
  1. 8.5 src/Plugin/WebformElement/DateList.php \Drupal\webform\Plugin\WebformElement\DateList::validateDatelist()

Override validation callback for a datelist element and set #required_error.

Parameters

array $element: The element being processed.

\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.

array $complete_form: The complete form structure.

File

src/Plugin/WebformElement/DateList.php, line 269

Class

DateList
Provides a 'datelist' element.

Namespace

Drupal\webform\Plugin\WebformElement

Code

public static function validateDatelist(&$element, FormStateInterface $form_state, &$complete_form) {
  $has_required_error = !empty($element['#required']) && !empty($element['#required_error']);
  if (!$has_required_error) {
    DatelistElement::validateDatelist($element, $form_state, $complete_form);
    return;
  }

  // Clone the $form_state so that we can capture and
  // set #required_error message.
  // Note: We are not using SubformState because we are just trying clone
  // the $form_state.
  $temp_form_state = clone $form_state;

  // Validate the date list element.
  DatelistElement::validateDatelist($element, $temp_form_state, $complete_form);

  // Copy $temp_form_state errors to $form_state error and alter
  // override default required error message is applicable.
  $original_errors = $form_state
    ->getErrors();
  $errors = $temp_form_state
    ->getErrors();
  foreach ($errors as $name => $message) {
    if (empty($original_errors[$name])) {
      if ($message instanceof TranslatableMarkup && $message
        ->getUntranslatedString() === "The %field date is required.") {
        $message = $element['#required_error'];
      }
      $form_state
        ->setErrorByName($name, $message);
    }
  }
}