<?php
/**
* Analyser d'URL
*
* @version $Id$
* @copyright 2009
*/
/** Documentation Technique
*
* ------------------
* Ouverture de l'objet
* Class: URL_Analyser
* Static Method: Open($Query = null)
*
* Permet de commencer l'analyser d'une URL ou d'en récupérer le resultati si
* elle a déjà été faite.
*
* ---- Liste des arguments
* --$Query (Defaut: NULL) : contient le QUERY_STRING à analysé. Si cet argument
* n'est pas spécifié ou alors qu'il est nul, alors le script prends
* le QUERY_STRING de la page courante.
*
* ---- Valeur de retour
* Retourne une instance de l'objet d'analyse utilisable pour récupérer le
* résultat de l'analyse d'URL qui a été faite.
*
* -------------------
* Analyse de l'URL
* Object: URL_Analyser
* Method: Analyse()
*
* Permet de lancer manuellement une nouvelle analyse d'URL. A notée qu'elle se
* fait automatiquement à l'ouverture de l'objet.
*
* --------------------
* Récupérer la valeur d'une variable d'URL
* Object: URL_Analyser
* Method: GetVar($name)
*
* Permet de récupérer une variable posté en GET.
*
* ---- Liste des arguments
* --$name : Non de la variable dont on veut connaite la valeur.
*
* ---- Valeur de retour
* Valeur de la variable si celle-ci est défini, sinon retourne NULL.
*
* ---------------------
* Récupérer un élément de l'URL
* Object: URL_Analyser
* Method: GetUrlDir($index = 0)
*
* Permet de récupérer un élément de l'url virtuel. J'appelle par élément l'une
* des choses qui se trouve entre les '/' de l'url.
*
* ---- List des arguments
* --$index : Si positif, alors retourne l'élément de l'URL ayant pour index
* $index. Le premier élément a l'index 0. Si un nombre négatif est entré, alors
* essaye de trouver l'éméent en partant de la fin de l'URL.
*
* ---- Valeur de retour
* Retourne l'élément à l'index $index, ou NULL s'il n'existe pas.
*
* **/
class URL_Analyser {
public $Query;
protected $URL_List = array();
protected $NewQuery;
protected $GetVar = array();
static private $list = array(); //liste des URL_Analyser deja existant.
public function GetVar($name){
return (isset($this->GetVar[$name]))?($this->GetVar[$name]):(NULL);
}
static public function Open($Query = null) {
$Query = ($Query===NULL)?($_SERVER['QUERY_STRING']):($Query);
if (array_key_exists($Query, self::$list)) {
return self::$list[$Query];
} else {
return new URL_Analyser($Query);
}
}
function __construct ($Query) {
$this->Query = $Query;
$this->Analyse();
}
function Analyse() {
$posI = strpos($this->Query, '?');
$posI = ($posI !== FALSE)?($posI):(strlen($this->Query));
$this->NewQuery = strtolower(substr($this->Query, $posI + 1, strlen($this->Query) - $posI - 1));
$this->GetUrlList(substr($this->Query, 0, $posI));
$this->GetVarList($this->NewQuery);
}
protected function GetVarList($Query = NULL){
$Query = ($Query === NULL)?($this->NewQuery):($Query);
$varlist = explode('&', $Query);
foreach($varlist as $arg){
$arg = explode('=', $arg);
if (count($arg) > 2)
trigger_error('Il ne peux pas y avoir deux valeurs à une seule variable. Seul la première sera prise.', E_USER_ERROR);
$this->GetVar[trim($arg[0])] = trim(@$arg[1]);
}
}
protected function GetUrlList ($URL) {
$this->URL_List = explode('/', $URL);
$temp = $this->URL_List;
$this->URL_List = array();
foreach($temp as $arg){
if ($arg) {
$this->URL_List = array_merge($this->URL_List, array($arg));
}
}
unset($temp);
}
function GetUrlDir($index = 0){
$index = ($index >= 0)?($index):(count($this->URL_List) + $index);
return (isset($this->URL_List[$index]))?($this->URL_List[$index]):(NULL);
}
function GetVarValue($var){
return (isset($this->GetVar[$var]))?($this->GetVar[$var]):(FALSE);
}
}
?>