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