From 389b0a5862a9f4130ca0765ba6155d81bd84499b Mon Sep 17 00:00:00 2001 From: ben Date: Mon, 7 Apr 2008 14:40:53 +0000 Subject: Properly extensible canEdit functionality for metadata, annotations, and anything else that supports the ElggExtender interface git-svn-id: https://code.elgg.org/elgg/trunk@410 36083f99-b078-4883-b0ff-0f9b5a30f544 --- engine/lib/annotations.php | 3 ++- engine/lib/extender.php | 36 ++++++++++++++++++++++++++++++++++++ engine/lib/metadata.php | 35 +++-------------------------------- 3 files changed, 41 insertions(+), 33 deletions(-) (limited to 'engine/lib') diff --git a/engine/lib/annotations.php b/engine/lib/annotations.php index 3f965ec6d..f2b9e16fb 100644 --- a/engine/lib/annotations.php +++ b/engine/lib/annotations.php @@ -40,7 +40,8 @@ $objarray = (array) $annotation; foreach($objarray as $key => $value) { $this->attributes[$key] = $value; - } + } + $this->attributes['type'] = "annotation"; } } } diff --git a/engine/lib/extender.php b/engine/lib/extender.php index 4f588acdd..aca8a0fca 100644 --- a/engine/lib/extender.php +++ b/engine/lib/extender.php @@ -69,6 +69,16 @@ * Delete this data. */ abstract public function delete(); + + /** + * Determines whether or not the specified user can edit this + * + * @param int $user_guid The GUID of the user (defaults to currently logged in user) + * @return true|false + */ + function canEdit($user_guid = 0) { + return can_edit_extender($this->id,$this->type,$user_guid); + } public function export() { @@ -145,6 +155,32 @@ return $tmp; } } + + /** + * Determines whether or not the specified user can edit the specified piece of extender + * + * @param int $extender_id The ID of the piece of extender + * @param string $type 'metadata' or 'annotation' + * @param int $user_guid The GUID of the user + * @return true|false + */ + function can_edit_extender($extender_id, $type, $user_guid = 0) { + + if ($user_guid == 0) { + $user = $_SESSION['user']; + } else { + $user = get_entity($user_guid); + } + $functionname = "get_{$type}"; + if (is_callable($functionname)) { + $extender = $functionname($extender_id); + } else return false; + + if ($extender->getOwner() == $user->getGUID()) return true; + + return trigger_plugin_hook('permissions_check',$type,array('entity' => $entity, 'user' => $user),false); + + } /** Register the hook */ register_plugin_hook("import", "all", "import_extender_plugin_hook", 2); diff --git a/engine/lib/metadata.php b/engine/lib/metadata.php index 99153a98a..3b84d3575 100644 --- a/engine/lib/metadata.php +++ b/engine/lib/metadata.php @@ -39,7 +39,8 @@ $objarray = (array) $metadata; foreach($objarray as $key => $value) { $this->attributes[$key] = $value; - } + } + $this->attributes['type'] = "metadata"; } } } @@ -73,38 +74,8 @@ return delete_metadata($this->id); } - /** - * Determines whether or not the specified user can edit this - * - * @param int $user_guid The GUID of the user (defaults to currently logged in user) - * @return true|false - */ - function canEdit($user_guid = 0) { - return can_edit_metadata($this->id,$user_guid); - } - - } - - /** - * Determines whether or not the specified user can edit the specified piece of metadata - * - * @param int $metadata_id The ID of the piece of metadata - * @param int $user_guid The GUID of the user - * @return true|false - */ - function can_edit_metadata($metadata_id, $user_guid = 0) { - - if ($user_guid == 0) { - $user = $_SESSION['user']; - } else { - $user = get_entity($user_guid); - } - $metadata = get_metadata($metadata_id); - - if ($metadata->owner_guid == $user->getGUID()) return true; - - return trigger_plugin_hook('permissions_check','metadata',array('entity' => $entity, 'user' => $user),false); + } /** -- cgit v1.2.3