diff --git a/core/lib/Drupal/Core/Entity/ContentEntityBase.php b/core/lib/Drupal/Core/Entity/ContentEntityBase.php index 6117347..becd941 100644 --- a/core/lib/Drupal/Core/Entity/ContentEntityBase.php +++ b/core/lib/Drupal/Core/Entity/ContentEntityBase.php @@ -818,6 +818,7 @@ protected function initializeTranslation($langcode) { $translation->translatableEntityKeys = &$this->translatableEntityKeys; $translation->translationInitialize = FALSE; $translation->typedData = NULL; + $translation->originalRevisionId = &$this->originalRevisionId; return $translation; } @@ -1066,7 +1067,10 @@ public function __clone() { $enforce_is_new = $this->enforceIsNew; $this->enforceIsNew = &$enforce_is_new; - $this->originalRevisionId = NULL; + // Ensure the originalRevisionId property is actually cloned by + // overwriting the original reference with one pointing to a copy of it. + $original_revision_id = $this->getOriginalRevisionId(); + $this->originalRevisionId = &$original_revision_id; } } diff --git a/core/tests/Drupal/KernelTests/Core/Entity/EntityOriginalRevisionTest.php b/core/tests/Drupal/KernelTests/Core/Entity/EntityOriginalRevisionTest.php index 13356b8..ea4437e 100644 --- a/core/tests/Drupal/KernelTests/Core/Entity/EntityOriginalRevisionTest.php +++ b/core/tests/Drupal/KernelTests/Core/Entity/EntityOriginalRevisionTest.php @@ -87,14 +87,14 @@ public function testOriginalRevisionId() { $this->assertEquals($loaded->getRevisionId(), $originalRevisionId2); $this->assertEquals($loaded->getRevisionId(), $loaded->getOriginalRevisionId()); + // Creating a clone should keep the original revision ID. + $clone = clone $loaded; + $this->assertSame($loaded->getOriginalRevisionId(), $clone->getOriginalRevisionId()); + // Creating a duplicate should set a NULL original revision ID. $duplicate = $loaded->createDuplicate(); $this->assertSame(NULL, $duplicate->getOriginalRevisionId()); - // Creating a clone should set a NULL original revision ID. - $clone = clone $loaded; - $this->assertSame(NULL, $clone->getOriginalRevisionId()); - // Check it all works with translations. $french = $loaded->addTranslation('fr'); // Adding a revision should return the same for each language.