SiteTree check if in DB before delete children

This commit is contained in:
Aaron Carlino 2017-10-16 16:37:51 +13:00 committed by Damian Mooyman
parent 0f2ff54557
commit 9ae6fbffe1
2 changed files with 20 additions and 2 deletions

View File

@ -1574,7 +1574,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
parent::onBeforeDelete(); parent::onBeforeDelete();
// If deleting this page, delete all its children. // If deleting this page, delete all its children.
if(SiteTree::config()->enforce_strict_hierarchy && $children = $this->AllChildren()) { if($this->isInDB() && SiteTree::config()->enforce_strict_hierarchy && $children = $this->AllChildren()) {
foreach($children as $child) { foreach($children as $child) {
$child->delete(); $child->delete();
} }

View File

@ -276,7 +276,25 @@ class SiteTreeTest extends SapphireTest {
} }
public function testGetByLink() { public function testNoCascadingDeleteWithoutID() {
Config::inst()->update('SiteTree', 'enforce_strict_hierarchy', true);
$count = SiteTree::get()->count();
$this->assertNotEmpty($count);
$obj = new SiteTree();
$this->assertFalse($obj->exists());
$fail = true;
try {
$obj->delete();
} catch (LogicException $e) {
$fail = false;
}
if ($fail) {
$this->fail('Failed to throw delete exception');
}
$this->assertCount($count, SiteTree::get());
}
public function testGetByLink() {
$home = $this->objFromFixture('Page', 'home'); $home = $this->objFromFixture('Page', 'home');
$about = $this->objFromFixture('Page', 'about'); $about = $this->objFromFixture('Page', 'about');
$staff = $this->objFromFixture('Page', 'staff'); $staff = $this->objFromFixture('Page', 'staff');