eesyphp/src/UrlRequest.php

141 lines
3.5 KiB
PHP
Raw Normal View History

2023-01-29 19:18:10 +01:00
<?php
namespace EesyPHP;
/**
* URL request abstraction
*
* @author Benjamin Renard <brenard@easter-eggs.com>
* @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