function menu_ui_get_menu_link_defaults

Same name and namespace in other branches
  1. 9 core/modules/menu_ui/menu_ui.module \menu_ui_get_menu_link_defaults()
  2. 8.9.x core/modules/menu_ui/menu_ui.module \menu_ui_get_menu_link_defaults()
  3. 10 core/modules/menu_ui/menu_ui.module \menu_ui_get_menu_link_defaults()

Returns the definition for a menu link for the given node.

Parameters

\Drupal\node\NodeInterface $node: The node entity.

Return value

array An array that contains default values for the menu link form.

2 calls to menu_ui_get_menu_link_defaults()
MenuSettingsConstraintValidator::validate in core/modules/menu_ui/src/Plugin/Validation/Constraint/MenuSettingsConstraintValidator.php
menu_ui_form_node_form_alter in core/modules/menu_ui/menu_ui.module
Implements hook_form_BASE_FORM_ID_alter() for \Drupal\node\NodeForm.

File

core/modules/menu_ui/menu_ui.module, line 138

Code

function menu_ui_get_menu_link_defaults(NodeInterface $node) {
    // Prepare the definition for the edit form.
    
    /** @var \Drupal\node\NodeTypeInterface $node_type */
    $node_type = $node->type->entity;
    $menu_name = strtok($node_type->getThirdPartySetting('menu_ui', 'parent', 'main:'), ':');
    $defaults = FALSE;
    if ($node->id()) {
        $id = FALSE;
        // Give priority to the default menu
        $type_menus = $node_type->getThirdPartySetting('menu_ui', 'available_menus', [
            'main',
        ]);
        if (in_array($menu_name, $type_menus)) {
            $query = \Drupal::entityQuery('menu_link_content')->accessCheck(TRUE)
                ->condition('link.uri', 'entity:node/' . $node->id())
                ->condition('menu_name', $menu_name)
                ->sort('id', 'ASC')
                ->range(0, 1);
            $result = $query->execute();
            $id = !empty($result) ? reset($result) : FALSE;
        }
        // Check all allowed menus if a link does not exist in the default menu.
        if (!$id && !empty($type_menus)) {
            $query = \Drupal::entityQuery('menu_link_content')->accessCheck(TRUE)
                ->condition('link.uri', 'entity:node/' . $node->id())
                ->condition('menu_name', array_values($type_menus), 'IN')
                ->sort('id', 'ASC')
                ->range(0, 1);
            $result = $query->execute();
            $id = !empty($result) ? reset($result) : FALSE;
        }
        if ($id) {
            $menu_link = MenuLinkContent::load($id);
            $menu_link = \Drupal::service('entity.repository')->getTranslationFromContext($menu_link);
            $defaults = [
                'entity_id' => $menu_link->id(),
                'id' => $menu_link->getPluginId(),
                'title' => $menu_link->getTitle(),
                'title_max_length' => $menu_link->getFieldDefinitions()['title']
                    ->getSetting('max_length'),
                'description' => $menu_link->getDescription(),
                'description_max_length' => $menu_link->getFieldDefinitions()['description']
                    ->getSetting('max_length'),
                'menu_name' => $menu_link->getMenuName(),
                'parent' => $menu_link->getParentId(),
                'weight' => $menu_link->getWeight(),
            ];
        }
    }
    if (!$defaults) {
        // Get the default max_length of a menu link title from the base field
        // definition.
        $field_definitions = \Drupal::service('entity_field.manager')->getBaseFieldDefinitions('menu_link_content');
        $max_length = $field_definitions['title']->getSetting('max_length');
        $description_max_length = $field_definitions['description']->getSetting('max_length');
        $defaults = [
            'entity_id' => 0,
            'id' => '',
            'title' => '',
            'title_max_length' => $max_length,
            'description' => '',
            'description_max_length' => $description_max_length,
            'menu_name' => $menu_name,
            'parent' => '',
            'weight' => 0,
        ];
    }
    return $defaults;
}

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