198 lines
5.7 KiB
Plaintext
198 lines
5.7 KiB
Plaintext
<?php
|
|
|
|
/**
|
|
* @file
|
|
* Enables users to create menu links.
|
|
*/
|
|
|
|
use Drupal\menu_link\Entity\MenuLink;
|
|
|
|
function menu_link_help($path, $arg) {
|
|
switch ($path) {
|
|
case 'admin/help#menu_link':
|
|
$output = '';
|
|
$output .= '<h3>' . t('About') . '</h3>';
|
|
$output .= '<p>' . t('The Menu Link module allows users to create menu links. It is required by the Menu module, which provides an interface for managing menus. See the <a href="@menu-help">Menu module help page</a> for more information.', array('@menu-help' => url('admin/help/menu'))) . '</p>';
|
|
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 array(
|
|
'path' => $menu_link->link_path,
|
|
);
|
|
}
|
|
|
|
/**
|
|
* 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.
|
|
*/
|
|
function menu_link_load($mlid = NULL, $reset = FALSE) {
|
|
return entity_load('menu_link', $mlid, $reset);
|
|
}
|
|
|
|
/**
|
|
* 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()
|
|
*/
|
|
function menu_link_load_multiple(array $mlids = NULL, $reset = FALSE) {
|
|
return entity_load_multiple('menu_link', $mlids, $reset);
|
|
}
|
|
|
|
/**
|
|
* 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()
|
|
->getStorageController('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()
|
|
->getStorageController('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;
|
|
}
|
|
}
|