| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 | 
							- <?php
 
- namespace Elgg;
 
- /**
 
-  * Delegates requests to controllers based on the registered configuration.
 
-  *
 
-  * Plugin devs should use these wrapper functions:
 
-  *  * elgg_register_page_handler
 
-  *  * elgg_unregister_page_handler
 
-  *
 
-  * @package    Elgg.Core
 
-  * @subpackage Router
 
-  * @since      1.9.0
 
-  * @access private
 
-  */
 
- class Router {
 
- 	private $handlers = array();
 
- 	private $hooks;
 
- 	/**
 
- 	 * Constructor
 
- 	 *
 
- 	 * @param \Elgg\PluginHooksService $hooks For customized routing.
 
- 	 */
 
- 	public function __construct(\Elgg\PluginHooksService $hooks) {
 
- 		$this->hooks = $hooks;
 
- 	}
 
- 	/**
 
- 	 * Routes the request to a registered page handler
 
- 	 *
 
- 	 * This function triggers a plugin hook `'route', $identifier` so that plugins can
 
- 	 * modify the routing or handle a request.
 
- 	 *
 
- 	 * @param \Elgg\Http\Request $request The request to handle.
 
- 	 * @return boolean Whether the request was routed successfully.
 
- 	 * @access private
 
- 	 */
 
- 	public function route(\Elgg\Http\Request $request) {
 
- 		$segments = $request->getUrlSegments();
 
- 		if ($segments) {
 
- 			$identifier = array_shift($segments);
 
- 		} else {
 
- 			$identifier = '';
 
- 			// this plugin hook is deprecated. Use elgg_register_page_handler()
 
- 			// to register for the '' (empty string) handler.
 
- 			// allow plugins to override the front page (return true to indicate
 
- 			// that the front page has been served)
 
- 			$result = _elgg_services()->hooks->trigger('index', 'system', null, false);
 
- 			if ($result === true) {
 
- 				elgg_deprecated_notice("The 'index', 'system' plugin has been deprecated. See elgg_front_page_handler()", 1.9);
 
- 				exit;
 
- 			}
 
- 		}
 
- 		// return false to stop processing the request (because you handled it)
 
- 		// return a new $result array if you want to route the request differently
 
- 		$result = array(
 
- 			'identifier' => $identifier,
 
- 			'handler' => $identifier, // backward compatibility
 
- 			'segments' => $segments,
 
- 		);
 
- 		$result = $this->hooks->trigger('route', $identifier, $result, $result);
 
- 		if ($result === false) {
 
- 			return true;
 
- 		}
 
- 		if ($identifier != $result['identifier']) {
 
- 			$identifier = $result['identifier'];
 
- 		} else if ($identifier != $result['handler']) {
 
- 			$identifier = $result['handler'];
 
- 		}
 
- 		$segments = $result['segments'];
 
- 		$handled = false;
 
- 		if (isset($this->handlers[$identifier]) && is_callable($this->handlers[$identifier])) {
 
- 			$function = $this->handlers[$identifier];
 
- 			$handled = call_user_func($function, $segments, $identifier);
 
- 		}
 
- 		return $handled || headers_sent();
 
- 	}
 
- 	/**
 
- 	 * Register a function that gets called when the first part of a URL is
 
- 	 * equal to the identifier.
 
- 	 *
 
- 	 * @param string $identifier The page type to handle
 
- 	 * @param string $function   Your function name
 
- 	 *
 
- 	 * @return bool Depending on success
 
- 	 */
 
- 	public function registerPageHandler($identifier, $function) {
 
- 		if (is_callable($function, true)) {
 
- 			$this->handlers[$identifier] = $function;
 
- 			return true;
 
- 		}
 
- 		return false;
 
- 	}
 
- 	/**
 
- 	 * Unregister a page handler for an identifier
 
- 	 *
 
- 	 * @param string $identifier The page type identifier
 
- 	 *
 
- 	 * @return void
 
- 	 */
 
- 	public function unregisterPageHandler($identifier) {
 
- 		unset($this->handlers[$identifier]);
 
- 	}
 
- 	/**
 
- 	 * Get page handlers as array of identifier => callback
 
- 	 * 
 
- 	 * @return array
 
- 	 */
 
- 	public function getPageHandlers() {
 
- 		return $this->handlers;
 
- 	}
 
- }
 
 
  |