public function getSchemaStateDefaults()
 {
     $state = parent::getSchemaStateDefaults();
     if ($record = $this->getRecord()) {
         $latest = Versioned::get_latest_version($record->baseClass(), $record->ID);
         if ($latest) {
             $state['data']['fileId'] = $latest->ID;
             $state['data']['latestVersionId'] = $latest->Version;
         }
     }
     return $state;
 }
 /**
  * Find latest version of this object
  *
  * @return Versioned|DataObject
  */
 protected function getObjectLatestVersion()
 {
     return Versioned::get_latest_version($this->ObjectClass, $this->ObjectID);
 }
 /**
  * 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);
 }
 /**
  * Find latest version of this object
  * @return DataObject|Versioned
  * @throws UnexpectedDataException
  */
 protected function getObjectLatestVersion()
 {
     if (!class_exists($this->ObjectClass)) {
         throw new UnexpectedDataException("Invalid Class '{$this->ObjectClass}' in ChangeSetItem #{$this->ID}");
     }
     return Versioned::get_latest_version($this->ObjectClass, $this->ObjectID);
 }
 public function testLazyLoadedFieldsOnVersionedRecords()
 {
     // Save another record, sanity check that we're getting the right one
     $obj2 = new VersionedTest_Subclass();
     $obj2->Name = "test2";
     $obj2->ExtraField = "foo2";
     $obj2->write();
     // Save the actual inspected record
     $obj1 = new VersionedTest_Subclass();
     $obj1->Name = "test";
     $obj1->ExtraField = "foo";
     $obj1->write();
     $version1 = $obj1->Version;
     $obj1->Name = "test2";
     $obj1->ExtraField = "baz";
     $obj1->write();
     $version2 = $obj1->Version;
     $reloaded = Versioned::get_version('VersionedTest_Subclass', $obj1->ID, $version1);
     $this->assertEquals($reloaded->Name, 'test');
     $this->assertEquals($reloaded->ExtraField, 'foo');
     $reloaded = Versioned::get_version('VersionedTest_Subclass', $obj1->ID, $version2);
     $this->assertEquals($reloaded->Name, 'test2');
     $this->assertEquals($reloaded->ExtraField, 'baz');
     $reloaded = Versioned::get_latest_version('VersionedTest_Subclass', $obj1->ID);
     $this->assertEquals($reloaded->Version, $version2);
     $this->assertEquals($reloaded->Name, 'test2');
     $this->assertEquals($reloaded->ExtraField, 'baz');
     $allVersions = Versioned::get_all_versions('VersionedTest_Subclass', $obj1->ID);
     $this->assertEquals(2, $allVersions->Count());
     $this->assertEquals($allVersions->First()->Version, $version1);
     $this->assertEquals($allVersions->First()->Name, 'test');
     $this->assertEquals($allVersions->First()->ExtraField, 'foo');
     $this->assertEquals($allVersions->Last()->Version, $version2);
     $this->assertEquals($allVersions->Last()->Name, 'test2');
     $this->assertEquals($allVersions->Last()->ExtraField, 'baz');
     $obj1->delete();
 }