* @property-read string|null $current_url; * @property-read array|null $handler; * @property-read bool $authenticated; * @property-read bool $api_mode; */ class UrlRequest { // The URL requested handler private $current_url = null; // The URL requested handler private $handler = null; // Request need authentication ? private $authenticated = true; // API mode enabled ? private $api_mode = false; // Parameters detected on requested URL private $url_params = array(); public function __construct($current_url, $handler_infos, $url_params=array()) { $this -> current_url = $current_url; $this -> handler = $handler_infos['handler']; $this -> authenticated = ( isset($handler_infos['authenticated'])? boolval($handler_infos['authenticated']):true); $this -> api_mode = ( isset($handler_infos['api_mode'])? boolval($handler_infos['api_mode']):false); $this -> url_params = $url_params; } /** * Get request info * * @param string $key The name of the info * * @return mixed The value **/ public function __get($key) { if ($key == 'current_url') return $this -> current_url; if ($key == 'handler') return $this -> handler; if ($key == 'authenticated') return $this -> authenticated; if ($key == 'api_mode') return $this -> api_mode; if ($key == 'referer') return $this -> get_referer(); if ($key == 'http_method') return $_SERVER['REQUEST_METHOD']; if (array_key_exists($key, $this->url_params)) { return urldecode($this->url_params[$key]); } // Unknown key, log warning Log :: warning( "__get($key): invalid property requested\n%s", Log :: get_debug_backtrace_context()); } /** * Set request info * * @param string $key The name of the info * @param mixed $value The value of the info * * @return void **/ public function __set($key, $value) { if ($key == 'referer') $_SERVER['HTTP_REFERER'] = $value; elseif ($key == 'http_method') $_SERVER['REQUEST_METHOD'] = $value; else $this->url_params[$key] = $value; } /** * Check is request info is set * * @param string $key The name of the info * * @return bool True is info is set, False otherwise **/ public function __isset($key) { if ( in_array( $key, array('current_url', 'handler', 'authenticated', 'api_mode', 'referer', 'http_method') ) ) return True; return array_key_exists($key, $this->url_params); } /** * Get request parameter * * @param string $parameter The name of the parameter * @param bool $decode If true, the parameter value will be urldecoded * (optional, default: true) * * @return mixed The value or false if parameter does not exists **/ public function get_param($parameter, $decode=true) { if (array_key_exists($parameter, $this->url_params)) { if ($decode) return urldecode($this->url_params[$parameter]); return $this->url_params[$parameter]; } return false; } /** * Get request referer (if known) * * @return string|null The request referer URL if known, null otherwise */ public function get_referer() { if (isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER']) return $_SERVER['HTTP_REFERER']; return null; } } # vim: tabstop=2 shiftwidth=2 softtabstop=2 expandtab