class MenuTokenTreeStorage in Menu Token 8
Same name and namespace in other branches
- 9.1.x src/Service/MenuTokenTreeStorage.php \Drupal\menu_token\Service\MenuTokenTreeStorage
Provides a menu tree storage using the database.
Hierarchy
- class \Drupal\Core\Menu\MenuTreeStorage implements MenuTreeStorageInterface
- class \Drupal\menu_token\Service\MenuTokenTreeStorage
Expanded class hierarchy of MenuTokenTreeStorage
1 string reference to 'MenuTokenTreeStorage'
1 service uses MenuTokenTreeStorage
File
- src/
Service/ MenuTokenTreeStorage.php, line 11
Namespace
Drupal\menu_token\ServiceView source
class MenuTokenTreeStorage extends MenuTreeStorage {
/**
* {@inheritdoc}
*/
public function rebuildNonDestructive(array $definitions) {
$links = [];
$children = [];
$top_links = [];
// Fetch the list of existing menus, in case some are not longer populated
// after the rebuild.
$before_menus = $this
->getMenuNames();
if ($definitions) {
foreach ($definitions as $id => $link) {
// Flag this link as discovered, i.e. saved via rebuild().
$link['discovered'] = 1;
// Note: The parent we set here might be just stored in the {menu_tree}
// table, so it will not end up in $top_links. Therefore the later loop
// on the orphan links, will handle those cases.
if (!empty($link['parent'])) {
$children[$link['parent']][$id] = $id;
}
else {
// A top level link - we need them to root our tree.
$top_links[$id] = $id;
$link['parent'] = '';
}
$links[$id] = $link;
}
}
foreach ($top_links as $id) {
$this
->saveRecursive($id, $children, $links);
}
// Handle any children we didn't find starting from top-level links.
foreach ($children as $orphan_links) {
foreach ($orphan_links as $id) {
// Check for a parent that is not loaded above since only internal links
// are loaded above.
$parent = $this
->loadFull($links[$id]['parent']);
// If there is a parent add it to the links to be used in
// ::saveRecursive().
if ($parent) {
$links[$links[$id]['parent']] = $parent;
}
else {
// Force it to the top level.
$links[$id]['parent'] = '';
}
$this
->saveRecursive($id, $children, $links);
}
}
$this
->resetDefinitions();
$affected_menus = $this
->getMenuNames() + $before_menus;
// Invalidate any cache tagged with any menu name.
$cache_tags = Cache::buildTags('config:system.menu', $affected_menus, '.');
$this->cacheTagsInvalidator
->invalidateTags($cache_tags);
$this
->resetDefinitions();
// Every item in the cache bin should have one of the menu cache tags but it
// is not guaranteed, so invalidate everything in the bin.
$this->menuCacheBackend
->invalidateAll();
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
MenuTokenTreeStorage:: |
public | function | ||
MenuTreeStorage:: |
protected | property | The cache tags invalidator. | |
MenuTreeStorage:: |
protected | property | The database connection. | |
MenuTreeStorage:: |
protected | property | List of plugin definition fields. | |
MenuTreeStorage:: |
protected | property | Stores definitions that have already been loaded for better performance. | |
MenuTreeStorage:: |
protected | property | Cache backend instance for the extracted tree data. | |
MenuTreeStorage:: |
protected | property | Additional database connection options to use in queries. | |
MenuTreeStorage:: |
protected | property | List of serialized fields. | |
MenuTreeStorage:: |
protected | property | The database table name. | |
MenuTreeStorage:: |
protected | function | Traverses the menu tree and collects all the route names and definitions. | |
MenuTreeStorage:: |
public | function |
Counts the total number of menu links in one menu or all menus. Overrides MenuTreeStorageInterface:: |
|
MenuTreeStorage:: |
protected | function | Determines fields that are part of the plugin definition. | |
MenuTreeStorage:: |
public | function |
Deletes a menu link definition from the storage. Overrides MenuTreeStorageInterface:: |
|
MenuTreeStorage:: |
protected | function | Prepares the data for calling $this->treeDataRecursive(). | |
MenuTreeStorage:: |
protected | function | Collects all the route names and definitions. | |
MenuTreeStorage:: |
protected | function | Purge menu links from the database. | |
MenuTreeStorage:: |
protected | function | Finds the relative depth of this link's deepest child. | |
MenuTreeStorage:: |
protected | function | Saves a link without clearing caches. | |
MenuTreeStorage:: |
protected | function | Checks if the tree table exists and create it if not. | |
MenuTreeStorage:: |
protected | function | Find any previously discovered menu links that no longer exist. | |
MenuTreeStorage:: |
protected | function | Loads the parent definition if it exists. | |
MenuTreeStorage:: |
public | function |
Loads all the IDs for menu links that are below the given ID. Overrides MenuTreeStorageInterface:: |
|
MenuTreeStorage:: |
public | function |
Finds expanded links in a menu given a set of possible parents. Overrides MenuTreeStorageInterface:: |
|
MenuTreeStorage:: |
public | function |
Returns the used menu names in the tree storage. Overrides MenuTreeStorageInterface:: |
|
MenuTreeStorage:: |
public | function |
Returns all the IDs that represent the path to the root of the tree. Overrides MenuTreeStorageInterface:: |
|
MenuTreeStorage:: |
public | function |
Finds the height of a subtree rooted by the given ID. Overrides MenuTreeStorageInterface:: |
|
MenuTreeStorage:: |
public | function |
Loads a menu link plugin definition from the storage. Overrides MenuTreeStorageInterface:: |
|
MenuTreeStorage:: |
public | function |
Loads all the enabled menu links that are below the given ID. Overrides MenuTreeStorageInterface:: |
|
MenuTreeStorage:: |
public | function |
Loads multiple plugin definitions from the storage based on properties. Overrides MenuTreeStorageInterface:: |
|
MenuTreeStorage:: |
public | function |
Loads multiple plugin definitions from the storage based on route. Overrides MenuTreeStorageInterface:: |
|
MenuTreeStorage:: |
protected | function | Loads all table fields, not just those that are in the plugin definition. | |
MenuTreeStorage:: |
protected | function | Loads all table fields for multiple menu link definitions by ID. | |
MenuTreeStorage:: |
protected | function | Loads links in the given menu, according to the given tree parameters. | |
MenuTreeStorage:: |
public | function |
Loads multiple plugin definitions from the storage. Overrides MenuTreeStorageInterface:: |
|
MenuTreeStorage:: |
public | function |
Loads a subtree rooted by the given ID. Overrides MenuTreeStorageInterface:: |
|
MenuTreeStorage:: |
public | function |
Loads a menu link tree from the storage. Overrides MenuTreeStorageInterface:: |
|
MenuTreeStorage:: |
public | function |
The maximum depth of tree the storage implementation supports. Overrides MenuTreeStorageInterface:: |
|
MenuTreeStorage:: |
constant | The maximum depth of a menu links tree. | ||
MenuTreeStorage:: |
public | function |
Determines whether a specific menu name is used in the tree. Overrides MenuTreeStorageInterface:: |
|
MenuTreeStorage:: |
protected | function | Re-parents a link's children when the link itself is moved. | |
MenuTreeStorage:: |
protected | function | Prepares a link by unserializing values and saving the definition. | |
MenuTreeStorage:: |
protected | function | Fills in all the fields the database save needs, using the link definition. | |
MenuTreeStorage:: |
protected | function | Purges multiple menu links that no longer exist. | |
MenuTreeStorage:: |
public | function |
Rebuilds the stored menu link definitions. Overrides MenuTreeStorageInterface:: |
|
MenuTreeStorage:: |
public | function |
Clears all definitions cached in memory. Overrides MenuTreeStorageInterface:: |
|
MenuTreeStorage:: |
protected | function | Executes a select query while making sure the database table exists. | |
MenuTreeStorage:: |
public | function |
Saves a plugin definition to the storage. Overrides MenuTreeStorageInterface:: |
|
MenuTreeStorage:: |
protected | function | Saves menu links recursively. | |
MenuTreeStorage:: |
protected static | function | Defines the schema for the tree table. | |
MenuTreeStorage:: |
protected | function | Determines serialized fields in the storage. | |
MenuTreeStorage:: |
protected | function | Sets the materialized path field values based on the parent. | |
MenuTreeStorage:: |
protected | function | Builds the data representing a menu tree. | |
MenuTreeStorage:: |
protected | function | Sets has_children for the link's parent if it has visible children. | |
MenuTreeStorage:: |
public | function | Constructs a new \Drupal\Core\Menu\MenuTreeStorage. |