workspaceManager = $workspace_manager; $this->workspaceStorage = $entity_type_manager->getStorage('workspace'); $this->messenger = $messenger; } /** * {@inheritdoc} */ public static function create(ContainerInterface $container) { return new static( $container->get('workspaces.manager'), $container->get('entity_type.manager'), $container->get('messenger') ); } /** * {@inheritdoc} */ public function getFormId() { return 'workspace_switcher_form'; } /** * {@inheritdoc} */ public function buildForm(array $form, FormStateInterface $form_state) { $workspaces = $this->workspaceStorage->loadMultiple(); $workspace_labels = []; foreach ($workspaces as $workspace) { $workspace_labels[$workspace->id()] = $workspace->label(); } $active_workspace = $this->workspaceManager->getActiveWorkspace(); unset($workspace_labels[$active_workspace->id()]); $form['current'] = [ '#type' => 'item', '#title' => $this->t('Current workspace'), '#markup' => $active_workspace->label(), '#wrapper_attributes' => [ 'class' => ['container-inline'], ], ]; $form['workspace_id'] = [ '#type' => 'select', '#title' => $this->t('Select workspace'), '#required' => TRUE, '#options' => $workspace_labels, '#wrapper_attributes' => [ 'class' => ['container-inline'], ], ]; $form['submit'] = [ '#type' => 'submit', '#value' => $this->t('Activate'), ]; return $form; } /** * {@inheritdoc} */ public function submitForm(array &$form, FormStateInterface $form_state) { $id = $form_state->getValue('workspace_id'); /** @var \Drupal\workspaces\WorkspaceInterface $workspace */ $workspace = $this->workspaceStorage->load($id); try { $this->workspaceManager->setActiveWorkspace($workspace); $this->messenger->addMessage($this->t('%workspace_label is now the active workspace.', ['%workspace_label' => $workspace->label()])); } catch (WorkspaceAccessException $e) { $this->messenger->addError($this->t('You do not have access to activate the %workspace_label workspace.', ['%workspace_label' => $workspace->label()])); } } }