BUGFIX Versioned->publish() with $createNewVersion=TRUE now increases version number of in-memory object (fixes #5261)

git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/branches/2.4@101739 467b73ca-7a2a-4603-9d3b-597d59a354a9
This commit is contained in:
Ingo Schommer 2010-03-26 02:53:48 +00:00 committed by Sam Minnee
parent ba88bc4419
commit d41539ad22
3 changed files with 47 additions and 6 deletions

View File

@ -2086,7 +2086,9 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
}
/**
* Roll the draft version of this page to match the published page
* Roll the draft version of this page to match the published page.
* Caution: Doesn't overwrite the object properties with the rolled back version.
*
* @param $version Either the string 'Live' or a version number
*/
function doRollbackTo($version) {

View File

@ -476,7 +476,12 @@ class Versioned extends DataObjectDecorator {
$publisherID = isset(Member::currentUser()->ID) ? Member::currentUser()->ID : 0;
if($from) {
$from->forceChange();
if(!$createNewVersion) $from->migrateVersion($from->Version);
if($createNewVersion) {
$latest = self::get_latest_version($baseClass, $this->owner->ID);
$this->owner->Version = $latest->Version + 1;
} else {
$from->migrateVersion($from->Version);
}
// Mark this version as having been published at some stage
DB::query("UPDATE \"{$extTable}_versions\" SET \"WasPublished\" = '1', \"PublisherID\" = $publisherID WHERE \"RecordID\" = $from->ID AND \"Version\" = $from->Version");

View File

@ -57,6 +57,40 @@ class VersionedTest extends SapphireTest {
$this->assertType('Int', $obj2->dbObject('Version'));
}
function testPublishCreateNewVersion() {
$page1 = $this->objFromFixture('Page', 'page1');
$page1->Content = 'orig';
$page1->write();
$oldVersion = $page1->Version;
$page1->publish('Stage', 'Live', false);
$this->assertEquals($oldVersion, $page1->Version, 'publish() with $createNewVersion=FALSE');
$page1->Content = 'changed';
$page1->write();
$oldVersion = $page1->Version;
$page1->publish('Stage', 'Live', true);
$this->assertTrue($oldVersion < $page1->Version, 'publish() with $createNewVersion=TRUE');
}
function testRollbackTo() {
$page1 = $this->objFromFixture('Page', 'page1');
$page1->Content = 'orig';
$page1->write();
$page1->publish('Stage', 'Live');
$origVersion = $page1->Version;
$page1->Content = 'changed';
$page1->write();
$page1->publish('Stage', 'Live');
$changedVersion = $page1->Version;
$page1->doRollbackTo($origVersion);
$page1 = Versioned::get_one_by_stage('Page', 'Stage', $page1->ID);
$this->assertTrue($page1->Version > $changedVersion, 'Create a new higher version number');
$this->assertEquals('orig', $page1->Content, 'Copies the content from the old version');
}
}
class VersionedTest_DataObject extends DataObject implements TestOnly {