diff --git a/model/Versioned.php b/model/Versioned.php index da42121a115..5e938676c16 100644 --- a/model/Versioned.php +++ b/model/Versioned.php @@ -991,7 +991,7 @@ function doRollbackTo($version) { */ static function get_latest_version($class, $id) { $baseClass = ClassInfo::baseDataClass($class); - $list = DataList::create($class)->where("\"$baseClass\".\"RecordID\" = $id"); + $list = DataList::create($baseClass)->where("\"$baseClass\".\"RecordID\" = $id"); $list->dataQuery()->setQueryParam("Versioned.mode", "latest_versions"); return $list->First(); } @@ -1033,7 +1033,7 @@ static function get_including_deleted($class, $filter = "", $sort = "") { */ static function get_version($class, $id, $version) { $baseClass = ClassInfo::baseDataClass($class); - $list = DataList::create($class)->where("\"$baseClass\".\"RecordID\" = $id")->where("\"$baseClass\".\"Version\" = " . (int)$version); + $list = DataList::create($baseClass)->where("\"$baseClass\".\"RecordID\" = $id")->where("\"$baseClass\".\"Version\" = " . (int)$version); $list->dataQuery()->setQueryParam('Versioned.mode', 'all_versions'); return $list->First(); } diff --git a/tests/model/VersionedTest.php b/tests/model/VersionedTest.php index 8ccaac40d82..ef871f64e1a 100644 --- a/tests/model/VersionedTest.php +++ b/tests/model/VersionedTest.php @@ -242,6 +242,30 @@ public function testQueriedTables() { 'VersionedTest_Subclass_Live', ), DataObject::get('VersionedTest_Subclass')->dataQuery()->query()->queriedTables()); } + + public function testGetVersionWhenClassnameChanged() { + $obj = new VersionedTest_DataObject; + $obj->Name = "test"; + $obj->write(); + $obj->Name = "test2"; + $obj->ClassName = "VersionedTest_Subclass"; + $obj->write(); + $subclassVersion = $obj->Version; + + $obj->Name = "test3"; + $obj->ClassName = "VersionedTest_DataObject"; + $obj->write(); + + // We should be able to pass the subclass and still get the correct class back + $obj2 = Versioned::get_version("VersionedTest_Subclass", $obj->ID, $subclassVersion); + $this->assertInstanceOf("VersionedTest_Subclass", $obj2); + $this->assertEquals("test2", $obj2->Name); + + $obj3 = Versioned::get_latest_version("VersionedTest_Subclass", $obj->ID); + $this->assertEquals("test3", $obj3->Name); + $this->assertInstanceOf("VersionedTest_DataObject", $obj3); + + } } class VersionedTest_DataObject extends DataObject implements TestOnly {