diff options
Diffstat (limited to 'mod/groups/start.php')
| -rw-r--r-- | mod/groups/start.php | 1083 | 
1 files changed, 533 insertions, 550 deletions
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"); - -?>  | 
