You are here

public static function WebformEmailMultiple::validateWebformEmailMultiple in Webform 8.5

Same name and namespace in other branches
  1. 6.x src/Element/WebformEmailMultiple.php \Drupal\webform\Element\WebformEmailMultiple::validateWebformEmailMultiple()

Webform element validation handler for #type 'webform_email_multiple'.

File

src/Element/WebformEmailMultiple.php, line 54

Class

WebformEmailMultiple
Provides a webform element for entering multiple comma delimited email addresses.

Namespace

Drupal\webform\Element

Code

public static function validateWebformEmailMultiple(&$element, FormStateInterface $form_state, &$complete_form) {
  $value = trim($element['#value']);
  $element['#value'] = $value;
  $form_state
    ->setValueForElement($element, $value);
  if ($value) {
    $values = preg_split('/\\s*,\\s*/', $value);

    // Validate email.
    foreach ($values as $value) {

      // Allow tokens to be included in multiple email list by skipping
      // validation if a token is present.
      if (!empty($element['#allow_tokens'] && preg_match('/\\[.+\\]/', $value))) {
        continue;
      }
      if (!\Drupal::service('email.validator')
        ->isValid($value)) {
        $form_state
          ->setError($element, t('The email address %mail is not valid.', [
          '%mail' => $value,
        ]));
        return;
      }
    }

    // Validate cardinality.
    if ($element['#cardinality'] && count($values) > $element['#cardinality']) {
      if (isset($element['#cardinality_error'])) {
        $form_state
          ->setError($element, $element['#cardinality_error']);
      }
      elseif (isset($element['#title'])) {
        $t_args = [
          '%name' => empty($element['#title']) ? $element['#parents'][0] : $element['#title'],
          '@count' => $element['#cardinality'],
        ];
        $error_message = \Drupal::translation()
          ->formatPlural($element['#cardinality'], '%name: this element cannot hold more than @count value.', '%name: this element cannot hold more than @count values.', $t_args);
        $form_state
          ->setError($element, $error_message);
      }
      else {
        $form_state
          ->setError($element);
      }
    }
  }
}