Issue #3376293 by nlisgo, smustgrave, amateescu: WorkspacePublishForm $redirectDestination parameter appears not to be used

merge-requests/4505/head
Lee Rowlands 2023-07-29 07:51:14 +10:00
parent 92abbb5964
commit 917678cf43
No known key found for this signature in database
GPG Key ID: 2B829A3DF9204DC4
3 changed files with 38 additions and 22 deletions

View File

@ -6,7 +6,6 @@ use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Form\ConfirmFormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Routing\RedirectDestinationInterface;
use Drupal\Core\Url;
use Drupal\workspaces\WorkspaceInterface;
use Drupal\workspaces\WorkspaceOperationFactory;
@ -52,16 +51,10 @@ class WorkspaceMergeForm extends ConfirmFormBase implements WorkspaceFormInterfa
* The workspace operation factory service.
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
* The entity type manager.
* @param \Drupal\Core\Routing\RedirectDestinationInterface|null $redirectDestination
* The redirect destination service.
*/
public function __construct(WorkspaceOperationFactory $workspace_operation_factory, EntityTypeManagerInterface $entity_type_manager, ?RedirectDestinationInterface $redirectDestination = NULL) {
public function __construct(WorkspaceOperationFactory $workspace_operation_factory, EntityTypeManagerInterface $entity_type_manager) {
$this->workspaceOperationFactory = $workspace_operation_factory;
$this->entityTypeManager = $entity_type_manager;
if ($redirectDestination === NULL) {
$this->redirectDestination = \Drupal::service('redirect.destination');
@trigger_error('Calling' . __METHOD__ . '() without the $redirectDestination argument is deprecated in drupal:10.1.0 and is required in drupal:11.0.0. See https://www.drupal.org/node/3343983', E_USER_DEPRECATED);
}
}
/**
@ -70,8 +63,7 @@ class WorkspaceMergeForm extends ConfirmFormBase implements WorkspaceFormInterfa
public static function create(ContainerInterface $container) {
return new static(
$container->get('workspaces.operation_factory'),
$container->get('entity_type.manager'),
$container->get('redirect.destination')
$container->get('entity_type.manager')
);
}
@ -144,7 +136,7 @@ class WorkspaceMergeForm extends ConfirmFormBase implements WorkspaceFormInterfa
* {@inheritdoc}
*/
public function getCancelUrl() {
return Url::fromRoute('entity.workspace.collection', [], ['query' => $this->redirectDestination->getAsArray()]);
return Url::fromRoute('entity.workspace.collection', [], ['query' => $this->getDestinationArray()]);
}
/**

View File

@ -6,7 +6,6 @@ use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Form\ConfirmFormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Routing\RedirectDestinationInterface;
use Drupal\Core\Url;
use Drupal\workspaces\WorkspaceAccessException;
use Drupal\workspaces\WorkspaceInterface;
@ -46,16 +45,10 @@ class WorkspacePublishForm extends ConfirmFormBase implements WorkspaceFormInter
* The workspace operation factory service.
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
* The entity type manager.
* @param \Drupal\Core\Routing\RedirectDestinationInterface|null $redirectDestination
* The redirect destination service.
*/
public function __construct(WorkspaceOperationFactory $workspace_operation_factory, EntityTypeManagerInterface $entity_type_manager, ?RedirectDestinationInterface $redirectDestination = NULL) {
public function __construct(WorkspaceOperationFactory $workspace_operation_factory, EntityTypeManagerInterface $entity_type_manager) {
$this->workspaceOperationFactory = $workspace_operation_factory;
$this->entityTypeManager = $entity_type_manager;
if ($redirectDestination === NULL) {
$this->redirectDestination = \Drupal::service('redirect.destination');
@trigger_error('Calling' . __METHOD__ . '() without the $redirectDestination argument is deprecated in drupal:10.1.0 and is required in drupal:11.0.0. See https://www.drupal.org/node/3343983', E_USER_DEPRECATED);
}
}
/**
@ -64,8 +57,7 @@ class WorkspacePublishForm extends ConfirmFormBase implements WorkspaceFormInter
public static function create(ContainerInterface $container) {
return new static(
$container->get('workspaces.operation_factory'),
$container->get('entity_type.manager'),
$container->get('redirect.destination')
$container->get('entity_type.manager')
);
}
@ -141,7 +133,7 @@ class WorkspacePublishForm extends ConfirmFormBase implements WorkspaceFormInter
* {@inheritdoc}
*/
public function getCancelUrl() {
return Url::fromRoute('entity.workspace.collection', [], ['query' => $this->redirectDestination->getAsArray()]);
return Url::fromRoute('entity.workspace.collection', [], ['query' => $this->getDestinationArray()]);
}
/**

View File

@ -298,4 +298,36 @@ class WorkspaceTest extends BrowserTestBase {
$assert_session->linkExists('Switch to Live');
}
/**
* Verifies that a workspace can be published.
*/
public function testPublishWorkspace() {
$this->createContentType(['type' => 'test', 'label' => 'Test']);
$this->drupalLogin($this->rootUser);
$this->drupalGet('/admin/config/workflow/workspaces/add');
$this->submitForm([
'id' => 'test_workspace',
'label' => 'Test workspace',
], 'Save');
// Activate the test workspace.
$this->drupalGet('/admin/config/workflow/workspaces/manage/test_workspace/activate');
$this->submitForm([], 'Confirm');
$this->drupalGet('/admin/config/workflow/workspaces/manage/test_workspace/publish');
$this->assertSession()->statusCodeEquals(200);
$this->assertSession()->pageTextContains('There are no changes that can be published from Test workspace to Live.');
// Create a node in the workspace.
$node = $this->createNodeThroughUi('Test node', 'test');
$this->drupalGet('/admin/config/workflow/workspaces/manage/test_workspace/publish');
$this->assertSession()->statusCodeEquals(200);
$this->assertSession()->pageTextContains('There is 1 item that can be published from Test workspace to Live');
$this->getSession()->getPage()->pressButton('Publish 1 item to Live');
$this->assertSession()->pageTextContains('Successful publication.');
}
}