You are here

public function ManageComponentAttributesForm::validateForm in Layout Builder Component Attributes 1.1.x

Same name and namespace in other branches
  1. 1.2.x src/Form/ManageComponentAttributesForm.php \Drupal\layout_builder_component_attributes\Form\ManageComponentAttributesForm::validateForm()
  2. 1.0.x src/Form/ManageComponentAttributesForm.php \Drupal\layout_builder_component_attributes\Form\ManageComponentAttributesForm::validateForm()

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

src/Form/ManageComponentAttributesForm.php, line 274

Class

ManageComponentAttributesForm
Provides a form for managing block attributes.

Namespace

Drupal\layout_builder_component_attributes\Form

Code

public function validateForm(array &$form, FormStateInterface $form_state) {
  $values = $form_state
    ->getValues();

  // Validate block attributes.
  if (isset($values['block_attributes']['id']) && !$this
    ->validateCssClass($values['block_attributes']['id'])) {
    $form_state
      ->setError($form['block_attributes']['id'], $this
      ->t('Element ID must be a valid CSS ID'));
  }
  if (isset($values['block_attributes']['class'])) {
    $classes = explode(' ', $values['block_attributes']['class']);
    foreach ($classes as $class) {
      if (!$this
        ->validateCssClass($class)) {
        $form_state
          ->setError($form['block_attributes']['class'], $this
          ->t('Classes must be valid CSS classes'));
        break;
      }
    }
  }
  if (isset($values['block_attributes']['style'])) {
    $cssLinter = new Linter();
    $style_validity = $cssLinter
      ->lintString('.selector {' . $values['block_attributes']['style'] . '}');
    if (!$style_validity) {
      $form_state
        ->setError($form['block_attributes']['style'], $this
        ->t('Inline styles must be valid CSS'));
    }
  }
  if (isset($values['block_attributes']['data'])) {
    $data_attributes = preg_split('/\\R/', $values['block_attributes']['data']);
    foreach ($data_attributes as $data_attribute) {
      if (empty($data_attribute)) {
        break;
      }
      $data_attribute = explode('|', $data_attribute);
      if (substr($data_attribute[0], 0, 5) !== "data-") {
        $form_state
          ->setError($form['block_attributes']['data'], $this
          ->t('Data attributes must being with "data-"'));
      }
    }
  }

  // Validate block title attributes.
  if (isset($values['block_title_attributes']['id']) && !$this
    ->validateCssClass($values['block_title_attributes']['id'])) {
    $form_state
      ->setError($form['block_title_attributes']['id'], $this
      ->t('Element ID must be a valid CSS ID'));
  }
  if (isset($values['block_title_attributes']['class'])) {
    $classes = explode(' ', $values['block_title_attributes']['class']);
    foreach ($classes as $class) {
      if (!$this
        ->validateCssClass($class)) {
        $form_state
          ->setError($form['block_title_attributes']['class'], $this
          ->t('Classes must be valid CSS classes'));
        break;
      }
    }
  }
  if (isset($values['block_title_attributes']['style'])) {
    $cssLinter = new Linter();
    $style_validity = $cssLinter
      ->lintString('.selector {' . $values['block_title_attributes']['style'] . '}');
    if (!$style_validity) {
      $form_state
        ->setError($form['block_title_attributes']['style'], $this
        ->t('Inline styles must be valid CSS'));
    }
  }
  if (isset($values['block_title_attributes']['data'])) {
    $data_attributes = preg_split('/\\R/', $values['block_title_attributes']['data']);
    foreach ($data_attributes as $data_attribute) {
      if (empty($data_attribute)) {
        break;
      }
      $data_attribute = explode('|', $data_attribute);
      if (substr($data_attribute[0], 0, 5) !== "data-") {
        $form_state
          ->setError($form['block_title_attributes']['data'], $this
          ->t('Data attributes must being with "data-"'));
      }
    }
  }

  // Validate block content attributes.
  if (isset($values['block_content_attributes']['id']) && !$this
    ->validateCssClass($values['block_content_attributes']['id'])) {
    $form_state
      ->setError($form['block_content_attributes']['id'], $this
      ->t('Element ID must be a valid CSS ID'));
  }
  if (isset($values['block_content_attributes']['class'])) {
    $classes = explode(' ', $values['block_content_attributes']['class']);
    foreach ($classes as $class) {
      if (!$this
        ->validateCssClass($class)) {
        $form_state
          ->setError($form['block_content_attributes']['class'], $this
          ->t('Classes must be valid CSS classes'));
        break;
      }
    }
  }
  if (isset($values['block_content_attributes']['style'])) {
    $cssLinter = new Linter();
    $style_validity = $cssLinter
      ->lintString('.selector {' . $values['block_content_attributes']['style'] . '}');
    if (!$style_validity) {
      $form_state
        ->setError($form['block_content_attributes']['style'], $this
        ->t('Inline styles must be valid CSS'));
    }
  }
  if (isset($values['block_content_attributes']['data'])) {
    $data_attributes = preg_split('/\\R/', $values['block_content_attributes']['data']);
    foreach ($data_attributes as $data_attribute) {
      if (empty($data_attribute)) {
        break;
      }
      $data_attribute = explode('|', $data_attribute);
      if (substr($data_attribute[0], 0, 5) !== "data-") {
        $form_state
          ->setError($form['block_content_attributes']['data'], $this
          ->t('Data attributes must being with "data-"'));
      }
    }
  }
}