]> gitweb.fluxo.info Git - lorea/elgg.git/commitdiff
moved most of the groups pages into its library
authorcash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
Mon, 10 Jan 2011 13:02:04 +0000 (13:02 +0000)
committercash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
Mon, 10 Jan 2011 13:02:04 +0000 (13:02 +0000)
git-svn-id: http://code.elgg.org/elgg/trunk@7867 36083f99-b078-4883-b0ff-0f9b5a30f544

13 files changed:
mod/groups/activity.php [deleted file]
mod/groups/all.php [deleted file]
mod/groups/edit.php [deleted file]
mod/groups/groupprofile.php [deleted file]
mod/groups/index.php [deleted file]
mod/groups/invitations.php [deleted file]
mod/groups/languages/en.php
mod/groups/lib/groups.php [new file with mode: 0644]
mod/groups/membership.php [deleted file]
mod/groups/new.php [deleted file]
mod/groups/start.php
mod/groups/views/default/groups/group_sort_menu.php
mod/groups/views/default/groups/profile/buttons.php

diff --git a/mod/groups/activity.php b/mod/groups/activity.php
deleted file mode 100644 (file)
index 57678be..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-<?php\r
-/**\r
- * Elgg group activity\r
- */\r
-\r
-require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php");\r
-\r
-$group_guid = (int)get_input('group');\r
-set_page_owner($group_guid);\r
-if (!(elgg_get_page_owner() instanceof ElggGroup)) {\r
-       forward();\r
-}\r
-group_gatekeeper();\r
-\r
-global $CONFIG;\r
-\r
-// set up breadcrumbs\r
-$group = get_entity($group_guid);\r
-elgg_push_breadcrumb(elgg_echo('groups'), elgg_get_site_url()."pg/groups/world/");\r
-elgg_push_breadcrumb($group->name, $group->getURL());\r
-elgg_push_breadcrumb(elgg_echo('groups:activity'));\r
-\r
-$area1 = elgg_view('navigation/breadcrumbs');\r
-\r
-$limit = get_input("limit", 20);\r
-$offset = get_input("offset", 0);\r
-$group_guid = get_input("group", 7);\r
-// Sanitise variables -- future proof in case they get sourced elsewhere\r
-$limit = (int) $limit;\r
-$offset = (int) $offset;\r
-$group_guid = (int) $group_guid;\r
-\r
-$entities = elgg_get_entities(array(\r
-       'container_guids' => $group_guid,\r
-       'group_by' => 'e.guid'\r
-));\r
-\r
-$entity_guids = array();\r
-foreach ($entities as $entity) {\r
-       $entity_guids[] = $entity->getGUID();\r
-}\r
-\r
-if (count($entity_guids) > 0) {\r
-       $river_items = elgg_view_river_items('', $entity_guids, '', '', '', '', $limit);\r
-       $river_items .= elgg_view('riverdashboard/js');\r
-} else {\r
-       $river_items .= elgg_echo('groups:no_activity');\r
-}\r
-\r
-$area1 .= elgg_view_title(elgg_echo('groups:activity'));\r
-$area1 .= elgg_view("group_activity/extend");\r
-$area1 .= "<div class='group_listings hide_comments'>".$river_items."</div>";\r
-$title = elgg_echo("groups:activity", array(elgg_get_page_owner()->name));\r
-$body = elgg_view_layout('one_column_with_sidebar', array('content' => $area1));\r
-\r
-// Finally draw the page\r
-echo elgg_view_page($title, $body);
\ No newline at end of file
diff --git a/mod/groups/all.php b/mod/groups/all.php
deleted file mode 100644 (file)
index 51030ad..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-<?php
-/**
- * Elgg groups plugin
- *
- * @package ElggGroups
- */
-require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php");
-
-$limit = get_input("limit", 10);
-$offset = get_input("offset", 0);
-$filter = get_input("filter");
-if (!$filter) {
-       // active discussions is the default
-       $filter = "newest";
-}
-
-$context = elgg_get_context();
-
-switch ($filter) {
-       case "newest":
-               $objects = elgg_list_entities(array(
-                       'type' => 'group',
-                       'limit' => $limit,
-                       'full_view' => false,
-               ));
-               break;
-
-       case "pop":
-               $objects = list_entities_by_relationship_count('member', true, "", "", 0, $limit, false);
-               break;
-
-       case "active":
-       case 'default':
-               $options = array(
-                       'type' => 'object',
-                       'subtype' => 'groupforumtopic',
-                       'annotation_name' => 'generic_comment',
-                       'order_by' => 'e.last_action desc',
-                       'limit' => 40,
-                       'fullview' => TRUE
-               );
-               $objects = elgg_list_entities($options);
-               break;
-}
-
-//get a group count
-$group_count = elgg_get_entities(array('types' => 'group', 'limit' => 10, 'count' => TRUE));
-
-//find groups
-$area2 .= elgg_view("groups/sidebar/find");
-
-//featured groups
-$area2 .= elgg_view("groups/sidebar/featured");
-
-elgg_set_context($context);
-
-$objects = "<div class='group_listings'>" . $objects . "</div>";
-
-$title = elgg_echo("groups:all", array(elgg_get_page_owner()->name));
-if (isloggedin ()) {
-       $area1 .= elgg_view('page/elements/content_header', array('context' => "everyone", 'type' => 'groups', 'new_link' => "pg/groups/new"));
-}
-$area1 .= elgg_view("groups/group_sort_menu", array("count" => $group_count, "filter" => $filter)) . $objects;
-
-$params = array(
-       'content' => $area1,
-       'sidebar' => $area2
-);
-$body = elgg_view_layout('one_sidebar', $params);
-
-// Finally draw the page
-echo elgg_view_page($title, $body);
\ No newline at end of file
diff --git a/mod/groups/edit.php b/mod/groups/edit.php
deleted file mode 100644 (file)
index 59064b7..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-       /**
-        * Elgg groups plugin
-        * 
-        * @package ElggGroups
-        */
-
-       require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php");
-       group_gatekeeper();
-
-       $group_guid = get_input('group_guid');
-       $group = get_entity($group_guid);
-       set_page_owner($group_guid);
-
-       $title = elgg_echo("groups:edit");
-       $body = elgg_view_title($title);
-       
-       if (($group) && ($group->canEdit()))
-       {
-               $body .= elgg_view("forms/groups/edit", array('entity' => $group));
-                        
-       } else {
-               $body .= elgg_echo('groups:noaccess');
-       }
-       
-       $body = elgg_view_layout('one_column_with_sidebar', array('content' => $body));
-       
-       echo elgg_view_page($title, $body);
-?>
\ No newline at end of file
diff --git a/mod/groups/groupprofile.php b/mod/groups/groupprofile.php
deleted file mode 100644 (file)
index 1c35163..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-<?php
-/**
- * Profile of a group
- * 
- * @package ElggGroups
- */
-
-$guid = get_input('group_guid');
-elgg_set_context('groups');
-
-elgg_set_page_owner_guid($guid);
-
-// can the user see all content
-$group_access = group_gatekeeper(false);
-
-// turn this into a core function
-global $autofeed;
-$autofeed = true;
-
-$group = get_entity($guid);
-
-elgg_push_breadcrumb(elgg_echo('groups:all'), elgg_get_site_url() . "pg/groups/world");
-elgg_push_breadcrumb($group->name);
-
-$sidebar = '';
-$content = elgg_view('groups/profile/profile_block', array('entity' => $group));
-if (group_gatekeeper(false)) {
-       $content .= elgg_view('groups/profile/widgets', array('entity' => $group));
-       $sidebar = elgg_view('groups/sidebar/members', array('entity' => $group));
-} else {
-       $content .= elgg_view('groups/profile/closed_membership');
-}
-
-$params = array(
-       'content' => $content,
-       'sidebar' => $sidebar,
-       'title' => $group->name,
-       'buttons' => elgg_view('groups/profile/buttons', array('entity' => $group)),
-       'filter' => '',
-);
-$body = elgg_view_layout('content', $params);
-
-echo elgg_view_page($title, $body);
diff --git a/mod/groups/index.php b/mod/groups/index.php
deleted file mode 100644 (file)
index 1deabb3..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-       /**
-        * Elgg groups plugin
-        * 
-        * @package ElggGroups
-        */
-
-       require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php");
-       
-       $limit = get_input("limit", 10);
-       $offset = get_input("offset", 0);
-       
-       $title = elgg_echo("groups:owned");
-
-       // Get objects
-       $area1 = elgg_view('page/elements/content_header', array('context' => "everyone", 'type' => 'groups', 'new_link' => "pg/groups/new"));
-       
-       elgg_push_context('search');
-       $objects = elgg_list_entities(array('types' => 'group', 'owner_guid' => elgg_get_page_owner_guid(), 'limit' => $limit, 'offset' => $offset, 'full_view' => FALSE));
-       elgg_pop_context();
-       
-       $area1 .= $objects;
-       $body = elgg_view_layout('one_column_with_sidebar', array('content' => $area1));
-       
-       // Finally draw the page
-       echo elgg_view_page($title, $body);
-?>
diff --git a/mod/groups/invitations.php b/mod/groups/invitations.php
deleted file mode 100644 (file)
index 6a187a8..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-/**
- * Manage group invitation requests.
- *
- * @package ElggGroups
- */
-
-require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php");
-gatekeeper();
-
-set_page_owner(get_loggedin_userid());
-
-$user = get_loggedin_user();
-
-$title = elgg_echo('groups:invitations');
-
-$area2 = elgg_view_title($title);
-
-if ($user) {
-       // @todo temporary workaround for exts #287.
-       $invitations = groups_get_invited_groups($user->getGUID());
-
-       $area2 .= elgg_view('groups/invitationrequests',array('invitations' => $invitations));
-       elgg_set_ignore_access($ia);
-} else {
-       $area2 .= elgg_echo("groups:noaccess");
-}
-
-$body = elgg_view_layout('one_column_with_sidebar', array('content' => $area1));
-
-echo elgg_view_page($title, $body);
\ No newline at end of file
index f28bc08468c699fcd5509dede0f11b4dd469ad48..1d136e74121c073cf2b00b940dea2ba99588031f 100644 (file)
@@ -15,7 +15,7 @@ $english = array(
        'groups:yours' => "My groups",
        'groups:user' => "%s's groups",
        'groups:all' => "All groups",
-       'groups:new' => "Create a new group",
+       'groups:add' => "Create a new group",
        'groups:edit' => "Edit group",
        'groups:delete' => 'Delete group',
        'groups:membershiprequests' => 'Manage join requests',
diff --git a/mod/groups/lib/groups.php b/mod/groups/lib/groups.php
new file mode 100644 (file)
index 0000000..faedca1
--- /dev/null
@@ -0,0 +1,248 @@
+<?php
+/**
+ * Groups function library
+ */
+
+/**
+ * List all groups
+ */
+function groups_handle_all_page() {
+
+       // all groups doesn't get link to self
+       elgg_pop_breadcrumb();
+       elgg_push_breadcrumb(elgg_echo('groups'));
+
+       $selected_tab = get_input('filter', 'newest');
+
+       switch ($selected_tab) {
+               case 'pop':
+                       $content = elgg_list_entities_from_relationship_count(array(
+                               'type' => 'group',
+                               'relationship' => 'member',
+                               'inverse_relationship' => false,
+                               'full_view' => false,
+                       ));
+                       break;
+               case 'active':
+                       $content = elgg_list_entities(array(
+                               'type' => 'object',
+                               'subtype' => 'groupforumtopic',
+                               'annotation_name' => 'generic_comment',
+                               'order_by' => 'e.last_action desc',
+                               'limit' => 40,
+                               'fullview' => false,
+                       ));
+                       break;
+               case 'newest':
+               default:
+                       $content = elgg_list_entities(array(
+                               'type' => 'group',
+                               'full_view' => false,
+                       ));
+                       break;
+       }
+
+       $filter = elgg_view('groups/group_sort_menu', array('selected' => $selected_tab));
+       
+       $sidebar = elgg_view('groups/sidebar/find');
+       $sidebar .= elgg_view('groups/sidebar/featured');
+
+       $params = array(
+               'content' => $content,
+               'sidebar' => $sidebar,
+               'filter' => $filter,
+       );
+       $body = elgg_view_layout('content', $params);
+
+       echo elgg_view_page($title, $body);
+}
+
+/**
+ * List owned groups
+ */
+function groups_handle_owned_page() {
+
+       $page_owner = elgg_get_page_owner();
+
+       $title = elgg_echo('groups:owned');
+       elgg_push_breadcrumb($title);
+
+       $content = elgg_list_entities(array(
+               'type' => 'group',
+               'owner_guid' => elgg_get_page_owner_guid(),
+               'full_view' => false,
+       ));
+
+       $params = array(
+               'content' => $content,
+               'title' => $title,
+               'filter' => '',
+       );
+       $body = elgg_view_layout('content', $params);
+
+       echo elgg_view_page($title, $body);
+}
+
+/**
+ * List groups the user is memober of
+ */
+function groups_handle_mine_page() {
+
+       $page_owner = elgg_get_page_owner();
+
+       $title = elgg_echo('groups:yours');
+       elgg_push_breadcrumb($title);
+
+       $content = elgg_list_entities_from_relationship_count(array(
+               'type' => 'group',
+               'relationship' => 'member',
+               'relationship_guid' => elgg_get_page_owner_guid(),
+               'inverse_relationship' => false,
+               'full_view' => false,
+       ));
+
+       $params = array(
+               'content' => $content,
+               'title' => $title,
+               'filter' => '',
+       );
+       $body = elgg_view_layout('content', $params);
+
+       echo elgg_view_page($title, $body);
+}
+
+/**
+ * Create or edit a group
+ *
+ * @param string $page
+ * @param int $guid
+ */
+function groups_handle_edit_page($page, $guid = 0) {
+       gatekeeper();
+       
+       if ($page == 'add') {
+               elgg_set_page_owner_guid(get_loggedin_userid());
+               $title = elgg_echo('groups:add');
+               elgg_push_breadcrumb($title);
+               $content = elgg_view('forms/groups/edit');
+       } else {
+               $title = elgg_echo("groups:edit");
+               $group = get_entity($guid);
+
+               if ($group && $group->canEdit()) {
+                       elgg_set_page_owner_guid($group->getGUID());
+                       elgg_push_breadcrumb($group->name, $group->getURL());
+                       elgg_push_breadcrumb($title);
+                       $content = elgg_view("forms/groups/edit", array('entity' => $group));
+               } else {
+                       $content = elgg_echo('groups:noaccess');
+               }
+       }
+       
+       $params = array(
+               'content' => $content,
+               'title' => $title,
+               'filter' => '',
+               'buttons' => '',
+       );
+       $body = elgg_view_layout('content', $params);
+
+       echo elgg_view_page($title, $body);
+}
+
+/**
+ * Group invitations for a user
+ */
+function groups_handle_invitations_page() {
+       gatekeeper();
+
+       $user = elgg_get_page_owner();
+
+       $title = elgg_echo('groups:invitations');
+       elgg_push_breadcrumb($title);
+
+       // @todo temporary workaround for exts #287.
+       $invitations = groups_get_invited_groups($user->getGUID());
+       $content = elgg_view('groups/invitationrequests', array('invitations' => $invitations));
+
+       $params = array(
+               'content' => $content,
+               'title' => $title,
+               'filter' => '',
+               'buttons' => '',
+       );
+       $body = elgg_view_layout('content', $params);
+
+       echo elgg_view_page($title, $body);
+}
+
+/**
+ * Group profile page
+ *
+ * @param int $guid Group entity GUID
+ */
+function groups_handle_profile_page($guid) {
+       elgg_set_page_owner_guid($guid);
+
+       // turn this into a core function
+       global $autofeed;
+       $autofeed = true;
+
+       $group = get_entity($guid);
+
+       elgg_push_breadcrumb($group->name);
+
+       $sidebar = '';
+       $content = elgg_view('groups/profile/profile_block', array('entity' => $group));
+       if (group_gatekeeper(false)) {
+               $content .= elgg_view('groups/profile/widgets', array('entity' => $group));
+               $sidebar = elgg_view('groups/sidebar/members', array('entity' => $group));
+       } else {
+               $content .= elgg_view('groups/profile/closed_membership');
+       }
+
+       $params = array(
+               'content' => $content,
+               'sidebar' => $sidebar,
+               'title' => $group->name,
+               'buttons' => elgg_view('groups/profile/buttons', array('entity' => $group)),
+               'filter' => '',
+       );
+       $body = elgg_view_layout('content', $params);
+
+       echo elgg_view_page($title, $body);
+}
+
+/**
+ * Group activity page
+ *
+ * @param int $guid Group entity GUID
+ */
+function groups_handle_activity_page($guid) {
+
+       elgg_set_page_owner_guid($guid);
+
+       $group = get_entity($guid);
+       if (!$group || !elgg_instanceof($group, 'group')) {
+               forward();
+       }
+
+       group_gatekeeper();
+
+       $title = elgg_echo('groups:activity');
+
+       elgg_push_breadcrumb($group->name, $group->getURL());
+       elgg_push_breadcrumb($title);
+
+       $content = "Group activity goes here";
+
+       $params = array(
+               'content' => $content,
+               'title' => $title,
+               'buttons' => '',
+               'filter' => '',
+       );
+       $body = elgg_view_layout('content', $params);
+
+       echo elgg_view_page($title, $body);
+}
diff --git a/mod/groups/membership.php b/mod/groups/membership.php
deleted file mode 100644 (file)
index 6af38f4..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-
-       /**
-        * Elgg groups 'member of' page
-        * 
-        * @package ElggGroups
-        */
-
-       require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php");
-       
-       gatekeeper();
-       group_gatekeeper();
-       
-       $limit = get_input("limit", 10);
-       $offset = get_input("offset", 0);
-       
-       if (elgg_get_page_owner_guid() == get_loggedin_userid()) {
-               $title = elgg_echo("groups:yours");
-       } else $title = elgg_echo("groups:owned");
-
-       // Get objects
-       $area2 = elgg_view('page/elements/content_header', array('context' => "mine", 'type' => 'groups', 'new_link' => "pg/groups/new"));
-       
-       elgg_push_context('search');
-       // offset is grabbed in the list_entities_from_relationship() function
-       $objects = list_entities_from_relationship('member',page_owner(),false,'group','',0, $limit,false, false);
-       elgg_pop_context();
-       
-       $area2 .= $objects;
-       $body = elgg_view_layout('one_column_with_sidebar', array('content' => $area1. $area2));
-       
-       // Finally draw the page
-       echo elgg_view_page($title, $body);
-?>
diff --git a/mod/groups/new.php b/mod/groups/new.php
deleted file mode 100644 (file)
index 84d1539..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-       /**
-        * Elgg groups plugin
-        * 
-        * @package ElggGroups
-        */
-
-       gatekeeper();
-
-       set_page_owner(get_loggedin_userid());
-
-       // Render the file upload page
-       $title = elgg_echo("groups:new");
-       $area2 = elgg_view_title($title);
-       $area2 .= elgg_view("forms/groups/edit");
-       
-       $body = elgg_view_layout('one_column_with_sidebar', array('content' => $area1 . $area2));
-       
-       echo elgg_view_page($title, $body);
-?>
\ No newline at end of file
index c2b3dc35b5a87c111a90bbc44afe53b2fe752789..23936fed752df80dbe55a1079fce5c0272382338 100644 (file)
@@ -1,92 +1,92 @@
 <?php
-       /**
       * Elgg groups plugin
       *
       * @package ElggGroups
       */
-
-       /**
       * Initialise the groups plugin.
       * Register actions, set up menus
       */
-       function groups_init() {
+/**
+ * Elgg groups plugin
+ *
+ * @package ElggGroups
+ */
+
+/**
+ * Initialise the groups plugin.
+ * Register actions, set up menus
+ */
+function groups_init() {
 
-               global $CONFIG;
-
-               // Set up the menu
-               $item = new ElggMenuItem('groups', elgg_echo('groups'), 'pg/groups/world');
-               elgg_register_menu_item('site', $item);
-
-               // Register a page handler, so we can have nice URLs
-               register_page_handler('groups','groups_page_handler');
+       global $CONFIG;
 
-               // Register a URL handler for groups and forum topics
-               register_entity_url_handler('groups_url','group','all');
-               register_entity_url_handler('groups_groupforumtopic_url','object','groupforumtopic');
+       elgg_register_library('elgg:groups', elgg_get_plugin_path() . 'groups/lib/groups.php');
 
-               // Register an icon handler for groups
-               register_page_handler('groupicon','groups_icon_handler');
+       // Set up the menu
+       $item = new ElggMenuItem('groups', elgg_echo('groups'), 'pg/groups/world');
+       elgg_register_menu_item('site', $item);
 
-               // Register some actions
-               elgg_register_action("groups/edit", $CONFIG->pluginspath . "groups/actions/edit.php");
-               elgg_register_action("groups/delete", $CONFIG->pluginspath . "groups/actions/delete.php");
-               elgg_register_action("groups/join", $CONFIG->pluginspath . "groups/actions/join.php");
-               elgg_register_action("groups/leave", $CONFIG->pluginspath . "groups/actions/leave.php");
-               elgg_register_action("groups/joinrequest", $CONFIG->pluginspath . "groups/actions/joinrequest.php");
-               elgg_register_action("groups/killrequest", $CONFIG->pluginspath . "groups/actions/groupskillrequest.php");
-               elgg_register_action("groups/killinvitation", $CONFIG->pluginspath . "groups/actions/groupskillinvitation.php");
-               elgg_register_action("groups/addtogroup", $CONFIG->pluginspath . "groups/actions/addtogroup.php");
-               elgg_register_action("groups/invite", $CONFIG->pluginspath . "groups/actions/invite.php");
+       // Register a page handler, so we can have nice URLs
+       register_page_handler('groups', 'groups_page_handler');
 
-               // Add a page owner handler
-               //elgg_register_plugin_hook_handler('page_owner', 'system', 'groups_page_owner_handler');
+       // Register a URL handler for groups and forum topics
+       register_entity_url_handler('groups_url', 'group', 'all');
+       register_entity_url_handler('groups_groupforumtopic_url', 'object', 'groupforumtopic');
 
-               // Add some widgets
-               elgg_register_widget_type('a_users_groups',elgg_echo('groups:widget:membership'), elgg_echo('groups:widgets:description'));
+       // Register an icon handler for groups
+       register_page_handler('groupicon', 'groups_icon_handler');
 
+       // Register some actions
+       elgg_register_action("groups/edit", $CONFIG->pluginspath . "groups/actions/edit.php");
+       elgg_register_action("groups/delete", $CONFIG->pluginspath . "groups/actions/delete.php");
+       elgg_register_action("groups/join", $CONFIG->pluginspath . "groups/actions/join.php");
+       elgg_register_action("groups/leave", $CONFIG->pluginspath . "groups/actions/leave.php");
+       elgg_register_action("groups/joinrequest", $CONFIG->pluginspath . "groups/actions/joinrequest.php");
+       elgg_register_action("groups/killrequest", $CONFIG->pluginspath . "groups/actions/groupskillrequest.php");
+       elgg_register_action("groups/killinvitation", $CONFIG->pluginspath . "groups/actions/groupskillinvitation.php");
+       elgg_register_action("groups/addtogroup", $CONFIG->pluginspath . "groups/actions/addtogroup.php");
+       elgg_register_action("groups/invite", $CONFIG->pluginspath . "groups/actions/invite.php");
 
-               //extend some views
-               elgg_extend_view('profile/icon','groups/icon');
-               elgg_extend_view('css/screen','groups/css');
+       // Add a page owner handler
+       //elgg_register_plugin_hook_handler('page_owner', 'system', 'groups_page_owner_handler');
+       // Add some widgets
+       elgg_register_widget_type('a_users_groups', elgg_echo('groups:widget:membership'), elgg_echo('groups:widgets:description'));
 
-               // Access permissions
-               elgg_register_plugin_hook_handler('access:collections:write', 'all', 'groups_write_acl_plugin_hook');
-               //elgg_register_plugin_hook_handler('access:collections:read', 'all', 'groups_read_acl_plugin_hook');
 
-               // Notification hooks
-               if (is_callable('register_notification_object'))
-                       register_notification_object('object', 'groupforumtopic', elgg_echo('groupforumtopic:new'));
-               elgg_register_plugin_hook_handler('object:notifications','object','group_object_notifications_intercept');
+       //extend some views
+       elgg_extend_view('profile/icon', 'groups/icon');
+       elgg_extend_view('css/screen', 'groups/css');
 
-               // Listen to notification events and supply a more useful message
-               elgg_register_plugin_hook_handler('notify:entity:message', 'object', 'groupforumtopic_notify_message');
+       // Access permissions
+       elgg_register_plugin_hook_handler('access:collections:write', 'all', 'groups_write_acl_plugin_hook');
+       //elgg_register_plugin_hook_handler('access:collections:read', 'all', 'groups_read_acl_plugin_hook');
+       // Notification hooks
+       if (is_callable('register_notification_object'))
+               register_notification_object('object', 'groupforumtopic', elgg_echo('groupforumtopic:new'));
+       elgg_register_plugin_hook_handler('object:notifications', 'object', 'group_object_notifications_intercept');
 
-               // add the forum tool option
-               add_group_tool_option('forum',elgg_echo('groups:enableforum'),true);
+       // Listen to notification events and supply a more useful message
+       elgg_register_plugin_hook_handler('notify:entity:message', 'object', 'groupforumtopic_notify_message');
 
-               // Now override icons
-               elgg_register_plugin_hook_handler('entity:icon:url', 'group', 'groups_groupicon_hook');
+       // add the forum tool option
+       add_group_tool_option('forum', elgg_echo('groups:enableforum'), true);
 
-               // Register profile menu hook
-               elgg_register_plugin_hook_handler('profile_menu', 'profile', 'forum_profile_menu');
-               elgg_register_plugin_hook_handler('profile_menu', 'profile', 'activity_profile_menu');
+       // Now override icons
+       elgg_register_plugin_hook_handler('entity:icon:url', 'group', 'groups_groupicon_hook');
 
-               // allow ecml in discussion and profiles
-               elgg_register_plugin_hook_handler('get_views', 'ecml', 'groups_ecml_views_hook');
-               elgg_register_plugin_hook_handler('get_views', 'ecml', 'groupprofile_ecml_views_hook');
+       // Register profile menu hook
+       elgg_register_plugin_hook_handler('profile_menu', 'profile', 'forum_profile_menu');
+       elgg_register_plugin_hook_handler('profile_menu', 'profile', 'activity_profile_menu');
 
-       }
+       // allow ecml in discussion and profiles
+       elgg_register_plugin_hook_handler('get_views', 'ecml', 'groups_ecml_views_hook');
+       elgg_register_plugin_hook_handler('get_views', 'ecml', 'groupprofile_ecml_views_hook');
+}
 
-       /**
       * Event handler for group forum posts
       *
       */
-       function group_object_notifications($event, $object_type, $object) {
+/**
+ * Event handler for group forum posts
+ *
+ */
+function group_object_notifications($event, $object_type, $object) {
 
-               static $flag;
-               if (!isset($flag)) $flag = 0;
+       static $flag;
+       if (!isset($flag))
+               $flag = 0;
 
-               if (is_callable('object_notifications'))
+       if (is_callable('object_notifications'))
                if ($object instanceof ElggObject) {
                        if ($object->getSubtype() == 'groupforumtopic') {
                                //if ($object->countAnnotations('group_topic_post') > 0) {
                                //}
                        }
                }
-
-       }
-
-       /**
-        * Intercepts the notification on group topic creation and prevents a notification from going out
-        * (because one will be sent on the annotation)
-        *
-        * @param unknown_type $hook
-        * @param unknown_type $entity_type
-        * @param unknown_type $returnvalue
-        * @param unknown_type $params
-        * @return unknown
-        */
-               function group_object_notifications_intercept($hook, $entity_type, $returnvalue, $params) {
-                       if (isset($params)) {
-                               if ($params['event'] == 'create' && $params['object'] instanceof ElggObject) {
-                                       if ($params['object']->getSubtype() == 'groupforumtopic') {
-                                               return true;
-                                       }
-                               }
+}
+
+/**
+ * Intercepts the notification on group topic creation and prevents a notification from going out
+ * (because one will be sent on the annotation)
+ *
+ * @param unknown_type $hook
+ * @param unknown_type $entity_type
+ * @param unknown_type $returnvalue
+ * @param unknown_type $params
+ * @return unknown
+ */
+function group_object_notifications_intercept($hook, $entity_type, $returnvalue, $params) {
+       if (isset($params)) {
+               if ($params['event'] == 'create' && $params['object'] instanceof ElggObject) {
+                       if ($params['object']->getSubtype() == 'groupforumtopic') {
+                               return true;
                        }
-                       return null;
                }
-
-               /**
-                * Returns a more meaningful message
-                *
-                * @param unknown_type $hook
-                * @param unknown_type $entity_type
-                * @param unknown_type $returnvalue
-                * @param unknown_type $params
-                */
-               function groupforumtopic_notify_message($hook, $entity_type, $returnvalue, $params)
-               {
-                       $entity = $params['entity'];
-                       $to_entity = $params['to_entity'];
-                       $method = $params['method'];
-                       if (($entity instanceof ElggEntity) && ($entity->getSubtype() == 'groupforumtopic'))
-                       {
-
-                               $descr = $entity->description;
-                               $title = $entity->title;
-                               global $CONFIG;
-                               $url = $entity->getURL();
-
-                               $msg = get_input('topicmessage');
-                               if (empty($msg)) $msg = get_input('topic_post');
-                               if (!empty($msg)) $msg = $msg . "\n\n"; else $msg = '';
-
-                               $owner = get_entity($entity->container_guid);
-                               if ($method == 'sms') {
-                                       return elgg_echo("groupforumtopic:new") . ': ' . $url . " ({$owner->name}: {$title})";
-                               } else {
-                                       return get_loggedin_user()->name . ' ' . elgg_echo("groups:viagroups") . ': ' . $title . "\n\n" . $msg . "\n\n" . $entity->getURL();
-                               }
-
-                       }
-                       return null;
-               }
-
-       /**
-        * This function loads a set of default fields into the profile, then triggers a hook letting other plugins to edit
-        * add and delete fields.
-        *
-        * Note: This is a secondary system:init call and is run at a super low priority to guarantee that it is called after all
-        * other plugins have initialised.
-        */
-       function groups_fields_setup()
-       {
+       }
+       return null;
+}
+
+/**
+ * Returns a more meaningful message
+ *
+ * @param unknown_type $hook
+ * @param unknown_type $entity_type
+ * @param unknown_type $returnvalue
+ * @param unknown_type $params
+ */
+function groupforumtopic_notify_message($hook, $entity_type, $returnvalue, $params) {
+       $entity = $params['entity'];
+       $to_entity = $params['to_entity'];
+       $method = $params['method'];
+       if (($entity instanceof ElggEntity) && ($entity->getSubtype() == 'groupforumtopic')) {
+
+               $descr = $entity->description;
+               $title = $entity->title;
                global $CONFIG;
+               $url = $entity->getURL();
+
+               $msg = get_input('topicmessage');
+               if (empty($msg))
+                       $msg = get_input('topic_post');
+               if (!empty($msg))
+                       $msg = $msg . "\n\n"; else
+                       $msg = '';
+
+               $owner = get_entity($entity->container_guid);
+               if ($method == 'sms') {
+                       return elgg_echo("groupforumtopic:new") . ': ' . $url . " ({$owner->name}: {$title})";
+               } else {
+                       return get_loggedin_user()->name . ' ' . elgg_echo("groups:viagroups") . ': ' . $title . "\n\n" . $msg . "\n\n" . $entity->getURL();
+               }
+       }
+       return null;
+}
+
+/**
+ * This function loads a set of default fields into the profile, then triggers a hook letting other plugins to edit
+ * add and delete fields.
+ *
+ * Note: This is a secondary system:init call and is run at a super low priority to guarantee that it is called after all
+ * other plugins have initialised.
+ */
+function groups_fields_setup() {
+       global $CONFIG;
 
-               $profile_defaults = array(
-
-                       'name' => 'text',
-                       'description' => 'longtext',
-                       'briefdescription' => 'text',
-                       'interests' => 'tags',
+       $profile_defaults = array(
+               'name' => 'text',
+               'description' => 'longtext',
+               'briefdescription' => 'text',
+               'interests' => 'tags',
                        //'website' => 'url',
-               );
+       );
 
-               $CONFIG->group = elgg_trigger_plugin_hook('profile:fields', 'group', NULL, $profile_defaults);
+       $CONFIG->group = elgg_trigger_plugin_hook('profile:fields', 'group', NULL, $profile_defaults);
 
-               // register any tag metadata names
-               foreach ($CONFIG->group as $name => $type) {
-                       if ($type == 'tags') {
-                               elgg_register_tag_metadata_name($name);
+       // register any tag metadata names
+       foreach ($CONFIG->group as $name => $type) {
+               if ($type == 'tags') {
+                       elgg_register_tag_metadata_name($name);
 
-                               // register a tag name translation
-                               add_translation(get_current_language(), array("tag_names:$name" => elgg_echo("groups:$name")));
-                       }
+                       // register a tag name translation
+                       add_translation(get_current_language(), array("tag_names:$name" => elgg_echo("groups:$name")));
                }
        }
+}
 
-       /**
       * Sets up submenus for the groups system.  Triggered on pagesetup.
       *
       */
-       function groups_submenus() {
-               global $CONFIG;
+/**
+ * Sets up submenus for the groups system.  Triggered on pagesetup.
+ *
+ */
+function groups_submenus() {
+       global $CONFIG;
 
-               // Get the page owner entity
-               $page_owner = elgg_get_page_owner();
+       // Get the page owner entity
+       $page_owner = elgg_get_page_owner();
 
-               if (elgg_get_context() == 'groups') {
-                       if ($page_owner instanceof ElggGroup) {
-                               if (isloggedin() && $page_owner->canEdit() && !$page_owner->isPublicMembership()) {
-                                       $url = elgg_get_site_url()."mod/groups/membershipreq.php?group_guid={$page_owner->getGUID()}";
-                                       add_submenu_item(elgg_echo('groups:membershiprequests'), $url, 'groupsactions1');
-                               }
-                       } else {
-                               add_submenu_item(elgg_echo('groups:all'), "pg/groups/world/", 'groupslinks1');
+       if (elgg_get_context() == 'groups') {
+               if ($page_owner instanceof ElggGroup) {
+                       if (isloggedin() && $page_owner->canEdit() && !$page_owner->isPublicMembership()) {
+                               $url = elgg_get_site_url() . "mod/groups/membershipreq.php?group_guid={$page_owner->getGUID()}";
+                               add_submenu_item(elgg_echo('groups:membershiprequests'), $url, 'groupsactions1');
+                       }
+               } else {
+                       add_submenu_item(elgg_echo('groups:all'), "pg/groups/world/", 'groupslinks1');
 
-                               if ($user = get_loggedin_user()) {
-                                       add_submenu_item(elgg_echo('groups:owned'), "pg/groups/owned/$user->username", 'groupslinks1');
-                                       add_submenu_item(elgg_echo('groups:yours'), "pg/groups/member/$user->username", 'groupslinks1');
-                                       add_submenu_item(elgg_echo('groups:invitations'), "pg/groups/invitations/$user->username", 'groupslinks1');
-                               }
+                       if ($user = get_loggedin_user()) {
+                               add_submenu_item(elgg_echo('groups:owned'), "pg/groups/owned/$user->username", 'groupslinks1');
+                               add_submenu_item(elgg_echo('groups:yours'), "pg/groups/member/$user->username", 'groupslinks1');
+                               add_submenu_item(elgg_echo('groups:invitations'), "pg/groups/invitations/$user->username", 'groupslinks1');
                        }
                }
        }
-
-       /**
-        * Set a page owner handler.
-        *
-        */
-       function groups_page_owner_handler()
-       {
-               $group_guid = get_input('group_guid');
-               if ($group_guid)
-               {
-                       $group = get_entity($group_guid);
-                       if ($group instanceof ElggGroup)
-                               return $group->owner_guid;
-               }
-
-               return false;
+}
+
+/**
+ * Set a page owner handler.
+ *
+ */
+function groups_page_owner_handler() {
+       $group_guid = get_input('group_guid');
+       if ($group_guid) {
+               $group = get_entity($group_guid);
+               if ($group instanceof ElggGroup)
+                       return $group->owner_guid;
        }
 
-       /**
-        * Group page handler
-        *
-        * @param array $page Array of page elements, forwarded by the page handling mechanism
-        */
-       function groups_page_handler($page)
-       {
-               global $CONFIG;
-
-
-               if (isset($page[0]))
-               {
-                       // See what context we're using
-                       switch($page[0])
-                       {
-                               case 'invitations':
-                                       include($CONFIG->pluginspath . "groups/invitations.php");
-                                       $user_guid = get_loggedin_userid();
-
-                                       $invitations = elgg_get_entities_from_relationship(array(
-                                               'relationship' => 'membership_request',
-                                               'guid' => $user_guid
-                                       ));
-
-                                       break;
-
-                               case "new" :
-                                       include($CONFIG->pluginspath . "groups/new.php");
-                               break;
-                               case "world":
-                                       elgg_set_context('groups');
-                                       set_page_owner(0);
-                                       include($CONFIG->pluginspath . "groups/all.php");
-                               break;
-                               case "forum":
-                                       set_input('group_guid', $page[1]);
-                                       include($CONFIG->pluginspath . "groups/forum.php");
-                               break;
-                               case "edittopic":
-                                       set_input('group', $page[1]);
-                                       set_input('topic', $page[2]);
-                                       include($CONFIG->pluginspath . "groups/edittopic.php");
-                               break;
-                               case "activity":
-                                       set_input('group', $page[1]);
-                                       include($CONFIG->pluginspath . "groups/activity.php");
-                               break;
-                               case "owned" :
-                                       // Owned by a user
-                                       if (isset($page[1]))
-                                               set_input('username',$page[1]);
+       return false;
+}
+
+/**
+ * Groups page handler
+ * URLs take the form of
+ *  All groups:           pg/groups/all
+ *  User's owned groups:  pg/groups/owned/<username>
+ *  User's member groups: pg/groups/member/<username>
+ *  Group profile:        pg/groups/profile/<guid>/<title>
+ *  New group:            pg/groups/add/<guid>
+ *  Edit group:           pg/groups/edit/<guid>
+ *  Group invitations:    pg/groups/invitations/<username>
+ *  Group activity:       pg/groups/activity/<guid>
+ *
+ * @param array $page Array of url segments for routing
+ */
+function groups_page_handler($page) {
+       global $CONFIG;
 
-                                       include($CONFIG->pluginspath . "groups/index.php");
-                               break;
-                               case "member" :
-                                       // User is a member of
-                                       if (isset($page[1]))
-                                               set_input('username',$page[1]);
+       elgg_load_library('elgg:groups');
+
+       elgg_push_breadcrumb(elgg_echo('groups'), "pg/groups/world");
+
+       // beginnings of new page handler
+       switch ($page[0]) {
+               case 'world':
+                       groups_handle_all_page();
+                       break;
+               case 'owned':
+                       set_input('username', $page[1]);
+                       groups_handle_owned_page();
+                       break;
+               case 'member':
+                       set_input('username', $page[1]);
+                       groups_handle_mine_page();
+                       break;
+               case 'invitations':
+                       set_input('username', $page[1]);
+                       groups_handle_invitations_page();
+                       break;
+               case 'add':
+                       groups_handle_edit_page('add');
+                       break;
+               case 'edit':
+                       groups_handle_edit_page('edit', $page[1]);
+                       break;
+               case 'profile':
+                       groups_handle_profile_page($page[1]);
+                       break;
+               case 'activity':
+                       groups_handle_activity_page($page[1]);
+                       break;
+       }
 
-                                       include($CONFIG->pluginspath . "groups/membership.php");
+       // old page handler
+       if (isset($page[0])) {
+               // See what context we're using
+               switch ($page[0]) {
+                       case "forum":
+                               set_input('group_guid', $page[1]);
+                               include($CONFIG->pluginspath . "groups/forum.php");
                                break;
-                               default:
-                                       set_input('group_guid', $page[0]);
-                                       include($CONFIG->pluginspath . "groups/groupprofile.php");
+                       case "edittopic":
+                               set_input('group', $page[1]);
+                               set_input('topic', $page[2]);
+                               include($CONFIG->pluginspath . "groups/edittopic.php");
                                break;
-                       }
                }
-
        }
+}
 
-       /**
       * Handle group icons.
       *
       * @param unknown_type $page
       */
-       function groups_icon_handler($page) {
+/**
+ * Handle group icons.
+ *
+ * @param unknown_type $page
+ */
+function groups_icon_handler($page) {
 
-               global $CONFIG;
-
-               // The username should be the file we're getting
-               if (isset($page[0])) {
-                       set_input('group_guid',$page[0]);
-               }
-               if (isset($page[1])) {
-                       set_input('size',$page[1]);
-               }
-               // Include the standard profile index
-               include($CONFIG->pluginspath . "groups/graphics/icon.php");
+       global $CONFIG;
 
+       // The username should be the file we're getting
+       if (isset($page[0])) {
+               set_input('group_guid', $page[0]);
        }
-
-       /**
-        * Populates the ->getUrl() method for group objects
-        *
-        * @param ElggEntity $entity File entity
-        * @return string File URL
-        */
-       function groups_url($entity) {
-               $title = elgg_get_friendly_title($entity->name);
-
-               return "pg/groups/{$entity->guid}/$title/";
+       if (isset($page[1])) {
+               set_input('size', $page[1]);
        }
-
-       function groups_groupforumtopic_url($entity) {
-               return 'mod/groups/topicposts.php?topic='. $entity->guid .'&group_guid=' . $entity->container_guid;
+       // Include the standard profile index
+       include($CONFIG->pluginspath . "groups/graphics/icon.php");
+}
+
+/**
+ * Populates the ->getUrl() method for group objects
+ *
+ * @param ElggEntity $entity File entity
+ * @return string File URL
+ */
+function groups_url($entity) {
+       $title = elgg_get_friendly_title($entity->name);
+
+       return "pg/groups/profile/{$entity->guid}/$title";
+}
+
+function groups_groupforumtopic_url($entity) {
+       return 'mod/groups/topicposts.php?topic=' . $entity->guid . '&group_guid=' . $entity->container_guid;
+}
+
+/**
+ * Groups created so create an access list for it
+ */
+function groups_create_event_listener($event, $object_type, $object) {
+       $ac_name = elgg_echo('groups:group') . ": " . $object->name;
+       $group_id = create_access_collection($ac_name, $object->guid);
+       if ($group_id) {
+               $object->group_acl = $group_id;
+       } else {
+               // delete group if access creation fails
+               return false;
        }
 
-       /**
-        * Groups created so create an access list for it
-        */
-       function groups_create_event_listener($event, $object_type, $object)
-       {
-               $ac_name = elgg_echo('groups:group') . ": " . $object->name;
-               $group_id = create_access_collection($ac_name, $object->guid);
-               if ($group_id) {
-                       $object->group_acl = $group_id;
-               } else {
-                       // delete group if access creation fails
-                       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 = get_loggedin_user();
+       if ($user) {
+               // 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) {
+                       foreach ($membership as $group)
+                               $returnvalue[$user->guid][$group->group_acl] = elgg_echo('groups:group') . ": " . $group->name;
+                       return $returnvalue;
                }
-
-               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 = get_loggedin_user();
-               if ($user)
-               {
-                       // 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)
-                       {
-                               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) {
+       $page_owner = elgg_get_page_owner();
+       if (!$loggedin = get_loggedin_user()) {
+               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)
-       {
-               $page_owner = elgg_get_page_owner();
-               if (!$loggedin = get_loggedin_user()) {
-                       return $returnvalue;
-               }
-
-               // only insert group access for current group
-               if ($page_owner instanceof ElggGroup && $loggedin) {
-                       if ($page_owner->isMember($loggedin)) {
-                               $returnvalue[$page_owner->group_acl] = elgg_echo('groups:group') . ': ' . $page_owner->name;
+       // only insert group access for current group
+       if ($page_owner instanceof ElggGroup && $loggedin) {
+               if ($page_owner->isMember($loggedin)) {
+                       $returnvalue[$page_owner->group_acl] = elgg_echo('groups:group') . ': ' . $page_owner->name;
 
-                               unset($returnvalue[ACCESS_FRIENDS]);
-                       }
-               } else {
-                       // if the user owns the group, remove all access collections manually
-                       // this won't be a problem once the group itself owns the acl.
-                       $groups = elgg_get_entities_from_relationship(array(
-                               'relationship' => 'member',
-                               'relationship_guid' => $loggedin->getGUID(),
-                               'inverse_relationship' => FALSE,
-                               'limit' => 999
-                       ));
-
-                       if ($groups) {
-                               foreach ($groups as $group) {
-                                       unset($returnvalue[$group->group_acl]);
-                               }
+                       unset($returnvalue[ACCESS_FRIENDS]);
+               }
+       } else {
+               // if the user owns the group, remove all access collections manually
+               // this won't be a problem once the group itself owns the acl.
+               $groups = elgg_get_entities_from_relationship(array(
+                                       'relationship' => 'member',
+                                       'relationship_guid' => $loggedin->getGUID(),
+                                       'inverse_relationship' => FALSE,
+                                       'limit' => 999
+                               ));
+
+               if ($groups) {
+                       foreach ($groups as $group) {
+                               unset($returnvalue[$group->group_acl]);
                        }
                }
-
-               return $returnvalue;
        }
 
-       /**
-        * Groups deleted, so remove access lists.
-        */
-       function groups_delete_event_listener($event, $object_type, $object)
-       {
-               delete_access_collection($object->group_acl);
+       return $returnvalue;
+}
+
+/**
+ * Groups deleted, so remove access lists.
+ */
+function groups_delete_event_listener($event, $object_type, $object) {
+       delete_access_collection($object->group_acl);
+
+       return true;
+}
+
+/**
+ * Listens to a group join event and adds a user to the group's access control
+ *
+ */
+function groups_user_join_event_listener($event, $object_type, $object) {
+
+       $group = $object['group'];
+       $user = $object['user'];
+       $acl = $group->group_acl;
+
+       add_user_to_access_collection($user->guid, $acl);
+
+       return true;
+}
+
+/**
+ * Listens to a group leave event and removes a user from the group's access control
+ *
+ */
+function groups_user_leave_event_listener($event, $object_type, $object) {
+
+       $group = $object['group'];
+       $user = $object['user'];
+       $acl = $group->group_acl;
+
+       remove_user_from_access_collection($user->guid, $acl);
+
+       return true;
+}
+
+/**
+ * This hooks into the getIcon API and provides nice user icons for users where possible.
+ *
+ * @param unknown_type $hook
+ * @param unknown_type $entity_type
+ * @param unknown_type $returnvalue
+ * @param unknown_type $params
+ * @return unknown
+ */
+function groups_groupicon_hook($hook, $entity_type, $returnvalue, $params) {
+       global $CONFIG;
 
-               return true;
-       }
+       if ((!$returnvalue) && ($hook == 'entity:icon:url') && ($params['entity'] instanceof ElggGroup)) {
+               $entity = $params['entity'];
+               $type = $entity->type;
+               $viewtype = $params['viewtype'];
+               $size = $params['size'];
 
-       /**
-        * Listens to a group join event and adds a user to the group's access control
-        *
-        */
-       function groups_user_join_event_listener($event, $object_type, $object) {
+               if ($icontime = $entity->icontime) {
+                       $icontime = "{$icontime}";
+               } else {
+                       $icontime = "default";
+               }
 
-               $group = $object['group'];
-               $user = $object['user'];
-               $acl = $group->group_acl;
+               $filehandler = new ElggFile();
+               $filehandler->owner_guid = $entity->owner_guid;
+               $filehandler->setFilename("groups/" . $entity->guid . $size . ".jpg");
 
-               add_user_to_access_collection($user->guid, $acl);
+               if ($filehandler->exists()) {
+                       $url = elgg_get_site_url() . "pg/groupicon/{$entity->guid}/$size/$icontime.jpg";
 
-               return true;
+                       return $url;
+               }
        }
+}
 
-       /**
-        * Listens to a group leave event and removes a user from the group's access control
-        *
-        */
-       function groups_user_leave_event_listener($event, $object_type, $object) {
-
-               $group = $object['group'];
-               $user = $object['user'];
-               $acl = $group->group_acl;
+/**
+ * A simple function to see who can edit a group discussion post
+ * @param the comment $entity
+ * @param user who owns the group $group_owner
+ * @return boolean
+ */
+function groups_can_edit_discussion($entity, $group_owner) {
 
-               remove_user_from_access_collection($user->guid, $acl);
+       //logged in user
+       $user = get_loggedin_userid();
 
+       if (($entity->owner_guid == $user) || $group_owner == $user || isadminloggedin()) {
                return true;
+       } else {
+               return false;
        }
-
-       /**
-        * This hooks into the getIcon API and provides nice user icons for users where possible.
-        *
-        * @param unknown_type $hook
-        * @param unknown_type $entity_type
-        * @param unknown_type $returnvalue
-        * @param unknown_type $params
-        * @return unknown
-        */
-       function groups_groupicon_hook($hook, $entity_type, $returnvalue, $params)
-       {
+}
+
+/**
+ * Overrides topic post getURL() value.
+ *
+ */
+function group_topicpost_url($annotation) {
+       if ($parent = get_entity($annotation->entity_guid)) {
                global $CONFIG;
-
-               if ((!$returnvalue) && ($hook == 'entity:icon:url') && ($params['entity'] instanceof ElggGroup))
-               {
-                       $entity = $params['entity'];
-                       $type = $entity->type;
-                       $viewtype = $params['viewtype'];
-                       $size = $params['size'];
-
-                       if ($icontime = $entity->icontime) {
-                               $icontime = "{$icontime}";
-                       } else {
-                               $icontime = "default";
-                       }
-
-                       $filehandler = new ElggFile();
-                       $filehandler->owner_guid = $entity->owner_guid;
-                       $filehandler->setFilename("groups/" . $entity->guid . $size . ".jpg");
-
-                       if ($filehandler->exists()) {
-                               $url = elgg_get_site_url() . "pg/groupicon/{$entity->guid}/$size/$icontime.jpg";
-
-                               return $url;
-                       }
-               }
+               return 'mod/groups/topicposts.php?topic=' . $parent->guid . '&amp;group_guid=' . $parent->container_guid . '#' . $annotation->id;
        }
-
-       /**
-        * A simple function to see who can edit a group discussion post
-        * @param the comment $entity
-        * @param user who owns the group $group_owner
-        * @return boolean
-        */
-       function groups_can_edit_discussion($entity, $group_owner)
-       {
-
-               //logged in user
-               $user = get_loggedin_userid();
-
-               if (($entity->owner_guid == $user) || $group_owner == $user || isadminloggedin()) {
-                       return true;
-               }else{
-                       return false;
+}
+
+/**
+ * Grabs groups by invitations
+ * Have to override all access until there's a way override access to getter functions.
+ *
+ * @param $user_guid
+ * @return unknown_type
+ */
+function groups_get_invited_groups($user_guid, $return_guids = FALSE) {
+       $ia = elgg_set_ignore_access(TRUE);
+       $invitations = elgg_get_entities_from_relationship(array('relationship' => 'invited', 'relationship_guid' => $user_guid, 'inverse_relationship' => TRUE, 'limit' => 9999));
+       elgg_set_ignore_access($ia);
+
+       if ($return_guids) {
+               $guids = array();
+               foreach ($invitations as $invitation) {
+                       $guids[] = $invitation->getGUID();
                }
 
+               return $guids;
        }
 
-       /**
-        * Overrides topic post getURL() value.
-        *
-        */
-       function group_topicpost_url($annotation) {
-               if ($parent = get_entity($annotation->entity_guid)) {
-                       global $CONFIG;
-                       return 'mod/groups/topicposts.php?topic='.$parent->guid.'&amp;group_guid='.$parent->container_guid.'#' . $annotation->id;
-               }
-       }
+       return $invitations;
+}
 
-       /**
-        * Grabs groups by invitations
-        * Have to override all access until there's a way override access to getter functions.
-        *
-        * @param $user_guid
-        * @return unknown_type
-        */
-       function groups_get_invited_groups($user_guid, $return_guids = FALSE) {
-               $ia = elgg_set_ignore_access(TRUE);
-               $invitations = elgg_get_entities_from_relationship(array('relationship' => 'invited', 'relationship_guid' => $user_guid, 'inverse_relationship' => TRUE, 'limit' => 9999));
-               elgg_set_ignore_access($ia);
-
-               if ($return_guids) {
-                       $guids = array();
-                       foreach ($invitations as $invitation) {
-                               $guids[] = $invitation->getGUID();
-                       }
-
-                       return $guids;
-               }
-
-               return $invitations;
-       }
-
-       /**
-        * Function to use on groups for access. It will house private, loggedin, public,
-        * and the group itself. This is when you don't want other groups or channels in the access options available
-        * Returns an array
-        **/
-
-       function group_access_options($group){
-               $access_array = array(0 => 'private',1 => 'logged in users',2 => 'public',$group->group_acl => 'Group: ' . $group->name );
-               return $access_array;
-       }
+/**
+ * Function to use on groups for access. It will house private, loggedin, public,
+ * and the group itself. This is when you don't want other groups or channels in the access options available
+ * Returns an array
+ * */
+function group_access_options($group) {
+       $access_array = array(0 => 'private', 1 => 'logged in users', 2 => 'public', $group->group_acl => 'Group: ' . $group->name);
+       return $access_array;
+}
 
-       function forum_profile_menu($hook, $entity_type, $return_value, $params) {
-               global $CONFIG;
+function forum_profile_menu($hook, $entity_type, $return_value, $params) {
+       global $CONFIG;
 
-               if ($params['owner'] instanceof ElggGroup && $group_owner->forum_enable != 'no') {
-                       $return_value[] = array(
-                               'text' => elgg_echo('groups:forum'),
-                               'href' => "pg/groups/forum/{$params['owner']->getGUID()}"
-                       );
-               }
-               return $return_value;
+       if ($params['owner'] instanceof ElggGroup && $group_owner->forum_enable != 'no') {
+               $return_value[] = array(
+                       'text' => elgg_echo('groups:forum'),
+                       'href' => "pg/groups/forum/{$params['owner']->getGUID()}"
+               );
        }
-       
-       function activity_profile_menu($hook, $entity_type, $return_value, $params) {
-               global $CONFIG;
+       return $return_value;
+}
 
-               if ($params['owner'] instanceof ElggGroup) {
-                       $return_value[] = array(
-                               'text' => elgg_echo('Activity'),
-                               'href' => "pg/groups/activity/{$params['owner']->getGUID()}"
-                       );
-               }
-               return $return_value;
-       }
+function activity_profile_menu($hook, $entity_type, $return_value, $params) {
+       global $CONFIG;
 
-       /**
-        * Parse ECML on group discussion views
-        *
-        * @param unknown_type $hook
-        * @param unknown_type $entity_type
-        * @param unknown_type $return_value
-        * @param unknown_type $params
-        */
-       function groups_ecml_views_hook($hook, $entity_type, $return_value, $params) {
-               $return_value['forum/viewposts'] = elgg_echo('groups:ecml:discussion');
-
-               return $return_value;
-       }
-       /**
-        * Parse ECML on group profiles
-        *
-        * @param unknown_type $hook
-        * @param unknown_type $entity_type
-        * @param unknown_type $return_value
-        * @param unknown_type $params
-        */
-       function groupprofile_ecml_views_hook($hook, $entity_type, $return_value, $params) {
-               $return_value['groups/groupprofile'] = elgg_echo('groups:ecml:groupprofile');
-
-               return $return_value;
+       if ($params['owner'] instanceof ElggGroup) {
+               $return_value[] = array(
+                       'text' => elgg_echo('Activity'),
+                       'href' => "pg/groups/activity/{$params['owner']->getGUID()}"
+               );
        }
+       return $return_value;
+}
+
+/**
+ * Parse ECML on group discussion views
+ *
+ * @param unknown_type $hook
+ * @param unknown_type $entity_type
+ * @param unknown_type $return_value
+ * @param unknown_type $params
+ */
+function groups_ecml_views_hook($hook, $entity_type, $return_value, $params) {
+       $return_value['forum/viewposts'] = elgg_echo('groups:ecml:discussion');
+
+       return $return_value;
+}
+
+/**
+ * Parse ECML on group profiles
+ *
+ * @param unknown_type $hook
+ * @param unknown_type $entity_type
+ * @param unknown_type $return_value
+ * @param unknown_type $params
+ */
+function groupprofile_ecml_views_hook($hook, $entity_type, $return_value, $params) {
+       $return_value['groups/groupprofile'] = elgg_echo('groups:ecml:groupprofile');
+
+       return $return_value;
+}
+
+register_extender_url_handler('group_topicpost_url', 'annotation', 'group_topic_post');
+
+// Register a handler for create groups
+elgg_register_event_handler('create', 'group', 'groups_create_event_listener');
+
+// Register a handler for delete groups
+elgg_register_event_handler('delete', 'group', 'groups_delete_event_listener');
+
+// Make sure the groups initialisation function is called on initialisation
+elgg_register_event_handler('init', 'system', 'groups_init');
+elgg_register_event_handler('init', 'system', 'groups_fields_setup', 10000); // Ensure this runs after other plugins
+elgg_register_event_handler('join', 'group', 'groups_user_join_event_listener');
+elgg_register_event_handler('leave', 'group', 'groups_user_leave_event_listener');
+elgg_register_event_handler('pagesetup', 'system', 'groups_submenus');
+elgg_register_event_handler('annotate', 'all', 'group_object_notifications');
+
+// Register actions
+global $CONFIG;
+elgg_register_action("groups/addtopic", $CONFIG->pluginspath . "groups/actions/forums/addtopic.php");
+elgg_register_action("groups/deletetopic", $CONFIG->pluginspath . "groups/actions/forums/deletetopic.php");
+elgg_register_action("groups/addpost", $CONFIG->pluginspath . "groups/actions/forums/addpost.php");
+elgg_register_action("groups/edittopic", $CONFIG->pluginspath . "groups/actions/forums/edittopic.php");
+elgg_register_action("groups/deletepost", $CONFIG->pluginspath . "groups/actions/forums/deletepost.php");
+elgg_register_action("groups/featured", $CONFIG->pluginspath . "groups/actions/featured.php", 'admin');
+elgg_register_action("groups/editpost", $CONFIG->pluginspath . "groups/actions/forums/editpost.php");
 
-       register_extender_url_handler('group_topicpost_url','annotation', 'group_topic_post');
-
-       // Register a handler for create groups
-       elgg_register_event_handler('create', 'group', 'groups_create_event_listener');
 
-       // Register a handler for delete groups
-       elgg_register_event_handler('delete', 'group', 'groups_delete_event_listener');
-
-       // Make sure the groups initialisation function is called on initialisation
-       elgg_register_event_handler('init','system','groups_init');
-       elgg_register_event_handler('init','system','groups_fields_setup', 10000); // Ensure this runs after other plugins
-       elgg_register_event_handler('join','group','groups_user_join_event_listener');
-       elgg_register_event_handler('leave','group','groups_user_leave_event_listener');
-       elgg_register_event_handler('pagesetup','system','groups_submenus');
-       elgg_register_event_handler('annotate','all','group_object_notifications');
-
-       // Register actions
-       global $CONFIG;
-       elgg_register_action("groups/addtopic", $CONFIG->pluginspath . "groups/actions/forums/addtopic.php");
-       elgg_register_action("groups/deletetopic", $CONFIG->pluginspath . "groups/actions/forums/deletetopic.php");
-       elgg_register_action("groups/addpost", $CONFIG->pluginspath . "groups/actions/forums/addpost.php");
-       elgg_register_action("groups/edittopic", $CONFIG->pluginspath . "groups/actions/forums/edittopic.php");
-       elgg_register_action("groups/deletepost", $CONFIG->pluginspath . "groups/actions/forums/deletepost.php");
-       elgg_register_action("groups/featured", $CONFIG->pluginspath . "groups/actions/featured.php", 'admin');
-       elgg_register_action("groups/editpost", $CONFIG->pluginspath . "groups/actions/forums/editpost.php");
-
-?>
index b25f682e78500d9c4e1ab22b764322e6beeff3df..958c4084d8111bcf7fdfafbdd7ab4b55b083f592 100644 (file)
@@ -1,24 +1,21 @@
 <?php
+/**
+ * All groups navigation menu
+ */
 
-       /**
-        * A simple view to provide the user with group filters and the number of group on the site
-        **/
-        
-        $num_groups = $vars['count'];
-        if(!$num_groups)
-               $num_groups = 0;
-               
-        $filter = $vars['filter'];
+$group_count = (int)elgg_get_entities(array('types' => 'group', 'count' => true));
+
+$selected = elgg_get_array_value('selected', $vars);
         
         //url
         $url = elgg_get_site_url() . "pg/groups/world/";
 
 ?>
 <div class="elgg-tabs margin-top">
-<div class="group_count"><?php echo $num_groups . " " . elgg_echo("groups:count"); ?></div>
+<div class="group_count"><?php echo $group_count . " " . elgg_echo("groups:count"); ?></div>
 <ul>
-       <li <?php if($filter == "newest") echo "class='selected'"; ?>><a href="<?php echo $url; ?>?filter=newest"><?php echo elgg_echo('groups:newest'); ?></a></li>
-       <li <?php if($filter == "pop") echo "class='selected'"; ?>><a href="<?php echo $url; ?>?filter=pop"><?php echo elgg_echo('groups:popular'); ?></a></li>
-       <li <?php if($filter == "active") echo "class='selected'"; ?>><a href="<?php echo $url; ?>?filter=active"><?php echo elgg_echo('groups:latestdiscussion'); ?></a></li>
+       <li <?php if($selected == "newest") echo "class='selected'"; ?>><a href="<?php echo $url; ?>?filter=newest"><?php echo elgg_echo('groups:newest'); ?></a></li>
+       <li <?php if($selected == "pop") echo "class='selected'"; ?>><a href="<?php echo $url; ?>?filter=pop"><?php echo elgg_echo('groups:popular'); ?></a></li>
+       <li <?php if($selected == "active") echo "class='selected'"; ?>><a href="<?php echo $url; ?>?filter=active"><?php echo elgg_echo('groups:latestdiscussion'); ?></a></li>
 </ul>
 </div>
index 68cd2591a7b4501b9fe5405e8e6e6e68844cfbe9..cd4ee49dd15487840a338dff1ca40f67abb79528 100644 (file)
@@ -15,7 +15,7 @@ $actions = array();
 // group owners
 if ($vars['entity']->canEdit()) {
        // edit and invite
-       $url = elgg_get_site_url() . "mod/groups/edit.php?group_guid={$vars['entity']->getGUID()}";
+       $url = elgg_get_site_url() . "pg/groups/edit/{$vars['entity']->getGUID()}";
        $actions[$url] = elgg_echo('groups:edit');
        $url = elgg_get_site_url() . "mod/groups/invite.php?group_guid={$vars['entity']->getGUID()}";
        $actions[$url] = elgg_echo('groups:invite');