diff --git a/core/model/SiteTree.php b/core/model/SiteTree.php index 9e1990927..bf728486c 100755 --- a/core/model/SiteTree.php +++ b/core/model/SiteTree.php @@ -919,6 +919,15 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid return $this->canEdit($member); } + public function canDeleteFromLive($member = null) { + // If we have a result, then that means at least one decorator specified canDeleteFromLive + // Allow the permission check only if *all* voting decorators allow it. + $results = $this->extend('canDeleteFromLive', $member); + if($results && is_array($results)) if(!min($results)) return false; + + return $this->canPublish($member); + } + /** * Stub method to get the site config, provided so it's easy to override */ @@ -1943,7 +1952,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid * @uses SiteTreeDecorator->onAfterUnpublish() */ function doUnpublish() { - if (!$this->canPublish()) return false; + if (!$this->canDeleteFromLive()) return false; $this->extend('onBeforeUnpublish'); @@ -2015,6 +2024,8 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid Versioned::reading_stage($origStage); $this->extend('onAfterUnpublish'); + + return true; } /**