diff --git a/core/modules/content_moderation/src/EntityTypeInfo.php b/core/modules/content_moderation/src/EntityTypeInfo.php index 363ecaac919695bbfa5889adab61f8b7695c91af..00ddda2dfcda086c2b5acd46ba6576332cabbc9e 100644 --- a/core/modules/content_moderation/src/EntityTypeInfo.php +++ b/core/modules/content_moderation/src/EntityTypeInfo.php @@ -321,37 +321,36 @@ public function entityPrepareForm(EntityInterface $entity, $operation, FormState public function formAlter(array &$form, FormStateInterface $form_state, $form_id) { $form_object = $form_state->getFormObject(); if ($form_object instanceof BundleEntityFormBase) { - $config_entity_type = $form_object->getEntity()->getEntityType(); - $bundle_of = $config_entity_type->getBundleOf(); + $config_entity = $form_object->getEntity(); + $bundle_of = $config_entity->getEntityType()->getBundleOf(); if ($bundle_of && ($bundle_of_entity_type = $this->entityTypeManager->getDefinition($bundle_of)) - && $this->moderationInfo->canModerateEntitiesOfEntityType($bundle_of_entity_type)) { - $this->entityTypeManager->getHandler($config_entity_type->getBundleOf(), 'moderation')->enforceRevisionsBundleFormAlter($form, $form_state, $form_id); + && $this->moderationInfo->shouldModerateEntitiesOfBundle($bundle_of_entity_type, $config_entity->id())) { + $this->entityTypeManager->getHandler($bundle_of, 'moderation')->enforceRevisionsBundleFormAlter($form, $form_state, $form_id); } } elseif ($this->isModeratedEntityEditForm($form_object)) { /** @var \Drupal\Core\Entity\ContentEntityFormInterface $form_object */ /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */ $entity = $form_object->getEntity(); - if ($this->moderationInfo->isModeratedEntity($entity)) { - $this->entityTypeManager - ->getHandler($entity->getEntityTypeId(), 'moderation') - ->enforceRevisionsEntityFormAlter($form, $form_state, $form_id); - - // 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']) && in_array($form_object->getOperation(), ['edit', 'default'], TRUE)) { - $form['moderation_state']['#group'] = 'footer'; - } - // If the publishing status exists in the meta region, replace it with - // the current state instead. - if (isset($form['meta']['published'])) { - $form['meta']['published']['#markup'] = $this->moderationInfo->getWorkflowForEntity($entity)->getTypePlugin()->getState($entity->moderation_state->value)->label(); - } + $this->entityTypeManager + ->getHandler($entity->getEntityTypeId(), 'moderation') + ->enforceRevisionsEntityFormAlter($form, $form_state, $form_id); + + // 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']) && in_array($form_object->getOperation(), ['edit', 'default'], TRUE)) { + $form['moderation_state']['#group'] = 'footer'; + } + + // If the publishing status exists in the meta region, replace it with + // the current state instead. + if (isset($form['meta']['published'])) { + $form['meta']['published']['#markup'] = $this->moderationInfo->getWorkflowForEntity($entity)->getTypePlugin()->getState($entity->moderation_state->value)->label(); } } } diff --git a/core/modules/content_moderation/tests/src/Functional/ModerationStateNodeTypeTest.php b/core/modules/content_moderation/tests/src/Functional/ModerationStateNodeTypeTest.php index 8999dae1229bfc2df18c7e0d97cacc2976f3b929..5c4b70a4e21dc622e7a27203895eace24dc7e54b 100644 --- a/core/modules/content_moderation/tests/src/Functional/ModerationStateNodeTypeTest.php +++ b/core/modules/content_moderation/tests/src/Functional/ModerationStateNodeTypeTest.php @@ -67,9 +67,18 @@ public function testEnablingOnExistingContent() { ], t('Save')); $this->assertText('Not moderated Test has been created.'); + // Check that the 'Create new revision' is not disabled. + $this->drupalGet('/admin/structure/types/manage/not_moderated'); + $this->assertNull($this->assertSession()->fieldExists('options[revision]')->getAttribute('disabled')); + // Now enable moderation state. $this->enableModerationThroughUi('not_moderated'); + // Check that the 'Create new revision' checkbox is checked and disabled. + $this->drupalGet('/admin/structure/types/manage/not_moderated'); + $this->assertSession()->checkboxChecked('options[revision]'); + $this->assertSession()->fieldDisabled('options[revision]'); + // And make sure it works. $nodes = \Drupal::entityTypeManager()->getStorage('node') ->loadByProperties(['title' => 'Test']); diff --git a/core/modules/content_moderation/tests/src/Functional/ModerationStateTestBase.php b/core/modules/content_moderation/tests/src/Functional/ModerationStateTestBase.php index 5c7c68e34da41fc9ce5a20b478f760267a630aea..fc0433eb03d948156f7c57a10153091f7ed5c9e6 100644 --- a/core/modules/content_moderation/tests/src/Functional/ModerationStateTestBase.php +++ b/core/modules/content_moderation/tests/src/Functional/ModerationStateTestBase.php @@ -112,10 +112,6 @@ protected function createContentTypeFromUi($content_type_name, $content_type_id, $this->drupalGet('admin/structure/types'); $this->clickLink('Add content type'); - // Check that the 'Create new revision' checkbox is checked and disabled. - $this->assertSession()->checkboxChecked('options[revision]'); - $this->assertSession()->fieldDisabled('options[revision]'); - $edit = [ 'name' => $content_type_name, 'type' => $content_type_id,