You are here

protected function WorkspaceManager::doSwitchWorkspace in Drupal 10

Same name and namespace in other branches
  1. 8 core/modules/workspaces/src/WorkspaceManager.php \Drupal\workspaces\WorkspaceManager::doSwitchWorkspace()
  2. 9 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.

File

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

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.
  if ($workspace && !$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
    ->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.
  \Drupal::service('path_alias.manager')
    ->cacheClear();
}