From d64fe9ba13c236ec3bac60801ec9a78ee7762209 Mon Sep 17 00:00:00 2001 From: Normann Lou Date: Thu, 14 Nov 2013 17:37:55 +1300 Subject: [PATCH] NEW best way to keep extended 'can' functions effected with DataObject's own 'can' functions. MIN make possible to use DataExtension defined 'can' functions' signature without Strict level warning --- code/DMSDocument.php | 51 +++++++++++++++++++++++++++++--------------- 1 file changed, 34 insertions(+), 17 deletions(-) diff --git a/code/DMSDocument.php b/code/DMSDocument.php index 56ebcaa..4de0f74 100755 --- a/code/DMSDocument.php +++ b/code/DMSDocument.php @@ -38,31 +38,48 @@ class DMSDocument extends DataObject implements DMSDocumentInterface { public function canView($member = null) { - $canView = false; - if($member == null) $member = Member::currentUser(); - - if($member->ID){ - $canView = true; + if(!$member || !(is_a($member, 'Member')) || is_numeric($member)) $member = Member::currentUser(); + // extended access checks + $results = $this->extend('canView', $member); + if($results && is_array($results)) { + if(!min($results)) return false; } - $this->extend('canView', $canView); - return $canView; - + if($member->ID){ + return true; + } + return false; + } public function canEdit($member = null) { - $canEdit = $this->canView(); - $this->extend('canEdit', $canEdit); - return $canEdit; + if(!$member || !(is_a($member, 'Member')) || is_numeric($member)) $member = Member::currentUser(); + + $results = $this->extend('canEdit', $member); + if($results && is_array($results)) { + if(!min($results)) return false; + } + + return $this->canView(); } public function canCreate($member = null) { - $canCreate = $this->canView(); - $this->extend('canCreate', $canCreate); - return $canCreate; + if(!$member || !(is_a($member, 'Member')) || is_numeric($member)) $member = Member::currentUser(); + + $results = $this->extend('canCreate', $member); + if($results && is_array($results)) { + if(!min($results)) return false; + } + + return $this->canView(); } public function canDelete($member = null) { - $canDelete = $this->canView(); - $this->extend('canDelete', $canDelete); - return $canDelete; + if(!$member || !(is_a($member, 'Member')) || is_numeric($member)) $member = Member::currentUser(); + + $results = $this->extend('canDelete', $member); + if($results && is_array($results)) { + if(!min($results)) return false; + } + + return $this->canView(); }