mirror of
				https://github.com/phpbb/phpbb.git
				synced 2025-10-29 06:26:22 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			116 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			116 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
| *
 | |
| * @package \phpbb\request\request
 | |
| * @copyright (c) 2010 phpBB Group
 | |
| * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
 | |
| *
 | |
| */
 | |
| 
 | |
| namespace phpbb\request;
 | |
| 
 | |
| /**
 | |
| * Replacement for a superglobal (like $_GET or $_POST) which calls
 | |
| * trigger_error on all operations but isset, overloads the [] operator with SPL.
 | |
| *
 | |
| * @package \phpbb\request\request
 | |
| */
 | |
| class deactivated_super_global implements \ArrayAccess, \Countable, \IteratorAggregate
 | |
| {
 | |
| 	/**
 | |
| 	* @var	string	Holds the name of the superglobal this is replacing.
 | |
| 	*/
 | |
| 	private $name;
 | |
| 
 | |
| 	/**
 | |
| 	* @var	\phpbb\request\request_interface::POST|GET|REQUEST|COOKIE	Super global constant.
 | |
| 	*/
 | |
| 	private $super_global;
 | |
| 
 | |
| 	/**
 | |
| 	* @var	\phpbb\request\request_interface	The request class instance holding the actual request data.
 | |
| 	*/
 | |
| 	private $request;
 | |
| 
 | |
| 	/**
 | |
| 	* Constructor generates an error message fitting the super global to be used within the other functions.
 | |
| 	*
 | |
| 	* @param	\phpbb\request\request_interface	$request	A request class instance holding the real super global data.
 | |
| 	* @param	string					$name		Name of the super global this is a replacement for - e.g. '_GET'.
 | |
| 	* @param	\phpbb\request\request_interface::POST|GET|REQUEST|COOKIE	$super_global	The variable's super global constant.
 | |
| 	*/
 | |
| 	public function __construct(\phpbb\request\request_interface $request, $name, $super_global)
 | |
| 	{
 | |
| 		$this->request = $request;
 | |
| 		$this->name = $name;
 | |
| 		$this->super_global = $super_global;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	* Calls trigger_error with the file and line number the super global was used in.
 | |
| 	*/
 | |
| 	private function error()
 | |
| 	{
 | |
| 		$file = '';
 | |
| 		$line = 0;
 | |
| 
 | |
| 		$message = 'Illegal use of $' . $this->name . '. You must use the request class or request_var() to access input data. Found in %s on line %d. This error message was generated by deactivated_super_global.';
 | |
| 
 | |
| 		$backtrace = debug_backtrace();
 | |
| 		if (isset($backtrace[1]))
 | |
| 		{
 | |
| 			$file = $backtrace[1]['file'];
 | |
| 			$line = $backtrace[1]['line'];
 | |
| 		}
 | |
| 		trigger_error(sprintf($message, $file, $line), E_USER_ERROR);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	* Redirects isset to the correct request class call.
 | |
| 	*
 | |
| 	* @param	string	$offset	The key of the super global being accessed.
 | |
| 	*
 | |
| 	* @return	bool	Whether the key on the super global exists.
 | |
| 	*/
 | |
| 	public function offsetExists($offset)
 | |
| 	{
 | |
| 		return $this->request->is_set($offset, $this->super_global);
 | |
| 	}
 | |
| 
 | |
| 	/**#@+
 | |
| 	* Part of the \ArrayAccess implementation, will always result in a FATAL error.
 | |
| 	*/
 | |
| 	public function offsetGet($offset)
 | |
| 	{
 | |
| 		$this->error();
 | |
| 	}
 | |
| 
 | |
| 	public function offsetSet($offset, $value)
 | |
| 	{
 | |
| 		$this->error();
 | |
| 	}
 | |
| 
 | |
| 	public function offsetUnset($offset)
 | |
| 	{
 | |
| 		$this->error();
 | |
| 	}
 | |
| 	/**#@-*/
 | |
| 
 | |
| 	/**
 | |
| 	* Part of the \Countable implementation, will always result in a FATAL error
 | |
| 	*/
 | |
| 	public function count()
 | |
| 	{
 | |
| 		$this->error();
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	* Part of the Traversable/IteratorAggregate implementation, will always result in a FATAL error
 | |
| 	*/
 | |
| 	public function getIterator()
 | |
| 	{
 | |
| 		$this->error();
 | |
| 	}
 | |
| }
 | |
| 
 |