class WorkspacesMenuTreeStorage

Same name in other branches
  1. 10 core/modules/workspaces/src/WorkspacesMenuTreeStorage.php \Drupal\workspaces\WorkspacesMenuTreeStorage

Overrides the default menu storage to provide workspace-specific menu links.

@internal

Hierarchy

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\workspaces
View 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.