class WorkspacesMenuTreeStorage
Same name in other branches
- 10 core/modules/workspaces/src/WorkspacesMenuTreeStorage.php \Drupal\workspaces\WorkspacesMenuTreeStorage
Overrides the default menu storage to provide workspace-specific menu links.
@internal
Hierarchy
- class \Drupal\Core\Menu\MenuTreeStorage implements \Drupal\Core\Menu\MenuTreeStorageInterface uses \Drupal\Core\Menu\MenuLinkFieldDefinitions
- class \Drupal\workspaces\WorkspacesMenuTreeStorage extends \Drupal\Core\Menu\MenuTreeStorage
Expanded class hierarchy of WorkspacesMenuTreeStorage
1 string reference to 'WorkspacesMenuTreeStorage'
- workspaces.services.yml in core/
modules/ workspaces/ workspaces.services.yml - core/modules/workspaces/workspaces.services.yml
1 service uses WorkspacesMenuTreeStorage
- workspaces.menu.tree_storage in core/
modules/ workspaces/ workspaces.services.yml - Drupal\workspaces\WorkspacesMenuTreeStorage
File
-
core/
modules/ workspaces/ src/ WorkspacesMenuTreeStorage.php, line 17
Namespace
Drupal\workspacesView source
class WorkspacesMenuTreeStorage extends CoreMenuTreeStorage {
/**
* WorkspacesMenuTreeStorage constructor.
*
* @param \Drupal\workspaces\WorkspaceManagerInterface $workspaceManager
* The workspace manager service.
* @param \Drupal\workspaces\WorkspaceAssociationInterface $workspaceAssociation
* The workspace association service.
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entityTypeManager
* The entity type manager.
* @param \Drupal\Core\Database\Connection $connection
* A Database connection to use for reading and writing configuration data.
* @param \Drupal\Core\Cache\CacheBackendInterface $menu_cache_backend
* Cache backend instance for the extracted tree data.
* @param \Drupal\Core\Cache\CacheTagsInvalidatorInterface $cache_tags_invalidator
* The cache tags invalidator.
* @param string $table
* A database table name to store configuration data in.
* @param array $options
* (optional) Any additional database connection options to use in queries.
*/
public function __construct(WorkspaceManagerInterface $workspaceManager, WorkspaceAssociationInterface $workspaceAssociation, EntityTypeManagerInterface $entityTypeManager, Connection $connection, CacheBackendInterface $menu_cache_backend, CacheTagsInvalidatorInterface $cache_tags_invalidator, string $table, array $options = []) {
parent::__construct($connection, $menu_cache_backend, $cache_tags_invalidator, $table, $options);
}
/**
* {@inheritdoc}
*/
public function loadTreeData($menu_name, MenuTreeParameters $parameters) {
// Add the active workspace as a menu tree condition parameter in order to
// include it in the cache ID.
if ($active_workspace = $this->workspaceManager
->getActiveWorkspace()) {
$parameters->conditions['workspace'] = $active_workspace->id();
}
return parent::loadTreeData($menu_name, $parameters);
}
/**
* {@inheritdoc}
*/
protected function loadLinks($menu_name, MenuTreeParameters $parameters) {
$links = parent::loadLinks($menu_name, $parameters);
// Replace the menu link plugin definitions with workspace-specific ones.
if ($active_workspace = $this->workspaceManager
->getActiveWorkspace()) {
$tracked_revisions = $this->workspaceAssociation
->getTrackedEntities($active_workspace->id());
if (isset($tracked_revisions['menu_link_content'])) {
/** @var \Drupal\menu_link_content\MenuLinkContentInterface[] $workspace_revisions */
$workspace_revisions = $this->entityTypeManager
->getStorage('menu_link_content')
->loadMultipleRevisions(array_keys($tracked_revisions['menu_link_content']));
foreach ($workspace_revisions as $workspace_revision) {
if (isset($links[$workspace_revision->getPluginId()])) {
$pending_plugin_definition = $workspace_revision->getPluginDefinition();
$links[$workspace_revision->getPluginId()] = [
'title' => serialize($pending_plugin_definition['title']),
'description' => serialize($pending_plugin_definition['description']),
'enabled' => (string) $pending_plugin_definition['enabled'],
'url' => $pending_plugin_definition['url'],
'route_name' => $pending_plugin_definition['route_name'],
'route_parameters' => serialize($pending_plugin_definition['route_parameters']),
'options' => serialize($pending_plugin_definition['options']),
] + $links[$workspace_revision->getPluginId()];
}
}
}
}
return $links;
}
}
Members
Title Sort descending | Modifiers | Object type | Summary | Overriden Title |
---|---|---|---|---|
MenuLinkFieldDefinitions::$defaults | protected | property | Provides some default values for the definition of all menu link plugins. | |
MenuTreeStorage::$cacheTagsInvalidator | protected | property | The cache tags invalidator. | |
MenuTreeStorage::$connection | protected | property | The database connection. | |
MenuTreeStorage::$definitions | protected | property | Stores definitions that have already been loaded for better performance. | |
MenuTreeStorage::$menuCacheBackend | protected | property | Cache backend instance for the extracted tree data. | |
MenuTreeStorage::$options | protected | property | Additional database connection options to use in queries. | |
MenuTreeStorage::$serializedFields | protected | property | List of serialized fields. | |
MenuTreeStorage::$table | protected | property | The database table name. | |
MenuTreeStorage::collectRoutesAndDefinitions | protected | function | Traverses the menu tree and collects all the route names and definitions. | |
MenuTreeStorage::countMenuLinks | public | function | Counts the total number of menu links in one menu or all menus. | Overrides MenuTreeStorageInterface::countMenuLinks |
MenuTreeStorage::definitionFields | protected | function | Determines fields that are part of the plugin definition. | |
MenuTreeStorage::delete | public | function | Deletes a menu link definition from the storage. | Overrides MenuTreeStorageInterface::delete |
MenuTreeStorage::doBuildTreeData | protected | function | Prepares the data for calling $this->treeDataRecursive(). | |
MenuTreeStorage::doCollectRoutesAndDefinitions | protected | function | Collects all the route names and definitions. | |
MenuTreeStorage::doDeleteMultiple | protected | function | Purge menu links from the database. | |
MenuTreeStorage::doFindChildrenRelativeDepth | protected | function | Finds the relative depth of this link's deepest child. | |
MenuTreeStorage::doSave | protected | function | Saves a link without clearing caches. | |
MenuTreeStorage::ensureTableExists | protected | function | Checks if the tree table exists and create it if not. | |
MenuTreeStorage::findNoLongerExistingLinks | protected | function | Find any previously discovered menu links that no longer exist. | |
MenuTreeStorage::findParent | protected | function | Loads the parent definition if it exists. | |
MenuTreeStorage::getAllChildIds | public | function | Loads all the IDs for menu links that are below the given ID. | Overrides MenuTreeStorageInterface::getAllChildIds |
MenuTreeStorage::getExpanded | public | function | Finds expanded links in a menu given a set of possible parents. | Overrides MenuTreeStorageInterface::getExpanded |
MenuTreeStorage::getMenuNames | public | function | Returns the used menu names in the tree storage. | Overrides MenuTreeStorageInterface::getMenuNames |
MenuTreeStorage::getRootPathIds | public | function | Returns all the IDs that represent the path to the root of the tree. | Overrides MenuTreeStorageInterface::getRootPathIds |
MenuTreeStorage::getSubtreeHeight | public | function | Finds the height of a subtree rooted by the given ID. | Overrides MenuTreeStorageInterface::getSubtreeHeight |
MenuTreeStorage::load | public | function | Loads a menu link plugin definition from the storage. | Overrides MenuTreeStorageInterface::load |
MenuTreeStorage::loadAllChildren | public | function | Loads all the enabled menu links that are below the given ID. | Overrides MenuTreeStorageInterface::loadAllChildren |
MenuTreeStorage::loadByProperties | public | function | Loads multiple plugin definitions from the storage based on properties. | Overrides MenuTreeStorageInterface::loadByProperties |
MenuTreeStorage::loadByRoute | public | function | Loads multiple plugin definitions from the storage based on route. | Overrides MenuTreeStorageInterface::loadByRoute |
MenuTreeStorage::loadFull | protected | function | Loads all table fields, not just those that are in the plugin definition. | |
MenuTreeStorage::loadFullMultiple | protected | function | Loads all table fields for multiple menu link definitions by ID. | |
MenuTreeStorage::loadMultiple | public | function | Loads multiple plugin definitions from the storage. | Overrides MenuTreeStorageInterface::loadMultiple |
MenuTreeStorage::loadSubtreeData | public | function | Loads a subtree rooted by the given ID. | Overrides MenuTreeStorageInterface::loadSubtreeData |
MenuTreeStorage::maxDepth | public | function | The maximum depth of tree the storage implementation supports. | Overrides MenuTreeStorageInterface::maxDepth |
MenuTreeStorage::MAX_DEPTH | constant | The maximum depth of a menu links tree. | ||
MenuTreeStorage::menuNameInUse | public | function | Determines whether a specific menu name is used in the tree. | Overrides MenuTreeStorageInterface::menuNameInUse |
MenuTreeStorage::moveChildren | protected | function | Re-parents a link's children when the link itself is moved. | |
MenuTreeStorage::prepareLink | protected | function | Prepares a link by unserializing values and saving the definition. | |
MenuTreeStorage::preSave | protected | function | Fills in all the fields the database save needs, using the link definition. | |
MenuTreeStorage::purgeMultiple | protected | function | Purges multiple menu links that no longer exist. | |
MenuTreeStorage::rebuild | public | function | Rebuilds the stored menu link definitions. | Overrides MenuTreeStorageInterface::rebuild |
MenuTreeStorage::resetDefinitions | public | function | Clears all definitions cached in memory. | Overrides MenuTreeStorageInterface::resetDefinitions |
MenuTreeStorage::safeExecuteSelect | protected | function | Executes a select query while making sure the database table exists. | |
MenuTreeStorage::save | public | function | Saves a plugin definition to the storage. | Overrides MenuTreeStorageInterface::save |
MenuTreeStorage::saveRecursive | protected | function | Saves menu links recursively. | |
MenuTreeStorage::schemaDefinition | protected static | function | Defines the schema for the tree table. | |
MenuTreeStorage::serializedFields | protected | function | Determines serialized fields in the storage. | |
MenuTreeStorage::setParents | protected | function | Sets the materialized path field values based on the parent. | |
MenuTreeStorage::treeDataRecursive | protected | function | Builds the data representing a menu tree. | |
MenuTreeStorage::updateParentalStatus | protected | function | Sets has_children for the link's parent if it has visible children. | |
WorkspacesMenuTreeStorage::loadLinks | protected | function | Loads links in the given menu, according to the given tree parameters. | Overrides MenuTreeStorage::loadLinks |
WorkspacesMenuTreeStorage::loadTreeData | public | function | Loads a menu link tree from the storage. | Overrides MenuTreeStorage::loadTreeData |
WorkspacesMenuTreeStorage::__construct | public | function | WorkspacesMenuTreeStorage constructor. | Overrides MenuTreeStorage::__construct |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.