From eca0feb9a0380fb1e700af0d183f295fef55a05b Mon Sep 17 00:00:00 2001 From: brettp Date: Tue, 7 Jul 2009 15:09:53 +0000 Subject: Refs #1099: Using write access hook to allow group-only ACLs. Need to examine better solutions after 1.7. git-svn-id: https://code.elgg.org/elgg/trunk@3395 36083f99-b078-4883-b0ff-0f9b5a30f544 --- engine/lib/access.php | 5 +++-- mod/groups/start.php | 40 +++++++++++++++++++++++++++++----------- 2 files changed, 32 insertions(+), 13 deletions(-) diff --git a/engine/lib/access.php b/engine/lib/access.php index aace86335..c97149582 100644 --- a/engine/lib/access.php +++ b/engine/lib/access.php @@ -100,15 +100,16 @@ $access_array[$user_id] = $tmp_access_array; } else - return $tmp_access_array; // No user id logged in so we can only access public info + $tmp_return = $tmp_access_array; // No user id logged in so we can only access public info } else { $tmp_access_array = $access_array[$user_id]; } - return $access_array[$user_id]; + $tmp_return = $access_array[$user_id]; + return trigger_plugin_hook('access:collections:read','user',array('user_id' => $user_id, 'site_id' => $site_id),$tmp_access_array); } /** diff --git a/mod/groups/start.php b/mod/groups/start.php index b7a99d5bc..57e0a9766 100644 --- a/mod/groups/start.php +++ b/mod/groups/start.php @@ -63,8 +63,9 @@ extend_view('profile/icon','groups/icon'); extend_view('css','groups/css'); - // Write access permissions + // Access permissions register_plugin_hook('access:collections:write', 'all', 'groups_write_acl_plugin_hook'); + //register_plugin_hook('access:collections:read', 'all', 'groups_read_acl_plugin_hook'); // Notification hooks if (is_callable('register_notification_object')) @@ -373,12 +374,18 @@ */ function groups_read_acl_plugin_hook($hook, $entity_type, $returnvalue, $params) { - //error_log("READ: " . var_export($returnvalue)); $user = $_SESSION['user']; if ($user) { - $membership = get_users_membership($user->guid); + // Not using this because of recursion. + // Joining a group automatically add user to ACL, + // So just see if they're a member of the ACL. + //$membership = get_users_membership($user->guid); + + $members = get_members_of_access_collection($group->group_acl); + print_r($members); + exit; if ($membership) { @@ -395,16 +402,27 @@ function groups_write_acl_plugin_hook($hook, $entity_type, $returnvalue, $params) { $page_owner = page_owner_entity(); - - if ($page_owner instanceof ElggGroup) - { - if (can_write_to_container()) - { - $returnvalue[$page_owner->group_acl] = elgg_echo('groups:group') . ": " . $page_owner->name; - - return $returnvalue; + // get all groups if logged in + if ($loggedin = get_loggedin_user()) { + $groups = get_entities_from_relationship('member', $loggedin->getGUID()); + if (is_array($groups)) { + foreach ($groups as $group) { + $returnvalue[$group->group_acl] = elgg_echo('groups:group') . ': ' . $group->name; + } } } + + // This doesn't seem to do anything. + // There are no hooks to override container permissions for groups +// +// if ($page_owner instanceof ElggGroup) +// { +// if (can_write_to_container()) +// { +// $returnvalue[$page_owner->group_acl] = elgg_echo('groups:group') . ": " . $page_owner->name; +// } +// } + return $returnvalue; } /** -- cgit v1.2.3