| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318 | 
							- <?php
 
- /**
 
-  * Elgg page handler functions
 
-  *
 
-  * @package    Elgg.Core
 
-  * @subpackage Routing
 
-  */
 
- /**
 
-  * Registers a page handler for a particular identifier
 
-  *
 
-  * For example, you can register a function called 'blog_page_handler' for the identifier 'blog'
 
-  * For all URLs  http://yoururl/blog/*, the blog_page_handler() function will be called.
 
-  * The part of the URL marked with * above will be exploded on '/' characters and passed as an
 
-  * array to that function.
 
-  * For example, the URL http://yoururl/blog/username/friends/ would result in the call:
 
-  * blog_page_handler(array('username','friends'), blog);
 
-  *
 
-  * A request to register a page handler with the same identifier as previously registered
 
-  * handler will replace the previous one.
 
-  *
 
-  * The context is set to the identifier before the registered
 
-  * page handler function is called. For the above example, the context is set to 'blog'.
 
-  *
 
-  * Page handlers should return true to indicate that they handled the request.
 
-  * Requests not handled are forwarded to the front page with a reason of 404.
 
-  * Plugins can register for the 'forward', '404' plugin hook. @see forward()
 
-  *
 
-  * @param string $identifier The page type identifier
 
-  * @param string $function   Your function name
 
-  *
 
-  * @return bool Depending on success
 
-  */
 
- function elgg_register_page_handler($identifier, $function) {
 
- 	return _elgg_services()->router->registerPageHandler($identifier, $function);
 
- }
 
- /**
 
-  * Unregister a page handler for an identifier
 
-  *
 
-  * Note: to replace a page handler, call elgg_register_page_handler()
 
-  *
 
-  * @param string $identifier The page type identifier
 
-  *
 
-  * @since 1.7.2
 
-  * @return void
 
-  */
 
- function elgg_unregister_page_handler($identifier) {
 
- 	_elgg_services()->router->unregisterPageHandler($identifier);
 
- }
 
- /**
 
-  * Used at the top of a page to mark it as logged in users only.
 
-  *
 
-  * @return void
 
-  * @since 1.9.0
 
-  */
 
- function elgg_gatekeeper() {
 
- 	if (!elgg_is_logged_in()) {
 
- 		_elgg_services()->session->set('last_forward_from', current_page_url());
 
- 		system_message(elgg_echo('loggedinrequired'));
 
- 		forward('/login', 'login');
 
- 	}
 
- }
 
- /**
 
-  * Alias of elgg_gatekeeper()
 
-  * 
 
-  * Used at the top of a page to mark it as logged in users only.
 
-  *
 
-  * @return void
 
-  */
 
- function gatekeeper() {
 
- 	elgg_gatekeeper();
 
- }
 
- /**
 
-  * Used at the top of a page to mark it as admin only.
 
-  *
 
-  * @return void
 
-  * @since 1.9.0
 
-  */
 
- function elgg_admin_gatekeeper() {
 
- 	elgg_gatekeeper();
 
- 	if (!elgg_is_admin_logged_in()) {
 
- 		_elgg_services()->session->set('last_forward_from', current_page_url());
 
- 		register_error(elgg_echo('adminrequired'));
 
- 		forward('', 'admin');
 
- 	}
 
- }
 
- /**
 
-  * Alias of elgg_admin_gatekeeper()
 
-  *
 
-  * Used at the top of a page to mark it as logged in admin or siteadmin only.
 
-  *
 
-  * @return void
 
-  */
 
- function admin_gatekeeper() {
 
- 	elgg_admin_gatekeeper();
 
- }
 
- /**
 
-  * May the current user access item(s) on this page? If the page owner is a group,
 
-  * membership, visibility, and logged in status are taken into account.
 
-  *
 
-  * @param bool $forward    If set to true (default), will forward the page;
 
-  *                         if set to false, will return true or false.
 
-  *
 
-  * @param int  $group_guid The group that owns the page. If not set, this
 
-  *                         will be pulled from elgg_get_page_owner_guid().
 
-  *
 
-  * @return bool Will return if $forward is set to false.
 
-  * @since 1.9.0
 
-  */
 
- function elgg_group_gatekeeper($forward = true, $group_guid = null) {
 
- 	if (null === $group_guid) {
 
- 		$group_guid = elgg_get_page_owner_guid();
 
- 	}
 
- 	if (!$group_guid) {
 
- 		return true;
 
- 	}
 
- 	// this handles non-groups and invisible groups
 
- 	$visibility = \Elgg\GroupItemVisibility::factory($group_guid);
 
- 	if (!$visibility->shouldHideItems) {
 
- 		return true;
 
- 	}
 
- 	if ($forward) {
 
- 		// only forward to group if user can see it
 
- 		$group = get_entity($group_guid);
 
- 		$forward_url = $group ? $group->getURL() : '';
 
- 		if (!elgg_is_logged_in()) {
 
- 			_elgg_services()->session->set('last_forward_from', current_page_url());
 
- 			$forward_reason = 'login';
 
- 		} else {
 
- 			$forward_reason = 'member';
 
- 		}
 
- 		$msg_keys = array(
 
- 			'non_member' => 'membershiprequired',
 
- 			'logged_out' => 'loggedinrequired',
 
- 			'no_access' => 'noaccess',
 
- 		);
 
- 		register_error(elgg_echo($msg_keys[$visibility->reasonHidden]));
 
- 		forward($forward_url, $forward_reason);
 
- 	}
 
- 	return false;
 
- }
 
- /**
 
-  * May the current user access item(s) on this page? If the page owner is a group,
 
-  * membership, visibility, and logged in status are taken into account.
 
-  *
 
-  * @param bool $forward         If set to true (default), will forward the page;
 
-  *                              if set to false, will return true or false.
 
-  *
 
-  * @param int  $page_owner_guid The current page owner guid. If not set, this
 
-  *                              will be pulled from elgg_get_page_owner_guid().
 
-  *
 
-  * @return bool Will return if $forward is set to false.
 
-  */
 
- function group_gatekeeper($forward = true, $page_owner_guid = null) {
 
- 	return elgg_group_gatekeeper($forward, $page_owner_guid);
 
- }
 
- /**
 
-  * Can the viewer see this entity?
 
-  *
 
-  * Tests if the entity exists and whether the viewer has access to the entity
 
-  * if it does. If the viewer cannot view this entity, it forwards to an
 
-  * appropriate page.
 
-  *
 
-  * @param int    $guid    Entity GUID
 
-  * @param string $type    Optional required entity type
 
-  * @param string $subtype Optional required entity subtype
 
-  * @return void
 
-  * @since 1.9.0
 
-  */
 
- function elgg_entity_gatekeeper($guid, $type = null, $subtype = null) {
 
- 	$entity = get_entity($guid);
 
- 	if (!$entity) {
 
- 		if (!elgg_entity_exists($guid)) {
 
- 			// entity doesn't exist
 
- 			forward('', '404');
 
- 		} elseif (!elgg_is_logged_in()) {
 
- 			// entity requires at least a logged in user
 
- 			elgg_gatekeeper();
 
- 		} else {
 
- 			// user is logged in but still does not have access to it
 
- 			register_error(elgg_echo('limited_access'));
 
- 			forward();
 
- 		}		
 
- 	}
 
- 	if ($type) {
 
- 		if (!elgg_instanceof($entity, $type, $subtype)) {
 
- 			// entity is of wrong type/subtype
 
- 			forward('', '404');
 
- 		}
 
- 	}
 
- }
 
- /**
 
-  * Require that the current request be an XHR. If not, execution of the current function
 
-  * will end and a 400 response page will be sent.
 
-  *
 
-  * @return void
 
-  * @since 1.12.0
 
-  */
 
- function elgg_ajax_gatekeeper() {
 
- 	if (!elgg_is_xhr()) {
 
- 		register_error(_elgg_services()->translator->translate('ajax:not_is_xhr'));
 
- 		forward(null, '400');
 
- 	}
 
- }
 
- /**
 
-  * Front page handler
 
-  * 
 
-  * @return bool
 
-  */
 
- function elgg_front_page_handler() {
 
- 	if (elgg_is_logged_in()) {
 
- 		forward('activity');
 
- 	}
 
- 	$title = elgg_echo('content:latest');
 
- 	$content = elgg_list_river();
 
- 	if (!$content) {
 
- 		$content = elgg_echo('river:none');
 
- 	}
 
- 	$login_box = elgg_view('core/account/login_box');
 
- 	$params = array(
 
- 			'title' => $title,
 
- 			'content' => $content,
 
- 			'sidebar' => $login_box
 
- 	);
 
- 	$body = elgg_view_layout('one_sidebar', $params);
 
- 	echo elgg_view_page(null, $body);
 
- 	return true;
 
- }
 
- /**
 
-  * Serve an error page
 
-  *
 
-  * This is registered by Elgg for the 'forward', '404' plugin hook. It can
 
-  * registered for other hooks by plugins or called directly to display an
 
-  * error page.
 
-  *
 
-  * @param string $hook   The name of the hook
 
-  * @param string $type   Http error code
 
-  * @param bool   $result The current value of the hook
 
-  * @param array  $params Parameters related to the hook
 
-  * @return void
 
-  */
 
- function elgg_error_page_handler($hook, $type, $result, $params) {
 
- 	if (elgg_view_exists("errors/$type")) {
 
- 		$title = elgg_echo("error:$type:title");
 
- 		if ($title == "error:$type:title") {
 
- 			// use default if there is no title for this error type
 
- 			$title = elgg_echo("error:default:title");
 
- 		}
 
- 		
 
- 		$content = elgg_view("errors/$type", $params);
 
- 	} else {
 
- 		$title = elgg_echo("error:default:title");
 
- 		$content = elgg_view("errors/default", $params);
 
- 	}
 
- 	
 
- 	$httpCodes = array(
 
- 		'400' => 'Bad Request',
 
- 		'401' => 'Unauthorized',
 
- 		'403' => 'Forbidden',
 
- 		'404' => 'Not Found',
 
- 		'407' => 'Proxy Authentication Required',
 
- 		'500' => 'Internal Server Error',
 
- 		'503' => 'Service Unavailable',
 
- 	);
 
- 	
 
- 	if (isset($httpCodes[$type])) {
 
- 		header("HTTP/1.1 $type {$httpCodes[$type]}");
 
- 	}
 
- 	$body = elgg_view_layout('error', array(
 
- 		'title' => $title,
 
- 		'content' => $content,
 
- 	));
 
- 	echo elgg_view_page($title, $body, 'error');
 
- 	exit;
 
- }
 
- /**
 
-  * Initializes the page handler/routing system
 
-  *
 
-  * @return void
 
-  * @access private
 
-  */
 
- function _elgg_page_handler_init() {
 
- 	elgg_register_page_handler('', 'elgg_front_page_handler');
 
- 	// Registered at 600 so that plugins can register at the default 500 and get to run first
 
- 	elgg_register_plugin_hook_handler('forward', '400', 'elgg_error_page_handler', 600);
 
- 	elgg_register_plugin_hook_handler('forward', '403', 'elgg_error_page_handler', 600);
 
- 	elgg_register_plugin_hook_handler('forward', '404', 'elgg_error_page_handler', 600);
 
- }
 
- return function(\Elgg\EventsService $events, \Elgg\HooksRegistrationService $hooks) {
 
- 	$events->registerHandler('init', 'system', '_elgg_page_handler_init');
 
- };
 
 
  |