Subversion Repositories eFlore/Projets.eflore-projets

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
163 jpm 1
<?php
2
class ParametresVerificateur {
3
	private $parametres = null;
4
	private $parametresApi = array();
5
	private $erreursParametres = array();
6
 
7
	public function __construct(Parametres $parametres, Array $parametresApi) {
8
		$this->parametres = $parametres;
9
		$this->parametresApi = $parametresApi;
10
	}
11
 
12
	public function verifier() {
13
		$this->verifierConformiteApi();
14
		$this->verifierValeurs();
15
	}
16
 
17
	private function verifierConformiteApi() {
18
		while (is_null($parametre = $this->parametres->key()) === false) {
19
			if (in_array($parametre, $this->parametresApi) === false) {
20
				$message = "Le paramètre '$parametre' n'est pas pris en compte par cette version de l'API.";
21
				$code = RestServeur::HTTP_CODE_MAUVAISE_REQUETE;
22
				throw new Exception($message, $code);
23
			}
24
			$this->parametres->next();
25
		}
26
	}
27
 
28
	private function verifierValeurs() {
29
		$this->verifierValeurSimple('recherche', 'stricte|floue|etendue');
30
		$this->verifierValeurSimple('ns.format', 'htm|txt');
31
		$this->verifierValeurSimple('retour', 'application/json|image/jpeg');
32
		$this->verifierValeurSimple('retour.format', 'min|max|oss|perso');
33
		$this->verifierValeurRegExp('retour.langue', '/^(?:[*]|orig|[a-z]{2})$/');
34
		$this->verifierValeurMultipe('ns.structure', '|an|au|bib|ad');
35
		$this->verifierVersionProjet();
36
 
37
		if (count($this->erreursParametres) > 0) {
38
			$message = 'Erreur dans le paramètrage de votre URL : <br />'.implode('<br/>', $this->erreursParametres);
39
			$code = RestServeur::HTTP_CODE_MAUVAISE_REQUETE;
40
			throw new Exception($message, $code);
41
		}
42
	}
43
 
44
	private function verifierValeurSimple($parametre, $valeursPermises) {
45
		$valeur = $this->parametres->get($parametre);
46
		$permissionOk = $this->verifierValeursPermises($valeur, $valeursPermises);
47
		if ($permissionOk == false) {
48
			$this->erreursParametres[] = "Le paramètre '$parametre' ne peut pas prendre la valeur '$valeur'. Valeurs permises : $valeursPermises";
49
		}
50
	}
51
 
52
	private function verifierValeursPermises($valeur, $valeursPermises) {
53
		$permise = false;
54
		if (in_array($valeur, explode('|', $valeursPermises))) {
55
			$permise = true;
56
		}
57
		return $permise;
58
	}
59
 
60
	private function verifierValeurRegExp($parametre, $regexp) {
61
		$valeur = $this->parametres->get($parametre);
62
		$permissionOk = preg_match($regexp, $valeur) ? true : false;
63
		if ($permissionOk == false) {
64
			$this->erreursParametres[] = "Le paramètre '$parametre' ne peut pas prendre la valeur '$valeur'. Valeurs permises : $regexp";
65
		}
66
	}
67
 
68
	private function verifierValeurMultipe($parametre, $valeursPermises) {
69
		$valeursConcatenees = $this->parametres->get($parametre);
70
		$valeurs = explode(',', $valeursConcatenees);
71
		foreach ($valeurs as $valeur) {
72
			$permissionOk = $this->verifierValeursPermises($valeur, $valeursPermises);
73
			if ($permissionOk == false) {
74
				$this->erreursParametres[] = "Le paramètre '$parametre' ne peut pas prendre la valeur '$valeur'. Valeurs permises : $valeursPermises";
75
			}
76
		}
77
	}
78
 
79
	private function verifierVersionProjet() {
80
		$valeur = $this->parametres->get('version.projet');
81
		if (preg_match('/^(?:[0-9]+[.][0-9]+|[*+])$/', $valeur) == 0) {
82
			$this->erreursParametres[] = "Le paramètre 'version.projet' ne peut pas prendre la valeur '$valeur'. Valeurs permises : +,* ou [0-9]+.[0-9]+";
83
		}
84
	}
85
}
86
?>