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()); + } }