diff options
Diffstat (limited to 'vendor/trails/src/controller.php')
| -rw-r--r-- | vendor/trails/src/controller.php | 438 |
1 files changed, 0 insertions, 438 deletions
diff --git a/vendor/trails/src/controller.php b/vendor/trails/src/controller.php deleted file mode 100644 index c8e7b8e..0000000 --- a/vendor/trails/src/controller.php +++ /dev/null @@ -1,438 +0,0 @@ -<?php - -/** - * A Trails_Controller is responsible for matching the unconsumed part of an URI - * to an action using the left over words as arguments for that action. The - * action is then mapped to method of the controller instance which is called - * with the just mentioned arguments. That method can send the #render_action, - * #render_template, #render_text, #render_nothing or #redirect method. - * Otherwise the #render_action is called with the current action as argument. - * If the action method sets instance variables during performing, they will be - * be used as attributes for the flexi-template opened by #render_action or - * #render_template. A controller's response's body is populated with the output - * of the #render_* methods. The action methods can add additional headers or - * change the status of that response. - * - * @package trails - * - * @author mlunzena - * @copyright (c) Authors - * @version $Id: trails.php 7001 2008-04-04 11:20:27Z mlunzena $ - */ - -class Trails_Controller { - - - /** - * @ignore - */ - protected - $dispatcher, - $response, - $performed, - $layout; - - - /** - * Constructor. - * - * @param mixed the dispatcher who creates this instance - * - * @return void - */ - function __construct($dispatcher) { - $this->dispatcher = $dispatcher; - $this->erase_response(); - } - - - /** - * Resets the response of the controller - * - * @return void - */ - function erase_response() { - $this->performed = FALSE; - $this->response = new Trails_Response(); - } - - - /** - * Return this controller's response - * - * @return mixed the controller's response - */ - function get_response() { - return $this->response; - } - - - /** - * This method extracts an action string and further arguments from it's - * parameter. The action string is mapped to a method being called afterwards - * using the said arguments. That method is called and a response object is - * generated, populated and sent back to the dispatcher. - * - * @param type <description> - * - * @return type <description> - */ - function perform($unconsumed) { - - list($action, $args, $format) = $this->extract_action_and_args($unconsumed); - - $this->format = isset($format) ? $format : 'html'; - - $before_filter_result = $this->before_filter($action, $args); - - # send action to controller - # TODO (mlunzena) shouldn't the after filter be triggered too? - if (!(FALSE === $before_filter_result || $this->performed)) { - - $callable = $this->map_action($action); - - if (is_callable($callable)) { - call_user_func_array($callable, $args); - } - else { - $this->does_not_understand($action, $args); - } - - if (!$this->performed) { - $this->render_action($action); - } - - $this->after_filter($action, $args); - } - - return $this->response; - } - - - /** - * Extracts action and args from a string. - * - * @param string the processed string - * - * @return array an array with two elements - a string containing the - * action and an array of strings representing the args - */ - function extract_action_and_args($string) { - - if ('' === $string) { - return $this->default_action_and_args(); - } - - // find optional file extension - $format = NULL; - if (preg_match('/^(.*[^\/.])\.(\w+)$/', $string, $matches)) { - list($_, $string, $format) = $matches; - } - - // TODO this should possibly remove empty tokens - $args = explode('/', $string); - $action = array_shift($args); - return array($action, $args, $format); - } - - /** - * Return the default action and arguments - * - * @return an array containing the action, an array of args and the format - * - */ - function default_action_and_args() { - return array('index', array(), NULL); - } - - /** - * Maps the action to an actual method name. - * - * @param string the action - * - * @return string the mapped method name - */ - function map_action($action) { - return array(&$this, $action . '_action'); - } - - - /** - * Callback function being called before an action is executed. If this - * function does not return FALSE, the action will be called, otherwise - * an error will be generated and processing will be aborted. If this function - * already #rendered or #redirected, further processing of the action is - * withheld. - * - * @param string Name of the action to perform. - * @param array An array of arguments to the action. - * - * @return bool - */ - function before_filter(&$action, &$args) { - } - - - /** - * Callback function being called after an action is executed. - * - * @param string Name of the action to perform. - * @param array An array of arguments to the action. - * - * @return void - */ - function after_filter($action, $args) { - } - - - /** - * <MethodDescription> - * - * @param type <description> - * @param type <description> - * - * @return void - */ - function does_not_understand($action, $args) { - throw new Trails_UnknownAction("No action responded to '$action'."); - } - - - /** - * <MethodDescription> - * - * @param string <description> - * - * @return void - */ - function redirect($to) { - - if ($this->performed) { - throw new Trails_DoubleRenderError(); - } - - $this->performed = TRUE; - - # get uri; keep absolute URIs - $url = preg_match('#^(/|\w+://)#', $to) - ? $to - : $this->url_for($to); - - $this->response->add_header('Location', $url)->set_status(302); - } - - - /** - * Renders the given text as the body of the response. - * - * @param string the text to be rendered - * - * @return void - */ - function render_text($text = ' ') { - - if ($this->performed) { - throw new Trails_DoubleRenderError(); - } - - $this->performed = TRUE; - - $this->response->set_body($text); - } - - - /** - * Renders the empty string as the response's body. - * - * @return void - */ - function render_nothing() { - $this->render_text(''); - } - - - /** - * Renders the template of the given action as the response's body. - * - * @param string the action - * - * @return void - */ - function render_action($action) { - $this->render_template($this->get_default_template($action), $this->layout); - } - - - function get_default_template($action) - { - $class = get_class($this); - $controller_name = - Trails_Inflector::underscore(substr($class, 0, -10)); - return $controller_name.'/'.$action; - } - - - /** - * Renders a template using an optional layout template. - * - * @param mixed a flexi template - * @param mixes a flexi template which is used as layout - * - * @return void - */ - function render_template($template_name, $layout = NULL) { - - # open template - $factory = $this->get_template_factory(); - $template = $factory->open($template_name); - - # template requires setup ? - switch (get_class($template)) { - case 'Flexi_JsTemplate': - $this->set_content_type('text/javascript'); - break; - } - - $template->set_attributes($this->get_assigned_variables()); - - if (isset($layout)) { - $template->set_layout($layout); - } - - $this->render_text($template->render()); - } - - - /** - * Create and return a template factory for this controller. - * - * @return a Flexi_TemplateFactory - */ - function get_template_factory() { - return new Flexi_TemplateFactory($this->dispatcher->trails_root . - '/views/'); - } - - - /** - * This method returns all the set instance variables to be used as attributes - * for a template. This controller is returned too as value for - * key 'controller'. - * - * @return array an associative array of variables for the template - */ - function get_assigned_variables() { - - $assigns = array(); - $protected = get_class_vars(get_class($this)); - - foreach (get_object_vars($this) as $var => $value) { - if (!array_key_exists($var, $protected)) { - $assigns[$var] =& $this->$var; - } - } - - $assigns['controller'] = $this; - - return $assigns; - } - - - /** - * Sets the layout to be used by this controller per default. - * - * @param mixed a flexi template to be used as layout - * - * @return void - */ - function set_layout($layout) { - $this->layout = $layout; - } - - - /** - * Returns a URL to a specified route to your Trails application. - * - * Example: - * Your Trails application is located at 'http://example.com/dispatch.php'. - * So your dispatcher's trails_uri is set to 'http://example.com/dispatch.php' - * If you want the URL to your 'wiki' controller with action 'show' and - * parameter 'page' you should send: - * - * $url = $controller->url_for('wiki/show', 'page'); - * - * $url should then contain 'http://example.com/dispatch.php/wiki/show/page'. - * - * The first parameter is a string containing the controller and optionally an - * action: - * - * - "{controller}/{action}" - * - "path/to/controller/action" - * - "controller" - * - * This "controller/action" string is not url encoded. You may provide - * additional parameter which will be urlencoded and concatenated with - * slashes: - * - * $controller->url_for('wiki/show', 'page'); - * -> 'wiki/show/page' - * - * $controller->url_for('wiki/show', 'page', 'one and a half'); - * -> 'wiki/show/page/one+and+a+half' - * - * @param string a string containing a controller and optionally an action - * @param strings optional arguments - * - * @return string a URL to this route - */ - function url_for($to/*, ...*/) { - - # urlencode all but the first argument - $args = func_get_args(); - $args = array_map('urlencode', $args); - $args[0] = $to; - - return $this->dispatcher->trails_uri . '/' . join('/', $args); - } - - - /** - * <MethodDescription> - * - * @param type <description> - * - * @return type <description> - */ - function set_status($status, $reason_phrase = NULL) { - $this->response->set_status($status, $reason_phrase); - } - - - /** - * Sets the content type of the controller's response. - * - * @param string the content type - * - * @return void - */ - function set_content_type($type) { - $this->response->add_header('Content-Type', $type); - } - - - /** - * Exception handler called when the performance of an action raises an - * exception. - * - * @param object the thrown exception - * - * @return object a response object - */ - function rescue($exception) { - return $this->dispatcher->trails_error($exception); - } - - function respond_to($ext) { - return $this->format === $ext; - } -} |
