Subversion Repositories eFlore/Projets.eflore-projets

Rev

Rev 452 | Rev 480 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 452 Rev 466
1
<?php
1
<?php
2
 
2
 
3
/**
3
/**
4
* Classe InformationsBaseflor.php permet de faire des requetes de baseflor en fonction d'un référentiel
4
* Classe InformationsBaseflor.php permet de faire des requetes de baseflor en fonction d'un référentiel
5
*( BDTFX, BDAFX, BDBFX ) et d'un numéro nomenclatural ( différent de 0 ). 
5
*( BDTFX, BDAFX, BDBFX ) et d'un numéro nomenclatural ( différent de 0 ). 
6
*  fin d'url possibles :
6
*  fin d'url possibles :
7
*  /informations/#bdnt.nn:#num_nomen --> retourne tous les champs pour un BDNT et un num_nomen
7
*  /informations/#bdnt.nn:#num_nomen --> retourne tous les champs pour un BDNT et un num_nomen
8
*  /informations/#bdnt.nn:#num_nomen?champs=description --> retourne champs description pour un BDNT et un num_nomen
8
*  /informations/#bdnt.nn:#num_nomen?champs=description --> retourne champs description pour un BDNT et un num_nomen
9
*  /informations/#bdnt.nn:#num_nomen?champs=ecologie --> retourne champs ecologiques pour un BDNT et un num_nomen
9
*  /informations/#bdnt.nn:#num_nomen?champs=ecologie --> retourne champs ecologiques pour un BDNT et un num_nomen
10
*  /informations --> retourne les 10 premiers résultats
10
*  /informations --> retourne les 10 premiers résultats
11
*  /informations?navigation.limite=..&navigation.depart=.. --> retourne les 10 premiers résultats avec limites
11
*  /informations?navigation.limite=..&navigation.depart=.. --> retourne les 10 premiers résultats avec limites
12
*
12
*
13
* Encodage en entrée : utf8
13
* Encodage en entrée : utf8
14
* Encodage en sortie : utf8
14
* Encodage en sortie : utf8
15
* @package eflore-projets
15
* @package eflore-projets
16
* @author Mathilde SALTHUN-LASSALLE <mathilde@tela-botanica.org>
16
* @author Mathilde SALTHUN-LASSALLE <mathilde@tela-botanica.org>
17
* @author Delphine CAUQUIL <delphine@tela-botanica.org>
17
* @author Delphine CAUQUIL <delphine@tela-botanica.org>
18
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
18
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
19
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
19
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
20
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
20
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
21
* @version 1.0
21
* @version 1.0
22
* @copyright 1999-2011 Tela Botanica (accueil@tela-botanica.org)
22
* @copyright 1999-2011 Tela Botanica (accueil@tela-botanica.org)
23
*/
23
*/
24
 
24
 
25
class InformationsBaseflor extends Commun{
25
class InformationsBaseflor extends Commun{
26
	
26
	
27
	protected $table = "";
27
	protected $table = "";
28
	private $requete_condition = "";
28
	private $requete_condition = "";
29
	private $format_reponse = 'informations';
29
	private $format_reponse = 'informations';
30
	private $total_resultat;
30
	private $total_resultat;
31
	private $retour_format = 'max';
31
	private $retour_format = 'max';
32
	protected $limite_requete = array( 'depart' => 0, 'limite' => 10);
32
	protected $limite_requete = array( 'depart' => 0, 'limite' => 10);
33
	private $champs_recherches = '*';
33
	private $champs_recherches = '*';
34
	private $champs_ontologiques = array();
34
	private $champs_ontologiques = array();
35
	protected $serviceNom = 'informations';
35
	protected $serviceNom = 'informations';
36
	
36
	
37
	
37
	
38
	
38
	
39
	public function consulter($ressources, $parametres) {
39
	public function consulter($ressources, $parametres) {
40
 
40
 
41
		$this->ressources = $ressources;
41
		$this->ressources = $ressources;
42
		$this->parametres = $parametres;
42
		$this->parametres = $parametres;
43
		$this->traiterParametres();
43
		$this->traiterParametres();
44
		$this->traiterVersionProjet();
44
		$this->traiterVersionProjet();
45
		$resultats = null;
45
		$resultats = null;
46
		foreach ($this->table_version as $version) {		
46
		foreach ($this->table_version as $version) {		
47
			$this->table = $version; 
47
			$this->table = $version; 
48
			$this->recupererNomChamp($this->table); 
48
			$this->recupererNomChamp($this->table); 
49
			$this->traiterRessources(); 
49
			$this->traiterRessources(); 
50
			$requete = $this->assemblerLaRequete(); 
50
			$requete = $this->assemblerLaRequete(); 
51
			$resultat = $this->getBdd()->recupererTous($requete);
51
			$resultat = $this->getBdd()->recupererTous($requete);
52
 
-
 
53
			$versionResultat = $this->traiterResultat($resultat, $version, $requete);
52
			$versionResultat = $this->traiterResultat($resultat, $version, $requete);
54
			if (count($this->table_version) > 1) {
53
			if (count($this->table_version) > 1) {
55
				$resultats[$version] = $versionResultat;
54
				$resultats[$version] = $versionResultat;
56
			} else {
55
			} else {
57
				$resultats = $versionResultat;
56
				$resultats = $versionResultat;
58
			}
57
			}
59
		}
58
		}
60
 
-
 
61
		return $resultats;
59
	return $resultats;
62
	}
60
	}
63
	
61
	
64
	
62
	
65
	
63
	
66
	public function traiterResultat($resultat, $version, $requete) {
64
	public function traiterResultat($resultat, $version, $requete) {
67
		$versionResultat = null;
65
		$versionResultat = null;
68
		if ($resultat == '') {
66
		if ($resultat == '') {
69
			$message = 'La requête SQL formée comporte une erreur!';
67
			$message = 'La requête SQL formée comporte une erreur!';
70
			$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;
68
			$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;
71
			throw new Exception($message, $code);
69
			throw new Exception($message, $code);
72
		} elseif ($resultat) {
70
		} elseif ($resultat) {
73
			$versionResultat = $this->retournerResultatFormate($resultat, $version);
71
			$versionResultat = $this->retournerResultatFormate($resultat, $version);
74
		} 
72
		} 
75
		return $versionResultat;
73
		return $versionResultat;
76
	}
74
	}
77
 
75
 
78
//+--------------------------traitement ressources ou paramètres  -------------------------------------------+	
76
//+--------------------------traitement ressources ou paramètres  -------------------------------------------+	
79
	public function traiterParametres() {
77
	public function traiterParametres() {
80
		if (isset($this->parametres) && !empty($this->parametres)) {
78
		if (isset($this->parametres) && !empty($this->parametres)) {
81
			foreach ($this->parametres as $param => $valeur) {
79
			foreach ($this->parametres as $param => $valeur) {
82
				switch ($param) {
80
				switch ($param) {
83
					case 'navigation.depart'  : 
81
					case 'navigation.depart'  : 
84
						 $this->limite_requete['depart'] = $valeur;	 break;
82
						 $this->limite_requete['depart'] = $valeur;	 break;
85
					case 'navigation.limite'  :  $this->limite_requete['limite'] = $valeur;	  break;
83
					case 'navigation.limite'  :  $this->limite_requete['limite'] = $valeur;	  break;
86
					case 'champs'  : 
84
					case 'champs'  : 
87
						if ($valeur == "description") {
85
						if ($valeur == "description") {
88
							$this->champs_recherches = "num_nomen, BDNT, chorologie, inflorescence,"
86
							$this->champs_recherches = "num_nomen, BDNT, chorologie, inflorescence,"
89
							." sexualite, ordre_maturation, "
87
							." sexualite, ordre_maturation, "
90
							."pollinisation, fruit, dissemination, couleur_fleur, macule, floraison, type_bio, "
88
							."pollinisation, fruit, dissemination, couleur_fleur, macule, floraison, type_bio, "
91
						 	."form_vegetale ";	
89
						 	."form_vegetale ";	
-
 
90
						$this->requete_condition[] = "( chorologie != '' OR inflorescence != '' ".
-
 
91
							"OR  sexualite != '' OR ordre_maturation != '' OR pollinisation != '' ".
-
 
92
							"OR fruit != '' OR dissemination != '' OR couleur_fleur != '' OR macule != '' ".
-
 
93
							"OR floraison != '' OR type_bio != '' OR form_vegetale != '' )";
92
						}elseif ($valeur == "ecologie"){
94
						}elseif ($valeur == "ecologie"){
93
							$this->champs_recherches = "num_nomen, BDNT, ve_lumiere , ve_temperature,"
95
							$this->champs_recherches = " num_nomen, BDNT, ve_lumiere , ve_temperature,"
94
							." ve_continentalite, ve_humidite_atmos, ve_humidite_edaph, ve_reaction_sol,"
96
							." ve_continentalite, ve_humidite_atmos, ve_humidite_edaph, ve_reaction_sol,"
95
							." ve_nutriments_sol, ve_salinite, ve_texture_sol, ve_mat_org_sol ";
97
							." ve_nutriments_sol, ve_salinite, ve_texture_sol, ve_mat_org_sol ";
-
 
98
							$this->requete_condition[] = "( ve_lumiere  != '' OR ve_temperature != '' ".
-
 
99
								"OR ve_continentalite != '' OR ve_humidite_atmos != '' ".
-
 
100
								"OR ve_humidite_edaph != '' OR ve_reaction_sol != '' ".
-
 
101
								"OR ve_nutriments_sol != '' OR ve_salinite != '' ".
-
 
102
								"OR ve_texture_sol != '' OR ve_mat_org_sol != '' )";														
96
						}else {
103
						}else {
97
							$e = 'Valeur de paramètre inconnue  pour \'test\'. ';
104
							$e = 'Valeur de paramètre inconnue  pour \'test\'. ';
98
							$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e);
105
							$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e);
99
						}
106
						}
100
						break;
107
						break;
101
					case 'retour.format'  :
108
					case 'retour.format'  :
102
						$this->retour_format = $valeur;
109
						$this->retour_format = $valeur;
103
						break;
110
						break;
104
					default :
111
					default :
105
						$e = 'Erreur dans les parametres de votre requête : </br> Le paramètre " '
112
						$e = 'Erreur dans les parametres de votre requête : </br> Le paramètre " '
106
							.$param.' " n\'existe pas.';
113
							.$param.' " n\'existe pas.';
107
						$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e);	break;
114
						$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e);	break;
108
				}
115
				}
109
			}
116
			}
110
		}
117
		}
111
	}
118
	}
112
 
119
 
113
	public function traiterRessources() {
120
	public function traiterRessources() {
114
		if (isset($this->ressources) && !empty($this->ressources[0])) {
121
		if (isset($this->ressources) && !empty($this->ressources[0])) {
115
			if(preg_match('/^(.+)\.nn:([0-9]+)$/', $this->ressources[0], $retour)==1){
122
			if(preg_match('/^(.+)\.nn:([0-9]+)$/', $this->ressources[0], $retour)==1){
116
				switch ($retour[1]) {
123
				switch ($retour[1]) {
117
					case 'bdtfx' :
124
					case 'bdtfx' :
118
						$this->requete_condition[] = "num_nomen = ".$retour[2]." AND BDNT = 'BDTFX' ";
125
						$this->requete_condition[] = "num_nomen = ".$retour[2]." AND BDNT = 'BDTFX' ";
119
						break;
126
						break;
120
					case  'bdafx' :
127
					case  'bdafx' :
121
						$this->requete_condition[] = "num_nomen = ".$retour[2]." AND BDNT = 'BDAFX' "; 
128
						$this->requete_condition[] = "num_nomen = ".$retour[2]." AND BDNT = 'BDAFX' "; 
122
						break;
129
						break;
123
					case  'bdbfx' :
130
					case  'bdbfx' :
124
						$this->requete_condition[] = "num_nomen = ".$retour[2]." AND BDNT = 'BDBFX' "; 
131
						$this->requete_condition[] = "num_nomen = ".$retour[2]." AND BDNT = 'BDBFX' "; 
125
						break;
132
						break;
126
					default :
133
					default :
127
						$e = 'Erreur dans l\'url de votre requête : </br> La ressource " '
134
						$e = 'Erreur dans l\'url de votre requête : </br> La ressource " '
128
							.$retour[1].' " n\'existe pas.';
135
							.$retour[1].' " n\'existe pas.';
129
						$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e);	
136
						$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e);	
130
						break;
137
						break;
131
				}	
138
				}	
132
				
139
				
133
			}
140
			}
134
		} else {
141
		} else {
135
			$this->champs_recherches=" cle, catminat_code, BDNT, num_taxon, num_nomen ";
142
			$this->champs_recherches=" cle, catminat_code, BDNT, num_taxon, num_nomen ";
136
		}
143
		}
137
	}
144
	}
138
	
145
	
139
//+--------------------------formatages de resultats  -------------------------------------------+
146
//+--------------------------formatages de resultats  -------------------------------------------+
140
	public function retournerResultatFormate($resultat) {
147
	public function retournerResultatFormate($resultat) {
141
		if ((count($this->ressources)) == 0) {
148
		if ((count($this->ressources)) == 0) {
142
			$table_retour_json['resultat'] = $this->formaterResultatsInformations($resultat);
149
			$table_retour_json['resultat'] = $this->formaterResultatsInformations($resultat);
143
		} else {
150
		} else {
144
			$table_retour_json = $this->formaterResultatsInformationsBDNTnn($resultat);
151
			$table_retour_json = $this->formaterResultatsInformationsBDNTnn($resultat);
145
		}
152
		}
146
		return $table_retour_json;
153
		return $table_retour_json;
147
	}
154
	}
148
	
155
	
149
	public function formaterResultatsInformationsBDNTnn($resultat){
156
	public function formaterResultatsInformationsBDNTnn($resultat){
150
	$resultat_json = $resultat[0];
157
	$resultat_json = $resultat[0];
151
	if ($this->retour_format == 'max'){ 
158
	if ($this->retour_format == 'max'){ 
152
		if (!isset($this->parametres['champs']) ) {
159
		if (!isset($this->parametres['champs']) ) {
153
			$resultat_json = $this->formaterResultatsTousChamps($resultat_json);
160
			$resultat_json = $this->formaterResultatsTousChamps($resultat_json);
154
		} elseif ($this->parametres['champs'] == 'ecologie') {
161
		} elseif ($this->parametres['champs'] == 'ecologie') {
155
			$resultat_json = $this->formaterResultatsChampsEcologie($resultat_json);
162
			$resultat_json = $this->formaterResultatsChampsEcologie($resultat_json);
156
		} elseif ($this->parametres['champs'] == 'description') {
163
		} elseif ($this->parametres['champs'] == 'description') {
157
			$resultat_json = $this->formaterResultatsChampsDescription($resultat_json);
164
			$resultat_json = $this->formaterResultatsChampsDescription($resultat_json);
158
		}
165
		}
159
	}
166
	}
160
	return $resultat_json;
167
	return $resultat_json;
161
	}
168
	}
162
	
169
	
163
	
170
	
164
	public function formaterResultatsTousChamps($resultat) {
171
	public function formaterResultatsTousChamps($resultat) {
165
		$resultat_json = $resultat;
172
		$resultat_json = $resultat;
166
		
173
		
167
		if ($resultat_json['type_bio'] != ""){
174
		if ($resultat_json['type_bio'] != ""){
168
			$tab_ontologie = $this->recupererOntologiePrTypeBio($resultat_json['type_bio']);
175
			$tab_ontologie = $this->recupererOntologiePrTypeBio($resultat_json['type_bio']);
169
			unset($resultat_json['type_bio']);
176
			unset($resultat_json['type_bio']);
170
			$resultat_json= array_merge($resultat_json,$tab_ontologie);
177
			$resultat_json= array_merge($resultat_json,$tab_ontologie);
171
		}
178
		}
172
		$this->champs_ontologiques = $this->recupererTableauConfig('champs_ontologiques');
179
		$this->champs_ontologiques = $this->recupererTableauConfig('champs_ontologiques');
173
		
180
		
174
		foreach ($this->champs_ontologiques as $cle => $valeur){
181
		foreach ($this->champs_ontologiques as $cle => $valeur){
175
			if ($resultat_json[$cle] != ""){
182
			if ($resultat_json[$cle] != ""){
176
				$tab_ontologie = $this->recupererOntologies($resultat_json[$cle], $cle);
183
				$tab_ontologie = $this->recupererOntologies($resultat_json[$cle], $cle);
177
				unset($resultat_json[$cle]);
184
				unset($resultat_json[$cle]);
178
				$resultat_json = array_merge($resultat_json,$tab_ontologie);
185
				$resultat_json = array_merge($resultat_json,$tab_ontologie);
179
			}
186
			}
180
		}
187
		}
181
			$resultat_json['graphique_climat']['libelle'] = 'climat';
188
			$resultat_json['graphique_climat']['libelle'] = 'climat';
182
			$resultat_json['graphique_climat']['href'] = $this->ajouterHref('graphiques/climat', strtolower($resultat_json['BDNT']).'.nn:'.$resultat_json['num_nomen']);
189
			$resultat_json['graphique_climat']['href'] = $this->ajouterHref('graphiques/climat', strtolower($resultat_json['BDNT']).'.nn:'.$resultat_json['num_nomen']);
183
			$resultat_json['graphique_sol']['libelle'] = 'sol';
190
			$resultat_json['graphique_sol']['libelle'] = 'sol';
184
			$resultat_json['graphique_sol']['href'] = $this->ajouterHref('graphiques/sol', strtolower($resultat_json['BDNT']).'.nn:'.$resultat_json['num_nomen']);
191
			$resultat_json['graphique_sol']['href'] = $this->ajouterHref('graphiques/sol', strtolower($resultat_json['BDNT']).'.nn:'.$resultat_json['num_nomen']);
185
		
192
		
186
		return $resultat_json ;
193
		return $resultat_json ;
187
	}
194
	}
188
	
195
	
189
	public function formaterResultatsChampsEcologie($resultat) {
196
	public function formaterResultatsChampsEcologie($resultat) {
190
		$resultat_json = $resultat;
197
		$resultat_json = $resultat;
191
		$this->champs_ontologiques = $this->recupererTableauConfig('champs_ontologiques');
198
		$this->champs_ontologiques = $this->recupererTableauConfig('champs_ontologiques');
192
		foreach ($this->champs_ontologiques as $cle => $valeur){
199
		foreach ($this->champs_ontologiques as $cle => $valeur){
193
			if ($resultat_json[$cle] != ""){
200
			if ($resultat_json[$cle] != ""){
194
				$tab_ontologie = $this->recupererOntologies($resultat_json[$cle], $cle);
201
				$tab_ontologie = $this->recupererOntologies($resultat_json[$cle], $cle);
195
				unset($resultat_json[$cle]);
202
				unset($resultat_json[$cle]);
196
				$resultat_json= array_merge($resultat_json,$tab_ontologie);
203
				$resultat_json= array_merge($resultat_json,$tab_ontologie);
197
			}
204
			}
198
		}
205
		}
199
		$resultat_json['graphique_climat']['libelle'] = 'climat';
206
		$resultat_json['graphique_climat']['libelle'] = 'climat';
200
		$resultat_json['graphique_climat']['href'] = $this->ajouterHref('graphiques/climat', strtolower($resultat_json['BDNT']).'.nn:'.$resultat_json['num_nomen']);
207
		$resultat_json['graphique_climat']['href'] = $this->ajouterHref('graphiques/climat', strtolower($resultat_json['BDNT']).'.nn:'.$resultat_json['num_nomen']);
201
		$resultat_json['graphique_sol']['libelle'] = 'sol';
208
		$resultat_json['graphique_sol']['libelle'] = 'sol';
202
		$resultat_json['graphique_sol']['href'] = $this->ajouterHref('graphiques/sol', strtolower($resultat_json['BDNT']).'.nn:'.$resultat_json['num_nomen']);
209
		$resultat_json['graphique_sol']['href'] = $this->ajouterHref('graphiques/sol', strtolower($resultat_json['BDNT']).'.nn:'.$resultat_json['num_nomen']);
203
		return $resultat_json ;
210
		return $resultat_json ;
204
	}
211
	}
205
	
212
	
206
	public function formaterResultatsChampsDescription($resultat) {
213
	public function formaterResultatsChampsDescription($resultat) {
207
		$resultat_json = $resultat;
214
		$resultat_json = $resultat;
208
		if ($resultat_json['type_bio'] != ""){
215
		if ($resultat_json['type_bio'] != ""){
209
			$tab_ontologie = $this->recupererOntologiePrTypeBio($resultat_json['type_bio']);
216
			$tab_ontologie = $this->recupererOntologiePrTypeBio($resultat_json['type_bio']);
210
			unset($resultat_json['type_bio']);
217
			unset($resultat_json['type_bio']);
211
			$resultat_json = array_merge($resultat_json,$tab_ontologie);
218
			$resultat_json = array_merge($resultat_json,$tab_ontologie);
212
		}
219
		}
213
		return $resultat_json ;
220
		return $resultat_json ;
214
	}
221
	}
215
	public function formaterResultatsInformations($resultat) {
222
	public function formaterResultatsInformations($resultat) {
216
		$resultat_json = array();
223
		$resultat_json = array();
217
		$resultat_json['entete'] = $this->ajouterEnteteResultat();
224
		$resultat_json['entete'] = $this->ajouterEnteteResultat();
218
		foreach ($resultat as $tab) {
225
		foreach ($resultat as $tab) {
219
			if ($tab['BDNT'] != 'nc'){
226
			if ($tab['BDNT'] != 'nc'){
220
				$num = $tab['cle'];
227
				$num = $tab['cle'];
221
				unset($tab['cle']);
228
				unset($tab['cle']);
222
				foreach ($tab as $param => $valeur) {
229
				foreach ($tab as $param => $valeur) {
223
					$resultat_json[$num][$param] = $valeur;
230
					$resultat_json[$num][$param] = $valeur;
224
				}
231
				}
225
				$resultat_json[$num]['href'] = $this->ajouterHref('informations',strtolower($tab['BDNT']).".nn:".$tab['num_nomen']);
232
				$resultat_json[$num]['href'] = $this->ajouterHref('informations',strtolower($tab['BDNT']).".nn:".$tab['num_nomen']);
226
			}
233
			}
227
		}
234
		}
228
		return $resultat_json;
235
		return $resultat_json;
229
	}
236
	}
230
	
237
	
231
	
238
	
232
	
239
	
233
	public function ajouterEnteteResultat() {
240
	public function ajouterEnteteResultat() {
234
		$entete['depart'] = $this->limite_requete['depart'];
241
		$entete['depart'] = $this->limite_requete['depart'];
235
		$entete['limite'] = $this->limite_requete['limite'];
242
		$entete['limite'] = $this->limite_requete['limite'];
236
		$entete['total']  =  $this->total_resultat;
243
		$entete['total']  =  $this->total_resultat;
237
		$entete['version']  = $this->version_projet;
244
		$entete['version']  = $this->version_projet;
238
		$url = $this->formulerUrl($this->total_resultat, '/informations');
245
		$url = $this->formulerUrl($this->total_resultat, '/informations');
239
		if (isset($url['precedent']) && $url['precedent'] != '') {
246
		if (isset($url['precedent']) && $url['precedent'] != '') {
240
			$entete['href.precedent'] = $url['precedent'];
247
			$entete['href.precedent'] = $url['precedent'];
241
		}
248
		}
242
		if (isset($url['suivant']) && $url['suivant'] != '') {
249
		if (isset($url['suivant']) && $url['suivant'] != '') {
243
			$entete['href.suivant']   = $url['suivant'];
250
			$entete['href.suivant']   = $url['suivant'];
244
		}
251
		}
245
		return $entete;
252
		return $entete;
246
	}
253
	}
247
	
254
	
248
	
255
	
249
//+--------------------------traitement ontologies -------------------------------------------+
256
//+--------------------------traitement ontologies -------------------------------------------+
250
	public function recupererOntologies($valeur, $champs){
257
	public function recupererOntologies($valeur, $champs){
251
		$url = $this->ajouterHref('ontologies',$this->champs_ontologiques[$champs].':'.urlencode(urlencode($valeur)));
258
		$url = $this->ajouterHref('ontologies',$this->champs_ontologiques[$champs].':'.urlencode(urlencode($valeur)));
252
		$val = $this->consulterHref($url);
259
		$val = $this->consulterHref($url);
253
		$resultat_json[$champs.'.libelle'] = $val->nom;
260
		$resultat_json[$champs.'.libelle'] = $val->nom;
254
		$resultat_json[$champs.'.code'] = $valeur;
261
		$resultat_json[$champs.'.code'] = $valeur;
255
		$resultat_json[$champs.'.href'] = $url;
262
		$resultat_json[$champs.'.href'] = $url;
256
		return $resultat_json;
263
		return $resultat_json;
257
	}
264
	}
258
	
265
	
259
	
266
	
260
	
267
	
261
	public function recupererOntologiePrTypeBio($type_a_traiter){
268
	public function recupererOntologiePrTypeBio($type_a_traiter){
262
		$resultat_typeBio = "";
269
		$resultat_typeBio = "";
263
		if ($type_a_traiter != ""){
270
		if ($type_a_traiter != ""){
264
			$resultat_typeBio['type_bio.code'] = $type_a_traiter;
271
			$resultat_typeBio['type_bio.code'] = $type_a_traiter;
265
			$types_prim_sec = $this->separerTypesPrimairesSecondaires($type_a_traiter);
272
			$types_prim_sec = $this->separerTypesPrimairesSecondaires($type_a_traiter);
266
			foreach ($types_prim_sec as $cle => $tb){
273
			foreach ($types_prim_sec as $cle => $tb){
267
				$types_sstypes[$cle]= $this->separerTypes_SousTypes($tb, $cle);
274
				$types_sstypes[$cle]= $this->separerTypes_SousTypes($tb, $cle);
268
			}
275
			}
269
			switch (count($types_sstypes)){
276
			switch (count($types_sstypes)){
270
				case 1 :
277
				case 1 :
271
					$types_sstypes = $types_sstypes['principal'];
278
					$types_sstypes = $types_sstypes['principal'];
272
					break;
279
					break;
273
				case 2 : 
280
				case 2 : 
274
					$types_sstypes = array_merge($types_sstypes['principal'],$types_sstypes['secondaire']);
281
					$types_sstypes = array_merge($types_sstypes['principal'],$types_sstypes['secondaire']);
275
					break;
282
					break;
276
				case 3 : 
283
				case 3 : 
277
					$types_sstypes = array_merge($types_sstypes['principal'],
284
					$types_sstypes = array_merge($types_sstypes['principal'],
278
												$types_sstypes['secondaire'],
285
												$types_sstypes['secondaire'],
279
												$types_sstypes['special']);
286
												$types_sstypes['special']);
280
					break;
287
					break;
281
			  default :
288
			  default :
282
			  	break;
289
			  	break;
283
				 
290
				 
284
			}
291
			}
285
			
292
			
286
			foreach ($types_sstypes as $cle => $tb){
293
			foreach ($types_sstypes as $cle => $tb){
287
				if (($cle == 'type.principal') || ($cle == 'type.secondaire')){
294
				if (($cle == 'type.principal') || ($cle == 'type.secondaire')){
288
					$url = $this->ajouterHref('ontologies','TB:'.urlencode(urlencode($tb)));
295
					$url = $this->ajouterHref('ontologies','TB:'.urlencode(urlencode($tb)));
289
					$val = $this->consulterHref($url);
296
					$val = $this->consulterHref($url);
290
					$libelle[$cle]= $val->nom;
297
					$libelle[$cle]= $val->nom;
291
					$detail[$cle]['libelle'] = $val->nom;
298
					$detail[$cle]['libelle'] = $val->nom;
292
					$detail[$cle]['code'] = $val->code;
299
					$detail[$cle]['code'] = $val->code;
293
					$detail[$cle]['href'] = $url;
300
					$detail[$cle]['href'] = $url;
294
				}
301
				}
295
				if ( ($cle == 'sous_type.principal') || ($cle == 'sous_type.secondaire') || ($cle == 'sous_type.special') ){
302
				if ( ($cle == 'sous_type.principal') || ($cle == 'sous_type.secondaire') || ($cle == 'sous_type.special') ){
296
					$i = 0; 
303
					$i = 0; 
297
					foreach ($tb as $sstypes){
304
					foreach ($tb as $sstypes){
298
						$url = $this->ajouterHref('ontologies','ssTT:'.urlencode(urlencode($sstypes)));
305
						$url = $this->ajouterHref('ontologies','ssTT:'.urlencode(urlencode($sstypes)));
299
						$val = $this->consulterHref($url);
306
						$val = $this->consulterHref($url);
300
						$libelle[$cle]=$val->nom;
307
						$libelle[$cle]=$val->nom;
301
						$detail[$cle][$i]['libelle'] = $val->nom;
308
						$detail[$cle][$i]['libelle'] = $val->nom;
302
						$detail[$cle][$i]['code'] = $val->code;
309
						$detail[$cle][$i]['code'] = $val->code;
303
						$detail[$cle][$i]['href'] = $url;					
310
						$detail[$cle][$i]['href'] = $url;					
304
						$i++;
311
						$i++;
305
					}
312
					}
306
				}
313
				}
307
			}
314
			}
308
		$resultat_typeBio['type_bio.libelle']= $this->formaterTypeBioPrLibelle($libelle);
315
		$resultat_typeBio['type_bio.libelle']= $this->formaterTypeBioPrLibelle($libelle);
309
		$resultat_typeBio['type_bio.detail'] = $detail;
316
		$resultat_typeBio['type_bio.detail'] = $detail;
310
		}
317
		}
311
		return $resultat_typeBio;
318
		return $resultat_typeBio;
312
	}
319
	}
313
	
320
	
314
	
321
	
315
	public function formaterTypeBioPrLibelle($info){
322
	public function formaterTypeBioPrLibelle($info){
316
		$libelle = $info['type.principal']." ";
323
		$libelle = $info['type.principal']." ";
317
		$libelle .= isset($info['sous_type.principal']) ? " (".$info['sous_type.principal'].") " : "";
324
		$libelle .= isset($info['sous_type.principal']) ? " (".$info['sous_type.principal'].") " : "";
318
		$libelle .= isset($info['type.secondaire']) ? ", ".$info['type.secondaire']." " : "";
325
		$libelle .= isset($info['type.secondaire']) ? ", ".$info['type.secondaire']." " : "";
319
		$libelle .= isset($info['sous_type.secondaire']) ? "(".$info['sous_type.secondaire'].") " : "";
326
		$libelle .= isset($info['sous_type.secondaire']) ? "(".$info['sous_type.secondaire'].") " : "";
320
		$libelle .= isset($info['sous_type.special']) ? "(".$info['sous_type.special'].") " : "";
327
		$libelle .= isset($info['sous_type.special']) ? "(".$info['sous_type.special'].") " : "";
321
		return $libelle;
328
		return $libelle;
322
	}
329
	}
323
	
330
	
324
 
331
 
325
	public function separerTypesPrimairesSecondaires($type){
332
	public function separerTypesPrimairesSecondaires($type){
326
		$types = array(); 
333
		$types = array(); 
327
		//séparation des principaux et des secondaires
334
		//séparation des principaux et des secondaires
328
		if (( preg_match("/(.+)\((.+)\)\-{0,1}(.+){0,1}/", $type,$retour) == 1  )){
335
		if (( preg_match("/(.+)\((.+)\)\-{0,1}(.+){0,1}/", $type,$retour) == 1  )){
329
			$types['principal'] = $retour[1]; 
336
			$types['principal'] = $retour[1]; 
330
			$types['secondaire'] = $retour[2];
337
			$types['secondaire'] = $retour[2];
331
			if (isset($retour[3])){$types['special'] = $retour[3];}
338
			if (isset($retour[3])){$types['special'] = $retour[3];}
332
		}else {
339
		}else {
333
			$types['principal'] = $type;
340
			$types['principal'] = $type;
334
		}
341
		}
335
		return $types;
342
		return $types;
336
	}
343
	}
337
	
344
	
338
	public function separerTypes_SousTypes($type_a_traiter, $typePrimOuSec){
345
	public function separerTypes_SousTypes($type_a_traiter, $typePrimOuSec){
339
		$types = array();
346
		$types = array();
340
		if(( preg_match("/^([a-zA-Zé]+)\-(.+)$|^([a-zA-Zé]+[^\-])$/", $type_a_traiter, $retour) == 1  )){
347
		if(( preg_match("/^([a-zA-Zé]+)\-(.+)$|^([a-zA-Zé]+[^\-])$/", $type_a_traiter, $retour) == 1  )){
341
    		//recupère le type unique
348
    		//recupère le type unique
342
		
349
		
343
			$type = (isset($retour[3]) && ($typePrimOuSec != 'special') ) ? $retour[3] : $retour[1] ;
350
			$type = (isset($retour[3]) && ($typePrimOuSec != 'special') ) ? $retour[3] : $retour[1] ;
344
			$types['type.'.$typePrimOuSec]= $type;
351
			$types['type.'.$typePrimOuSec]= $type;
345
    		//recupère le ou les sous-types
352
    		//recupère le ou les sous-types
346
    		if ((isset($retour[3]) && ($typePrimOuSec == 'special') )){
353
    		if ((isset($retour[3]) && ($typePrimOuSec == 'special') )){
347
    			$ss_types[0] = (isset($retour[3]) && ($typePrimOuSec == 'special') ) ? $retour[3] : "" ;
354
    			$ss_types[0] = (isset($retour[3]) && ($typePrimOuSec == 'special') ) ? $retour[3] : "" ;
348
    		}elseif(isset($retour[2]) && ($retour[2] != "")){
355
    		}elseif(isset($retour[2]) && ($retour[2] != "")){
349
    			$ss_types[0]= (isset($retour[2]) && ($retour[2] != "") ) ? $retour[2] : "" ;
356
    			$ss_types[0]= (isset($retour[2]) && ($retour[2] != "") ) ? $retour[2] : "" ;
350
    		}
357
    		}
351
     		if (isset($ss_types[0])){
358
     		if (isset($ss_types[0])){
352
    			if (( preg_match("/\-/", $ss_types[0])) == 1 ){
359
    			if (( preg_match("/\-/", $ss_types[0])) == 1 ){
353
    				$ss_types = preg_split("/\-/", $ss_types[0]);
360
    				$ss_types = preg_split("/\-/", $ss_types[0]);
354
    			}
361
    			}
355
				for($i = 0 ; $i < count($ss_types); $i++){
362
				for($i = 0 ; $i < count($ss_types); $i++){
356
    				$types['sous_type.'.$typePrimOuSec][$i] = $ss_types[$i];
363
    				$types['sous_type.'.$typePrimOuSec][$i] = $ss_types[$i];
357
        			}
364
        			}
358
    		}
365
    		}
359
    	}
366
    	}
360
    	
367
    	
361
 		return $types;
368
 		return $types;
362
	}
369
	}
363
	
370
	
364
	
371
	
365
//+--------------------------FONCTIONS D'ASSEMBLAGE DE LA REQUETE-------------------------------------------+
372
//+--------------------------FONCTIONS D'ASSEMBLAGE DE LA REQUETE-------------------------------------------+
366
	
373
	
367
	public function assemblerLaRequete() {
374
	public function assemblerLaRequete() {
-
 
375
 
368
		$requete = 	' SELECT '.$this->champs_recherches.' FROM '.$this->table.' '
376
		$requete = 	' SELECT '.$this->champs_recherches.' FROM '.$this->table.' '
369
		.$this->retournerRequeteCondition().' '
377
		.$this->retournerRequeteCondition().' '
370
		.$this->delimiterResultatsRequete();
378
		.$this->delimiterResultatsRequete();
-
 
379
 
371
		return $requete;
380
		return $requete;
372
	}
381
	}
373
	
382
	
374
 
383
 
375
	
384
	
376
	public  function retournerRequeteCondition() {
385
	public  function retournerRequeteCondition() {
377
		$condition = '';
386
		$condition = '';
378
		if ($this->requete_condition !== "") {
387
		if ($this->requete_condition !== "") {
379
			$condition = ' WHERE '.implode(' AND ', $this->requete_condition);
388
			$condition = ' WHERE '.implode(' AND ', $this->requete_condition);
380
		}
389
		}
381
		return $condition;
390
		return $condition;
382
	}
391
	}
383
	
392
	
384
 
393
 
385
	
394
	
386
	public function calculerTotalResultat() {
395
	public function calculerTotalResultat() {
387
		//on récupère le nombre total de résultats de la requete
396
		//on récupère le nombre total de résultats de la requete
388
		$requete = 'SELECT count(*) as nombre FROM '.$this->table.' '
397
		$requete = 'SELECT count(*) as nombre FROM '.$this->table.' '
389
		.$this->retournerRequeteCondition();
398
		.$this->retournerRequeteCondition();
390
		$res = $this->getBdd()->recuperer($requete);
399
		$res = $this->getBdd()->recuperer($requete);
391
		if ($res) {
400
		if ($res) {
392
			$this->total_resultat = $res['nombre'];
401
			$this->total_resultat = $res['nombre'];
393
		} else {
402
		} else {
394
			$this->total_resultat = 0;
403
			$this->total_resultat = 0;
395
			$e = 'Données introuvables dans la base';
404
			$e = 'Données introuvables dans la base';
396
			$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $e);
405
			$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $e);
397
			Debug::printr($requete);
-
 
398
		}
406
		}
399
	}
407
	}
400
	
408
	
401
	public function delimiterResultatsRequete() {
409
	public function delimiterResultatsRequete() {
402
		$this->calculerTotalResultat();
410
		$this->calculerTotalResultat();
403
		if ((count($this->ressources)) == 0)  { 
411
		if ((count($this->ressources)) == 0)  { 
404
			if (($this->limite_requete['depart'] <  $this->total_resultat) && 
412
			if (($this->limite_requete['depart'] <  $this->total_resultat) && 
405
				(($this->limite_requete['depart'] + $this->limite_requete['limite'])
413
				(($this->limite_requete['depart'] + $this->limite_requete['limite'])
406
				< $this->total_resultat  )){ 
414
				< $this->total_resultat  )){ 
407
					$this->requete_limite = 'LIMIT '.$this->limite_requete['depart'].', '
415
					$this->requete_limite = 'LIMIT '.$this->limite_requete['depart'].', '
408
					.$this->limite_requete['limite'];
416
					.$this->limite_requete['limite'];
409
			}else {
417
			}else {
410
				$e = 'Données introuvables dans la base. ';
418
				$e = 'Données introuvables dans la base. ';
411
				$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $e);
419
				$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $e);
412
				}
420
				}
413
		}else {
421
		}else {
414
			$this->requete_limite='';
422
			$this->requete_limite='';
415
		}
423
		}
416
		return $this->requete_limite;
424
		return $this->requete_limite;
417
	}
425
	}
418
}
426
}
419
?>
427
?>