Subversion Repositories eFlore/Projets.eflore-projets

Compare Revisions

Ignore whitespace Rev 214 → Rev 215

/trunk/services/bibliotheque/ParametresVerificateur.php
3,6 → 3,24
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;
14,7 → 32,8
$this->verifierValeurs();
}
 
private function verifierConformiteApi() {
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.";
25,24 → 44,23
}
}
 
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();
public function verifierValeurs() {
foreach ($this->typesVerif as $parametre => $type) {
$methode = "verifierValeur$type";
$this->$methode($parametre);
}
 
if (count($this->erreursParametres) > 0) {
$message = 'Erreur dans le paramètrage de votre URL : <br />'.implode('<br/>', $this->erreursParametres);
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, $valeursPermises) {
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";
57,8 → 75,9
return $permise;
}
 
private function verifierValeurRegExp($parametre, $regexp) {
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";
65,8 → 84,9
}
}
 
private function verifierValeurMultipe($parametre, $valeursPermises) {
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);
75,12 → 95,5
}
}
}
 
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]+";
}
}
}
?>