Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x

MenuSettingsConstraintValidator.php

Namespace

Drupal\menu_ui\Plugin\Validation\Constraint

File

core/modules/menu_ui/src/Plugin/Validation/Constraint/MenuSettingsConstraintValidator.php

View source
<?php

namespace Drupal\menu_ui\Plugin\Validation\Constraint;

use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;

/**
 * Constraint validator for changing the menu settings in pending revisions.
 */
class MenuSettingsConstraintValidator extends ConstraintValidator {
    
    /**
     * {@inheritdoc}
     */
    public function validate($entity, Constraint $constraint) : void {
        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();
                }
            }
        }
    }

}

Classes

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

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal