class 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(protected readonly WorkspaceManagerInterface $workspaceManager, protected readonly WorkspaceAssociationInterface $workspaceAssociation, protected readonly 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.