public function NegotiationUrlForm::validateForm

Implements \Drupal\Core\Form\FormInterface::validateForm().

Overrides SystemConfigFormBase::validateForm

File

drupal/core/modules/language/lib/Drupal/language/Form/NegotiationUrlForm.php, line 97
Contains \Drupal\language\Form\NegotiationUrlForm.

Class

NegotiationUrlForm
Configure the URL language negotiation method for this site.

Namespace

Drupal\language\Form

Code

public function validateForm(array &$form, array &$form_state) {
  $languages = language_list();

  // Count repeated values for uniqueness check.
  $count = array_count_values($form_state['values']['prefix']);
  foreach ($languages as $langcode => $language) {
    $value = $form_state['values']['prefix'][$langcode];
    if ($value === '') {
      if (!$language->default && $form_state['values']['language_negotiation_url_part'] == LANGUAGE_NEGOTIATION_URL_PREFIX) {

        // Throw a form error if the prefix is blank for a non-default language,
        // although it is required for selected negotiation type.
        form_error($form['prefix'][$langcode], t('The prefix may only be left blank for the default language.'));
      }
    }
    elseif (strpos($value, '/') !== FALSE) {

      // Throw a form error if the string contains a slash,
      // which would not work.
      form_error($form['prefix'][$langcode], 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_error($form['prefix'][$langcode], t('The prefix for %language, %value, is not unique.', array(
        '%language' => $language->name,
        '%value' => $value,
      )));
    }
  }

  // Count repeated values for uniqueness check.
  $count = array_count_values($form_state['values']['domain']);
  foreach ($languages as $langcode => $language) {
    $value = $form_state['values']['domain'][$langcode];
    if ($value === '') {
      if (!$language->default && $form_state['values']['language_negotiation_url_part'] == LANGUAGE_NEGOTIATION_URL_DOMAIN) {

        // Throw a form error if the domain is blank for a non-default language,
        // although it is required for selected negotiation type.
        form_error($form['domain'][$langcode], t('The domain may only be left blank for the default language.'));
      }
    }
    elseif (isset($count[$value]) && $count[$value] > 1) {

      // Throw a form error if there are two languages with the same
      // domain/domain.
      form_error($form['domain'][$langcode], t('The domain for %language, %value, is not unique.', array(
        '%language' => $language->name,
        '%value' => $value,
      )));
    }
  }

  // Domain names should not contain protocol and/or ports.
  foreach ($languages as $langcode => $name) {
    $value = $form_state['values']['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_error($form['domain'][$langcode], t('The domain for %language may only contain the domain name, not a protocol and/or port.', array(
          '%language' => $name,
        )));
      }
    }
  }
  parent::validateForm($form, $form_state);
}