aboutsummaryrefslogtreecommitdiff
path: root/vendor/trails/src/dispatcher.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/trails/src/dispatcher.php')
-rw-r--r--vendor/trails/src/dispatcher.php271
1 files changed, 0 insertions, 271 deletions
diff --git a/vendor/trails/src/dispatcher.php b/vendor/trails/src/dispatcher.php
deleted file mode 100644
index 59bf8d9..0000000
--- a/vendor/trails/src/dispatcher.php
+++ /dev/null
@@ -1,271 +0,0 @@
-<?php
-
-/**
- * The Dispatcher is used to map an incoming HTTP request to a Controller
- * producing a response which is then rendered. To initialize an instance of
- * class Trails_Dispatcher you have to give three configuration settings:
- *
- * trails_root - the absolute file path to a directory containing the
- * applications controllers, views etc.
- * trails_uri - the URI to which routes to mapped Controller/Actions
- * are appended
- * default_controller - the route to a controller, that is used if no
- * controller is given, that is the route is equal to '/'
- *
- * After instantiation of a dispatcher you have to call method #dispatch with
- * the request uri to be mapped to a controller/action pair.
- *
- * @package trails
- *
- * @author mlunzena
- * @copyright (c) Authors
- * @version $Id: trails.php 7001 2008-04-04 11:20:27Z mlunzena $
- */
-
-class Trails_Dispatcher {
-
- # TODO (mlunzena) Konfiguration muss anders geschehen
-
- /**
- * This is the absolute file path to the trails application directory.
- *
- * @access public
- * @var string
- */
- public $trails_root;
-
-
- /**
- * This is the URI to which routes to controller/actions are appended.
- *
- * @access public
- * @var string
- */
- public $trails_uri;
-
-
- /**
- * This variable contains the route to the default controller.
- *
- * @access public
- * @var string
- */
- public $default_controller;
-
-
- /**
- * Constructor.
- *
- * @param string absolute file path to a directory containing the
- * applications controllers, views etc.
- * @param string the URI to which routes to mapped Controller/Actions
- * are appended
- * @param string the route to a controller, that is used if no
- * controller is given, that is the route is equal to '/'
- *
- * @return void
- */
- function __construct($trails_root,
- $trails_uri,
- $default_controller) {
-
- $this->trails_root = $trails_root;
- $this->trails_uri = $trails_uri;
- $this->default_controller = $default_controller;
- }
-
-
- /**
- * Maps a string to a response which is then rendered.
- *
- * @param string The requested URI.
- *
- * @return void
- */
- function dispatch($uri) {
-
- # E_USER_ERROR|E_USER_WARNING|E_USER_NOTICE|E_RECOVERABLE_ERROR = 5888
- $old_handler = set_error_handler(array($this, 'error_handler'), 5888);
-
- ob_start();
- $level = ob_get_level();
-
- $this->map_uri_to_response($this->clean_request_uri((string) $uri))->output();
-
- while (ob_get_level() >= $level) {
- ob_end_flush();
- }
-
- if (isset($old_handler)) {
- set_error_handler($old_handler);
- }
- }
-
-
- /**
- * Maps an URI to a response by figuring out first what controller to
- * instantiate, then delegating the unconsumed part of the URI to the
- * controller who returns an appropriate response object or throws a
- * Trails_Exception.
- *
- * @param string the URI string
- *
- * @return mixed a response object
- */
- function map_uri_to_response($uri) {
-
- try {
-
- list($controller_path, $unconsumed) =
- '' === $uri
- ? $this->default_route()
- : $this->parse($uri);
-
- $controller = $this->load_controller($controller_path);
-
- $response = $controller->perform($unconsumed);
-
- } catch (Exception $e) {
-
- $response = isset($controller) ? $controller->rescue($e)
- : $this->trails_error($e);
- }
-
- return $response;
- }
-
-
- /**
- *
- * @return array an array containing the default controller and an
- * empty unconsumed route
- */
- function default_route() {
- if (!$this->file_exists($this->default_controller . '.php')) {
- throw new Trails_MissingFile(
- "Default controller '{$this->default_controller}' not found'");
- }
- return array($this->default_controller, '');
- }
-
-
- function trails_error($exception) {
- ob_clean();
-
- # show details for local requests
- $detailed = @$_SERVER['REMOTE_ADDR'] === '127.0.0.1';
-
- $body = sprintf('<html><head><title>Trails Error</title></head>'.
- '<body><h1>%s</h1><pre>%s</pre></body></html>',
- htmlentities($exception->__toString()),
- $detailed
- ? htmlentities($exception->getTraceAsString())
- : '');
-
- if ($exception instanceof Trails_Exception) {
- $response = new Trails_Response($body,
- $exception->headers,
- $exception->getCode(),
- $exception->getMessage());
- }
- else {
- $response = new Trails_Response($body, array(), 500,
- $exception->getMessage());
- }
-
- return $response;
- }
-
-
- /**
- * Clean up URI string by removing the query part and leading slashes.
- *
- * @param string an URI string
- *
- * @return string the cleaned string
- */
- function clean_request_uri($uri) {
- if (FALSE !== ($pos = strpos($uri, '?'))) {
- $uri = substr($uri, 0, $pos);
- }
- return ltrim($uri, '/');
- }
-
-
- /**
- * <MethodDescription>
- *
- * @param type <description>
- * @param type <description>
- *
- * @return type <description>
- */
- function parse($unconsumed, $controller = NULL) {
- list($head, $tail) = $this->split_on_first_slash($unconsumed);
-
- if (!preg_match('/^\w+$/', $head)) {
- throw new Trails_RoutingError("No route matches '$head'");
- }
-
- $controller = (isset($controller) ? $controller . '/' : '') . $head;
-
- if ($this->file_exists($controller . '.php')) {
- return array($controller, $tail);
- }
- else if ($this->file_exists($controller)) {
- return $this->parse($tail, $controller);
- }
-
- throw new Trails_RoutingError("No route matches '$head'");
- }
-
- function split_on_first_slash($str) {
- preg_match(":([^/]*)(/+)?(.*):", $str, $matches);
- return array($matches[1], $matches[3]);
- }
-
- function file_exists($path) {
- return file_exists("{$this->trails_root}/controllers/$path");
- }
-
- /**
- * Loads the controller file for a given controller path and return an
- * instance of that controller. If an error occures, an exception will be
- * thrown.
- *
- * @param string the relative controller path
- *
- * @return TrailsController an instance of that controller
- */
- function load_controller($controller) {
- require_once "{$this->trails_root}/controllers/{$controller}.php";
- $class = Trails_Inflector::camelize($controller) . 'Controller';
- if (!class_exists($class)) {
- throw new Trails_UnknownController("Controller missing: '$class'");
- }
- return new $class($this);
- }
-
-
- /**
- * This method transforms E_USER_* and E_RECOVERABLE_ERROR to
- * Trails_Exceptions.
- *
- * @param integer the level of the error raised
- * @param string the error message
- * @param string the filename that the error was raised in
- * @param integer the line number the error was raised at
- * @param array an array of every variable that existed in the scope the
- * error was triggered in
- *
- * @throws Trails_Exception
- *
- * @return void
- */
- function error_handler($errno, $string, $file, $line, $context) {
- if (!(5888 & $errno)) {
- return false;
- }
- throw new Trails_Exception(500, $string);
- }
-}