From 2492cdda1c440c51dd1b9a1d4439fa33b80cda99 Mon Sep 17 00:00:00 2001 From: Nathaniel Catchpole Date: Fri, 18 Jan 2019 08:54:09 +0000 Subject: [PATCH] Issue #3003238 by Sam152, amateescu, Berdir: EntityStorageException: Default revision can not be deleted in content_moderation_entity_revision_delete() --- .../src/EntityOperations.php | 9 +++---- .../src/Kernel/ContentModerationStateTest.php | 24 +++++++++++++++++++ 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/core/modules/content_moderation/src/EntityOperations.php b/core/modules/content_moderation/src/EntityOperations.php index 8c6d33250898..52d2ca3909fa 100644 --- a/core/modules/content_moderation/src/EntityOperations.php +++ b/core/modules/content_moderation/src/EntityOperations.php @@ -235,10 +235,11 @@ class EntityOperations implements ContainerInjectionInterface { * @see hook_entity_revision_delete() */ public function entityRevisionDelete(EntityInterface $entity) { - /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */ - if (!$entity->isDefaultRevision()) { - $content_moderation_state = ContentModerationStateEntity::loadFromModeratedEntity($entity); - if ($content_moderation_state) { + if ($content_moderation_state = ContentModerationStateEntity::loadFromModeratedEntity($entity)) { + if ($content_moderation_state->isDefaultRevision()) { + $content_moderation_state->delete(); + } + else { $this->entityTypeManager ->getStorage('content_moderation_state') ->deleteRevision($content_moderation_state->getRevisionId()); diff --git a/core/modules/content_moderation/tests/src/Kernel/ContentModerationStateTest.php b/core/modules/content_moderation/tests/src/Kernel/ContentModerationStateTest.php index 1a1b6e46e908..373d01ff86c0 100644 --- a/core/modules/content_moderation/tests/src/Kernel/ContentModerationStateTest.php +++ b/core/modules/content_moderation/tests/src/Kernel/ContentModerationStateTest.php @@ -238,6 +238,30 @@ class ContentModerationStateTest extends KernelTestBase { $this->assertFalse($content_moderation_state); } + /** + * Tests removal of content moderation state entities for preexisting content. + */ + public function testExistingContentModerationStateDataRemoval() { + $storage = $this->entityTypeManager->getStorage('entity_test_mulrevpub'); + + $entity = $storage->create([]); + $entity->save(); + $original_revision_id = $entity->getRevisionId(); + + $workflow = $this->createEditorialWorkflow(); + $workflow->getTypePlugin()->addEntityTypeAndBundle($entity->getEntityTypeId(), $entity->bundle()); + $workflow->save(); + + $entity->moderation_state = 'draft'; + $entity->save(); + + $storage->deleteRevision($entity->getRevisionId()); + + $entity = $this->reloadEntity($entity); + $this->assertEquals('published', $entity->moderation_state->value); + $this->assertEquals($original_revision_id, $storage->getLatestRevisionId($entity->id())); + } + /** * Tests removal of content moderation state translations. *