use Drupal\Core\Breadcrumb\Breadcrumb;
use Drupal\Core\Cache\CacheableMetadata;
-use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Block\BlockPluginInterface;
use Drupal\Core\Link;
use Drupal\Core\Menu\MenuLinkInterface;
* @deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.0. Use
* \Drupal\Core\Config\Entity\ConfigEntityStorage::MAX_ID_LENGTH because the
* menu name is a configuration entity ID.
+ *
+ * @see https://www.drupal.org/node/2831620
*/
const MENU_MAX_MENU_NAME_LENGTH_UI = 27;
->setLinkTemplate('edit-form', '/admin/structure/menu/manage/{menu}')
->setLinkTemplate('add-link-form', '/admin/structure/menu/manage/{menu}/add')
->setLinkTemplate('collection', '/admin/structure/menu');
-}
-
-/**
- * Implements hook_ENTITY_TYPE_insert( for menu entities.
- */
-function menu_ui_menu_insert(Menu $menu) {
- menu_cache_clear_all();
- // Invalidate the block cache to update menu-based derivatives.
- if (\Drupal::moduleHandler()->moduleExists('block')) {
- \Drupal::service('plugin.manager.block')->clearCachedDefinitions();
- }
-}
-
-/**
- * Implements hook_ENTITY_TYPE_update() for menu entities.
- */
-function menu_ui_menu_update(Menu $menu) {
- menu_cache_clear_all();
- // Invalidate the block cache to update menu-based derivatives.
- if (\Drupal::moduleHandler()->moduleExists('block')) {
- \Drupal::service('plugin.manager.block')->clearCachedDefinitions();
- }
-}
-
-/**
- * Implements hook_ENTITY_TYPE_predelete() for menu entities.
- */
-function menu_ui_menu_predelete(Menu $menu) {
- // Delete all links from the menu.
- /** @var \Drupal\Core\Menu\MenuLinkManagerInterface $menu_link_manager */
- $menu_link_manager = \Drupal::service('plugin.manager.menu.link');
- $menu_link_manager->deleteLinksInMenu($menu->id());
-}
-
-/**
- * Implements hook_ENTITY_TYPE_delete() for menu entities.
- */
-function menu_ui_menu_delete(Menu $menu) {
- menu_cache_clear_all();
- // Invalidate the block cache to update menu-based derivatives.
- if (\Drupal::moduleHandler()->moduleExists('block')) {
- \Drupal::service('plugin.manager.block')->clearCachedDefinitions();
+ if (isset($entity_types['node'])) {
+ $entity_types['node']->addConstraint('MenuSettings', []);
}
}
$entity->save();
}
-/**
- * Implements hook_ENTITY_TYPE_predelete() for node entities.
- */
-function menu_ui_node_predelete(EntityInterface $node) {
- // Delete all MenuLinkContent links that point to this node.
- /** @var \Drupal\Core\Menu\MenuLinkManagerInterface $menu_link_manager */
- $menu_link_manager = \Drupal::service('plugin.manager.menu.link');
- $result = $menu_link_manager->loadLinksByRoute('entity.node.canonical', ['node' => $node->id()]);
-
- if (!empty($result)) {
- foreach ($result as $id => $instance) {
- if ($instance->isDeletable() && strpos($id, 'menu_link_content:') === 0) {
- $instance->deleteLink();
- }
- }
- }
-}
-
/**
* Returns the definition for a menu link for the given node.
*
'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(),
// definition.
$field_definitions = \Drupal::entityManager()->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,
$node_type = $node->type->entity;
/** @var \Drupal\Core\Menu\MenuParentFormSelectorInterface $menu_parent_selector */
$menu_parent_selector = \Drupal::service('menu.parent_form_selector');
- $menu_names = menu_ui_get_menus();
- $type_menus = $node_type->getThirdPartySetting('menu_ui', 'available_menus', ['main']);
+ $type_menus_ids = $node_type->getThirdPartySetting('menu_ui', 'available_menus', ['main']);
+ if (empty($type_menus_ids)) {
+ return;
+ }
+ /** @var \Drupal\system\MenuInterface[] $type_menus */
+ $type_menus = Menu::loadMultiple($type_menus_ids);
$available_menus = [];
foreach ($type_menus as $menu) {
- $available_menus[$menu] = $menu_names[$menu];
+ $available_menus[$menu->id()] = $menu->label();
}
if ($defaults['id']) {
$default = $defaults['menu_name'] . ':' . $defaults['parent'];
];
$form['menu']['link']['description'] = [
- '#type' => 'textarea',
+ '#type' => 'textfield',
'#title' => t('Description'),
'#default_value' => $defaults['description'],
- '#rows' => 1,
'#description' => t('Shown when hovering over the menu link.'),
+ '#maxlength' => $defaults['description_max_length'],
];
$form['menu']['link']['menu_parent'] = $parent_element;
$form['actions'][$action]['#submit'][] = 'menu_ui_form_node_form_submit';
}
}
+
+ $form['#entity_builders'][] = 'menu_ui_node_builder';
+}
+
+/**
+ * Entity form builder to add the menu information to the node.
+ */
+function menu_ui_node_builder($entity_type, NodeInterface $entity, &$form, FormStateInterface $form_state) {
+ $entity->menu = $form_state->getValue('menu');
}
/**
}
}
-
/**
* Implements hook_system_breadcrumb_alter().
*/