Source for file jRequest.class.php

Documentation is available at jRequest.class.php

  1. <?php
  2. /**
  3. @package    jelix
  4. @subpackage core
  5. @author     Laurent Jouanneau
  6. @contributor
  7. @copyright  2005-2008 Laurent Jouanneau
  8. @link        http://www.jelix.org
  9. @licence    GNU Lesser General Public Licence see LICENCE file or http://www.gnu.org/licenses/lgpl.html
  10. */
  11.  
  12.  
  13. /**
  14.  * base class for object which retrieve all parameters of an http request. The
  15.  * process depends on the type of request (ex: xmlrpc..)
  16.  *
  17.  * @package  jelix
  18.  * @subpackage core
  19.  */
  20. abstract class jRequest {
  21.  
  22.    /**
  23.     * request parameters
  24.     * could set from $_GET, $_POST, or from data processing of $HTTP_RAW_POST_DATA
  25.     * @var array 
  26.     */
  27.     public $params;
  28.  
  29.     /**
  30.      * the request type code
  31.      * @var string 
  32.      */
  33.     public $type;
  34.  
  35.     /**
  36.      * the type of the default response
  37.      * @var string 
  38.      */
  39.     public $defaultResponseType = '';
  40.  
  41.     /**
  42.      * the path of the entry point in the url
  43.      * if the url is /foo/index.php/bar, its value is /foo/
  44.      * @var string 
  45.      */
  46.     public $urlScriptPath;
  47.  
  48.     /**
  49.      * the name of the entry point
  50.      * if the url is /foo/index.php/bar, its value is index.php
  51.      * @var string 
  52.      */
  53.     public $urlScriptName;
  54.  
  55.     /**
  56.      * the path to the entry point in the url
  57.      * if the url is /foo/index.php/bar, its value is /foo/index.php
  58.      * @var string 
  59.      */
  60.     public $urlScript;
  61.  
  62.     /**
  63.      * the pathinfo part of the url
  64.      * if the url is /foo/index.php/bar, its value is /bar
  65.      * @var string 
  66.      */
  67.     public $urlPathInfo;
  68.  
  69.     function __construct(){  }
  70.  
  71.     /**
  72.      * initialize the request : analyse of http request etc..
  73.      */
  74.     public function init(){
  75.         $this->_initUrlData();
  76.         $this->_initParams();
  77.     }
  78.  
  79.     /**
  80.      * analyse the http request and sets the params property
  81.      */
  82.     abstract protected function _initParams();
  83.  
  84.     /**
  85.      * init the url* properties
  86.      */
  87.     protected function _initUrlData(){
  88.         global $gJConfig;
  89.  
  90.         $this->urlScript = $gJConfig->urlengine['urlScript'];
  91.         $this->urlScriptPath = $gJConfig->urlengine['urlScriptPath'];
  92.         $this->urlScriptName = $gJConfig->urlengine['urlScriptName'];
  93.  
  94.         $piiqp $gJConfig->urlengine['pathInfoInQueryParameter'];
  95.         if ($piiqp{
  96.             if (isset($_GET[$piiqp])) {
  97.                 $pathinfo $_GET[$piiqp];
  98.                 unset($_GET[$piiqp]);
  99.             else
  100.                 $pathinfo '';
  101.         else if(isset($_SERVER['PATH_INFO'])){
  102.             $pathinfo $_SERVER['PATH_INFO'];
  103.         else if(isset($_SERVER['ORIG_PATH_INFO'])){
  104.             $pathinfo $_SERVER['ORIG_PATH_INFO'];
  105.         else
  106.             $pathinfo '';
  107.  
  108.         if($pathinfo == $this->urlScript{
  109.             //when php is used as cgi and if there isn't pathinfo in the url
  110.             $pathinfo '';
  111.         }
  112.  
  113.         if ($gJConfig->isWindows && $pathinfo && strpos($pathinfo$this->urlScript!== false){
  114.             //under IIS, we may get  /subdir/index.php/mypath/myaction as PATH_INFO, so we fix it
  115.             $pathinfo substr ($pathinfostrlen ($this->urlScript));
  116.         }
  117.  
  118.         $this->urlPathInfo = $pathinfo;
  119.     }
  120.  
  121.     /**
  122.     * Gets the value of a request parameter. If not defined, gets its default value.
  123.     * @param string  $name           the name of the request parameter
  124.     * @param mixed   $defaultValue   the default returned value if the parameter doesn't exists
  125.     * @param boolean $useDefaultIfEmpty true: says to return the default value if the parameter value is ""
  126.     * @return mixed the request parameter value
  127.     */
  128.     public function getParam($name$defaultValue=null$useDefaultIfEmpty=false){
  129.  
  130.         if(isset($this->params[$name])){
  131.             if($useDefaultIfEmpty && trim($this->params[$name]== ''){
  132.                 return $defaultValue;
  133.             }else{
  134.                 return $this->params[$name];
  135.             }
  136.         }else{
  137.             return $defaultValue;
  138.         }
  139.     }
  140.  
  141.     /**
  142.      * @param string $respclass the name of a response class
  143.      */
  144.     public function isAllowedResponse($respclass){
  145.         return true;
  146.     }
  147.  
  148.     /**
  149.      * get a response object.
  150.      * @param string $name the name of the response type (ex: "html")
  151.      * @param boolean $useOriginal true:don't use the response object redefined by the application
  152.      * @return jResponse the response object
  153.      */
  154.     public function getResponse($type=''$useOriginal false){
  155.         global $gJCoord$gJConfig;
  156.         if($type == ''){
  157.             $type $this->defaultResponseType;
  158.         }
  159.  
  160.         if($useOriginal){
  161.             if(!isset($gJConfig->_coreResponses[$type])){
  162.                 throw new jException('jelix~errors.ad.response.type.unknow',array($gJCoord->action->resource,$type,$gJCoord->action->getPath()));
  163.             }
  164.             $respclass $gJConfig->_coreResponses[$type];
  165.             $path $gJConfig->_coreResponses[$type.'.path'];
  166.         }else{
  167.             if(!isset($gJConfig->responses[$type])){
  168.                 throw new jException('jelix~errors.ad.response.type.unknow',array($gJCoord->action->resource,$type,$gJCoord->action->getPath()));
  169.             }
  170.             $respclass $gJConfig->responses[$type];
  171.             $path $gJConfig->responses[$type.'.path'];
  172.         }
  173.  
  174.         if(!$this->isAllowedResponse($respclass)){
  175.             throw new jException('jelix~errors.ad.response.type.notallowed',array($gJCoord->action->resource,$type,$gJCoord->action->getPath()));
  176.         }
  177.  
  178.         if(!class_exists($respclass,false))
  179.             require($path);
  180.  
  181.         $response new $respclass();
  182.         $gJCoord->response $response;
  183.  
  184.         return $response;
  185.     }
  186. }

Documentation generated on Thu, 22 Mar 2012 22:16:31 +0100 by phpDocumentor 1.4.3