From e9d4863828882c12f0cb94d90affa43e6bef45bc Mon Sep 17 00:00:00 2001 From: Damian Mooyman Date: Tue, 9 Jun 2015 11:31:07 +1200 Subject: [PATCH] API Formalise new additional arguments to DataObject::canCreate, DataExtension::augmentSQL, and DataObject::extendedCan --- filesystem/File.php | 12 ++++++++---- model/DataExtension.php | 3 ++- model/DataObject.php | 15 ++++++++------- model/Versioned.php | 5 ++++- security/PermissionRole.php | 2 +- security/PermissionRoleCode.php | 2 +- 6 files changed, 24 insertions(+), 15 deletions(-) diff --git a/filesystem/File.php b/filesystem/File.php index a39ded865..ce428b4f3 100644 --- a/filesystem/File.php +++ b/filesystem/File.php @@ -332,11 +332,15 @@ class File extends DataObject { /** * @return boolean */ - public function canCreate($member = null) { - if(!$member) $member = Member::currentUser(); + public function canCreate($member = null, $context = array()) { + if(!$member) { + $member = Member::currentUser(); + } - $result = $this->extendedCan('canCreate', $member); - if($result !== null) return $result; + $result = $this->extendedCan('canCreate', $member, $context); + if($result !== null) { + return $result; + } return $this->canEdit($member); } diff --git a/model/DataExtension.php b/model/DataExtension.php index afd587250..9d9b70286 100644 --- a/model/DataExtension.php +++ b/model/DataExtension.php @@ -24,8 +24,9 @@ abstract class DataExtension extends Extension { * Edit the given query object to support queries for this extension * * @param SQLSelect $query Query to augment. + * @param DataQuery $dataQuery Container DataQuery for this SQLQuery */ - public function augmentSQL(SQLSelect $query) { + public function augmentSQL(SQLSelect $query, DataQuery $dataQuery = null) { } /** diff --git a/model/DataObject.php b/model/DataObject.php index d04e29e9b..dd9c08c01 100644 --- a/model/DataObject.php +++ b/model/DataObject.php @@ -2823,12 +2823,13 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity * else return $normalValue; * * - * @param String $methodName Method on the same object, e.g. {@link canEdit()} + * @param string $methodName Method on the same object, e.g. {@link canEdit()} * @param Member|int $member + * @param array $context Optional context * @return boolean|null */ - public function extendedCan($methodName, $member) { - $results = $this->extend($methodName, $member); + public function extendedCan($methodName, $member, $context = array()) { + $results = $this->extend($methodName, $member, $context); if($results && is_array($results)) { // Remove NULLs $results = array_filter($results, function($v) {return !is_null($v);}); @@ -2876,13 +2877,13 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity } /** - * @todo Should canCreate be a static method? - * * @param Member $member + * @param array $context Additional context-specific data which might + * affect whether (or where) this object could be created. * @return boolean */ - public function canCreate($member = null) { - $extended = $this->extendedCan(__FUNCTION__, $member); + public function canCreate($member = null, $context = array()) { + $extended = $this->extendedCan(__FUNCTION__, $member, $context); if($extended !== null) { return $extended; } diff --git a/model/Versioned.php b/model/Versioned.php index e66d4cb89..afec0bbb0 100644 --- a/model/Versioned.php +++ b/model/Versioned.php @@ -183,7 +183,10 @@ class Versioned extends DataExtension implements TemplateGlobalProvider { /** * Augment the the SQLSelect that is created by the DataQuery - * @todo Should this all go into VersionedDataQuery? + * + * @param SQLSelect $query + * @param DataQuery $dataQuery + * @throws InvalidArgumentException */ public function augmentSQL(SQLSelect $query, DataQuery $dataQuery = null) { if(!$dataQuery || !$dataQuery->getQueryParam('Versioned.mode')) { diff --git a/security/PermissionRole.php b/security/PermissionRole.php index 3836c5e00..35962b3b1 100644 --- a/security/PermissionRole.php +++ b/security/PermissionRole.php @@ -87,7 +87,7 @@ class PermissionRole extends DataObject { return Permission::check('APPLY_ROLES', 'any', $member); } - public function canCreate($member = null) { + public function canCreate($member = null, $context = array()) { return Permission::check('APPLY_ROLES', 'any', $member); } diff --git a/security/PermissionRoleCode.php b/security/PermissionRoleCode.php index 71627fd97..0982b96bd 100644 --- a/security/PermissionRoleCode.php +++ b/security/PermissionRoleCode.php @@ -42,7 +42,7 @@ class PermissionRoleCode extends DataObject { return $result; } - public function canCreate($member = null) { + public function canCreate($member = null, $context = array()) { return Permission::check('APPLY_ROLES', 'any', $member); }