Blame | Last modification | View Log | RSS feed
<?phpclass ParametresVerificateur {private $parametres = null;private $parametresApi = array();private $erreursParametres = array();public function __construct(Parametres $parametres, Array $parametresApi) {$this->parametres = $parametres;$this->parametresApi = $parametresApi;}public function verifier() {$this->verifierConformiteApi();$this->verifierValeurs();}private function verifierConformiteApi() {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();}}private function verifierValeurs() {$this->verifierValeurSimple('recherche', 'stricte|floue|etendue');$this->verifierValeurSimple('ns.format', 'htm|txt');$this->verifierValeurSimple('retour', 'application/json|image/jpeg');$this->verifierValeurSimple('retour.format', 'min|max|oss|perso');$this->verifierValeurRegExp('retour.langue', '/^(?:[*]|orig|[a-z]{2})$/');$this->verifierValeurMultipe('ns.structure', '|an|au|bib|ad');$this->verifierVersionProjet();if (count($this->erreursParametres) > 0) {$message = 'Erreur dans le paramètrage de votre URL : <br />'.implode('<br/>', $this->erreursParametres);$code = RestServeur::HTTP_CODE_MAUVAISE_REQUETE;throw new Exception($message, $code);}}private function verifierValeurSimple($parametre, $valeursPermises) {$valeur = $this->parametres->get($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, $regexp) {$valeur = $this->parametres->get($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 verifierValeurMultipe($parametre, $valeursPermises) {$valeursConcatenees = $this->parametres->get($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";}}}private function verifierVersionProjet() {$valeur = $this->parametres->get('version.projet');if (preg_match('/^(?:[0-9]+[.][0-9]+|[*+])$/', $valeur) == 0) {$this->erreursParametres[] = "Le paramètre 'version.projet' ne peut pas prendre la valeur '$valeur'. Valeurs permises : +,* ou [0-9]+.[0-9]+";}}}?>