You are here

public function MenuSettingsConstraintValidator::validate in Drupal 8

Same name and namespace in other branches
  1. 9 core/modules/menu_ui/src/Plugin/Validation/Constraint/MenuSettingsConstraintValidator.php \Drupal\menu_ui\Plugin\Validation\Constraint\MenuSettingsConstraintValidator::validate()

File

core/modules/menu_ui/src/Plugin/Validation/Constraint/MenuSettingsConstraintValidator.php, line 16

Class

MenuSettingsConstraintValidator
Constraint validator for changing the menu settings in pending revisions.

Namespace

Drupal\menu_ui\Plugin\Validation\Constraint

Code

public function validate($entity, Constraint $constraint) {
  if (isset($entity) && !$entity
    ->isNew() && !$entity
    ->isDefaultRevision()) {
    $defaults = menu_ui_get_menu_link_defaults($entity);

    // If the menu UI entity builder is not present and the menu property has
    // not been set, do not attempt to validate the menu settings since they
    // are not being modified.
    if (!($values = $entity->menu)) {
      return;
    }
    if (trim($values['title']) && !empty($values['menu_parent'])) {
      list($menu_name, $parent) = explode(':', $values['menu_parent'], 2);
      $values['menu_name'] = $menu_name;
      $values['parent'] = $parent;
    }

    // Handle the case when the menu link is deleted in a pending revision.
    if (empty($values['enabled']) && $defaults['entity_id']) {
      $this->context
        ->buildViolation($constraint->messageRemove)
        ->atPath('menu')
        ->setInvalidValue($entity)
        ->addViolation();
    }
    elseif ($defaults['entity_id']) {
      if ($defaults['entity_id'] && $values['menu_name'] != $defaults['menu_name']) {
        $this->context
          ->buildViolation($constraint->messageParent)
          ->atPath('menu.menu_parent')
          ->setInvalidValue($entity)
          ->addViolation();
      }
      elseif (isset($values['parent']) && $values['parent'] != $defaults['parent']) {
        $this->context
          ->buildViolation($constraint->messageParent)
          ->atPath('menu.menu_parent')
          ->setInvalidValue($entity)
          ->addViolation();
      }
      elseif ($values['weight'] != $defaults['weight']) {
        $this->context
          ->buildViolation($constraint->messageWeight)
          ->atPath('menu.weight')
          ->setInvalidValue($entity)
          ->addViolation();
      }
    }
  }
}