WorkspaceActivateForm.php

Same filename and directory in other branches
  1. 9 core/modules/workspaces/src/Form/WorkspaceActivateForm.php
  2. 10 core/modules/workspaces/src/Form/WorkspaceActivateForm.php
  3. 11.x core/modules/workspaces/src/Form/WorkspaceActivateForm.php

Namespace

Drupal\workspaces\Form

File

core/modules/workspaces/src/Form/WorkspaceActivateForm.php

View source
<?php

namespace Drupal\workspaces\Form;

use Drupal\Core\Entity\EntityConfirmFormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Messenger\MessengerInterface;
use Drupal\workspaces\WorkspaceAccessException;
use Drupal\workspaces\WorkspaceManagerInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * Handle activation of a workspace on administrative pages.
 */
class WorkspaceActivateForm extends EntityConfirmFormBase implements WorkspaceFormInterface {
    
    /**
     * The workspace entity.
     *
     * @var \Drupal\workspaces\WorkspaceInterface
     */
    protected $entity;
    
    /**
     * The workspace replication manager.
     *
     * @var \Drupal\workspaces\WorkspaceManagerInterface
     */
    protected $workspaceManager;
    
    /**
     * The messenger service.
     *
     * @var \Drupal\Core\Messenger\MessengerInterface
     */
    protected $messenger;
    
    /**
     * Constructs a new WorkspaceActivateForm.
     *
     * @param \Drupal\workspaces\WorkspaceManagerInterface $workspace_manager
     *   The workspace manager.
     * @param \Drupal\Core\Messenger\MessengerInterface $messenger
     *   The messenger service.
     */
    public function __construct(WorkspaceManagerInterface $workspace_manager, MessengerInterface $messenger) {
        $this->workspaceManager = $workspace_manager;
        $this->messenger = $messenger;
    }
    
    /**
     * {@inheritdoc}
     */
    public static function create(ContainerInterface $container) {
        return new static($container->get('workspaces.manager'), $container->get('messenger'));
    }
    
    /**
     * {@inheritdoc}
     */
    public function getQuestion() {
        return $this->t('Would you like to activate the %workspace workspace?', [
            '%workspace' => $this->entity
                ->label(),
        ]);
    }
    
    /**
     * {@inheritdoc}
     */
    public function getDescription() {
        return $this->t('Activate the %workspace workspace.', [
            '%workspace' => $this->entity
                ->label(),
        ]);
    }
    
    /**
     * {@inheritdoc}
     */
    public function getCancelUrl() {
        return $this->entity
            ->toUrl('collection');
    }
    
    /**
     * {@inheritdoc}
     */
    public function buildForm(array $form, FormStateInterface $form_state) {
        $form = parent::buildForm($form, $form_state);
        // Content entity forms do not use the parent's #after_build callback.
        unset($form['#after_build']);
        return $form;
    }
    
    /**
     * {@inheritdoc}
     */
    public function actions(array $form, FormStateInterface $form_state) {
        $actions = parent::actions($form, $form_state);
        $actions['cancel']['#attributes']['class'][] = 'dialog-cancel';
        return $actions;
    }
    
    /**
     * {@inheritdoc}
     */
    public function submitForm(array &$form, FormStateInterface $form_state) {
        try {
            $this->workspaceManager
                ->setActiveWorkspace($this->entity);
            $this->messenger
                ->addMessage($this->t('%workspace_label is now the active workspace.', [
                '%workspace_label' => $this->entity
                    ->label(),
            ]));
        } catch (WorkspaceAccessException $e) {
            $this->messenger
                ->addError($this->t('You do not have access to activate the %workspace_label workspace.', [
                '%workspace_label' => $this->entity
                    ->label(),
            ]));
        }
    }

}

Classes

Title Deprecated Summary
WorkspaceActivateForm Handle activation of a workspace on administrative pages.

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