| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062 | 
							- <?php
 
- /**
 
-  * All plugin hook callback functions are defined in this file
 
-  *
 
-  * @package group_tools
 
-  */
 
- /**
 
-  * Allow group admins (not owners) to also edit group content
 
-  *
 
-  * @param string $hook         the 'permissions_check' hook
 
-  * @param string $type         for the 'group' type
 
-  * @param bool   $return_value the current value
 
-  * @param array  $params       supplied params to help change the outcome
 
-  *
 
-  * @return bool true if can edit, false otherwise
 
-  */
 
- function group_tools_multiple_admin_can_edit_hook($hook, $type, $return_value, $params) {
 
- 	$result = $return_value;
 
- 	if (!empty($params) && is_array($params) && !$result) {
 
- 		if (array_key_exists("entity", $params) && array_key_exists("user", $params)) {
 
- 			$entity = $params["entity"];
 
- 			$user = $params["user"];
 
- 			if (($entity instanceof ElggGroup) && ($user instanceof ElggUser)) {
 
- 				if ($entity->isMember($user) && check_entity_relationship($user->getGUID(), "group_admin", $entity->getGUID())) {
 
- 					$result = true;
 
- 				}
 
- 			}
 
- 		}
 
- 	}
 
- 	return $result;
 
- }
 
- /**
 
-  * Take over the groups page handler in some cases
 
-  *
 
-  * @param string $hook         the 'route' hook
 
-  * @param string $type         for the 'groups' page handler
 
-  * @param bool   $return_value tells which page is handled, contains:
 
-  *    $return_value['handler'] => requested handler
 
-  *    $return_value['segments'] => url parts ($page)
 
-  * @param null   $params       no params provided
 
-  *
 
-  * @return bool false if we take over the page handler
 
-  */
 
- function group_tools_route_groups_handler($hook, $type, $return_value, $params) {
 
- 	$result = $return_value;
 
- 	
 
- 	if (empty($return_value) || !is_array($return_value)) {
 
- 		return;
 
- 	}
 
- 	
 
- 	$page = $return_value['segments'];
 
- 	
 
- 	switch ($page[0]) {
 
- 		case "all":
 
- 			$filter = get_input("filter");
 
- 			$default_filter = elgg_get_plugin_setting("group_listing", "group_tools");
 
- 			
 
- 			if (empty($filter) && !empty($default_filter)) {
 
- 				$filter = $default_filter;
 
- 				set_input("filter", $default_filter);
 
- 			} elseif (empty($filter)) {
 
- 				$filter = "newest";
 
- 				set_input("filter", $filter);
 
- 			}
 
- 			
 
- 			if (in_array($filter, array("yours", "open", "closed", "alpha", "ordered", "suggested"))) {
 
- 				// we will handle the output
 
- 				$result = false;
 
- 				
 
- 				include(dirname(dirname(__FILE__)) . "/pages/groups/all.php");
 
- 			}
 
- 			
 
- 			break;
 
- 		case "suggested":
 
- 			$result = false;
 
- 			
 
- 			include(dirname(dirname(__FILE__)) . "/pages/groups/suggested.php");
 
- 			break;
 
- 		case "search":
 
- 			$result = false;
 
- 				
 
- 			include(dirname(dirname(__FILE__)) . "/pages/groups/search.php");
 
- 			break;
 
- 		case "requests":
 
- 			$result = false;
 
- 			
 
- 			set_input("group_guid", $page[1]);
 
- 			if (isset($page[2])) {
 
- 				set_input("subpage", $page[2]);
 
- 			}
 
- 			
 
- 			include(dirname(dirname(__FILE__)) . "/pages/groups/membershipreq.php");
 
- 			break;
 
- 		case "invite":
 
- 			$result = false;
 
- 			
 
- 			set_input("group_guid", $page[1]);
 
- 			
 
- 			include(dirname(dirname(__FILE__)) . "/pages/groups/invite.php");
 
- 			break;
 
- 		case "mail":
 
- 			$result = false;
 
- 			
 
- 			set_input("group_guid", $page[1]);
 
- 				
 
- 			include(dirname(dirname(__FILE__)) . "/pages/mail.php");
 
- 			break;
 
- 		case 'members':
 
- 			$result = false;
 
- 			
 
- 			set_input('group_guid', $page[1]);
 
- 				
 
- 			include(dirname(dirname(__FILE__)) . "/pages/groups/members.php");
 
- 			break;
 
- 		case "group_invite_autocomplete":
 
- 			$result = false;
 
- 			
 
- 			include(dirname(dirname(__FILE__)) . "/procedures/group_invite_autocomplete.php");
 
- 			break;
 
- 		case "add":
 
- 			if (group_tools_is_group_creation_limited()) {
 
- 				admin_gatekeeper();
 
- 			}
 
- 			break;
 
- 		case "invitations":
 
- 			$result = false;
 
- 			if (isset($page[1])) {
 
- 				set_input("username", $page[1]);
 
- 			}
 
- 			
 
- 			include(dirname(dirname(__FILE__)) . "/pages/groups/invitations.php");
 
- 			break;
 
- 		case "related":
 
- 			$result = false;
 
- 			
 
- 			if (isset($page[1])) {
 
- 				set_input("group_guid", $page[1]);
 
- 			}
 
- 			
 
- 			include(dirname(dirname(__FILE__)) . "/pages/groups/related.php");
 
- 			break;
 
- 		case "profile":
 
- 			if (isset($page[1]) && is_numeric($page[1])) {
 
- 				$group = get_entity($page[1]);
 
- 				if (empty($group)) {
 
- 					// is this a hidden group
 
- 					$ia = elgg_set_ignore_access(true);
 
- 					
 
- 					$group = get_entity($page[1]);
 
- 					if (!empty($group) && elgg_instanceof($group, "group")) {
 
- 						// report to the user
 
- 						if (!elgg_is_logged_in()) {
 
- 							$_SESSION["last_forward_from"] = current_page_url();
 
- 							
 
- 							register_error(elgg_echo("loggedinrequired"));
 
- 						} else {
 
- 							register_error(elgg_echo("membershiprequired"));
 
- 						}
 
- 					}
 
- 					
 
- 					// restore access
 
- 					elgg_set_ignore_access($ia);
 
- 				}
 
- 			}
 
- 			break;
 
- 		case "activity":
 
- 			$result = false;
 
- 			
 
- 			if (isset($page[1])) {
 
- 				set_input("guid", $page[1]);
 
- 			}
 
- 			
 
- 			include(dirname(dirname(__FILE__)) . "/pages/groups/river.php");
 
- 			break;
 
- 		default:
 
- 			// check if we have an old group profile link
 
- 			if (isset($page[0]) && is_numeric($page[0])) {
 
- 				$group = get_entity($page[0]);
 
- 				if (!empty($group) && elgg_instanceof($group, "group", null, "ElggGroup")) {
 
- 					register_error(elgg_echo("changebookmark"));
 
- 					forward($group->getURL());
 
- 				}
 
- 			}
 
- 			break;
 
- 	}
 
- 	
 
- 	return $result;
 
- }
 
- /**
 
-  * Modify the title menu in the groups context.
 
-  *
 
-  * @param string $hook         the 'register' hook
 
-  * @param string $type         for the 'menu:title' menu
 
-  * @param array  $return_value the menu items to show
 
-  * @param array  $params       params to help extend the menu items
 
-  *
 
-  * @return ElggMenuItem[] a list of menu items
 
-  */
 
- function group_tools_menu_title_handler($hook, $type, $return_value, $params) {
 
- 	$result = $return_value;
 
- 	
 
- 	$page_owner = elgg_get_page_owner_entity();
 
- 	$user = elgg_get_logged_in_user_entity();
 
- 	
 
- 	if (!elgg_in_context('groups')) {
 
- 		return;
 
- 	}
 
- 	// modify some group menu items
 
- 	if (empty($page_owner) || empty($user) || !($page_owner instanceof ElggGroup)) {
 
- 		return;
 
- 	}
 
- 	
 
- 	$invite_found = false;
 
- 	
 
- 	if (!empty($result) && is_array($result)) {
 
- 		
 
- 		foreach ($result as $menu_item) {
 
- 			
 
- 			switch ($menu_item->getName()) {
 
- 				case "groups:joinrequest":
 
- 					if (check_entity_relationship($user->getGUID(), "membership_request", $page_owner->getGUID())) {
 
- 						// user already requested to join this group
 
- 						$menu_item->setText(elgg_echo("group_tools:joinrequest:already"));
 
- 						$menu_item->setTooltip(elgg_echo("group_tools:joinrequest:already:tooltip"));
 
- 						$menu_item->setHref(elgg_add_action_tokens_to_url(elgg_get_site_url() . "action/groups/killrequest?user_guid=" . $user->getGUID() . "&group_guid=" . $page_owner->getGUID()));
 
- 					} elseif (check_entity_relationship($page_owner->getGUID(), "invited", $user->getGUID())) {
 
- 						// the user was invited, so let him/her join
 
- 						$menu_item->setName("groups:join");
 
- 						$menu_item->setText(elgg_echo("groups:join"));
 
- 						$menu_item->setTooltip(elgg_echo("group_tools:join:already:tooltip"));
 
- 						$menu_item->setHref(elgg_add_action_tokens_to_url(elgg_get_site_url() . "action/groups/join?user_guid=" . $user->getGUID() . "&group_guid=" . $page_owner->getGUID()));
 
- 					} elseif (group_tools_check_domain_based_group($page_owner, $user)) {
 
- 						// user has a matching email domain
 
- 						$menu_item->setName("groups:join");
 
- 						$menu_item->setText(elgg_echo("groups:join"));
 
- 						$menu_item->setTooltip(elgg_echo("group_tools:join:domain_based:tooltip"));
 
- 						$menu_item->setHref(elgg_add_action_tokens_to_url(elgg_get_site_url() . "action/groups/join?user_guid=" . $user->getGUID() . "&group_guid=" . $page_owner->getGUID()));
 
- 					}
 
- 					
 
- 					break;
 
- 				case "groups:invite":
 
- 					$invite_found = true;
 
- 					
 
- 					$invite = elgg_get_plugin_setting("invite", "group_tools");
 
- 					$invite_email = elgg_get_plugin_setting("invite_email", "group_tools");
 
- 					$invite_csv = elgg_get_plugin_setting("invite_csv", "group_tools");
 
- 					
 
- 					if (in_array("yes", array($invite, $invite_csv, $invite_email))) {
 
- 						$menu_item->setText(elgg_echo("group_tools:groups:invite"));
 
- 					}
 
- 					
 
- 					break;
 
- 			}
 
- 		}
 
- 		
 
- 		// check if we need to remove the group add button
 
- 		if (!empty($user) && !$user->isAdmin() && group_tools_is_group_creation_limited()) {
 
- 			foreach ($result as $index => $menu_item) {
 
- 				if ($menu_item->getName() == "add") {
 
- 					unset($result[$index]);
 
- 				}
 
- 			}
 
- 		}
 
- 	}
 
- 		
 
- 	// maybe allow normal users to invite new members
 
- 	if (elgg_in_context("group_profile") && !$invite_found) {
 
- 		// this is only allowed for group members
 
- 		if ($page_owner->isMember($user)) {
 
- 			// we're on a group profile page, but haven't found the invite button yet
 
- 			// so check if it should be here
 
- 			$setting = elgg_get_plugin_setting("invite_members", "group_tools");
 
- 			if (in_array($setting, array("yes_off", "yes_on"))) {
 
- 				$invite_members = $page_owner->invite_members;
 
- 				if (empty($invite_members)) {
 
- 					$invite_members = "no";
 
- 					if ($setting == "yes_on") {
 
- 						$invite_members = "yes";
 
- 					}
 
- 				}
 
- 				
 
- 				if ($invite_members == "yes") {
 
- 					// normal users are allowed to invite users
 
- 					$invite = elgg_get_plugin_setting("invite", "group_tools");
 
- 					$invite_email = elgg_get_plugin_setting("invite_email", "group_tools");
 
- 					$invite_csv = elgg_get_plugin_setting("invite_csv", "group_tools");
 
- 					
 
- 					if (in_array("yes", array($invite, $invite_csv, $invite_email))) {
 
- 						$text = elgg_echo("group_tools:groups:invite");
 
- 					} else {
 
- 						$text = elgg_echo("groups:invite");
 
- 					}
 
- 					
 
- 					$result[] = ElggMenuItem::factory(array(
 
- 						"name" => "groups:invite",
 
- 						"href" => "groups/invite/" . $page_owner->getGUID(),
 
- 						"text" => $text,
 
- 						"link_class" => "elgg-button elgg-button-action",
 
- 					));
 
- 				}
 
- 			}
 
- 		}
 
- 	}
 
- 	
 
- 	// group member export
 
- 	if (current_page_url() == elgg_normalize_url("groups/members/" . $page_owner->getGUID())) {
 
- 		if ($page_owner->canEdit() && (elgg_get_plugin_setting("member_export", "group_tools") == "yes")) {
 
- 			$result[] = ElggMenuItem::factory(array(
 
- 				"name" => "member_export",
 
- 				"text" => elgg_echo("group_tools:member_export:title_button"),
 
- 				"href" => "action/group_tools/member_export?group_guid=" . $page_owner->getGUID(),
 
- 				"is_action" => true,
 
- 				"link_class" => "elgg-button elgg-button-action"
 
- 			));
 
- 		}
 
- 	}
 
- 	
 
- 	return $result;
 
- }
 
- /**
 
-  * Modify the user hover menu.
 
-  *
 
-  * @param string $hook         the 'register' hook
 
-  * @param string $type         for the 'menu:user_hover' menu
 
-  * @param array  $return_value the menu items to show
 
-  * @param array  $params       params to help extend the menu items
 
-  *
 
-  * @return ElggMenuItem[] a list of menu items
 
-  */
 
- function group_tools_menu_user_hover_handler($hook, $type, $return_value, $params) {
 
- 	$result = $return_value;
 
- 	
 
- 	$page_owner = elgg_get_page_owner_entity();
 
- 	$loggedin_user = elgg_get_logged_in_user_entity();
 
- 	
 
- 	if (empty($page_owner) || !elgg_instanceof($page_owner, "group") || empty($loggedin_user)) {
 
- 		// not a group or logged in
 
- 		return $result;
 
- 	}
 
- 	
 
- 	if (!$page_owner->canEdit()) {
 
- 		// can't edit the group
 
- 		return $result;
 
- 	}
 
- 	
 
- 	if (empty($params) || !is_array($params)) {
 
- 		// wrong params
 
- 		return $result;
 
- 	}
 
- 	
 
- 	$user = elgg_extract("entity", $params);
 
- 	if (empty($user) || !elgg_instanceof($user, "user")) {
 
- 		// not a user menu
 
- 		return $result;
 
- 	}
 
- 	
 
- 	if (($page_owner->getOwnerGUID() == $user->getGUID()) || ($loggedin_user->getGUID() == $user->getGUID())) {
 
- 		// group owner or current user
 
- 		return $result;
 
- 	}
 
- 	
 
- 	if (!$page_owner->isMember($user)) {
 
- 		// user is not a member of the group
 
- 		return $result;
 
- 	}
 
- 	
 
- 	if (group_tools_group_multiple_admin_enabled($page_owner)) {
 
- 		$is_admin = check_entity_relationship($user->getGUID(), "group_admin", $page_owner->getGUID());
 
- 		
 
- 		$result[] = ElggMenuItem::factory(array(
 
- 			"name" => "group_admin",
 
- 			"text" => elgg_echo("group_tools:multiple_admin:profile_actions:add"),
 
- 			"href" => "action/group_tools/toggle_admin?group_guid=" . $page_owner->getGUID() . "&user_guid=" . $user->getGUID(),
 
- 			"is_action" => true,
 
- 			"item_class" => $is_admin ? "hidden" : ""
 
- 		));
 
- 		
 
- 		$result[] = ElggMenuItem::factory(array(
 
- 			"name" => "group_admin_remove",
 
- 			"text" => elgg_echo("group_tools:multiple_admin:profile_actions:remove"),
 
- 			"href" => "action/group_tools/toggle_admin?group_guid=" . $page_owner->getGUID() . "&user_guid=" . $user->getGUID(),
 
- 			"is_action" => true,
 
- 			"item_class" => $is_admin ? "" : "hidden"
 
- 		));
 
- 	}
 
- 	
 
- 	return $result;
 
- }
 
- /**
 
-  * Modify the entity menu.
 
-  *
 
-  * @param string $hook         the 'register' hook
 
-  * @param string $type         for the 'menu:entity' menu
 
-  * @param array  $return_value the menu items to show
 
-  * @param array  $params       params to help extend the menu items
 
-  *
 
-  * @return ElggMenuItem[] a list of menu items
 
-  */
 
- function group_tools_menu_entity_handler($hook, $type, $return_value, $params) {
 
- 	$result = $return_value;
 
- 	
 
- 	if (!empty($params) && is_array($params)) {
 
- 		
 
- 		$entity = elgg_extract("entity", $params);
 
- 		$page_owner = elgg_get_page_owner_entity();
 
- 		
 
- 		if (elgg_in_context("group_tools_related_groups") && !empty($page_owner) && elgg_instanceof($page_owner, "group") && $page_owner->canEdit() && elgg_instanceof($entity, "group")) {
 
- 			// remove related group
 
- 			$result[] = ElggMenuItem::factory(array(
 
- 				"name" => "related_group",
 
- 				"text" => elgg_echo("group_tools:related_groups:entity:remove"),
 
- 				"href" => "action/group_tools/remove_related_groups?group_guid=" . $page_owner->getGUID() . "&guid=" . $entity->getGUID(),
 
- 				"confirm" => elgg_echo("question:areyousure")
 
- 			));
 
- 		} elseif (elgg_in_context("widgets_groups_show_members") && elgg_instanceof($entity, "group")) {
 
- 			// number of members
 
- 			$num_members = $entity->getMembers(10, 0, true);
 
- 			
 
- 			$result[] = ElggMenuItem::factory(array(
 
- 				"name" => "members",
 
- 				"text" => $num_members . " " . elgg_echo("groups:member"),
 
- 				"href" => false,
 
- 				"priority" => 200,
 
- 			));
 
- 		} elseif (elgg_instanceof($entity, "object", "groupforumtopic") && $entity->canEdit()) {
 
- 			$result[] = ElggMenuItem::factory(array(
 
- 				"name" => "status_change_open",
 
- 				"text" => elgg_echo("open"),
 
- 				"confirm" => elgg_echo("group_tools:discussion:confirm:open"),
 
- 				"href" => "action/discussion/toggle_status?guid=" . $entity->getGUID(),
 
- 				"is_trusted" => true,
 
- 				"priority" => 200,
 
- 				"item_class" => ($entity->status == "closed") ? "" : "hidden"
 
- 			));
 
- 			$result[] = ElggMenuItem::factory(array(
 
- 				"name" => "status_change_close",
 
- 				"text" => elgg_echo("close"),
 
- 				"confirm" => elgg_echo("group_tools:discussion:confirm:close"),
 
- 				"href" => "action/discussion/toggle_status?guid=" . $entity->getGUID(),
 
- 				"is_trusted" => true,
 
- 				"priority" => 201,
 
- 				"item_class" => ($entity->status == "closed") ? "hidden" : ""
 
- 			));
 
- 		} elseif (elgg_instanceof($entity, "group") && group_tools_show_hidden_indicator($entity)) {
 
- 			$access_id_string = get_readable_access_level($entity->access_id);
 
- 			$access_id_string = htmlspecialchars($access_id_string, ENT_QUOTES, "UTF-8", false);
 
- 			
 
- 			$text = "<span title='" . $access_id_string . "'>" . elgg_view_icon("eye") . "</span>";
 
- 			
 
- 			$result[] = ElggMenuItem::factory(array(
 
- 				"name" => "hidden_indicator",
 
- 				"text" => $text,
 
- 				"href" => false,
 
- 				"priority" => 1
 
- 			));
 
- 		} elseif (!elgg_in_context("widgets") && !empty($page_owner) && elgg_instanceof($page_owner, "group") && $page_owner->canEdit() && elgg_instanceof($entity, "user")) {
 
- 			// user listing in a group
 
- 			if (($page_owner->getOwnerGUID() != $entity->getGUID()) && ($entity->getGUID() != elgg_get_logged_in_user_guid()) && $page_owner->isMember($entity)) {
 
- 				// remove user from group
 
- 				$result[] = ElggMenuItem::factory(array(
 
- 					"name" => "removeuser",
 
- 					"text" => elgg_echo('groups:removeuser'),
 
- 					"href" => "action/groups/remove?user_guid=" . $entity->getGUID() . "&group_guid=" . $page_owner->getGUID(),
 
- 					"confirm" => elgg_echo("question:areyousure"),
 
- 					"priority" => 900
 
- 				));
 
- 				
 
- 				// add/remove group admins
 
- 				if (group_tools_group_multiple_admin_enabled($page_owner)) {
 
- 					$is_admin = check_entity_relationship($entity->getGUID(), "group_admin", $page_owner->getGUID());
 
- 					
 
- 					$result[] = ElggMenuItem::factory(array(
 
- 						"name" => "group_admin",
 
- 						"text" => elgg_echo("group_tools:multiple_admin:profile_actions:add"),
 
- 						"href" => "action/group_tools/toggle_admin?group_guid=" . $page_owner->getGUID() . "&user_guid=" . $entity->getGUID(),
 
- 						"is_action" => true,
 
- 						"priority" => 800,
 
- 						"item_class" => $is_admin ? "hidden" : ""
 
- 					));
 
- 					
 
- 					$result[] = ElggMenuItem::factory(array(
 
- 						"name" => "group_admin_remove",
 
- 						"text" => elgg_echo("group_tools:multiple_admin:profile_actions:remove"),
 
- 						"href" => "action/group_tools/toggle_admin?group_guid=" . $page_owner->getGUID() . "&user_guid=" . $entity->getGUID(),
 
- 						"is_action" => true,
 
- 						"priority" => 801,
 
- 						"item_class" => $is_admin ? "" : "hidden"
 
- 					));
 
- 				}
 
- 			}
 
- 		}
 
- 	}
 
- 	
 
- 	return $result;
 
- }
 
- /**
 
-  * return an url to be used by Widget Manager
 
-  *
 
-  * @param string $hook         the 'widget_url' hook
 
-  * @param string $type         for 'widget_manager'
 
-  * @param string $return_value the default return value
 
-  * @param array  $params       params to help set a correct url
 
-  *
 
-  * @return string the widger url
 
-  */
 
- function group_tools_widget_url_handler($hook, $type, $return_value, $params) {
 
- 	$result = $return_value;
 
- 	
 
- 	if (!$result && !empty($params) && is_array($params)) {
 
- 		$widget = elgg_extract("entity", $params);
 
- 		
 
- 		if (!empty($widget) && elgg_instanceof($widget, "object", "widget")) {
 
- 			switch ($widget->handler) {
 
- 				case "group_members":
 
- 					$result = "groups/members/" . $widget->getOwnerGUID();
 
- 					break;
 
- 				case "group_invitations":
 
- 					$user = elgg_get_logged_in_user_entity();
 
- 					if (!empty($user)) {
 
- 						$result = "groups/invitations/" . $user->username;
 
- 					}
 
- 					break;
 
- 				case "discussion":
 
- 					$result = "discussion/all";
 
- 					break;
 
- 				case "group_forum_topics":
 
- 					$page_owner = elgg_get_page_owner_entity();
 
- 					if (!empty($page_owner) && ($page_owner instanceof ElggGroup)) {
 
- 						$result = "discussion/owner/" . $page_owner->getGUID();
 
- 						break;
 
- 					}
 
- 				case "group_river_widget":
 
- 					if ($widget->context != "groups") {
 
- 						$group_guid = (int) $widget->group_guid;
 
- 					} else {
 
- 						$group_guid = $widget->getOwnerGUID();
 
- 					}
 
- 					
 
- 					if (!empty($group_guid)) {
 
- 						$group = get_entity($group_guid);
 
- 						if (!empty($group) && elgg_instanceof($group, "group", null, "ElggGroup")) {
 
- 							$result = "groups/activity/" . $group_guid;
 
- 						}
 
- 					}
 
- 					break;
 
- 				case "index_groups":
 
- 				case "featured_groups":
 
- 					$result = "groups/all?filter=featured";
 
- 					break;
 
- 				case "a_user_groups":
 
- 					$owner = $widget->getOwnerEntity();
 
- 					if (!empty($owner) && elgg_instanceof($owner, "user")) {
 
- 						$result = "groups/member/" . $owner->username;
 
- 					}
 
- 					break;
 
- 				case "start_discussion":
 
- 					$owner = $widget->getOwnerEntity();
 
- 					if (!empty($owner) && elgg_instanceof($owner, "group")) {
 
- 						$result = "discussion/add/" . $owner->getGUID();
 
- 					}
 
- 					break;
 
- 				case "group_related":
 
- 					$result = "groups/related/" . $widget->getOwnerGUID();
 
- 					break;
 
- 			}
 
- 		}
 
- 	}
 
- 	
 
- 	return $result;
 
- }
 
- /**
 
-  * Allows the edit of default access
 
-  *
 
-  * See:
 
-  * @link http://trac.elgg.org/ticket/4415
 
-  * @link https://github.com/Elgg/Elgg/pull/253
 
-  *
 
-  * @param string $hook         the 'access:default' hook
 
-  * @param string $type         for the 'user' type
 
-  * @param int    $return_value the default access for this user
 
-  * @param array  $params       params to help change the value
 
-  *
 
-  * @return void|int
 
-  */
 
- function group_tools_access_default_handler($hook, $type, $return_value, $params) {
 
- 	
 
- 	// check if the page owner is a group
 
- 	$page_owner = elgg_get_page_owner_entity();
 
- 	if (empty($page_owner) || !elgg_instanceof($page_owner, "group")) {
 
- 		return;
 
- 	}
 
- 	
 
- 	// check if the group as a default access set
 
- 	$group_access = $page_owner->getPrivateSetting("elgg_default_access");
 
- 	if ($group_access !== null) {
 
- 		$return_value = (int) $group_access;
 
- 	} else {
 
- 		// if the group hasn't set anything check if there is a site setting for groups
 
- 		$site_group_access = elgg_get_plugin_setting("group_default_access", "group_tools");
 
- 		if ($site_group_access === null) {
 
- 			// no site setting and no group, so leave default
 
- 			return;
 
- 		}
 
- 		
 
- 		switch ($site_group_access) {
 
- 			case GROUP_TOOLS_GROUP_ACCESS_DEFAULT:
 
- 				$return_value = (int) $page_owner->group_acl;
 
- 				break;
 
- 			default:
 
- 				$return_value = (int) $site_group_access;
 
- 				break;
 
- 		}
 
- 	}
 
- 	
 
- 	if (($page_owner->getContentAccessMode() === ElggGroup::CONTENT_ACCESS_MODE_MEMBERS_ONLY) && ($return_value === ACCESS_PUBLIC || $return_value === ACCESS_LOGGED_IN)) {
 
- 		// default access is higher than content access level, so lower
 
- 		$return_value = (int) $page_owner->group_acl;
 
- 		
 
- 		elgg_log("Default access for the group {$page_owner->name} is set more public than the content access level", 'NOTICE');
 
- 	}
 
- 	
 
- 	return $return_value;
 
- }
 
- /**
 
-  * Changed the content of an input/access
 
-  *
 
-  * @param string $hook         the 'access:collections:write' hook
 
-  * @param string $type         for the 'user' type
 
-  * @param array  $return_value the default values
 
-  * @param array  $params       params to help change the values
 
-  *
 
-  * @return array the new access options
 
-  */
 
- function group_tools_access_write_handler($hook, $type, $return_value, $params) {
 
- 	$result = $return_value;
 
- 	
 
- 	if (elgg_in_context("group_tools_default_access") && !empty($result) && is_array($result)) {
 
- 		// unset ACCESS_PRIVATE & ACCESS_FRIENDS;
 
- 		if (isset($result[ACCESS_PRIVATE])) {
 
- 			unset($result[ACCESS_PRIVATE]);
 
- 		}
 
- 		
 
- 		if (isset($result[ACCESS_FRIENDS])) {
 
- 			unset($result[ACCESS_FRIENDS]);
 
- 		}
 
- 		
 
- 		// reverse the array
 
- 		$result = array_reverse($result, true);
 
- 		
 
- 		// add group option
 
- 		$result[GROUP_TOOLS_GROUP_ACCESS_DEFAULT] = elgg_echo("group_tools:default:access:group");
 
- 	}
 
- 	
 
- 	return $result;
 
- }
 
- /**
 
-  * Allow a group to be transfered by the correct user
 
-  *
 
-  * @param string $hook         the 'permissions_check' hook
 
-  * @param string $type         for the 'group' type
 
-  * @param bool   $return_value is the current user allowed to perform the action
 
-  * @param array  $params       params to help chnage the return value
 
-  *
 
-  * @return bool true if we allow admin transfer
 
-  */
 
- function group_tools_admin_transfer_permissions_hook($hook, $type, $return_value, $params) {
 
- 	$result = $return_value;
 
- 	if (!$result && !empty($params) && is_array($params)) {
 
- 		$group = elgg_extract("entity", $params);
 
- 		if (!empty($group) && elgg_instanceof($group, "group")) {
 
- 			$result = true;
 
- 		}
 
- 	}
 
- 	return $result;
 
- }
 
- /**
 
-  * A prepend hook to the groups/join action
 
-  *
 
-  * @param string $hook         'action'
 
-  * @param string $type         'groups/join'
 
-  * @param bool   $return_value true, return false to stop the action
 
-  * @param null   $params       passed on params
 
-  *
 
-  * @return bool
 
-  */
 
- function group_tools_join_group_action_handler($hook, $type, $return_value, $params) {
 
- 	// hacky way around a short comming of Elgg core to allow users to join a group
 
- 	if (group_tools_domain_based_groups_enabled()) {
 
- 		elgg_register_plugin_hook_handler("permissions_check", "group", "group_tools_permissions_check_groups_join_hook");
 
- 	}
 
- }
 
- /**
 
-  * A hook on the ->canEdit() of a group. This is done to allow e-mail domain users to join a group
 
-  *
 
-  * Note: this is a very hacky way arround a short comming of Elgg core
 
-  *
 
-  * @param string $hook         'permissions_check'
 
-  * @param string $type         'group'
 
-  * @param bool   $return_value is the current user allowed to edit the group
 
-  * @param mixed  $params       passed on params
 
-  *
 
-  * @return bool
 
-  */
 
- function group_tools_permissions_check_groups_join_hook($hook, $type, $return_value, $params) {
 
- 	$result = $return_value;
 
- 	
 
- 	if (!$result && group_tools_domain_based_groups_enabled()) {
 
- 		// domain based groups are enabled, lets check if this user is allowed to join based on that
 
- 		if (!empty($params) && is_array($params)) {
 
- 			$group = elgg_extract("entity", $params);
 
- 			$user = elgg_extract("user", $params);
 
- 			
 
- 			if (!empty($group) && elgg_instanceof($group, "group") && !empty($user) && elgg_instanceof($user ,"user")) {
 
- 				if (group_tools_check_domain_based_group($group, $user)) {
 
- 					$result = true;
 
- 				}
 
- 			}
 
- 		}
 
- 	}
 
- 	
 
- 	return $result;
 
- }
 
- /**
 
-  * A hook to extend the owner block of groups
 
-  *
 
-  * @param string         $hook         'register'
 
-  * @param string         $type         'menu:owner_block'
 
-  * @param ElggMenuItem[] $return_value the current menu items
 
-  * @param mixed          $params       passed on params
 
-  *
 
-  * @return ElggMenuItem[]
 
-  */
 
- function group_tools_register_owner_block_menu_handler($hook, $type, $return_value, $params) {
 
- 	$result = $return_value;
 
- 	
 
- 	if (!empty($params) && is_array($params)) {
 
- 		$entity = elgg_extract("entity", $params);
 
- 		
 
- 		if (!empty($entity) && elgg_instanceof($entity, "group")) {
 
- 			if ($entity->related_groups_enable == "yes") {
 
- 				$result[] = ElggMenuItem::factory(array(
 
- 					"name" => "related_groups",
 
- 					"text" => elgg_echo("group_tools:related_groups:title"),
 
- 					"href" => "groups/related/" . $entity->getGUID(),
 
- 					"is_trusted" => true
 
- 				));
 
- 			}
 
- 		}
 
- 	}
 
- 	
 
- 	return $result;
 
- }
 
- /**
 
-  * Check if registration is disabled, if so check for a valid group invite code and allow registration
 
-  *
 
-  * This will allow access to the registration page
 
-  *
 
-  * @param string $hook         'route'
 
-  * @param string $type         'register'
 
-  * @param array  $return_value the current page_handler settings
 
-  * @param null   $params       null
 
-  *
 
-  * @return void
 
-  */
 
- function group_tools_route_register_handler($hook, $type, $return_value, $params) {
 
- 	
 
- 	// enable registration if disabled
 
- 	group_tools_enable_registration();
 
- }
 
- /**
 
-  * Check if registration is disabled, if so check for a valid group invite code and allow registration
 
-  *
 
-  * This will allow access to the registration page
 
-  *
 
-  * @param string $hook         'action'
 
-  * @param string $type         'register'
 
-  * @param bool   $return_value true is the action is allowed to procceed
 
-  * @param null   $params       null
 
-  *
 
-  * @return void
 
-  */
 
- function group_tools_action_register_handler($hook, $type, $return_value, $params) {
 
- 	
 
- 	// enable registration if disabled
 
- 	group_tools_enable_registration();
 
- }
 
- /**
 
-  * Take over the livesearch pagehandler in case of group search
 
-  *
 
-  * @param string $hook         'route'
 
-  * @param string $type         'livessearch'
 
-  * @param array  $return_value the current params for the pagehandler
 
-  * @param null   $params       null
 
-  *
 
-  * @return bool|void
 
-  */
 
- function group_tools_route_livesearch_handler($hook, $type, $return_value, $params) {
 
- 	
 
- 	// only return results to logged in users.
 
- 	if (!$user = elgg_get_logged_in_user_entity()) {
 
- 		exit;
 
- 	}
 
- 	
 
- 	if (!$q = get_input("term", get_input("q"))) {
 
- 		exit;
 
- 	}
 
- 	
 
- 	$input_name = get_input("name", "groups");
 
- 	
 
- 	$q = sanitise_string($q);
 
- 	
 
- 	// replace mysql vars with escaped strings
 
- 	$q = str_replace(array("_", "%"), array("\_", "\%"), $q);
 
- 	
 
- 	$match_on = get_input("match_on", "all");
 
- 	
 
- 	if (!is_array($match_on)) {
 
- 		$match_on = array($match_on);
 
- 	}
 
- 	
 
- 	// only take over groups search
 
- 	if (count($match_on) > 1 || !in_array("groups", $match_on)) {
 
- 		return $return_value;
 
- 	}
 
- 	
 
- 	if (get_input("match_owner", false)) {
 
- 		$owner_guid = $user->getGUID();
 
- 	} else {
 
- 		$owner_guid = ELGG_ENTITIES_ANY_VALUE;
 
- 	}
 
- 	
 
- 	$limit = sanitise_int(get_input("limit", 10));
 
- 	
 
- 	// grab a list of entities and send them in json.
 
- 	$results = array();
 
- 	
 
- 	$options = array(
 
- 		"type" => "group",
 
- 		"limit" => $limit,
 
- 		"owner_guid" => $owner_guid,
 
- 		"joins" => array("JOIN " . elgg_get_config("dbprefix") . "groups_entity ge ON e.guid = ge.guid"),
 
- 		"wheres" => array("(ge.name LIKE '%" . $q . "%' OR ge.description LIKE '%" . $q . "%')")
 
- 	);
 
- 	
 
- 	$entities = elgg_get_entities($options);
 
- 	if (!empty($entities)) {
 
- 		foreach ($entities as $entity) {
 
- 			$output = elgg_view_list_item($entity, array(
 
- 				"use_hover" => false,
 
- 				"class" => "elgg-autocomplete-item",
 
- 				"full_view" => false,
 
- 			));
 
- 			
 
- 			$icon = elgg_view_entity_icon($entity, "tiny", array(
 
- 				"use_hover" => false,
 
- 			));
 
- 			
 
- 			$result = array(
 
- 				"type" => "group",
 
- 				"name" => $entity->name,
 
- 				"desc" => $entity->description,
 
- 				"guid" => $entity->getGUID(),
 
- 				"label" => $output,
 
- 				"value" => $entity->getGUID(),
 
- 				"icon" => $icon,
 
- 				"url" => $entity->getURL(),
 
- 				"html" => elgg_view("input/grouppicker/item", array(
 
- 					"entity" => $entity,
 
- 					"input_name" => $input_name,
 
- 				)),
 
- 			);
 
- 			
 
- 			$results[$entity->name . rand(1, 100)] = $result;
 
- 		}
 
- 	}
 
- 	
 
- 	ksort($results);
 
- 	header("Content-Type: application/json");
 
- 	echo json_encode(array_values($results));
 
- 	exit;
 
- }
 
- /**
 
-  * Add or remove widgets based on the group tool option
 
-  *
 
-  * @param string $hook         'group_tool_widgets'
 
-  * @param string $type         'widget_manager'
 
-  * @param array  $return_value current enable/disable widget handlers
 
-  * @param array  $params       supplied params
 
-  *
 
-  * @return array
 
-  */
 
- function group_tools_tool_widgets_handler($hook, $type, $return_value, $params) {
 
- 	
 
- 	if (!empty($params) && is_array($params)) {
 
- 		$entity = elgg_extract("entity", $params);
 
- 		
 
- 		if (!empty($entity) && elgg_instanceof($entity, "group")) {
 
- 			if (!is_array($return_value)) {
 
- 				$return_value = array();
 
- 			}
 
- 			
 
- 			if (!isset($return_value["enable"])) {
 
- 				$return_value["enable"] = array();
 
- 			}
 
- 			if (!isset($return_value["disable"])) {
 
- 				$return_value["disable"] = array();
 
- 			}
 
- 			
 
- 			// check different group tools for which we supply widgets
 
- 			if ($entity->forum_enable == "yes") {
 
- 				$return_value["enable"][] = "group_forum_topics";
 
- 			} else {
 
- 				$return_value["disable"][] = "group_forum_topics";
 
- 				$return_value["disable"][] = "start_discussion";
 
- 			}
 
- 			
 
- 			if ($entity->related_groups_enable == "yes") {
 
- 				$return_value["enable"][] = "group_related";
 
- 			} else {
 
- 				$return_value["disable"][] = "group_related";
 
- 			}
 
- 			
 
- 			if ($entity->activity_enable == "yes") {
 
- 				$return_value["enable"][] = "group_river_widget";
 
- 			} else {
 
- 				$return_value["disable"][] = "group_river_widget";
 
- 			}
 
- 		}
 
- 	}
 
- 		
 
- 	return $return_value;
 
- }
 
- /**
 
-  * make a filter menu on the membership request page
 
-  *
 
-  * @param string         $hook         name of the hook
 
-  * @param string         $type         type of the hook
 
-  * @param ElggMenuItem[] $return_value current menu items
 
-  * @param array          $params       supplied params
 
-  *
 
-  * @return ElggMenuItem[]
 
-  */
 
- function group_tools_menu_filter_handler($hook, $type, $return_value, $params) {
 
- 	
 
- 	if (!elgg_in_context("group_membershipreq")) {
 
- 		return $return_value;
 
- 	}
 
- 	
 
- 	if (empty($params) || !is_array($params)) {
 
- 		return $return_value;
 
- 	}
 
- 	
 
- 	$entity = elgg_extract("entity", $params);
 
- 	if (empty($entity) || !elgg_instanceof($entity, "group")) {
 
- 		return $return_value;
 
- 	}
 
- 	
 
- 	$return_value = array();
 
- 	
 
- 	$return_value[] = ElggMenuItem::factory(array(
 
- 		"name" => "membershipreq",
 
- 		"text" => elgg_echo("group_tools:groups:membershipreq:requests"),
 
- 		"href" => "groups/requests/" . $entity->getGUID(),
 
- 		"is_trusted" => true,
 
- 		"priority" => 100
 
- 	));
 
- 	$return_value[] = ElggMenuItem::factory(array(
 
- 		"name" => "invites",
 
- 		"text" => elgg_echo("group_tools:groups:membershipreq:invitations"),
 
- 		"href" => "groups/requests/" . $entity->getGUID() . "/invites",
 
- 		"is_trusted" => true,
 
- 		"priority" => 200
 
- 	));
 
- 	$return_value[] = ElggMenuItem::factory(array(
 
- 		"name" => "email_invites",
 
- 		"text" => elgg_echo("group_tools:groups:membershipreq:email_invitations"),
 
- 		"href" => "groups/requests/" . $entity->getGUID() . "/email_invites",
 
- 		"is_trusted" => true,
 
- 		"priority" => 300
 
- 	));
 
- 	
 
- 	return $return_value;
 
- }
 
- /**
 
-  * Set the correct url for group thumbnails
 
-  *
 
-  * @param string $hook         name of the hook
 
-  * @param string $type         type of the hook
 
-  * @param string $return_value current return value
 
-  * @param array  $params       supplied params
 
-  *
 
-  * @return string
 
-  */
 
- function groups_tools_group_icon_url_handler($hook, $type, $return_value, $params) {
 
- 	
 
- 	if (empty($params) || !is_array($params)) {
 
- 		return $return_value;
 
- 	}
 
- 	
 
- 	$group = elgg_extract("entity", $params);
 
- 	if (empty($group) || !elgg_instanceof($group, "group")) {
 
- 		return $return_value;
 
- 	}
 
- 	
 
- 	$size = elgg_extract("size", $params, "medium");
 
- 	$iconsizes = elgg_get_config("icon_sizes");
 
- 	if (empty($size) || empty($iconsizes) || !array_key_exists($size, $iconsizes)) {
 
- 		return $return_value;
 
- 	}
 
- 	
 
- 	$icontime = $group->icontime;
 
- 	if (is_null($icontime)) {
 
- 		$icontime = 0;
 
- 		
 
- 		// handle missing metadata (pre 1.7 installations)
 
- 		// @see groups_icon_url_override()
 
- 		$fh = new ElggFile();
 
- 		$fh->owner_guid = $group->getOwnerGUID();
 
- 		$fh->setFilename("groups/{$group->getGUID()}large.jpg");
 
- 		
 
- 		if ($fh->exists()) {
 
- 			$icontime = time();
 
- 		}
 
- 		
 
- 		create_metadata($group->getGUID(), "icontime", $icontime, "integer", $group->getOwnerGUID(), ACCESS_PUBLIC);
 
- 	}
 
- 	if (empty($icontime)) {
 
- 		return $return_value;
 
- 	}
 
- 	
 
- 	$params = array(
 
- 		"group_guid" => $group->getGUID(),
 
- 		"guid" => $group->getOwnerGUID(),
 
- 		"size" => $size,
 
- 		"icontime" => $icontime
 
- 	);
 
- 	return elgg_http_add_url_query_elements("mod/group_tools/pages/groups/thumbnail.php", $params);
 
- }
 
 
  |