You've already forked joomla_test
							
							
		
			
				
	
	
		
			143 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			143 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * @package     Joomla.Platform
 | |
|  * @subpackage  Application
 | |
|  *
 | |
|  * @copyright   Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved.
 | |
|  * @license     GNU General Public License version 2 or later; see LICENSE
 | |
|  */
 | |
| 
 | |
| defined('JPATH_PLATFORM') or die;
 | |
| 
 | |
| /**
 | |
|  * RESTful Web application router class for the Joomla Platform.
 | |
|  *
 | |
|  * @package     Joomla.Platform
 | |
|  * @subpackage  Application
 | |
|  * @since       12.2
 | |
|  */
 | |
| class JApplicationWebRouterRest extends JApplicationWebRouterBase
 | |
| {
 | |
| 	/**
 | |
| 	 * @var     boolean  A boolean allowing to pass _method as parameter in POST requests
 | |
| 	 *
 | |
| 	 * @since  12.2
 | |
| 	 */
 | |
| 	protected $methodInPostRequest = false;
 | |
| 
 | |
| 	/**
 | |
| 	 * @var    array  An array of HTTP Method => controller suffix pairs for routing the request.
 | |
| 	 * @since  12.2
 | |
| 	 */
 | |
| 	protected $suffixMap = array(
 | |
| 		'GET' => 'Get',
 | |
| 		'POST' => 'Create',
 | |
| 		'PUT' => 'Update',
 | |
| 		'PATCH' => 'Update',
 | |
| 		'DELETE' => 'Delete',
 | |
| 		'HEAD' => 'Head',
 | |
| 		'OPTIONS' => 'Options'
 | |
| 	);
 | |
| 
 | |
| 	/**
 | |
| 	 * Find and execute the appropriate controller based on a given route.
 | |
| 	 *
 | |
| 	 * @param   string  $route  The route string for which to find and execute a controller.
 | |
| 	 *
 | |
| 	 * @return  void
 | |
| 	 *
 | |
| 	 * @since   12.2
 | |
| 	 * @throws  InvalidArgumentException
 | |
| 	 * @throws  RuntimeException
 | |
| 	 */
 | |
| 	public function execute($route)
 | |
| 	{
 | |
| 		// Get the controller name based on the route patterns and requested route.
 | |
| 		$name = $this->parseRoute($route);
 | |
| 
 | |
| 		// Append the HTTP method based suffix.
 | |
| 		$name .= $this->fetchControllerSuffix();
 | |
| 
 | |
| 		// Get the controller object by name.
 | |
| 		$controller = $this->fetchController($name);
 | |
| 
 | |
| 		// Execute the controller.
 | |
| 		$controller->execute();
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Set a controller class suffix for a given HTTP method.
 | |
| 	 *
 | |
| 	 * @param   string  $method  The HTTP method for which to set the class suffix.
 | |
| 	 * @param   string  $suffix  The class suffix to use when fetching the controller name for a given request.
 | |
| 	 *
 | |
| 	 * @return  JApplicationWebRouter  This object for method chaining.
 | |
| 	 *
 | |
| 	 * @since   12.2
 | |
| 	 */
 | |
| 	public function setHttpMethodSuffix($method, $suffix)
 | |
| 	{
 | |
| 		$this->suffixMap[strtoupper((string) $method)] = (string) $suffix;
 | |
| 
 | |
| 		return $this;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Set to allow or not method in POST request
 | |
| 	 *
 | |
| 	 * @param   boolean  $value  A boolean to allow or not method in POST request
 | |
| 	 *
 | |
| 	 * @return  void
 | |
| 	 *
 | |
| 	 * @since   12.2
 | |
| 	 */
 | |
| 	public function setMethodInPostRequest($value)
 | |
| 	{
 | |
| 		$this->methodInPostRequest = $value;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Get the property to allow or not method in POST request
 | |
| 	 *
 | |
| 	 * @return  boolean
 | |
| 	 *
 | |
| 	 * @since   12.2
 | |
| 	 */
 | |
| 	public function isMethodInPostRequest()
 | |
| 	{
 | |
| 		return $this->methodInPostRequest;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Get the controller class suffix string.
 | |
| 	 *
 | |
| 	 * @return  string
 | |
| 	 *
 | |
| 	 * @since   12.2
 | |
| 	 * @throws  RuntimeException
 | |
| 	 */
 | |
| 	protected function fetchControllerSuffix()
 | |
| 	{
 | |
| 		// Validate that we have a map to handle the given HTTP method.
 | |
| 		if (!isset($this->suffixMap[$this->input->getMethod()]))
 | |
| 		{
 | |
| 			throw new RuntimeException(sprintf('Unable to support the HTTP method `%s`.', $this->input->getMethod()), 404);
 | |
| 		}
 | |
| 
 | |
| 		// Check if request method is POST
 | |
| 		if ( $this->methodInPostRequest == true && strcmp(strtoupper($this->input->server->getMethod()), 'POST') === 0)
 | |
| 		{
 | |
| 			// Get the method from input
 | |
| 			$postMethod = $this->input->get->getWord('_method');
 | |
| 
 | |
| 			// Validate that we have a map to handle the given HTTP method from input
 | |
| 			if ($postMethod && isset($this->suffixMap[strtoupper($postMethod)]))
 | |
| 			{
 | |
| 				return ucfirst($this->suffixMap[strtoupper($postMethod)]);
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		return ucfirst($this->suffixMap[$this->input->getMethod()]);
 | |
| 	}
 | |
| }
 | 
