Rev 1826 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php// declare(encoding='UTF-8');/*** Contexte permet d'encapsuler les super globales et de définir le contexte du web service courrant.** @category DEL* @package Services* @package Bibliotheque* @version 0.1* @author Mathias CHOUET <mathias@tela-botanica.org>* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>* @author Aurelien PERONNET <aurelien@tela-botanica.org>* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>*/class Contexte {private $conteneur;private $get;private $getBrut;private $post;private $session;private $cookie;private $server;private $urlRessource;private $mapping = array('getPhp' => 'get','getQS' => 'getBrut','getPost' => 'post','getServer' => 'server','getSession' => 'session','getCookie' => 'cookie','getRessource' => 'urlRessource','setCookie' => 'cookie');public function __construct($conteneur, &$server, &$get, &$post, &$session, &$cookie) {$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;$this->server = $server;$this->get = $this->nettoyerParametres($get);$this->getBrut = $this->recupererParametresBruts();$this->post = $post;$this->session = $session;$this->cookie = $cookie;$this->urlRessource = $this->decouperUrlChemin();}public function __call($nom, $arguments) {if (!isset($this->mapping[$nom])) {$msg = "La méthode $nom n'existe pas dans l'objet {get_class()}";throw new Exception($msg, RestServeur::HTTP_CODE_ERREUR);}$attributNom = $this->mapping[$nom];$data = $this->$attributNom;if (substr($nom, 0, 3) == 'get') {$cle = isset($arguments[0]) ? $arguments[0] : null;return $this->getGenerique($data, $cle);} else if (substr($nom, 0, 3) == 'set') {$cle = isset($arguments[0]) ? $arguments[0] : null;$valeur = isset($arguments[1]) ? $arguments[1] : null;return $this->setGenerique($data, $cle, $valeur);}}private function getGenerique($data, $cle) {$retour = null;if ($cle === null) {$retour = $data;} else if (isset($data[$cle])) {$retour = $data[$cle];}return $retour;}private function setGenerique($data, $cle, $valeur) {if ($valeur === null) {unset($data[$cle]);} else {$data[$cle] = $valeur;}}private function nettoyerParametres(Array $parametres) {// Pas besoin d'utiliser urldecode car déjà fait par php pour les clés et valeur de $_GETif (isset($parametres) && count($parametres) > 0) {foreach ($parametres as $cle => $valeur) {// les quotes, guillements et points-virgules ont été retirés des caractères à vérifier car//ça n'a plus lieu d'être maintenant que l'on utilise protéger à peu près partout$verifier = array('NULL', "\\", "\x00", "\x1a");$parametres[$cle] = strip_tags(str_replace($verifier, '', $valeur));}}return $parametres;}private function recupererParametresBruts() {$parametres_bruts = array();if (isset($this->server['QUERY_STRING']) && !empty($this->server['QUERY_STRING'])) {$paires = explode('&', $this->server['QUERY_STRING']);foreach ($paires as $paire) {if ($paire != '' && substr_count($paire, '=') == 1) {$nv = explode('=', $paire);$nom = urldecode($nv[0]);$valeur = urldecode($nv[1]);$parametres_bruts[$nom] = $valeur;}}$parametres_bruts = $this->nettoyerParametres($parametres_bruts);}return $parametres_bruts;}private function decouperUrlChemin() {if (isset($this->server['REDIRECT_URL']) && $this->server['REDIRECT_URL'] != '') {if (isset($this->server['REDIRECT_QUERY_STRING']) && !empty($this->server['REDIRECT_QUERY_STRING'])) {$url = $this->server['REDIRECT_URL'].'?'.$this->server['REDIRECT_QUERY_STRING'];} else {$url = $this->server['REDIRECT_URL'];}} else {$url = $this->server['REQUEST_URI'];}$tailleQueryString = strlen($this->server['QUERY_STRING']);$tailleURL = ($tailleQueryString == 0) ? strlen($url) : -($tailleQueryString + 1);$urlChaine = '';if (strpos($url, $this->conteneur->getParametre('serveur.baseURL')) !== false) {$urlChaine = substr($url, strlen($this->conteneur->getParametre('serveur.baseURL')), $tailleURL);} else if (strpos($url, $this->conteneur->getParametre('serveur.baseAlternativeURL')) !== false) {$urlChaine = substr($url, strlen($this->conteneur->getParametre('serveur.baseAlternativeURL')), $tailleURL);}return explode('/', $urlChaine);}}