You are here

protected function WebformEntityElementsValidator::validateNames in Webform 6.x

Same name and namespace in other branches
  1. 8.5 src/WebformEntityElementsValidator.php \Drupal\webform\WebformEntityElementsValidator::validateNames()

Validate elements names.

Return value

array|null If not valid, an array of error messages.

1 call to WebformEntityElementsValidator::validateNames()
WebformEntityElementsValidator::validate in src/WebformEntityElementsValidator.php
Validate webform elements.

File

src/WebformEntityElementsValidator.php, line 269

Class

WebformEntityElementsValidator
Webform elements validator.

Namespace

Drupal\webform

Code

protected function validateNames() {

  // @see \Drupal\webform_ui\Form\WebformUiElementFormBase::buildForm
  $machine_name_pattern = $this->configFactory
    ->get('webform.settings')
    ->get('element.machine_name_pattern') ?: 'a-z0-9_';
  switch ($machine_name_pattern) {
    case 'a-z0-9_':
      $machine_name_requirement = $this
        ->t('lowercase letters, numbers, and underscores');
      break;
    case 'a-zA-Z0-9_':
      $machine_name_requirement = $this
        ->t('letters, numbers, and underscores');
      break;
    case 'a-z0-9_-':
      $machine_name_requirement = $this
        ->t('lowercase letters, numbers, underscores, and dashes');
      break;
    case 'a-zA-Z0-9_-':
      $machine_name_requirement = $this
        ->t('letters, numbers, underscores, and dashes');
      break;
  }
  $messages = [];
  foreach ($this->elementKeys as $name) {
    if (!preg_match('/^[' . $machine_name_pattern . ']+$/', $name)) {
      $line_numbers = $this
        ->getLineNumbers('/^\\s*(["\']?)' . preg_quote($name, '/') . '\\1\\s*:/');
      $t_args = [
        '%name' => $name,
        '@line_number' => WebformArrayHelper::toString($line_numbers),
        '@requirement' => $machine_name_requirement,
      ];
      $messages[] = $this
        ->t('The element key %name on line @line_number must contain only @requirement.', $t_args);
    }
    elseif (in_array($name, static::$reservedNames)) {
      $line_numbers = $this
        ->getLineNumbers('/^\\s*(["\']?)' . preg_quote($name, '/') . '\\1\\s*:/');
      $t_args = [
        '%name' => $name,
        '@line_number' => WebformArrayHelper::toString($line_numbers),
      ];
      $messages[] = $this
        ->t('The element key %name on line @line_number is a reserved key.', $t_args);
    }
  }
  return $messages;
}