FIX: Saving null values to the _versions table.

This commit is contained in:
Frank Mullenger 2016-06-24 16:41:35 +12:00 committed by Damian Mooyman
parent 5776a03141
commit 6d835a64ad
2 changed files with 25 additions and 1 deletions

View File

@ -788,7 +788,8 @@ class Versioned extends DataExtension implements TemplateGlobalProvider {
$data = array_intersect_key($data, $fields);
foreach ($data as $k => $v) {
if (!isset($newManipulation['fields'][$k])) {
// If the value is not set at all in the manipulation currently, use the existing value from the database
if (is_array($newManipulation['fields']) && !array_key_exists($k, $newManipulation['fields'])) {
$newManipulation['fields'][$k] = $v;
}
}

View File

@ -1036,6 +1036,29 @@ class VersionedTest extends SapphireTest {
$this->assertTrue($public->canViewStage('Live'));
$this->assertTrue($private->canViewStage('Live'));
}
/**
* Values that are overwritten with null are saved to the _versions table correctly.
*/
public function testWriteNullValueToVersion()
{
$record = VersionedTest_Subclass::create();
$record->Title = "Test A";
$record->write();
$version = Versioned::get_latest_version($record->ClassName, $record->ID);
$this->assertEquals(1, $version->Version);
$this->assertEquals($record->Title, $version->Title);
$record->Title = null;
$record->write();
$version = Versioned::get_latest_version($record->ClassName, $record->ID);
$this->assertEquals(2, $version->Version);
$this->assertEquals($record->Title, $version->Title);
}
}