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.  
  70.     /**
  71.      * @var string 
  72.      * @deprecated see $urlScriptPath
  73.      */
  74.     public $url_script_path;
  75.  
  76.     /**
  77.      * @var string 
  78.      * @deprecated see $urlScriptName
  79.      */
  80.     public $url_script_name;
  81.  
  82.     /**
  83.      * @var string 
  84.      * @deprecated see $urlPathInfo
  85.      */
  86.     public $url_path_info;
  87.  
  88.  
  89.  
  90.     function __construct(){  }
  91.  
  92.     /**
  93.      * initialize the request : analyse of http request etc..
  94.      */
  95.     public function init(){
  96.         $this->_initUrlDatas();
  97.         $this->_initParams();
  98.     }
  99.  
  100.     /**
  101.      * analyse the http request and sets the params property
  102.      */
  103.     abstract protected function _initParams();
  104.  
  105.     /**
  106.      * init the url* properties
  107.      */
  108.     protected function _initUrlDatas(){
  109.         global $gJConfig;
  110.  
  111.         if (isset($_SERVER[$gJConfig->urlengine['scriptNameServerVariable']]))
  112.             $this->urlScript = $_SERVER[$gJConfig->urlengine['scriptNameServerVariable']];
  113.         else
  114.             $this->urlScript = $_SERVER['SCRIPT_NAME'];
  115.  
  116.         $lastslash strrpos ($this->urlScript'/');
  117.         $this->url_script_path = $this->urlScriptPath = substr ($this->urlScript0$lastslash ).'/';
  118.  
  119.         if($gJConfig->urlengine['basePath'== '')// for beginners or simple site, we "guess" the base path
  120.             $gJConfig->urlengine['basePath'$this->urlScriptPath;
  121.             if($gJConfig->urlengine['jelixWWWPath']{0!= '/')
  122.                 $gJConfig->urlengine['jelixWWWPath'$this->urlScriptPath.$gJConfig->urlengine['jelixWWWPath'];
  123.         }else if(strpos($this->urlScriptPath,$gJConfig->urlengine['basePath']!== 0){
  124.             throw new Exception('Jelix Error: basePath ('.$gJConfig->urlengine['basePath'].') in config file doesn\'t correspond to current base path. You should setup it to '.$this->urlScriptPath);
  125.         }
  126.  
  127.         $this->url_script_name = $this->urlScriptName = substr ($this->urlScript$lastslash+1);
  128.  
  129.         $piiqp $gJConfig->urlengine['pathInfoInQueryParameter'];
  130.         if ($piiqp{
  131.             if (isset($_GET[$piiqp])) {
  132.                 $pathinfo $_GET[$piiqp];
  133.                 unset($_GET[$piiqp]);
  134.             else
  135.                 $pathinfo '';
  136.         else if(isset($_SERVER['PATH_INFO'])){
  137.             $pathinfo $_SERVER['PATH_INFO'];
  138.         else if(isset($_SERVER['ORIG_PATH_INFO'])){
  139.             $pathinfo $_SERVER['ORIG_PATH_INFO'];
  140.         else
  141.             $pathinfo '';
  142.  
  143.         if($pathinfo == $this->urlScript{
  144.             //when php is used as cgi and if there isn't pathinfo in the url
  145.             $pathinfo '';
  146.         }
  147.  
  148.         if ($gJConfig->isWindows && $pathinfo && strpos ($pathinfo$this->urlScript!== false){
  149.             //under IIS, we may get  /subdir/index.php/mypath/myaction as PATH_INFO, so we fix it
  150.             $pathinfo substr ($pathinfostrlen ($this->urlScript));
  151.         }
  152.  
  153.         $this->url_path_info = $this->urlPathInfo = $pathinfo;
  154.     }
  155.  
  156.     /**
  157.     * Gets the value of a request parameter. If not defined, gets its default value.
  158.     * @param string  $name           the name of the request parameter
  159.     * @param mixed   $defaultValue   the default returned value if the parameter doesn't exists
  160.     * @param boolean $useDefaultIfEmpty true: says to return the default value if the parameter value is ""
  161.     * @return mixed the request parameter value
  162.     */
  163.     public function getParam($name$defaultValue=null$useDefaultIfEmpty=false){
  164.  
  165.         if(isset($this->params[$name])){
  166.             if($useDefaultIfEmpty && trim($this->params[$name]== ''){
  167.                 return $defaultValue;
  168.             }else{
  169.                 return $this->params[$name];
  170.             }
  171.         }else{
  172.             return $defaultValue;
  173.         }
  174.     }
  175.  
  176.     /**
  177.      * return a list of class name of allowed response corresponding to the request
  178.      * @return array the list, or false which means everything
  179.      * @see jRequest::getResponse()
  180.      */
  181.     public function allowedResponses()return false;}
  182.  
  183.     /**
  184.      * @param string $respclass the name of a response class
  185.      */
  186.     public function isAllowedResponse($respclass){
  187.         if($ar=$this->allowedResponses()){
  188.             return in_array($respclass$ar);
  189.         }else
  190.             return true;
  191.     }
  192.  
  193.     /**
  194.      * get a response object.
  195.      * @param string $name the name of the response type (ex: "html")
  196.      * @param boolean $useOriginal true:don't use the response object redefined by the application
  197.      * @return jResponse the response object
  198.      */
  199.     public function getResponse($type=''$useOriginal false){
  200.         global $gJCoord$gJConfig;
  201.         if($type == ''){
  202.             $type $this->defaultResponseType;
  203.         }
  204.  
  205.         if($useOriginal){
  206.             if(!isset($gJConfig->_coreResponses[$type])){
  207.                 throw new jException('jelix~errors.ad.response.type.unknow',array($gJCoord->action->resource,$type,$gJCoord->action->getPath()));
  208.             }
  209.             $respclass $gJConfig->_coreResponses[$type];
  210.         }else{
  211.             if(!isset($gJConfig->responses[$type])){
  212.                 throw new jException('jelix~errors.ad.response.type.unknow',array($gJCoord->action->resource,$type,$gJCoord->action->getPath()));
  213.             }
  214.             $respclass $gJConfig->responses[$type];
  215.         }
  216.         if(file_exists($path=JELIX_LIB_RESPONSE_PATH.$respclass.'.class.php')){
  217.             require_once ($path);
  218.         }elseif(file_exists($path=JELIX_APP_PATH.'responses/'.$respclass.'.class.php')){
  219.             require_once ($path);
  220.         }else{
  221.             throw new jException('jelix~errors.ad.response.not.loaded',array($gJCoord->action->resource,$type,$gJCoord->action->getPath()));
  222.         }
  223.  
  224.         if(!$this->isAllowedResponse($respclass)){
  225.             throw new jException('jelix~errors.ad.response.type.notallowed',array($gJCoord->action->resource,$type,$gJCoord->action->getPath()));
  226.         }
  227.  
  228.         $response new $respclass();
  229.         $gJCoord->response$response;
  230.  
  231.         return $response;
  232.     }
  233. }
  234.  
  235. ?>

Documentation generated on Wed, 07 Sep 2011 13:47:41 +0200 by phpDocumentor 1.4.3