function MenuSettingsConstraintValidator::validate

Same name in other branches
  1. 8.9.x core/modules/menu_ui/src/Plugin/Validation/Constraint/MenuSettingsConstraintValidator.php \Drupal\menu_ui\Plugin\Validation\Constraint\MenuSettingsConstraintValidator::validate()
  2. 10 core/modules/menu_ui/src/Plugin/Validation/Constraint/MenuSettingsConstraintValidator.php \Drupal\menu_ui\Plugin\Validation\Constraint\MenuSettingsConstraintValidator::validate()
  3. 11.x 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'])) {
            [
                $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();
            }
        }
    }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.