diff options
| -rw-r--r-- | mod/groups/activity.php | 57 | ||||
| -rw-r--r-- | mod/groups/all.php | 72 | ||||
| -rw-r--r-- | mod/groups/edit.php | 29 | ||||
| -rw-r--r-- | mod/groups/groupprofile.php | 43 | ||||
| -rw-r--r-- | mod/groups/index.php | 27 | ||||
| -rw-r--r-- | mod/groups/invitations.php | 31 | ||||
| -rw-r--r-- | mod/groups/languages/en.php | 2 | ||||
| -rw-r--r-- | mod/groups/lib/groups.php | 248 | ||||
| -rw-r--r-- | mod/groups/membership.php | 34 | ||||
| -rw-r--r-- | mod/groups/new.php | 20 | ||||
| -rw-r--r-- | mod/groups/start.php | 1083 | ||||
| -rw-r--r-- | mod/groups/views/default/groups/group_sort_menu.php | 23 | ||||
| -rw-r--r-- | mod/groups/views/default/groups/profile/buttons.php | 2 | 
13 files changed, 793 insertions, 878 deletions
diff --git a/mod/groups/activity.php b/mod/groups/activity.php deleted file mode 100644 index 57678be6d..000000000 --- a/mod/groups/activity.php +++ /dev/null @@ -1,57 +0,0 @@ -<?php
 -/**
 - * Elgg group activity
 - */
 -
 -require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php");
 -
 -$group_guid = (int)get_input('group');
 -set_page_owner($group_guid);
 -if (!(elgg_get_page_owner() instanceof ElggGroup)) {
 -	forward();
 -}
 -group_gatekeeper();
 -
 -global $CONFIG;
 -
 -// set up breadcrumbs
 -$group = get_entity($group_guid);
 -elgg_push_breadcrumb(elgg_echo('groups'), elgg_get_site_url()."pg/groups/world/");
 -elgg_push_breadcrumb($group->name, $group->getURL());
 -elgg_push_breadcrumb(elgg_echo('groups:activity'));
 -
 -$area1 = elgg_view('navigation/breadcrumbs');
 -
 -$limit = get_input("limit", 20);
 -$offset = get_input("offset", 0);
 -$group_guid = get_input("group", 7);
 -// Sanitise variables -- future proof in case they get sourced elsewhere
 -$limit = (int) $limit;
 -$offset = (int) $offset;
 -$group_guid = (int) $group_guid;
 -
 -$entities = elgg_get_entities(array(
 -	'container_guids' => $group_guid,
 -	'group_by' => 'e.guid'
 -));
 -
 -$entity_guids = array();
 -foreach ($entities as $entity) {
 -	$entity_guids[] = $entity->getGUID();
 -}
 -
 -if (count($entity_guids) > 0) {
 -	$river_items = elgg_view_river_items('', $entity_guids, '', '', '', '', $limit);
 -	$river_items .= elgg_view('riverdashboard/js');
 -} else {
 -	$river_items .= elgg_echo('groups:no_activity');
 -}
 -
 -$area1 .= elgg_view_title(elgg_echo('groups:activity'));
 -$area1 .= elgg_view("group_activity/extend");
 -$area1 .= "<div class='group_listings hide_comments'>".$river_items."</div>";
 -$title = elgg_echo("groups:activity", array(elgg_get_page_owner()->name));
 -$body = elgg_view_layout('one_column_with_sidebar', array('content' => $area1));
 -
 -// Finally draw the page
 -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 index 51030adc9..000000000 --- a/mod/groups/all.php +++ /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 index 59064b7d8..000000000 --- a/mod/groups/edit.php +++ /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 index 1c35163ad..000000000 --- a/mod/groups/groupprofile.php +++ /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 index 1deabb3de..000000000 --- a/mod/groups/index.php +++ /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 index 6a187a8fa..000000000 --- a/mod/groups/invitations.php +++ /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 diff --git a/mod/groups/languages/en.php b/mod/groups/languages/en.php index f28bc0846..1d136e741 100644 --- a/mod/groups/languages/en.php +++ b/mod/groups/languages/en.php @@ -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 index 000000000..faedca18e --- /dev/null +++ b/mod/groups/lib/groups.php @@ -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 index 6af38f4ae..000000000 --- a/mod/groups/membership.php +++ /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 index 84d1539af..000000000 --- a/mod/groups/new.php +++ /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 diff --git a/mod/groups/start.php b/mod/groups/start.php index c2b3dc35b..23936fed7 100644 --- a/mod/groups/start.php +++ b/mod/groups/start.php @@ -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) { @@ -97,551 +97,534 @@  				//}  			}  		} - -	} - -	/** -	 * 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 . '&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.'&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"); - -?> diff --git a/mod/groups/views/default/groups/group_sort_menu.php b/mod/groups/views/default/groups/group_sort_menu.php index b25f682e7..958c4084d 100644 --- a/mod/groups/views/default/groups/group_sort_menu.php +++ b/mod/groups/views/default/groups/group_sort_menu.php @@ -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> diff --git a/mod/groups/views/default/groups/profile/buttons.php b/mod/groups/views/default/groups/profile/buttons.php index 68cd2591a..cd4ee49dd 100644 --- a/mod/groups/views/default/groups/profile/buttons.php +++ b/mod/groups/views/default/groups/profile/buttons.php @@ -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');  | 
