aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engine/lib/group.php10
-rw-r--r--mod/groups/languages/en.php3
-rw-r--r--mod/groups/start.php84
3 files changed, 94 insertions, 3 deletions
diff --git a/engine/lib/group.php b/engine/lib/group.php
index cc488ab0d..b0c6d3346 100644
--- a/engine/lib/group.php
+++ b/engine/lib/group.php
@@ -729,7 +729,15 @@
return remove_entity_relationship($user_guid, 'member', $group_guid);
}
-
+ /**
+ * Return all groups a user is a member of.
+ *
+ * @param unknown_type $user_guid
+ */
+ function get_users_membership($user_guid)
+ {
+ return get_entities_from_relationship('member', $user_guid, true);
+ }
?> \ No newline at end of file
diff --git a/mod/groups/languages/en.php b/mod/groups/languages/en.php
index 4aafe7b57..d13568bd4 100644
--- a/mod/groups/languages/en.php
+++ b/mod/groups/languages/en.php
@@ -14,7 +14,7 @@
/**
* Menu items and titles
*/
-
+
'groups' => "Groups",
'groups:yours' => "Your groups",
'groups:user' => "%s's groups",
@@ -42,6 +42,7 @@
'groups:inviteto' => "Invite friends to '%s'",
'groups:nofriends' => "You have no friends left who have not been invited to this group.",
+ 'groups:group' => "Group",
'groups:privategroup' => 'This group is private, requesting membership.',
'groups:notitle' => 'Groups must have a title',
diff --git a/mod/groups/start.php b/mod/groups/start.php
index 04e211e80..38d1cc7d7 100644
--- a/mod/groups/start.php
+++ b/mod/groups/start.php
@@ -67,7 +67,7 @@
// where key is the array key below
$CONFIG->group = array(
- 'title' => 'text',
+ 'name' => 'text',
'description' => 'longtext',
//'location' => 'tags',
'interests' => 'tags',
@@ -150,6 +150,88 @@
}
+ /**
+ * Groups created, so add users to access lists.
+ */
+ function groups_create_event_listener($event, $object_type, $object)
+ {
+ if (($event == 'create') && ($object_type == 'group') && ($object instanceof ElggGroup))
+ {
+ $group_id = create_access_collection(elgg_echo('groups:group') . ": " . $object->name);
+ if ($group_id)
+ {
+ $object->group_acl = $group_id;
+ }
+ else
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Hook to listen to read access control requests and return all the groups you are a member of.
+ */
+ 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);
+
+ if ($membership)
+ {
+ foreach ($membership as $group)
+ $returnvalue[$user->guid][$group->group_acl] = elgg_echo('groups:group') . ": " . $group->name;
+
+ return $returnvalue;
+ }
+ }
+ }
+
+ /**
+ * Return the write access for the current group if the user has write access to it.
+ */
+ function groups_write_acl_plugin_hook($hook, $entity_type, $returnvalue, $params)
+ {
+ $group_guid = get_input('group_guid');
+
+ if ($group_guid)
+ {
+ $group = get_entity($group_guid);
+
+ if (($group) && ($group->can_write_to_container($_SESSION['user']->guid)))
+ {
+ $returnvalue[$group->group_acl] = elgg_echo('groups:group') . ": " . $group->name;
+
+ return $returnvalue;
+ }
+ }
+ }
+
+ /**
+ * Groups deleted, so remove access lists.
+ */
+ function groups_delete_event_listener($event, $object_type, $object)
+ {
+ delete_access_collection($object->access_id);
+
+ return true;
+ }
+
+ // Register a handler for create groups
+ register_elgg_event_handler('create', 'group', 'groups_create_event_listener');
+
+ // Register a handler for delete groups
+ register_elgg_event_handler('delete', 'group', 'groups_delete_event_listener');
+
+ // Read access permissions
+ register_plugin_hook('access:collections', 'all', 'groups_read_acl_plugin_hook');
+
+ // Write access permissions
+ register_plugin_hook('access:collections:write', 'all', 'groups_write_acl_plugin_hook');
+
// Make sure the groups initialisation function is called on initialisation
register_elgg_event_handler('init','system','groups_init');
?> \ No newline at end of file