Rev 880 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?phpclass ParametresVerificateur {private $parametres = null;private $parametresApi = array();private $erreursParametres = array();private $typesVerif = array('recherche' => 'Simple','ns.format' => 'Simple','retour' => 'Simple','retour.format' => 'Simple','retour.langue' => 'RegExp','ns.structure' => 'Multiple','version.projet' => 'RegExp');private $valeursPermises = array('recherche' => 'stricte|floue|etendue','ns.format' => 'htm|txt','retour' => 'application/json|image/jpeg','retour.format' => 'min|max|oss|perso','retour.langue' => '/^(?:[*]|orig|[a-z]{2})$/','ns.structure' => '|an|au|bib|ad','version.projet' => '/^(?:[0-9]+[.][0-9]+|[*+])$/');public function __construct(Parametres $parametres, Array $parametresApi) {$this->parametres = $parametres;$this->parametresApi = $parametresApi;}public function verifier() {$this->verifierConformiteApi();$this->verifierValeurs();}public function verifierConformiteApi() {$this->parametres->rewind();while (is_null($parametre = $this->parametres->key()) === false) {if (in_array($parametre, $this->parametresApi) === false) {$message = "Le paramètre '$parametre' n'est pas pris en compte par cette version de l'API.";$code = RestServeur::HTTP_CODE_MAUVAISE_REQUETE;throw new Exception($message, $code);}$this->parametres->next();}}public function verifierValeurs() {foreach ($this->typesVerif as $parametre => $type) {$methode = "verifierValeur$type";$this->$methode($parametre);}if (count($this->erreursParametres) > 0) {array_unshift($this->erreursParametres, 'Erreur dans le paramètrage de votre URL :');$message = implode('<br/>', $this->erreursParametres);$code = RestServeur::HTTP_CODE_MAUVAISE_REQUETE;throw new Exception($message, $code);}}private function verifierValeurSimple($parametre) {$valeur = $this->parametres->get($parametre);$valeursPermises = $this->valeursPermises[$parametre];$permissionOk = $this->verifierValeursPermises($valeur, $valeursPermises);if ($permissionOk == false) {$this->erreursParametres[] = "Le paramètre '$parametre' ne peut pas prendre la valeur '$valeur'. Valeurs permises : $valeursPermises";}}private function verifierValeursPermises($valeur, $valeursPermises) {$permise = false;if (in_array($valeur, explode('|', $valeursPermises))) {$permise = true;}return $permise;}private function verifierValeurRegExp($parametre) {$valeur = $this->parametres->get($parametre);$regexp = $this->valeursPermises[$parametre];$permissionOk = preg_match($regexp, $valeur) ? true : false;if ($permissionOk == false) {$this->erreursParametres[] = "Le paramètre '$parametre' ne peut pas prendre la valeur '$valeur'. Valeurs permises : $regexp";}}private function verifierValeurMultiple($parametre) {$valeursConcatenees = $this->parametres->get($parametre);$valeursPermises = $this->valeursPermises[$parametre];$valeurs = explode(',', $valeursConcatenees);foreach ($valeurs as $valeur) {$permissionOk = $this->verifierValeursPermises($valeur, $valeursPermises);if ($permissionOk == false) {$this->erreursParametres[] = "Le paramètre '$parametre' ne peut pas prendre la valeur '$valeur'. Valeurs permises : $valeursPermises";}}}}?>