BUGFIX: Virtual pages can be deleted from the live site even when the're not publishable. (from r93319) (from r96758)

git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/trunk@102389 467b73ca-7a2a-4603-9d3b-597d59a354a9
This commit is contained in:
Ingo Schommer 2010-04-12 03:13:26 +00:00
parent bed078c16d
commit 679d48c2ff
2 changed files with 35 additions and 0 deletions

View File

@ -65,9 +65,19 @@ class VirtualPage extends Page {
return $this->isPublishable() && parent::canPublish($member);
}
/**
* Return true if we can delete this page from the live site, which is different from can
* we publish it.
*/
public function canDeleteFromLive($member = null) {
return parent::canPublish($member);
}
/**
* Returns true if is page is publishable by anyone at all
* Return false if the source page isn't published yet.
*
* Note that isPublishable doesn't affect ete from live, only publish.
*/
public function isPublishable() {
// No source

View File

@ -125,5 +125,30 @@ class VirtualPageTest extends SapphireTest {
$p->doPublish();
$this->assertTrue($vp->canPublish());
}
function testCanDeleteOrphanedVirtualPagesFromLive() {
// An unpublished source page
$p = new Page();
$p->Content = "test content";
$p->write();
$p->doPublish();
// With no source page, we can't publish
$vp = new VirtualPage();
$vp->CopyContentFromID = $p->ID;
$vp->write();
// Delete the source page
$this->assertTrue($vp->canPublish());
$this->assertTrue($p->doDeleteFromLive());
// Confirm that we can unpublish, but not publish
$this->assertTrue($vp->canDeleteFromLive());
$this->assertFalse($vp->canPublish());
// Confirm that the action really works
$this->assertTrue($vp->doDeleteFromLive());
$this->assertNull(DB::query("SELECT \"ID\" FROM \"SiteTree_Live\" WHERE \"ID\" = $vp->ID")->value());
}
}