Source for file jUrl.class.php

Documentation is available at jUrl.class.php

  1. <?php
  2. /**
  3. @package     jelix
  4. @subpackage  core_url
  5. @author      Laurent Jouanneau
  6. @contributor Thibault PIRONT < nuKs >
  7. @contributor Loic Mathaud
  8. @copyright   2005-2008 Laurent Jouanneau
  9. @copyright   2007 Thibault PIRONT
  10. @copyright   2006 Loic Mathaud
  11. *  Some parts of this file are took from an experimental branch of the Copix project (CopixUrl.class.php, Copix 2.3dev20050901, http://www.copix.org),
  12. *  Some lines of code are still copyrighted 2001-2005 CopixTeam (LGPL licence).
  13. *  Initial authors of this parts are Gerald Croes and Laurent Jouanneau,
  14. *  and this parts were adapted for Jelix by Laurent Jouanneau
  15. @link        http://jelix.org
  16. @licence     GNU Lesser General Public Licence see LICENCE file or http://www.gnu.org/licenses/lgpl.html
  17. */
  18.  
  19.  
  20. /**
  21.  * Object that contains url data, and which provides static method helpers
  22.  * @package  jelix
  23.  * @subpackage core_url
  24.  * @author      Laurent Jouanneau (for the original code from Copix and enhancement for jelix)
  25.  * @author      Gerald Croes (for the original code from Copix)
  26.  * @contributor Loic Mathaud
  27.  * @contributor Thibault PIRONT < nuKs >
  28.  */
  29. class jUrl extends jUrlBase {
  30.  
  31.      /**#@+
  32.      * constant for get() method
  33.      * @var integer
  34.      */
  35.     const STRING=0;
  36.     const XMLSTRING=1;
  37.     const JURL=2;
  38.     const JURLACTION=3;
  39.     /**#@-*/
  40.  
  41.     /**
  42.     * script name including its path
  43.     * @var string 
  44.     */
  45.     public $scriptName;
  46.  
  47.     /**
  48.     * path info part of the url
  49.     * @var string 
  50.     */
  51.     public $pathInfo = '';
  52.  
  53.     /**
  54.     * constructor
  55.     * @param    string    $scriptname    script name
  56.     * @param    array    $params    parameters
  57.     * @param    string    $pathInfo    path info contents
  58.     */
  59.     function __construct ($scriptname=''$params=array ()$pathInfo=''){
  60.         $this->params      = $params;
  61.         $this->scriptName  = $scriptname;
  62.         $this->pathInfo    = $pathInfo;
  63.     }
  64.  
  65.  
  66.     /**
  67.     * converts the url to a string
  68.     * @param boolean $forxml  true: some characters will be escaped
  69.     * @return string 
  70.     */
  71.     public function toString ($forxml false){
  72.         return $this->getPath().$this->getQuery($forxml);
  73.     }
  74.  
  75.     /**
  76.      * get the path part of the url (scriptName + pathinfo)
  77.      * @return string 
  78.      * @since 1.0.4
  79.      */
  80.     public function getPath({
  81.         $url $this->scriptName;
  82.         if(substr($this->scriptName,-1== '/')
  83.             $url.=ltrim($this->pathInfo,'/');
  84.         else
  85.             $url.= $this->pathInfo;
  86.         return $url;
  87.     }
  88.  
  89.     /**
  90.      * get the query part of the url
  91.      * @param boolean $forxml  true: some characters will be escaped
  92.      * @return string 
  93.      * @since 1.0.4
  94.      */
  95.     public function getQuery($forxml false{
  96.         $url '';
  97.         if (count ($this->params)>0){
  98.             $q http_build_query($this->params''($forxml?'&amp;':'&'));
  99.             if(strpos($q'%3A')!==false)
  100.                 $q str_replace'%3A'':'$q);
  101.             $url .='?'.$q;
  102.         }
  103.         return $url;
  104.     }
  105.  
  106.     //============================== static helper methods
  107.  
  108.     /**
  109.     * get current Url
  110.     * @param boolean $forxml if true, escape some characters to include the url into an html/xml document
  111.     * @return string the url
  112.     */
  113.     static function getCurrentUrl ($forxml false{
  114.         if(isset($_SERVER["REQUEST_URI"])){
  115.            return $_SERVER["REQUEST_URI"];
  116.         }
  117.         static $url false;
  118.         if ($url === false){
  119.             $url 'http://'.$_SERVER['HTTP_HOST'].$GLOBALS['gJCoord']->request->urlScript.$GLOBALS['gJCoord']->request->urlPathInfo.'?';
  120.             $q http_build_query($_GET''($forxml?'&amp;':'&'));
  121.             if(strpos($q'%3A')!==false)
  122.                 $q str_replace'%3A'':'$q);
  123.             $url .=$q;
  124.         }
  125.         return $url;
  126.     }
  127.  
  128.     /**
  129.     * Adds parameters to the given url
  130.     * @param string $url  an URL
  131.     * @param array $params some parameters to append to the url
  132.     * @param boolean $forxml if true, escape some characters to include the url into an html/xml document
  133.     * @return string the url
  134.     */
  135.     static function appendToUrlString ($url$params array ()$forxml false){
  136.         $q http_build_query($params''($forxml?'&amp;':'&'));
  137.         if(strpos($q'%3A')!==false)
  138.             $q str_replace'%3A'':'$q);
  139.         if ((($pos strpos $url'?')) !== false&& ($pos !== (strlen ($url)-1))){
  140.             return $url ($forxml '&amp;' '&').$q;
  141.         }else{
  142.             return $url '?'.$q;
  143.         }
  144.     }
  145.  
  146.     /**
  147.     * Gets the url corresponding to an action, in the given format
  148.     * @param string $actSel  action selector. You can use # instead of the module
  149.     *                 or the action name, to specify the current url.
  150.     * @param array $params associative array with the parameters
  151.     * @param integer $what the format you want : one of the jUrl const,
  152.     *                                      STRING XMLSTRING JURL JURLACTION
  153.     * @return mixed a value, depending of the $what parameter
  154.     */
  155.     static function get ($actSel$params array ()$what=0{
  156.  
  157.         $sel new jSelectorAct($actSel,true);
  158.         $params['module'$sel->module;
  159.         $params['action'$sel->resource;
  160.         $ua new jUrlAction($params$sel->request);
  161.  
  162.         if($what == 3return $ua;
  163.  
  164.         $url jUrl::getEngine()->create($ua);
  165.  
  166.         if($what == 2return $url;
  167.  
  168.         return $url->toString($what != 0);
  169.     }
  170.  
  171.     /**
  172.      * Parse a url
  173.      * @param string $scriptNamePath    /path/index.php
  174.      * @param string $pathinfo          the path info of the url.
  175.      * @param array  $params            url parameter ($_REQUEST)
  176.      * @return jUrlAction 
  177.      */
  178.     static function parse($scriptNamePath$pathinfo$params ){
  179.          return jUrl::getEngine()->parse($scriptNamePath,$pathinfo$params);
  180.     }
  181.  
  182.     /**
  183.      * Parse a url from the request
  184.      * @param jRequest $request 
  185.      * @param array  $params            url parameters ($_REQUEST, or $_GET)
  186.      * @return jUrlAction 
  187.      * @since 1.1
  188.      */
  189.     static function parseFromRequest($request$params ){
  190.          return jUrl::getEngine()->parseFromRequest($request$params);
  191.     }
  192.  
  193.     /**
  194.      * escape and simplier a string to be a part of an url path
  195.      * remove or replace not allowed characters etc..
  196.      * @param string $str the string to escape
  197.      * @param boolean $highlevel false : just to a urlencode. true, replace some characters
  198.      * @return string escaped string
  199.      */
  200.     static function escape($str$highlevel=false){
  201.         static $url_escape_from null;
  202.         static $url_escape_to null;
  203.  
  204.         if($highlevel){
  205.             if($url_escape_from == null){
  206.                 $url_escape_from explode(' ',jLocale::get('jelix~format.url_escape_from'));
  207.                 $url_escape_to explode(' ',jLocale::get('jelix~format.url_escape_to'));
  208.             }
  209.             // first, we do transliteration.
  210.             // we don't use iconv because it is system dependant
  211.             // we don't use strtr because it is not utf8 compliant
  212.             $str str_replace($url_escape_from$url_escape_to$str);
  213.             // then we replace all non word characters by a space
  214.             $str preg_replace("/([^\w])/"," ",$str);
  215.             // then we remove words of 2 letters
  216.             //$str=preg_replace("/(?<=\s)\w{1,2}(?=\s)/"," ",$str);
  217.             // then we replace all spaces by a -
  218.             $str preg_replace("/( +)/","-",trim($str));
  219.             // we convert all character to lower case
  220.             $str strtolower($str);
  221.             return $str;
  222.         }else{
  223.             return urlencode (str_replace (array ('-'' ')array ('--','-')$str));
  224.         }
  225.     }
  226.  
  227.     /**
  228.      * perform the opposit of escape
  229.      * @param string $str the string to escape
  230.      * @return string 
  231.      */
  232.     static function unescape($str){
  233.         return strtr ($strarray ('--'=>'-''-'=>' '));
  234.     }
  235.  
  236.     /**
  237.      * return the current url engine
  238.      * @return jIUrlEngine 
  239.      * @internal call with true parameter, to force to re-instancy the engine. useful for test suite
  240.      */
  241.     static function getEngine($reset=false){
  242.         static $engine null;
  243.  
  244.         if($engine === null || $reset){
  245.             global $gJConfig;
  246.             $name $gJConfig->urlengine['engine'];
  247.             if!isset($gJConfig->_pluginsPathList_urls[$name])
  248.                 || !file_exists($gJConfig->_pluginsPathList_urls[$name]) ){
  249.                     throw new jException('jelix~errors.urls.engine.notfound'$name);
  250.             }
  251.             require_once($gJConfig->_pluginsPathList_urls[$name].$name.'.urls.php');
  252.  
  253.             $cl $name.'UrlEngine';
  254.             $engine new $cl();
  255.         }
  256.         return $engine;
  257.     }
  258. }

Documentation generated on Thu, 22 Mar 2012 22:17:30 +0100 by phpDocumentor 1.4.3