' . t('About') . ''; $output .= '

' . t('The Menu Link module allows users to create menu links. It is required by the Menu UI module, which provides an interface for managing menus. See the Menu UI module help page for more information.', array('!menu-help' => \Drupal::url('help.page', array('name' => 'menu_ui')))) . '

'; return $output; } } /** * Entity URI callback. * * @param \Drupal\menu_link\Entity\MenuLink $menu_link * A menu link entity. */ function menu_link_uri(MenuLink $menu_link) { return new Url($menu_link->route_name, $menu_link->route_parameters); } /** * Loads a menu link entity. * * This function should never be called from within node_load() or any other * function used as a menu object load function since an infinite recursion may * occur. * * @param int $mlid * The menu link ID. * @param bool $reset * (optional) Whether to reset the menu_link_load_multiple() cache. * * @return \Drupal\menu_link\Entity\MenuLink|null * A menu link entity, or NULL if there is no entity with the given ID. * * @deprecated in Drupal 8.x, will be removed before Drupal 9.0. * Use \Drupal\menu_link\Entity\MenuLink::load(). */ function menu_link_load($mlid = NULL, $reset = FALSE) { if ($reset) { \Drupal::entityManager()->getStorage('menu_link')->resetCache(array($mlid)); } return MenuLink::load($mlid); } /** * Loads menu link entities from the database. * * @param array $mlids * (optional) An array of entity IDs. If omitted, all entities are loaded. * @param bool $reset * (optional) Whether to reset the internal cache. * * @return array<\Drupal\menu_link\Entity\MenuLink> * An array of menu link entities indexed by entity IDs. * * @see menu_link_load() * @see entity_load_multiple() * * @deprecated in Drupal 8.x, will be removed before Drupal 9.0. * Use \Drupal\menu_link\Entity\MenuLink::loadMultiple(). */ function menu_link_load_multiple(array $mlids = NULL, $reset = FALSE) { if ($reset) { \Drupal::entityManager()->getStorage('menu_link')->resetCache($mlids); } return MenuLink::loadMultiple($mlids); } /** * Deletes a menu link. * * @param int $mlid * The menu link ID. * * @see menu_link_delete_multiple() */ function menu_link_delete($mlid) { menu_link_delete_multiple(array($mlid)); } /** * Deletes multiple menu links. * * @param array $mlids * An array of menu link IDs. * @param bool $force * (optional) Forces deletion. Internal use only, setting to TRUE is * discouraged. Defaults to FALSE. * @param bool $prevent_reparenting * (optional) Disables the re-parenting logic from the deletion process. * Defaults to FALSE. */ function menu_link_delete_multiple(array $mlids, $force = FALSE, $prevent_reparenting = FALSE) { if (!$mlids) { // If no IDs or invalid IDs were passed, do nothing. return; } $controller = \Drupal::entityManager() ->getStorage('menu_link'); if (!$force) { $entity_query = \Drupal::entityQuery('menu_link'); $group = $entity_query->orConditionGroup() ->condition('module', 'system', '<>') ->condition('updated', 0, '<>'); $entity_query->condition('mlid', $mlids, 'IN'); $entity_query->condition($group); $result = $entity_query->execute(); $entities = $controller->loadMultiple($result); } else { $entities = $controller->loadMultiple($mlids); } $controller->setPreventReparenting($prevent_reparenting); $controller->delete($entities); } /** * Saves a menu link. * * After calling this function, rebuild the menu cache using * menu_cache_clear_all(). * * @param \Drupal\menu_link\Entity\MenuLink $menu_link * The menu link entity to be saved. * * @return int|bool * Returns SAVED_NEW or SAVED_UPDATED if the save operation succeeded, or * FALSE if it failed. */ function menu_link_save(MenuLink $menu_link) { return $menu_link->save(); } /** * Inserts, updates, enables, disables, or deletes an uncustomized menu link. * * @param string $module * The name of the module that owns the link. * @param string $op * Operation to perform: insert, update, enable, disable, or delete. * @param string $link_path * The path this link points to. * @param string $link_title * (optional) Title of the link to insert or new title to update the link to. * Unused for delete. Defaults to NULL. * * @return integer|null * The insert op returns the mlid of the new item. Others op return NULL. */ function menu_link_maintain($module, $op, $link_path, $link_title = NULL) { $menu_link_controller = \Drupal::entityManager() ->getStorage('menu_link'); switch ($op) { case 'insert': $menu_link = entity_create('menu_link', array( 'link_title' => $link_title, 'link_path' => $link_path, 'module' => $module,) ); return $menu_link->save(); case 'update': $menu_links = entity_load_multiple_by_properties('menu_link', array('link_path' => $link_path, 'module' => $module, 'customized' => 0)); foreach ($menu_links as $menu_link) { $menu_link->original = clone $menu_link; if (isset($link_title)) { $menu_link->link_title = $link_title; } $menu_link_controller->save($menu_link); } break; case 'enable': case 'disable': $menu_links = entity_load_multiple_by_properties('menu_link', array('link_path' => $link_path, 'module' => $module, 'customized' => 0)); foreach ($menu_links as $menu_link) { $menu_link->original = clone $menu_link; $menu_link->hidden = ($op == 'disable' ? 1 : 0); $menu_link->customized = 1; if (isset($link_title)) { $menu_link->link_title = $link_title; } $menu_link_controller->save($menu_link); } break; case 'delete': $result = \Drupal::entityQuery('menu_link')->condition('link_path', $link_path)->execute(); if (!empty($result)) { menu_link_delete_multiple($result); } break; } } /** * Implements hook_system_breadcrumb_alter(). */ function menu_link_system_breadcrumb_alter(array &$breadcrumb, array $attributes, array $context) { // Custom breadcrumb behavior for editing menu links, we append a link to // the menu in which the link is found. if (!empty($attributes[RouteObjectInterface::ROUTE_NAME]) && $attributes[RouteObjectInterface::ROUTE_NAME] == 'menu_ui.link_edit' && !empty($attributes['menu_link'])) { $menu_link = $attributes['menu_link']; if (($menu_link instanceof MenuLinkInterface) && !$menu_link->isNew()) { // Add a link to the menu admin screen. $menu = entity_load('menu', $menu_link->menu_name); $breadcrumb[] = Drupal::l($menu->label(), 'menu_ui.menu_edit', array('menu' => $menu->id)); } } }