Subversion Repositories eFlore/Projets.eflore-projets

Rev

Rev 163 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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