function WorkspaceManager::doSwitchWorkspace

Same name in other branches
  1. 9 core/modules/workspaces/src/WorkspaceManager.php \Drupal\workspaces\WorkspaceManager::doSwitchWorkspace()
  2. 8.9.x core/modules/workspaces/src/WorkspaceManager.php \Drupal\workspaces\WorkspaceManager::doSwitchWorkspace()
  3. 11.x core/modules/workspaces/src/WorkspaceManager.php \Drupal\workspaces\WorkspaceManager::doSwitchWorkspace()

Switches the current workspace.

Parameters

\Drupal\workspaces\WorkspaceInterface|null $workspace: The workspace to set as active or NULL to switch out of the currently active workspace.

Throws

\Drupal\workspaces\WorkspaceAccessException Thrown when the current user doesn't have access to view the workspace.

4 calls to WorkspaceManager::doSwitchWorkspace()
WorkspaceManager::executeInWorkspace in core/modules/workspaces/src/WorkspaceManager.php
WorkspaceManager::executeOutsideWorkspace in core/modules/workspaces/src/WorkspaceManager.php
WorkspaceManager::setActiveWorkspace in core/modules/workspaces/src/WorkspaceManager.php
WorkspaceManager::switchToLive in core/modules/workspaces/src/WorkspaceManager.php

File

core/modules/workspaces/src/WorkspaceManager.php, line 254

Class

WorkspaceManager
Provides the workspace manager.

Namespace

Drupal\workspaces

Code

protected function doSwitchWorkspace($workspace) {
    // If the current user doesn't have access to view the workspace, they
    // shouldn't be allowed to switch to it, except in CLI processes.
    if ($workspace && PHP_SAPI !== 'cli' && !$workspace->access('view')) {
        $this->logger
            ->error('Denied access to view workspace %workspace_label for user %uid', [
            '%workspace_label' => $workspace->label(),
            '%uid' => $this->currentUser
                ->id(),
        ]);
        throw new WorkspaceAccessException('The user does not have permission to view that workspace.');
    }
    $this->activeWorkspace = $workspace ?: FALSE;
    // Clear the static entity cache for the supported entity types.
    $cache_tags_to_invalidate = array_map(function ($entity_type_id) {
        return 'entity.memory_cache:' . $entity_type_id;
    }, array_keys($this->workspaceInfo
        ->getSupportedEntityTypes()));
    $this->entityMemoryCache
        ->invalidateTags($cache_tags_to_invalidate);
    // Clear the static cache for path aliases. We can't inject the path alias
    // manager service because it would create a circular dependency.
    if (\Drupal::hasService('path_alias.manager')) {
        \Drupal::service('path_alias.manager')->cacheClear();
    }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.