diff --git a/core/modules/content_moderation/src/EntityTypeInfo.php b/core/modules/content_moderation/src/EntityTypeInfo.php index fcd37bb..c9de414 100644 --- a/core/modules/content_moderation/src/EntityTypeInfo.php +++ b/core/modules/content_moderation/src/EntityTypeInfo.php @@ -338,16 +338,24 @@ public function formAlter(array &$form, FormStateInterface $form_state, $form_id ]; if ($form['footer']) { - $form['footer']['invalid_transitions'] = $form['invalid_transitions']; - unset($form['invalid_transitions']); + $form['invalid_transitions']['#group'] = 'footer'; } } // Submit handler to redirect to the latest version, if available. $form['actions']['submit']['#submit'][] = [EntityTypeInfo::class, 'bundleFormRedirect']; + + // Move the 'moderation_state' field widget to the footer region, if + // available. if (isset($form['footer'])) { - $form['footer']['moderation_state'] = $form['moderation_state']; - unset($form['moderation_state']); + $form['moderation_state']['#group'] = 'footer'; + } + + // Move the label of the current moderation state to the meta region, if + // available. + if (isset($form['meta']['published'])) { + $form['meta']['published']['#markup'] = $form['moderation_state']['widget'][0]['current']['#markup']; + $form['moderation_state']['widget'][0]['current']['#access'] = FALSE; } } } diff --git a/core/modules/content_moderation/src/Plugin/Field/FieldWidget/ModerationStateWidget.php b/core/modules/content_moderation/src/Plugin/Field/FieldWidget/ModerationStateWidget.php index 8444e60..fa5a75e 100644 --- a/core/modules/content_moderation/src/Plugin/Field/FieldWidget/ModerationStateWidget.php +++ b/core/modules/content_moderation/src/Plugin/Field/FieldWidget/ModerationStateWidget.php @@ -150,7 +150,7 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen ], 'state' => [ '#type' => 'select', - '#title' => $this->t('On save'), + '#title' => $this->t('Change to'), '#key_column' => $this->column, '#options' => $transition_labels, '#default_value' => $default_value, diff --git a/core/modules/content_moderation/src/Plugin/Field/ModerationStateFieldItemList.php b/core/modules/content_moderation/src/Plugin/Field/ModerationStateFieldItemList.php index 2cf18da..acc1ce6 100644 --- a/core/modules/content_moderation/src/Plugin/Field/ModerationStateFieldItemList.php +++ b/core/modules/content_moderation/src/Plugin/Field/ModerationStateFieldItemList.php @@ -133,7 +133,7 @@ public function onChange($delta) { public function setValue($values, $notify = TRUE) { parent::setValue($values, $notify); - if (!empty($this->list)) { + if (isset($this->list[0])) { $this->updateModeratedEntity($this->list[0]->value); } } diff --git a/core/modules/content_moderation/tests/src/Functional/ModerationStateNodeTest.php b/core/modules/content_moderation/tests/src/Functional/ModerationStateNodeTest.php index 82695bd..b10a2f1 100644 --- a/core/modules/content_moderation/tests/src/Functional/ModerationStateNodeTest.php +++ b/core/modules/content_moderation/tests/src/Functional/ModerationStateNodeTest.php @@ -145,9 +145,11 @@ public function testPagers() { } /** - * Tests the workflow is a user has no Content Moderation permissions. + * Tests the workflow when a user has no Content Moderation permissions. */ public function testNoContentModerationPermissions() { + $session_assert = $this->assertSession(); + // Create a user with quite advanced node permissions but no content // moderation permissions. $limited_user = $this->createUser([ @@ -159,11 +161,11 @@ public function testNoContentModerationPermissions() { // Check the user can add content, but can't see the moderation state // select. $this->drupalGet('node/add/moderated_content'); - $this->assertSession()->statusCodeEquals(200); - $this->assertFalse($this->xpath('//select[@name="moderation_state[0][state]"]')); + $session_assert->statusCodeEquals(200); + $session_assert->fieldNotExists('moderation_state[0][state]'); $this->drupalPostForm(NULL, [ 'title[0][value]' => 'moderated content', - ], t('Save')); + ], 'Save'); // Manually move the content to archived because the user doesn't have // permission to do this. @@ -173,16 +175,15 @@ public function testNoContentModerationPermissions() { // Check the user can see the current state but not the select. $this->drupalGet('node/' . $node->id() . '/edit'); - $this->assertSession()->statusCodeEquals(200); - $this->assertSession()->pageTextContains('Archived'); - $this->assertTrue($this->xpath('//label[@for="edit-moderation-state-0-current"]')); - $this->assertFalse($this->xpath('//select[@name="moderation_state[0][state]"]')); - $this->drupalPostForm(NULL, [], t('Save')); + $session_assert->statusCodeEquals(200); + $session_assert->pageTextContains('Archived'); + $session_assert->fieldNotExists('moderation_state[0][state]'); + $this->drupalPostForm(NULL, [], 'Save'); // When saving they should still be on the edit form, and see the validation // error message. - $this->assertSession()->pageTextContains('Edit Moderated content moderated content'); - $this->assertSession()->pageTextContains('Invalid state transition from Archived to Archived'); + $session_assert->pageTextContains('Edit Moderated content moderated content'); + $session_assert->pageTextContains('Invalid state transition from Archived to Archived'); } }