public function WorkspaceManager::setActiveWorkspace in Multiversion 8
Sets the active workspace for the site/session.
Parameters
\Drupal\multiversion\Entity\WorkspaceInterface $workspace: The workspace to set as active.
Return value
\Drupal\multiversion\Workspace\WorkspaceManagerInterface
Throws
Overrides WorkspaceManagerInterface::setActiveWorkspace
File
- src/
Workspace/ WorkspaceManager.php, line 127
Class
Namespace
Drupal\multiversion\WorkspaceCode
public function setActiveWorkspace(WorkspaceInterface $workspace) {
// Unpublished workspaces should not be allowed to be active.
if (!$workspace
->isPublished()) {
$this->logger
->error('The workspace {workspace} has been archived.', [
'workspace' => $workspace
->label(),
]);
throw new InvalidParameterException('Archived workspaces cannot be set as the active workspace.');
}
// If the current user doesn't have access to view the workspace, they
// shouldn't be allowed to switch to it.
// @todo Could this be handled better?
if (!$workspace
->access('view') && !$workspace
->isDefaultWorkspace()) {
$this->logger
->error('Denied access to view workspace {workspace}', [
'workspace' => $workspace
->label(),
]);
throw new WorkspaceAccessException('The user does not have permission to view that workspace.');
}
// Set the workspace on the proper negotiator.
$request = $this->requestStack
->getCurrentRequest();
foreach ($this
->getSortedNegotiators() as $negotiator) {
if ($negotiator
->applies($request)) {
$negotiator
->persist($workspace);
break;
}
}
// Clear cached entity storage handlers
$this->entityTypeManager
->clearCachedDefinitions();
return $this;
}