diff options
| -rw-r--r-- | engine/lib/pageowner.php | 182 | 
1 files changed, 87 insertions, 95 deletions
diff --git a/engine/lib/pageowner.php b/engine/lib/pageowner.php index 32c431632..b03422e4f 100644 --- a/engine/lib/pageowner.php +++ b/engine/lib/pageowner.php @@ -1,7 +1,7 @@  <?php  /**   * Elgg page owner library - * Contains functions for managing page ownership + * Contains functions for managing page ownership and context   *   * @package Elgg   * @subpackage Core @@ -9,129 +9,84 @@   * @link http://elgg.org/   */ +  /** - * Gets the page owner for the current page. - * @uses $CONFIG - * @return int|false The current page owner guid (0 if none). + * Gets the guid of the entity that owns the current page. + * @param int $guid Optional parameter used by elgg_set_page_owner_guid(). + * @return int The current page owner guid (0 if none). + * @since 1.8   */ +function elgg_get_page_owner_guid($guid = 0) { +	static $page_owner_guid; -function page_owner() { -	global $CONFIG; - -	$returnval = NULL; - -	$setpageowner = set_page_owner(); -	if ($setpageowner !== false) { -		return $setpageowner; +	if ($guid) { +		$page_owner_guid = $guid;  	} -	if ((!isset($returnval)) && ($username = get_input("username"))) { -		if (substr_count($username,'group:')) { -			preg_match('/group\:([0-9]+)/i',$username,$matches); -			$guid = $matches[1]; -			if ($entity = get_entity($guid)) { -				$returnval = $entity->getGUID(); -			} -		} -		if ((!isset($returnval)) && ($user = get_user_by_username($username))) { -			$returnval = $user->getGUID(); -		} +	if (isset($page_owner_guid)) { +		return $page_owner_guid;  	} +	$guid = trigger_plugin_hook('page_owner', 'system', NULL, 0); -	if ((!isset($returnval)) && ($owner = get_input("owner_guid"))) { -		if ($user = get_entity($owner)) { -			$returnval = $user->getGUID(); -		} -	} - +	$page_owner_guid = $guid; -	if ((!isset($returnval)) && (!empty($CONFIG->page_owner_handlers) && is_array($CONFIG->page_owner_handlers))) { -		foreach($CONFIG->page_owner_handlers as $handler) { -			if ((!isset($returnval)) && ($guid = $handler())) { -				$returnval = $guid; -			} -		} -	} +	return $guid; +} -	if (isset($returnval)) { -		// Check if this is obtainable, forwarding if not. -		/* -		 * If the owner entity has been set, but is inaccessible then we forward to the dashboard. This -		 * catches a bunch of WSoDs. It doesn't have much of a performance hit since 99.999% of the time the next thing -		 * a page does after calling this function is to retrieve the owner entity - which is of course cashed. -		 */ -		$owner_entity = get_entity($returnval); -		if (!$owner_entity) { - -			// Log an error -			error_log(sprintf(elgg_echo('pageownerunavailable'), $returnval)); - -			// Forward -			forward(); -		} +/** + * @deprecated 1.8  Use get_page_owner_guid() + */ +function page_owner() { +	elgg_deprecated_notice('page_owner() was deprecated by elgg_get_page_owner_guid().', 1.8); +	return elgg_get_page_owner_guid(); +} -		// set the page owner so if we're called again we don't have to think. -		set_page_owner($returnval); -		return $returnval; +/** + * Gets the owner entity for the current page. + * @return ElggEntity|false The current page owner or false if none. + * @since 1.8 + */ +function elgg_get_page_owner() { +	$guid = elgg_get_page_owner_guid(); +	if ($guid > 0) { +		return get_entity($guid);  	} -	return 0; +	return FALSE;  }  /** - * Gets the page owner for the current page. - * @uses $CONFIG - * @return ElggUser|false The current page owner (false if none). + * @deprecated 1.8  Use elgg_get_page_owner()   */  function page_owner_entity() { -	global $CONFIG; -	$page_owner = page_owner(); -	if ($page_owner > 0) { -		return get_entity($page_owner); -	} - -	return false; +	elgg_deprecated_notice('page_owner_entity() was deprecated by elgg_get_page_owner().', 1.8); +	return elgg_get_page_owner();  }  /** - * Adds a page owner handler - a function that will - * return the page owner if required - * (Such functions are required to return false if they don't know) - * @uses $CONFIG - * @param string $functionname The name of the function to call - * @return mixed The guid of the owner or false + * Set the guid of the entity that owns this page + * @param int $guid + * @since 1.8   */ +function elgg_set_page_owner_guid($guid) { +	elgg_get_page_owner_guid($guid); +} + +/** + * @deprecated 1.8  Use the 'page_owner', 'system' plugin hook + */  function add_page_owner_handler($functionname) { -	global $CONFIG; -	if (empty($CONFIG->page_owner_handlers)) { -		$CONFIG->page_owner_handlers = array(); -	} -	if (is_callable($functionname)) { -		$CONFIG->page_owner_handlers[] = $functionname; -	} +	elgg_deprecated_notice("add_page_owner_handler() was deprecated by the plugin hook 'page_owner', 'system'.", 1.8);  }  /** - * Allows a page to manually set a page owner - * - * @param int $entitytoset The GUID of the page owner - * @return int|false Either the page owner we've just set, or false if unset + * @deprecated 1.8  Use elgg_set_page_owner_guid()   */  function set_page_owner($entitytoset = -1) { -	static $entity; - -	if (!isset($entity)) { -		$entity = false; -	} - -	if ($entitytoset > -1) { -		$entity = $entitytoset; -	} - -	return $entity; - +	elgg_deprecated_notice('set_page_owner() was deprecated by elgg_set_page_owner_guid().', 1.8); +	elgg_set_page_owner_guid($entitytoset);  }  /** @@ -167,3 +122,40 @@ function get_context() {  	}  	return "main";  } + +function default_page_owner_handler($hook, $entity_type, $returnvalue, $params) { + +	if ($returnvalue) { +		return $returnvalue; +	} +	 +	$username = get_input("username"); +	if ($username) { +		if (substr_count($username, 'group:')) { +			preg_match('/group\:([0-9]+)/i', $username, $matches); +			$guid = $matches[1]; +			if ($entity = get_entity($guid)) { +				return $entity->getGUID(); +			} +		} + +		if ($user = get_user_by_username($username)) { +			return $user->getGUID(); +		} +	} + +	$owner = get_input("owner_guid"); +	if ($owner) { +		if ($user = get_entity($owner)) { +			return $user->getGUID(); +		} +	} + +	return $returnvalue; +} + +function page_owner_init() { +	register_plugin_hook('page_owner', 'system', 'default_page_owner_handler'); +} + +register_elgg_event_handler('init', 'system', 'page_owner_init');
\ No newline at end of file  | 
