NegotiationUrlForm::validateForm

public NegotiationUrlForm::validateForm(array &$form, FormStateInterface $form_state)

Form validation handler.

Parameters

array $form: An associative array containing the structure of the form.

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

Overrides FormBase::validateForm

File

core/modules/language/src/Form/NegotiationUrlForm.php, line 136

Class

NegotiationUrlForm
Configure the URL language negotiation method for this site.

Namespace

Drupal\language\Form

Code

public function validateForm(array &$form, FormStateInterface $form_state) {
  $languages = $this->languageManager->getLanguages();

  // Count repeated values for uniqueness check.
  $count = array_count_values($form_state->getValue('prefix'));
  $default_langcode = $this->config('language.negotiation')->get('selected_langcode');
  if ($default_langcode == LanguageInterface::LANGCODE_SITE_DEFAULT) {
    $default_langcode = $this->languageManager->getDefaultLanguage()->getId();
  }
  foreach ($languages as $langcode => $language) {
    $value = $form_state->getValue(array('prefix', $langcode));
    if ($value === '') {
      if (!($default_langcode == $langcode) && $form_state->getValue('language_negotiation_url_part') == LanguageNegotiationUrl::CONFIG_PATH_PREFIX) {
        // Throw a form error if the prefix is blank for a non-default language,
        // although it is required for selected negotiation type.
        $form_state->setErrorByName("prefix][$langcode", $this->t('The prefix may only be left blank for the <a href=":url">selected detection fallback language.</a>', [
          ':url' => $this->getUrlGenerator()->generate('language.negotiation_selected'),
        ]));
      }
    }
    elseif (strpos($value, '/') !== FALSE) {
      // Throw a form error if the string contains a slash,
      // which would not work.
      $form_state->setErrorByName("prefix][$langcode", $this->t('The prefix may not contain a slash.'));
    }
    elseif (isset($count[$value]) && $count[$value] > 1) {
      // Throw a form error if there are two languages with the same
      // domain/prefix.
      $form_state->setErrorByName("prefix][$langcode", $this->t('The prefix for %language, %value, is not unique.', array('%language' => $language->getName(), '%value' => $value)));
    }
  }

  // Count repeated values for uniqueness check.
  $count = array_count_values($form_state->getValue('domain'));
  foreach ($languages as $langcode => $language) {
    $value = $form_state->getValue(array('domain', $langcode));

    if ($value === '') {
      if ($form_state->getValue('language_negotiation_url_part') == LanguageNegotiationUrl::CONFIG_DOMAIN) {
        // Throw a form error if the domain is blank for a non-default language,
        // although it is required for selected negotiation type.
        $form_state->setErrorByName("domain][$langcode", $this->t('The domain may not be left blank for %language.', array('%language' => $language->getName())));
      }
    }
    elseif (isset($count[$value]) && $count[$value] > 1) {
      // Throw a form error if there are two languages with the same
      // domain/domain.
      $form_state->setErrorByName("domain][$langcode", $this->t('The domain for %language, %value, is not unique.', array('%language' => $language->getName(), '%value' => $value)));
    }
  }

  // Domain names should not contain protocol and/or ports.
  foreach ($languages as $langcode => $language) {
    $value = $form_state->getValue(array('domain', $langcode));
    if (!empty($value)) {
      // Ensure we have exactly one protocol when checking the hostname.
      $host = 'http://' . str_replace(array('http://', 'https://'), '', $value);
      if (parse_url($host, PHP_URL_HOST) != $value) {
        $form_state->setErrorByName("domain][$langcode", $this->t('The domain for %language may only contain the domain name, not a trailing slash, protocol and/or port.', ['%language' => $language->getName()]));
      }
    }
  }

  parent::validateForm($form, $form_state);
}
doc_Drupal
2016-10-29 09:30:06
Comments
Leave a Comment

Please login to continue.