Subversion Repositories eFlore/Projets.eflore-projets

Rev

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

Rev 553 Rev 579
Line 30... Line 30...
30
	protected $serviceNom = 'informations';
30
	protected $serviceNom = 'informations';
31
	private $Bdd;
31
	private $Bdd;
32
	private $requete_condition = "";
32
	private $requete_condition = "";
33
	private $champs_recherches = '*';
33
	private $champs_recherches = '*';
34
	private $resultat_json;
34
	private $resultat_json;
-
 
35
	private $nb_ressources;
-
 
36
	protected $limite_requete = array( 'depart' => 0, 'limite' => 10);
Line 35... Line 37...
35
	
37
	
36
 
38
 
37
	public function consulter($ressources, $parametres) {
39
	public function consulter($ressources, $parametres) {
-
 
40
		$this->ressources = $ressources;
38
		$this->ressources = $ressources;
41
		$this->parametres = $parametres;
39
		$this->parametres = $parametres;
42
		$this->nb_ressources = count($ressources);
40
		$this->traiterParametres();
43
		$this->traiterParametres();
41
		$this->definirTables();
44
		$this->definirTables();
42
		$this->traiterRessources();
45
		$this->traiterRessources();
43
		$resultats = null;
46
		$resultats = null;
44
		foreach ($this->table_version as $version) {
47
		foreach ($this->table_version as $version) {
45
			$this->table = $version;
48
			$this->table = $version;
46
			$requete = $this->assemblerLaRequete();
49
			$requete = $this->assemblerLaRequete($table);
47
			$resultat =  $this->Bdd->recupererTous($requete);
50
			$resultat =  $this->Bdd->recupererTous($requete);
48
			$versionResultat = $this->analyserResultat($resultat);
51
			$versionResultat = $this->analyserResultat($resultat);
49
			if (count($this->table_version) > 1) {
52
			if (count($this->table_version) > 1) {
Line 76... Line 79...
76
	public function traiterParametres() {
79
	public function traiterParametres() {
77
		if (isset($this->parametres) && !empty($this->parametres)) {
80
		if (isset($this->parametres) && !empty($this->parametres)) {
78
			foreach ($this->parametres as $param => $valeur) {
81
			foreach ($this->parametres as $param => $valeur) {
79
				switch ($param) {
82
				switch ($param) {
80
					case 'categorie'  :
83
					case 'categorie'  :
81
						if ($valeur == "description") {
84
						if ($valeur == "description" &&  $this->nb_ressources == 1 ) {
82
							$this->champs_recherches = "num_nomen, BDNT, chorologie, inflorescence,"
85
							$this->champs_recherches = "num_nomen, BDNT, chorologie, inflorescence,"
83
								." sexualite, ordre_maturation, "
86
								." sexualite, ordre_maturation, "
84
								."pollinisation, fruit, dissemination, couleur_fleur, macule, floraison, type_bio, "
87
								."pollinisation, fruit, dissemination, couleur_fleur, macule, floraison, type_bio, "
85
						 		."form_vegetale ";
88
						 		."form_vegetale ";
86
							$this->requete_condition[] = "( chorologie != '' OR inflorescence != '' ".
89
							$this->requete_condition[] = "( chorologie != '' OR inflorescence != '' ".
87
								"OR  sexualite != '' OR ordre_maturation != '' OR pollinisation != '' ".
90
								"OR  sexualite != '' OR ordre_maturation != '' OR pollinisation != '' ".
88
								"OR fruit != '' OR dissemination != '' OR couleur_fleur != '' OR macule != '' ".
91
								"OR fruit != '' OR dissemination != '' OR couleur_fleur != '' OR macule != '' ".
89
								"OR floraison != '' OR type_bio != '' OR form_vegetale != '' )";
92
								"OR floraison != '' OR type_bio != '' OR form_vegetale != '' )";
90
						}elseif ($valeur == "ecologie") {
93
						}elseif ($valeur == "ecologie" && $this->nb_ressources == 1) {
91
							$this->champs_recherches = " num_nomen, BDNT, ve_lumiere , ve_temperature,"
94
							$this->champs_recherches = " num_nomen, BDNT, ve_lumiere , ve_temperature,"
92
								." ve_continentalite, ve_humidite_atmos, ve_humidite_edaph, ve_reaction_sol,"
95
								." ve_continentalite, ve_humidite_atmos, ve_humidite_edaph, ve_reaction_sol,"
93
								." ve_nutriments_sol, ve_salinite, ve_texture_sol, ve_mat_org_sol, "
96
								." ve_nutriments_sol, ve_salinite, ve_texture_sol, ve_mat_org_sol, "
94
								." vi_lumiere, vi_temperature, vi_continentalite, vi_humidite_edaph,"
97
								." vi_lumiere, vi_temperature, vi_continentalite, vi_humidite_edaph,"
95
								." vi_reaction_sol, vi_nutriments_sol, vi_salinite ";
98
								." vi_reaction_sol, vi_nutriments_sol, vi_salinite ";
Line 97... Line 100...
97
								"OR ve_continentalite != '' OR ve_humidite_atmos != '' ".
100
								"OR ve_continentalite != '' OR ve_humidite_atmos != '' ".
98
								"OR ve_humidite_edaph != '' OR ve_reaction_sol != '' ".
101
								"OR ve_humidite_edaph != '' OR ve_reaction_sol != '' ".
99
								"OR ve_nutriments_sol != '' OR ve_salinite != '' ".
102
								"OR ve_nutriments_sol != '' OR ve_salinite != '' ".
100
								"OR ve_texture_sol != '' OR ve_mat_org_sol != '' )";
103
								"OR ve_texture_sol != '' OR ve_mat_org_sol != '' )";
101
						} else {
104
						} else {
102
							$e = "Valeur de paramètre inconnue pour 'categorie'.";
105
							$e = "Valeur de paramètre inconnue pour 'categorie'. Ce paramètre n'est pas autorisé pour informations/#id/relations/catminat";
103
							throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE);
106
							throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE);
104
						}
107
						}
105
						break;
108
						break;
106
					case 'retour.format'  :
109
					case 'retour.format'  :
107
						if ($valeur == 'min' || $valeur == 'max') {
110
						if ($valeur == 'min' || $valeur == 'max' && $this->nb_ressources == 1) {
108
							$this->retour_format = $valeur;
111
							$this->retour_format = $valeur;
109
							break;
112
							
110
						} else {
113
						} else {
111
							$e = "Valeur de paramètre inconnue pour 'retour.format'.";
114
							$e = "Valeur de paramètre inconnue pour 'retour.format'. Ce paramètre n'est pas autorisé pour informations/#id/relations/catminat";
112
							throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE);
115
							throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE);
113
						}
116
						}
-
 
117
						break;
-
 
118
					case 'navigation.depart'  :
-
 
119
						$this->definirNavigationDepart($valeur);
-
 
120
						break;
-
 
121
					case 'navigation.limite'  :
-
 
122
						$this->definirNavigationLimite($valeur);
-
 
123
						break;
114
					case 'version.projet' :
124
					case 'version.projet' :
115
						$this->traiterVersion($valeur);
125
						$this->traiterVersion($valeur);
116
						break;
126
						break;
117
					default :
127
					default :
118
						$e = 'Erreur dans les parametres de votre requête : </br> Le paramètre " '
128
						$e = 'Erreur dans les parametres de votre requête : </br> Le paramètre " '
Line 126... Line 136...
126
	
136
	
127
	
137
	
128
 
138
 
129
	public function traiterRessources() {
139
	public function traiterRessources() {
130
			if(preg_match('/^(.+)\.nn:([0-9]+)$/', $this->ressources[0], $retour)){
140
			if(preg_match('/^(.+)\.nn:([0-9]+)$/', $this->ressources[0], $retour)){
131
				switch ($retour[1]) {
-
 
132
					case 'bdtfx' :
141
				$id = $retour[2];
133
						$this->requete_condition[] = "num_nomen = ".$retour[2]." AND BDNT = 'BDTFX' ";
142
				$ref = $retour[1];
134
						break;
143
				if ($ref == 'bdtfx' || $ref == 'bdafx' || $ref == 'bdbfx') {
135
					case  'bdafx' :
-
 
136
						$this->requete_condition[] = "num_nomen = ".$retour[2]." AND BDNT = 'BDAFX' ";
144
					if($this->nb_ressources == 1) {
137
						break;
145
						$this->requete_condition[] = "num_nomen = ".$id." AND BDNT = '".strtoupper($ref)."' ";
138
					case  'bdbfx' :
146
					} else {
139
						$this->requete_condition[] = "num_nomen = ".$retour[2]." AND BDNT = 'BDBFX' ";
147
						$this->definirParametresRequeteRelations($ref, $id);
140
						break;
148
					}
141
					default :
149
				} else {
142
						$e = 'Erreur dans l\'url de votre requête : </br> Le référentiel " '
-
 
143
							.$retour[1].' " n\'existe pas.';
150
					$e = 'Erreur dans l\'url de votre requête : </br> Le référentiel " '
Line 144... Line 151...
144
						throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE);
151
					.$ref.' " n\'existe pas.';
145
						break;
152
					throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE);
146
				}
153
				}
147
 
154
 
148
			} else {
155
			} else {
-
 
156
				$e = 'Erreur dans l\'url de votre requête : </br> La ressource demandée n\'existe pas.';
-
 
157
				throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE);
-
 
158
				break;
-
 
159
			}
-
 
160
			
-
 
161
	}
-
 
162
	
-
 
163
	function definirParametresRequeteRelations($ref, $id){
-
 
164
		if ($this->ressources[1] == 'relations'){
-
 
165
			switch ($this->ressources[2]) {
-
 
166
				case 'catminat' :
-
 
167
					$this->requete_condition[] = "catminat_code = ( SELECT catminat_code from ".$this->table_version[0]." WHERE "
-
 
168
					." num_nomen = ".$id." AND BDNT = '".$ref. "' ) ";
-
 
169
					$this->champs_recherches = " catminat_code, num_nomen, BDNT ";
-
 
170
					break;
-
 
171
				default :
-
 
172
					$e = 'Erreur dans l\'url de votre requête : </br> Le type de relation " '
-
 
173
				.$this->ressources[2].' " n\'existe pas.';
-
 
174
				throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE);
-
 
175
				break;
-
 
176
			}
-
 
177
		} else {
149
				$e = 'Erreur dans l\'url de votre requête : </br> La ressource demandée n\'existe pas.';
178
			$e = 'Erreur dans l\'url de votre requête : </br> Le type de ressources " '
Line -... Line 179...
-
 
179
			.$this->ressources[1].' " n\'existe pas.';
150
				throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE);
180
			throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE);
Line 151... Line 181...
151
				break;
181
		}
152
			}
182
	}
153
	}
183
	
-
 
184
	
-
 
185
	//+++------------------------------traitement des versions----------------------------------------++
154
	
186
	
155
	//+++------------------------------traitement des versions----------------------------------------++
187
	public function traiterVersion($valeur) {
156
	
188
		if (preg_match('/^[0-9]+(?:[._][0-9]+)*$/', $valeur) || $valeur == '+') {
157
	public function traiterVersion($valeur) {
189
			$this->version_projet = $valeur;
Line 185... Line 217...
185
//+--------------------------formatages de resultats  -------------------------------------------+
217
//+--------------------------formatages de resultats  -------------------------------------------+
Line 186... Line 218...
186
	
218
	
187
	public function retournerResultatFormate($resultat) {
219
	public function retournerResultatFormate($resultat) {
188
		$resultat_json = $resultat[0];
220
		$resultat_json = $resultat[0];
-
 
221
		if ($this->retour_format == 'max'){
189
		if ($this->retour_format == 'max'){
222
			if ($this->nb_ressources == 1) {		
190
			if (!isset($this->parametres['categorie']) ) {
223
				if ($this->parametres['categorie'] == 'ecologie') {
191
				$this->formaterResultatsTousChamps($resultat_json);
224
					$this->formaterResultatsChampsEcologie($resultat_json);
192
			} elseif ($this->parametres['categorie'] == 'ecologie') {
225
				} elseif ($this->parametres['categorie'] == 'description') {
-
 
226
					$this->formaterResultatsChampsDescription($resultat_json);
193
				 $this->formaterResultatsChampsEcologie($resultat_json);
227
				}else {
-
 
228
					$this->formaterResultatsTousChamps($resultat_json);
-
 
229
				}
194
			} elseif ($this->parametres['categorie'] == 'description') {
230
			} else {
195
				 $this->formaterResultatsChampsDescription($resultat_json);
231
				$this->formaterResultatsRelations($resultat);
196
			}
232
			}
197
		} else {
233
		} else {
198
			$this->resultat_json = $resultat_json;
234
			$this->resultat_json = $resultat_json;
199
		}
235
		}
200
		return $this->resultat_json;
236
		return $this->resultat_json;
-
 
237
	}
-
 
238
	
-
 
239
	public function formaterResultatsRelations($resultat) {
-
 
240
		$this->resultat_json['entete'] = $this->ajouterEnteteResultat();
-
 
241
		$resultat_json = array();
-
 
242
		foreach ($resultat as $cle => $res){
-
 
243
			$resultat_json[$cle] = $res ;
-
 
244
			$resultat_json[$cle]['href'] = $this->ajouterHref('informations',strtolower($res['BDNT']).".nn:".$res['num_nomen']);
-
 
245
		}
-
 
246
		$this->resultat_json['resultat'] = $resultat_json;
-
 
247
	}
-
 
248
	
-
 
249
	public function ajouterEnteteResultat($id) {
-
 
250
		$entete['depart'] = $this->limite_requete['depart'];
-
 
251
		$entete['limite'] = $this->limite_requete['limite'];
-
 
252
		$entete['total']  =  $this->total_resultat;
-
 
253
		$entete['version']  = $this->version_projet;
-
 
254
		$url = $this->formulerUrl($this->total_resultat, '/informations/'.$this->ressources[0].'/relations/catminat');
-
 
255
		if (isset($url['precedent']) && $url['precedent'] != '') {
-
 
256
			$entete['href.precedent'] = $url['precedent'];
-
 
257
		}
-
 
258
		if (isset($url['suivant']) && $url['suivant'] != '') {
-
 
259
			$entete['href.suivant']   = $url['suivant'];
-
 
260
		}
-
 
261
		return $entete;
Line 201... Line 262...
201
	}
262
	}
202
 
263
 
203
	public function formaterResultatsTousChamps($resultat) {
264
	public function formaterResultatsTousChamps($resultat) {
204
		$this->resultat_json = $resultat;
265
		$this->resultat_json = $resultat;
Line 382... Line 443...
382
	
443
	
Line 383... Line 444...
383
	//+--------------------------FONCTIONS D'ASSEMBLAGE DE LA REQUETE-------------------------------------------+
444
	//+--------------------------FONCTIONS D'ASSEMBLAGE DE LA REQUETE-------------------------------------------+
384
	
445
	
385
	public function assemblerLaRequete() {
446
	public function assemblerLaRequete() {
-
 
447
		$requete = 	' SELECT '.$this->champs_recherches.' FROM '.$this->table.' '
-
 
448
		.$this->retournerRequeteCondition().' ';
-
 
449
			if ($this->nb_ressources != 1) {
386
		$requete = 	' SELECT '.$this->champs_recherches.' FROM '.$this->table.' '
450
				$requete .= $this->delimiterResultatsRequete();
387
		.$this->retournerRequeteCondition();
451
		}
Line -... Line 452...
-
 
452
		return $requete;
-
 
453
	}
-
 
454
	
-
 
455
	public function calculerTotalResultat() {
-
 
456
		$requete = 'SELECT count(*) as nombre FROM '.$this->table.' '.$this->retournerRequeteCondition();
-
 
457
		$res = $this->getBdd()->recuperer($requete);
-
 
458
		if ($res) {
-
 
459
			$this->total_resultat = $res['nombre'];
-
 
460
		} else {
-
 
461
			$this->total_resultat = 0;
-
 
462
			$e = 'Données introuvables dans la base';
-
 
463
			$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $e);
-
 
464
		}
-
 
465
	}
-
 
466
	
-
 
467
	public function delimiterResultatsRequete() {
-
 
468
		$this->calculerTotalResultat();
-
 
469
		$requete_limite = '';
-
 
470
		if (($this->limite_requete['depart'] <=  $this->total_resultat) ){
-
 
471
			if (($this->limite_requete['limite'] + $this->limite_requete['depart'] )
-
 
472
			< $this->total_resultat  ){
-
 
473
				$requete_limite = 'LIMIT '.$this->limite_requete['depart'].', '
-
 
474
				.$this->limite_requete['limite'];
-
 
475
			}
-
 
476
		} else {
-
 
477
			$e = "Erreur : la valeur pour le paramètre navigation.départ est supérieure".
-
 
478
						" au nombre total de résultats.";
-
 
479
			throw new Exception($e, RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE);
-
 
480
		}
Line 388... Line 481...
388
		return $requete;
481
		return $requete_limite;
389
	}
482
	}
390
	
483