diff -u b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/ChangedItem.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/ChangedItem.php --- b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/ChangedItem.php +++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/ChangedItem.php @@ -40,26 +40,33 @@ } } else { - $field_name = $this->getFieldDefinition()->getName(); - // We have to clone the original because getTranslation() will modify - // the state of original. - $original = clone $entity->original; - if ($this->getFieldDefinition()->isTranslatable()) { - $original = $original->getTranslation($entity->language()->getId()); + // Don't allow an illegal value. + if (!$this->value) { + $this->value = REQUEST_TIME; } - // If the timestamp has not been set explicitly auto detect a modification - // of the current translation and set the timestamp if needed. - // An example of setting the timestamp explicitly is - // \Drupal\content_translation\ContentTranslationMetadataWrapperInterface::setChangedTime() - if ($this->value == $original->{$field_name}->value) { - foreach ($entity->getFieldDefinitions() as $other_field_definition) { - $other_field_name = $other_field_definition->getName(); - if ($other_field_name != $field_name && $other_field_definition->isTranslatable()) { - $items = $entity->get($other_field_name)->filterEmptyItems(); - $original_items = $original->get($other_field_name)->filterEmptyItems(); - if (!$items->equals($original_items)) { - $this->value = REQUEST_TIME; - break; + else { + $field_name = $this->getFieldDefinition()->getName(); + // We have to clone the original because getTranslation() will modify + // the state of original. + $original = clone $entity->original; + if ($this->getFieldDefinition()->isTranslatable()) { + $original = $original->getTranslation($entity->language()->getId()); + } + // If the timestamp has not been set explicitly auto detect a modification + // of the current translation and set the timestamp if needed. + // An example of setting the timestamp explicitly is + // \Drupal\content_translation\ContentTranslationMetadataWrapperInterface::setChangedTime() + if ($this->value == $original->{$field_name}->value) { + foreach ($entity->getFieldDefinitions() as $other_field_definition) { + $other_field_name = $other_field_definition->getName(); + if ($other_field_name != $field_name && $other_field_definition->isTranslatable()) { + $items = $entity->get($other_field_name)->filterEmptyItems(); + $original_items = $original->get($other_field_name) + ->filterEmptyItems(); + if (!$items->equals($original_items)) { + $this->value = REQUEST_TIME; + break; + } } } } diff -u b/core/modules/node/src/Tests/NodeSaveTest.php b/core/modules/node/src/Tests/NodeSaveTest.php --- b/core/modules/node/src/Tests/NodeSaveTest.php +++ b/core/modules/node/src/Tests/NodeSaveTest.php @@ -120,8 +120,8 @@ entity_create('node', $edit)->save(); $node = $this->drupalGetNodeByTitle($edit['title']); - $this->assertEqual($node->getCreatedTime(), 280299600, 'Creating a node uses user-set "created" timestamp.'); - $this->assertNotEqual($node->getChangedTime(), 979534800, 'Creating a node does not use user-set "changed" timestamp.'); + $this->assertEqual($node->getCreatedTime(), 280299600, 'Creating a node programmatically uses programmatically set "created" timestamp.'); + $this->assertEqual($node->getChangedTime(), 979534800, 'Creating a node programmatically uses programmatically set "changed" timestamp.'); // Update the timestamps. $node->setCreatedTime(979534800); only in patch2: unchanged: --- a/core/modules/file/src/Tests/SaveTest.php +++ b/core/modules/file/src/Tests/SaveTest.php @@ -22,8 +22,6 @@ function testFileSave() { 'filename' => 'druplicon.txt', 'uri' => 'public://druplicon.txt', 'filemime' => 'text/plain', - 'created' => 1, - 'changed' => 1, 'status' => FILE_STATUS_PERMANENT, )); file_put_contents($file->getFileUri(), 'hello world'); @@ -64,8 +62,6 @@ function testFileSave() { 'filename' => 'DRUPLICON.txt', 'uri' => 'public://DRUPLICON.txt', 'filemime' => 'text/plain', - 'created' => 1, - 'changed' => 1, 'status' => FILE_STATUS_PERMANENT, )); file_put_contents($uppercase_file->getFileUri(), 'hello world'); only in patch2: unchanged: --- a/core/modules/menu_link_content/src/Tests/LinksTest.php +++ b/core/modules/menu_link_content/src/Tests/LinksTest.php @@ -138,7 +138,7 @@ public function testCreateLink() { 'title' => 'Test Link', ); $link->link->options = $options; - $link->changed->value = REQUEST_TIME - 5; + $link->changed->value = 0; $link->save(); // Make sure the changed timestamp is updated. $this->assertEqual($link->getChangedTime(), REQUEST_TIME, 'Changing a menu link sets "changed" timestamp.');