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 |
|