'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('
', $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"; } } } } ?>