From c7b47d8a8bb6e96f3724bd40f630778354ef72be Mon Sep 17 00:00:00 2001 From: Ingo Schommer Date: Fri, 15 Oct 2010 02:55:45 +0000 Subject: [PATCH] BUGFIX: Don't let deleteFromStage() kill the ID of the original record. (from r106080) git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/trunk@112515 467b73ca-7a2a-4603-9d3b-597d59a354a9 --- core/model/Versioned.php | 3 ++- tests/model/VersionedTest.php | 26 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/core/model/Versioned.php b/core/model/Versioned.php index f0a70150d..b812586a4 100755 --- a/core/model/Versioned.php +++ b/core/model/Versioned.php @@ -798,7 +798,8 @@ class Versioned extends DataObjectDecorator { function deleteFromStage($stage) { $oldMode = Versioned::get_reading_mode(); Versioned::reading_stage($stage); - $result = $this->owner->delete(); + $clone = clone $this->owner; + $result = $clone->delete(); Versioned::set_reading_mode($oldMode); return $result; } diff --git a/tests/model/VersionedTest.php b/tests/model/VersionedTest.php index 2350e7143..41e7579ab 100644 --- a/tests/model/VersionedTest.php +++ b/tests/model/VersionedTest.php @@ -90,6 +90,32 @@ class VersionedTest extends SapphireTest { $this->assertTrue($page1->Version > $changedVersion, 'Create a new higher version number'); $this->assertEquals('orig', $page1->Content, 'Copies the content from the old version'); } + + function testDeleteFromStage() { + $page1 = $this->objFromFixture('Page', 'page1'); + $pageID = $page1->ID; + + $page1->Content = 'orig'; + $page1->write(); + $page1->publish('Stage', 'Live'); + + $this->assertEquals(1, DB::query('SELECT COUNT(*) FROM "SiteTree" WHERE "ID" = '.$pageID)->value()); + $this->assertEquals(1, DB::query('SELECT COUNT(*) FROM "SiteTree_Live" WHERE "ID" = '.$pageID)->value()); + + $page1->deleteFromStage('Live'); + + // Confirm that deleteFromStage() doesn't manipulate the original record + $this->assertEquals($pageID, $page1->ID); + + $this->assertEquals(1, DB::query('SELECT COUNT(*) FROM "SiteTree" WHERE "ID" = '.$pageID)->value()); + $this->assertEquals(0, DB::query('SELECT COUNT(*) FROM "SiteTree_Live" WHERE "ID" = '.$pageID)->value()); + + $page1->delete(); + + $this->assertEquals(0, $page1->ID); + $this->assertEquals(0, DB::query('SELECT COUNT(*) FROM "SiteTree" WHERE "ID" = '.$pageID)->value()); + $this->assertEquals(0, DB::query('SELECT COUNT(*) FROM "SiteTree_Live" WHERE "ID" = '.$pageID)->value()); + } }