From 86746fce082a6d845a585933bce1a85ebd2d24a3 Mon Sep 17 00:00:00 2001 From: Alex Pott <alex.a.pott@googlemail.com> Date: Tue, 27 Feb 2018 22:46:58 +0000 Subject: [PATCH] Issue #2940513 by Sam152, Berdir: ModerationStateFieldItemList fails after an entity has been serialized/unserialized --- .../src/Plugin/Field/ModerationStateFieldItemList.php | 5 ++++- .../src/Kernel/ModerationStateFieldItemListTest.php | 11 +++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/core/modules/content_moderation/src/Plugin/Field/ModerationStateFieldItemList.php b/core/modules/content_moderation/src/Plugin/Field/ModerationStateFieldItemList.php index 1256bf27f4c8..8d48f26ae478 100644 --- a/core/modules/content_moderation/src/Plugin/Field/ModerationStateFieldItemList.php +++ b/core/modules/content_moderation/src/Plugin/Field/ModerationStateFieldItemList.php @@ -141,7 +141,10 @@ public function onChange($delta) { public function setValue($values, $notify = TRUE) { parent::setValue($values, $notify); - if (isset($this->list[0])) { + // If the parent created a field item and if the parent should be notified + // about the change (e.g. this is not initialized with the current value), + // update the moderated entity. + if (isset($this->list[0]) && $notify) { $this->valueComputed = TRUE; $this->updateModeratedEntity($this->list[0]->value); } diff --git a/core/modules/content_moderation/tests/src/Kernel/ModerationStateFieldItemListTest.php b/core/modules/content_moderation/tests/src/Kernel/ModerationStateFieldItemListTest.php index 7d95054f0c0c..c4770166408c 100644 --- a/core/modules/content_moderation/tests/src/Kernel/ModerationStateFieldItemListTest.php +++ b/core/modules/content_moderation/tests/src/Kernel/ModerationStateFieldItemListTest.php @@ -173,4 +173,15 @@ public function testEntityWithNoWorkflow() { $this->assertTrue($test_node->isPublished()); } + /** + * Test the moderation_state field after an entity has been serialized. + */ + public function testEntityUnserialize() { + $this->testNode->moderation_state->value = 'draft'; + $unserialized = unserialize(serialize($this->testNode)); + + $this->assertEquals('Test title', $unserialized->title->value); + $this->assertEquals('draft', $unserialized->moderation_state->value); + } + } -- GitLab