1 |
<?php
|
1 |
<?php
|
2 |
/**
|
2 |
/**
|
3 |
* Description :
|
3 |
* Description :
|
4 |
* Classe Observations.php permettant de fournir des informations sur les observations.
|
4 |
* Classe Observations.php permettant de fournir des informations sur les observations.
|
5 |
* Si l'url finit par /observations on retourne une liste d'observations (seulement les 100 premières par défaut) :
|
5 |
* Si l'url finit par /observations on retourne une liste d'observations (seulement les 100 premières par défaut) :
|
6 |
* espèce, lieu, date, observateur.
|
6 |
* espèce, lieu, date, observateur.
|
7 |
* L'url peut contenir des paramètres optionnels passés après le ? : /observations?param1=val1¶m2=val2&...
|
7 |
* L'url peut contenir des paramètres optionnels passés après le ? : /observations?param1=val1¶m2=val2&...
|
8 |
*
|
8 |
*
|
9 |
* Les paramètres de requête disponibles sont : masque, masque.type (type d'observation : chorologie),
|
9 |
* Les paramètres de requête disponibles sont : masque, masque.type (type d'observation : chorologie),
|
10 |
* masque.date_observation (date d'observation), masque.station (département), masque.determination (nom scientifique de l'espèce)
|
10 |
* masque.date_observation (date d'observation), masque.station (département), masque.determination (nom scientifique de l'espèce)
|
11 |
* masque.observateur (prénom, nom), masque.nn (identifiant du nom), recherche, distinct, retour.format,
|
11 |
* masque.observateur (prénom, nom), masque.nn (identifiant du nom), recherche, distinct, retour.format,
|
12 |
* navigation.depart et navigation.limite.
|
12 |
* navigation.depart et navigation.limite.
|
13 |
*
|
13 |
*
|
14 |
* Encodage en entrée : utf8
|
14 |
* Encodage en entrée : utf8
|
15 |
* Encodage en sortie : utf8
|
15 |
* Encodage en sortie : utf8
|
16 |
* @package framework-v3
|
16 |
* @package framework-v3
|
17 |
* @author Delphine Cauquil <delphine@tela-botanica.org>
|
17 |
* @author Delphine Cauquil <delphine@tela-botanica.org>
|
18 |
* @author Jennifer Dhé <jennifer.dhe@tela-botanica.org>
|
18 |
* @author Jennifer Dhé <jennifer.dhe@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-${year} Tela Botanica (accueil@tela-botanica.org)
|
22 |
* @copyright 1999-${year} Tela Botanica (accueil@tela-botanica.org)
|
23 |
*/
|
23 |
*/
|
24 |
|
24 |
|
25 |
class Observations extends Commun {
|
25 |
class Observations extends Commun {
|
26 |
|
26 |
|
27 |
protected $serviceNom = 'observations';
|
27 |
protected $serviceNom = 'observations';
|
28 |
|
28 |
|
29 |
/** Stockage des paramétres */
|
29 |
/** Stockage des paramétres */
|
30 |
protected $table_param = array();
|
30 |
protected $table_param = array();
|
31 |
/** Valeur du paramètre de requete recherche :
|
31 |
/** Valeur du paramètre de requete recherche :
|
32 |
* - stricte : le masque est passé tel quel à l'opérateur LIKE.
|
32 |
* - stricte : le masque est passé tel quel à l'opérateur LIKE.
|
33 |
* - etendue : ajout automatique du signe % à la place des espaces et en fin de masque avec utilisation de LIKE.
|
33 |
* - etendue : ajout automatique du signe % à la place des espaces et en fin de masque avec utilisation de LIKE.
|
34 |
* - floue : recherche tolérante vis-à-vis d'approximations ou d'erreurs (fautes d'orthographe par exemple) */
|
34 |
* - floue : recherche tolérante vis-à-vis d'approximations ou d'erreurs (fautes d'orthographe par exemple) */
|
35 |
protected $recherche = 'stricte';
|
35 |
protected $recherche = 'stricte';
|
36 |
/** Valeur du paramètre de requete distinct (=0|1)
|
36 |
/** Valeur du paramètre de requete distinct (=0|1)
|
37 |
* Indique que l'on veut les noms distincts (par défaut tous les noms, même semblable, sont renvoyés) */
|
37 |
* Indique que l'on veut les noms distincts (par défaut tous les noms, même semblable, sont renvoyés) */
|
38 |
protected $distinct = null;
|
38 |
protected $distinct = null;
|
39 |
protected $retour_format = 'max';
|
39 |
protected $retour_format = 'max';
|
40 |
protected $presenceChorologie = '';
|
40 |
protected $presenceChorologie = '';
|
41 |
|
41 |
|
42 |
/** Variables constituant les parametres de la requete SQL (champ, condition, group by, limit) remplie
|
42 |
/** Variables constituant les parametres de la requete SQL (champ, condition, group by, limit) remplie
|
43 |
* selon ressources et paramètres */
|
43 |
* selon ressources et paramètres */
|
44 |
protected $requete_champ = ' id, num_nom, nom_sci ';
|
44 |
protected $requete_champ = ' id, num_nom, nom_sci ';
|
45 |
protected $requete_condition = array();
|
45 |
protected $requete_condition = array();
|
46 |
/** Une observation est défini par départ qui correspont à un num_nom et dept qui correspond à un departement */
|
46 |
/** Une observation est défini par départ qui correspont à un num_nom et dept qui correspond à un departement */
|
47 |
protected $limite_requete = array(
|
47 |
protected $limite_requete = array(
|
48 |
'depart' => 0,
|
48 |
'depart' => 0,
|
49 |
'dept' => 01,
|
49 |
'dept' => 01,
|
50 |
'limite' => 20
|
50 |
'limite' => 20
|
51 |
);
|
51 |
);
|
52 |
|
52 |
|
53 |
/**
|
53 |
/**
|
54 |
* Permet de stocker la requete formulée :
|
54 |
* Permet de stocker la requete formulée :
|
55 |
* - noms | noms/#id | noms/#id/#champ+#champ
|
55 |
* - noms | noms/#id | noms/#id/#champ+#champ
|
56 |
* - noms/#id/relations | noms/#id/relations/synonymie | noms/#id/relations/homonymie | noms/#id/relations/flores
|
56 |
* - noms/#id/relations | noms/#id/relations/synonymie | noms/#id/relations/homonymie | noms/#id/relations/flores
|
57 |
* - noms/stats/rangs | noms/stats/annees | noms/stats/initiales
|
57 |
* - noms/stats/rangs | noms/stats/annees | noms/stats/initiales
|
58 |
* Est remplit au cours de l'analyse des ressources (traiterRessources()).
|
58 |
* Est remplit au cours de l'analyse des ressources (traiterRessources()).
|
59 |
* Est utilisée principalement pr déterminer le format du tableau à retourner.
|
59 |
* Est utilisée principalement pr déterminer le format du tableau à retourner.
|
60 |
*/
|
60 |
*/
|
61 |
protected $format_reponse = 'observations';
|
61 |
protected $format_reponse = 'observations';
|
62 |
|
62 |
|
63 |
// +-------------------------------------------------------------------------------------------------------------------+
|
63 |
// +-------------------------------------------------------------------------------------------------------------------+
|
64 |
public function consulter($ressources, $parametres) {
|
64 |
public function consulter($ressources, $parametres) {
|
65 |
$this->parametres = $parametres;
|
65 |
$this->parametres = $parametres;
|
66 |
$this->traiterVersionProjet($ressources);
|
66 |
$this->traiterVersionProjet($ressources);
|
67 |
$this->traiterRessources($ressources);
|
67 |
$this->traiterRessources($ressources);
|
68 |
$resultat_formate = '';
|
68 |
$resultat_formate = '';
|
69 |
|
69 |
|
70 |
if ($this->corps_http == '' && $this->entete_http == '') {
|
70 |
if ($this->corps_http == '' && $this->entete_http == '') {
|
71 |
foreach ($this->table_version as $version) {
|
71 |
foreach ($this->table_version as $version) {
|
72 |
$this->table = $version; //on stocke le nom de la table correspondant à la version du projet en cours
|
72 |
$this->table = $version; //on stocke le nom de la table correspondant à la version du projet en cours
|
73 |
$this->traiterParametres($parametres);
|
73 |
$this->traiterParametres($parametres);
|
74 |
$requete = $this->assemblerLaRequete(); //print_r($requete);
|
74 |
$requete = $this->assemblerLaRequete(); //print_r($requete);
|
75 |
$resultat = $this->getBdd()->recupererTous($requete);
|
75 |
$resultat = $this->getBdd()->recupererTous($requete);
|
76 |
$res_version = $this->testerResultat($resultat, $requete);
|
76 |
$res_version = $this->testerResultat($resultat, $requete);
|
77 |
}
|
77 |
}
|
78 |
if ($this->corps_http == '' && $this->entete_http == '') {
|
78 |
if ($this->corps_http == '' && $this->entete_http == '') {
|
79 |
if (isset($res_version)) {
|
79 |
if (isset($res_version)) {
|
80 |
$resultat_formate = $res_version;
|
80 |
$resultat_formate = $res_version;
|
81 |
}
|
81 |
}
|
82 |
}
|
82 |
}
|
83 |
}
|
83 |
}
|
84 |
return $resultat_formate;
|
84 |
return $resultat_formate;
|
85 |
}
|
85 |
}
|
86 |
|
86 |
|
87 |
public function testerResultat($resultat, $requete) {
|
87 |
public function testerResultat($resultat, $requete) {
|
88 |
if ($resultat == '') { //cas ou la requete comporte des erreurs
|
88 |
if ($resultat == '') { //cas ou la requete comporte des erreurs
|
89 |
$s = 'La requête SQL resultat formée comporte une erreur !!';
|
89 |
$s = 'La requête SQL resultat formée comporte une erreur !!';
|
90 |
Debug::printr($requete);
|
90 |
Debug::printr($requete);
|
91 |
$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $s);
|
91 |
$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $s);
|
92 |
} elseif ($resultat) {
|
92 |
} elseif ($resultat) {
|
93 |
if (count($this->table_version) > 1) {
|
93 |
if (count($this->table_version) > 1) {
|
94 |
$res_version[$version] = $this->retournerResultatFormate($resultat);
|
94 |
$res_version[$version] = $this->retournerResultatFormate($resultat);
|
95 |
} else {
|
95 |
} else {
|
96 |
$res_version = $this->retournerResultatFormate($resultat);
|
96 |
$res_version = $this->retournerResultatFormate($resultat);
|
97 |
}
|
97 |
}
|
98 |
} else {
|
98 |
} else {
|
99 |
if ($this->format_reponse == 'zone-geo/id/relations') {
|
99 |
if ($this->format_reponse == 'zone-geo/id/relations') {
|
100 |
//si aucune relations n'existe, la valeur null est retournée
|
100 |
//si aucune relations n'existe, la valeur null est retournée
|
101 |
$res_version = null;
|
101 |
$res_version = null;
|
102 |
} else {
|
102 |
} else {
|
103 |
$d = 'Données recherchées introuvables dans la base'.$requete;
|
103 |
$d = 'Données recherchées introuvables dans la base'.$requete;
|
104 |
$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $d);
|
104 |
$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $d);
|
105 |
Debug::printr($requete);
|
105 |
Debug::printr($requete);
|
106 |
}
|
106 |
}
|
107 |
}
|
107 |
}
|
108 |
return $res_version;
|
108 |
return $res_version;
|
109 |
}
|
109 |
}
|
110 |
|
110 |
|
111 |
public function assemblerLaRequete() {
|
111 |
public function assemblerLaRequete() {
|
112 |
$requete = "SELECT ".$this->formerRequeteChamp().
|
112 |
$requete = "SELECT ".$this->formerRequeteChamp().
|
113 |
" FROM ".$this->table.$this->formerRequeteCondition().
|
113 |
" FROM ".$this->table.$this->formerRequeteCondition().
|
114 |
' LIMIT '.$this->limite_requete['depart'].', '.$this->limite_requete['limite'];//echo $requete;
|
114 |
' LIMIT '.$this->limite_requete['depart'].', '.$this->limite_requete['limite'];//echo $requete;
|
115 |
return $requete;
|
115 |
return $requete;
|
116 |
}
|
116 |
}
|
117 |
|
117 |
|
118 |
public function formerRequeteChamp() {
|
118 |
public function formerRequeteChamp() {
|
119 |
if (!isset($this->table_ressources)) {
|
119 |
if (!isset($this->table_ressources)) {
|
120 |
if (!isset($this->table_param['masque_station']) && !isset($this->table_param['masque_contributeur']) ) {
|
120 |
if (!isset($this->table_param['masque_station']) && !isset($this->table_param['masque_contributeur']) ) {
|
121 |
$champ = ' * ';
|
121 |
$champ = ' * ';
|
122 |
} else {
|
122 |
} else {
|
123 |
$champ = $this->requete_champ;
|
123 |
$champ = $this->requete_champ;
|
124 |
}
|
124 |
}
|
125 |
} else {
|
125 |
} else {
|
126 |
$champ = $this->requete_champ;
|
126 |
$champ = $this->requete_champ;
|
127 |
}
|
127 |
}
|
128 |
return $champ;
|
128 |
return $champ;
|
129 |
}
|
129 |
}
|
130 |
|
130 |
|
131 |
public function formerRequeteCondition() {
|
131 |
public function formerRequeteCondition() {
|
132 |
$condition = '';
|
132 |
$condition = '';
|
133 |
if ($this->requete_condition != null) {
|
133 |
if ($this->requete_condition != null) {
|
134 |
$condition = ' WHERE '.implode(' AND ', $this->requete_condition);
|
134 |
$condition = ' WHERE '.implode(' AND ', $this->requete_condition);
|
135 |
}
|
135 |
}
|
136 |
return $condition;
|
136 |
return $condition;
|
137 |
}
|
137 |
}
|
138 |
|
138 |
|
139 |
// +-------------------------------------------------------------------------------------------------------------------+
|
139 |
// +-------------------------------------------------------------------------------------------------------------------+
|
140 |
public function traiterRessources(&$ressources) {
|
140 |
public function traiterRessources(&$ressources) {
|
141 |
if (isset($ressources) && !empty($ressources)) {
|
141 |
if (isset($ressources) && !empty($ressources)) {
|
142 |
$this->table_ressources = $ressources;
|
142 |
$this->table_ressources = $ressources;
|
143 |
if (isset($this->table_ressources[0]) && !empty($this->table_ressources[0])) {
|
143 |
if (isset($this->table_ressources[0]) && !empty($this->table_ressources[0])) {
|
144 |
$this->traiterRessourceId();
|
144 |
$this->traiterRessourceId();
|
145 |
if (isset($this->table_ressources[1]) && !empty($this->table_ressources[1])) {
|
145 |
if (isset($this->table_ressources[1]) && !empty($this->table_ressources[1])) {
|
146 |
$this->traiterRessourceChamp;
|
146 |
$this->traiterRessourceChamp;
|
147 |
}
|
147 |
}
|
148 |
}
|
148 |
}
|
149 |
}
|
149 |
}
|
150 |
}
|
150 |
}
|
151 |
|
151 |
|
152 |
public function traiterRessourceId() {
|
152 |
public function traiterRessourceId() {
|
153 |
//requete : /observations/#num_nom:#dept (ex : /observations/10:34)
|
153 |
//requete : /observations/#num_nom:#dept (ex : /observations/10:34)
|
154 |
if (preg_match('/^([0-9]*):([0-9]{2})$/', $this->table_ressources[0], $conditions)) {
|
154 |
if (preg_match('/^([0-9]*):([0-9]{2})$/', $this->table_ressources[0], $conditions)) {
|
155 |
$this->requete_condition[] = ' num_nom = '.$this->getBdd()->proteger($conditions[1]).' AND `'.$conditions[2]."` != '' ";
|
155 |
$this->requete_condition[] = ' num_nom = '.$this->getBdd()->proteger($conditions[1]).' AND `'.$conditions[2]."` != '' ";
|
156 |
$this->requete_champ .= ' ,catminat, rang, num_tax, freq_abs, freq_rel, rare_nat, `'.$conditions[2].'`';
|
156 |
$this->requete_champ .= ' ,catminat, rang, num_tax, freq_abs, freq_rel, rare_nat, `'.$conditions[2].'`';
|
157 |
$this->format_reponse .= '/id';
|
157 |
$this->format_reponse .= '/id';
|
158 |
|
158 |
|
159 |
//requete : /observations/nom:#dept (ex : /observations/coquelicot:30)
|
159 |
//requete : /observations/nom:#dept (ex : /observations/coquelicot:30)
|
160 |
} elseif (preg_match('/^(.*):([0-9]{2})$/', $this->table_ressources[0], $conditions)) {
|
160 |
} elseif (preg_match('/^(.*):([0-9]{2})$/', $this->table_ressources[0], $conditions)) {
|
161 |
$this->requete_condition[] = ' nom_sci like '.$this->getBdd()->proteger($conditions[1].'%').' AND `'.$conditions[2]."` != '' ";
|
161 |
$this->requete_condition[] = ' nom_sci like '.$this->getBdd()->proteger($conditions[1].'%').' AND `'.$conditions[2]."` != '' ";
|
162 |
$this->requete_champ .= ' ,catminat, rang, num_tax, freq_abs, freq_rel, rare_nat, `'.$conditions[2].'`';
|
162 |
$this->requete_champ .= ' ,catminat, rang, num_tax, freq_abs, freq_rel, rare_nat, `'.$conditions[2].'`';
|
163 |
$this->format_reponse .= '/id';
|
163 |
$this->format_reponse .= '/id';
|
164 |
//requete : /observations/num_nom:#num_nom (ex : /observations/num_nom:290) ??
|
164 |
//requete : /observations/num_nom:#num_nom (ex : /observations/num_nom:290) ??
|
165 |
} elseif (strrpos($this->table_ressources[0], ':') !== false) {
|
165 |
} elseif (strrpos($this->table_ressources[0], ':') !== false) {
|
166 |
|
166 |
|
167 |
} else {
|
167 |
} else {
|
168 |
$r = 'Erreur dans les ressources de votre requête : </br> La ressource " '.$this->table_ressources[0].
|
168 |
$r = 'Erreur dans les ressources de votre requête : </br> La ressource " '.$this->table_ressources[0].
|
169 |
' " n\'existe pas.';
|
169 |
' " n\'existe pas.';
|
170 |
$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $r);
|
170 |
$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $r);
|
171 |
}
|
171 |
}
|
172 |
}
|
172 |
}
|
173 |
|
173 |
|
174 |
// +-------------------------------------------------------------------------------------------------------------------+
|
174 |
// +-------------------------------------------------------------------------------------------------------------------+
|
175 |
public function traiterParametres($parametres) {
|
175 |
public function traiterParametres($parametres) {
|
176 |
if (isset($parametres) && !empty($parametres)) {
|
176 |
if (isset($parametres) && !empty($parametres)) {
|
177 |
$this->table_param = $parametres;
|
177 |
$this->table_param = $parametres;
|
178 |
|
178 |
|
179 |
if (isset($parametres['recherche']) && $parametres['recherche'] != '') {
|
179 |
if (isset($parametres['recherche']) && $parametres['recherche'] != '') {
|
180 |
$this->recherche = $parametres['recherche'];
|
180 |
$this->recherche = $parametres['recherche'];
|
181 |
}
|
181 |
}
|
182 |
foreach ($parametres as $param => $valeur) {
|
182 |
foreach ($parametres as $param => $valeur) {
|
183 |
switch ($param) {
|
183 |
switch ($param) {
|
184 |
case 'masque' : $this->ajouterLeFiltreMasque($valeur); break;
|
184 |
case 'masque' : $this->ajouterLeFiltreMasque($valeur); break;
|
185 |
case 'masque.date.observation' : break;
|
185 |
case 'masque.date.observation' : break;
|
186 |
case 'masque.station' : $this->limite_requete['dept'] = $valeur;
|
186 |
case 'masque.station' : $this->limite_requete['dept'] = $valeur;
|
187 |
$this->ajouterUnFiltre('station', $valeur); break;
|
187 |
$this->ajouterUnFiltre('station', $valeur); break;
|
188 |
case 'masque.departement' :
|
188 |
case 'masque.departement' :
|
189 |
$this->ajouterUnFiltre("`".$valeur."`", '1'); break;
|
189 |
$this->ajouterUnFiltre("`".$valeur."`", '1'); break;
|
190 |
case 'masque.determination' : $this->ajouterUnFiltre('nom_sci', $valeur); break;
|
190 |
case 'masque.determination' : $this->ajouterUnFiltre('nom_sci', $valeur); break;
|
191 |
case 'masque.determination.nn' :
|
191 |
case 'masque.determination.nn' :
|
192 |
$this->requete_condition[] = '`num_nom` = '.$this->getBdd()->proteger($valeur); break;
|
192 |
$this->requete_condition[] = '`num_nom` = '.$this->getBdd()->proteger($valeur); break;
|
193 |
case 'masque.determination.nt' :
|
193 |
case 'masque.determination.nt' :
|
194 |
$this->requete_condition[] = '`num_tax` = '.$this->getBdd()->proteger($valeur); break; case 'masque.observateur' : $this->ajouterLeFiltreContributeur($valeur); break;
|
194 |
$this->requete_condition[] = '`num_tax` = '.$this->getBdd()->proteger($valeur); break; case 'masque.observateur' : $this->ajouterLeFiltreContributeur($valeur); break;
|
195 |
case 'masque.valeur' : $this->presenceChorologie = $valeur; break;
|
195 |
case 'masque.valeur' : $this->presenceChorologie = $valeur; break;
|
196 |
case 'retour.format' : $this->retour_format = $valeur; break;
|
196 |
case 'retour.format' : $this->retour_format = $valeur; break;
|
197 |
case 'navigation.depart' : $this->ajouterLimiteDepart($valeur); break;
|
197 |
case 'navigation.depart' : $this->ajouterLimiteDepart($valeur); break;
|
198 |
case 'navigation.limite' : if ($valeur !== '') $this->limite_requete['limite'] = $valeur; break;
|
198 |
case 'navigation.limite' : if ($valeur !== '') $this->limite_requete['limite'] = $valeur; break;
|
199 |
case 'recherche' : break;
|
199 |
case 'recherche' : break;
|
200 |
case 'version.projet' : break;
|
200 |
case 'version.projet' : break;
|
201 |
default : $p = 'Erreur dans les paramètres de recherche de votre requête : '.
|
201 |
default : $p = 'Erreur dans les paramètres de recherche de votre requête : '.
|
202 |
'</br> Le paramètre " '.$param.' " n\'existe pas.';
|
202 |
'</br> Le paramètre " '.$param.' " n\'existe pas.';
|
203 |
$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $p); break;
|
203 |
$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $p); break;
|
204 |
}
|
204 |
}
|
205 |
}
|
205 |
}
|
206 |
}
|
206 |
}
|
207 |
}
|
207 |
}
|
208 |
|
208 |
|
209 |
/** fonction d'ajout dans la requete SQL des conditions (WHERE ...) en fonctions des parametres demandés
|
209 |
/** fonction d'ajout dans la requete SQL des conditions (WHERE ...) en fonctions des parametres demandés
|
210 |
* @param $nom_champ
|
210 |
* @param $nom_champ
|
211 |
* @param $valeur
|
211 |
* @param $valeur
|
212 |
* @param $masque
|
212 |
* @param $masque
|
213 |
*/
|
213 |
*/
|
214 |
public function ajouterUnFiltre($nom_champ, $valeur) {
|
214 |
public function ajouterUnFiltre($nom_champ, $valeur) {
|
215 |
if ($nom_champ == 'station') {
|
215 |
if ($nom_champ == 'station') {
|
216 |
if (!preg_match('/^\s*([0-9]{2})\s*$/', $valeur, $colonne)) { // si le nom est passé
|
216 |
if (!preg_match('/^\s*([0-9]{2})\s*$/', $valeur, $colonne)) { // si le nom est passé
|
217 |
$this->requete_condition[] = '1';
|
217 |
$this->requete_condition[] = '1';
|
218 |
/* $url = $this->ajouterHrefAutreProjet('zone-geo',$key,'INSEE-D');// d'apres nom
|
- |
|
219 |
$dept = $this->rest_client->consulter($url);
|
- |
|
220 |
$entete = $this->rest_client->getReponseEntetes();
|
- |
|
221 |
if (isset($entete['wrapper_data'])) {
|
- |
|
222 |
$colonne = json_decode($relation);
|
- |
|
223 |
} else {
|
- |
|
224 |
$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE,
|
- |
|
225 |
'Le service '.$this->service.' de ce projet comporte des erreurs. url lancée : '.$url);
|
- |
|
226 |
}*/
|
- |
|
227 |
} else {
|
218 |
} else {
|
228 |
$this->requete_condition[] = '`'.$valeur."` != '' ";
|
219 |
$this->requete_condition[] = '`'.$valeur."` != '' ";
|
229 |
$this->requete_champ .= ', `'.$valeur.'` ';
|
220 |
$this->requete_champ .= ', `'.$valeur.'` ';
|
230 |
}
|
221 |
}
|
231 |
} else {
|
222 |
} else {
|
232 |
// recherche floue
|
223 |
// recherche floue
|
233 |
if ($this->recherche == 'floue') {//ajout_soundex
|
224 |
if ($this->recherche == 'floue') {//ajout_soundex
|
234 |
$this->requete_condition[] = '(SOUNDEX('.$nom_champ.') = SOUNDEX(\''.$valeur.'\')'
|
225 |
$this->requete_condition[] = '(SOUNDEX('.$nom_champ.') = SOUNDEX(\''.$valeur.'\')'
|
235 |
.' OR SOUNDEX(REVERSE('.$nom_champ.')) = SOUNDEX(REVERSE(\''.$valeur.'\'))) ';
|
226 |
.' OR SOUNDEX(REVERSE('.$nom_champ.')) = SOUNDEX(REVERSE(\''.$valeur.'\'))) ';
|
236 |
// recherche étendue
|
227 |
// recherche étendue
|
237 |
} elseif ($this->recherche == 'etendue') {
|
228 |
} elseif ($this->recherche == 'etendue') {
|
238 |
$valeur = str_replace(' ','%', $valeur);
|
229 |
$valeur = str_replace(' ','%', $valeur);
|
239 |
$valeur .= '%';
|
230 |
$valeur .= '%';
|
240 |
}
|
231 |
}
|
241 |
// recherche stricte
|
232 |
// recherche stricte
|
242 |
$this->requete_condition[] = $nom_champ.' LIKE '.$this->getBdd()->proteger($valeur);
|
233 |
$this->requete_condition[] = $nom_champ.' LIKE '.$this->getBdd()->proteger($valeur);
|
243 |
}
|
234 |
}
|
244 |
}
|
235 |
}
|
245 |
|
236 |
|
246 |
/** fonction d'ajout dans la requete SQL des conditions (WHERE ...) quand le paramètre passé est masque
|
237 |
/** fonction d'ajout dans la requete SQL des conditions (WHERE ...) quand le paramètre passé est masque
|
247 |
* @param $valeur
|
238 |
* @param $valeur
|
248 |
*/
|
239 |
*/
|
249 |
public function ajouterLeFiltreMasque($valeur) {
|
240 |
public function ajouterLeFiltreMasque($valeur) {
|
250 |
$this->ajouterUnfiltre('station', $valeur);
|
241 |
$this->ajouterUnfiltre('station', $valeur);
|
251 |
$condition = '(( '.array_pop($this->requete_condition);
|
242 |
$condition = '(( '.array_pop($this->requete_condition);
|
252 |
$this->ajouterUnfiltre('num_nom', $valeur);
|
243 |
$this->ajouterUnfiltre('num_nom', $valeur);
|
253 |
$condition .= ' ) OR ('.array_pop($this->requete_condition);
|
244 |
$condition .= ' ) OR ('.array_pop($this->requete_condition);
|
254 |
$condition = str_replace('( 1 ) OR', '', $condition); // si la valeur passée est une varchar supprime le filtre station
|
245 |
$condition = str_replace('( 1 ) OR', '', $condition); // si la valeur passée est une varchar supprime le filtre station
|
255 |
$this->ajouterUnfiltre('nom_sci', $valeur);
|
246 |
$this->ajouterUnfiltre('nom_sci', $valeur);
|
256 |
$this->requete_condition[] = $condition.' ) OR ('.array_pop($this->requete_condition).' )) ';
|
247 |
$this->requete_condition[] = $condition.' ) OR ('.array_pop($this->requete_condition).' )) ';
|
257 |
}
|
248 |
}
|
258 |
|
249 |
|
259 |
/** fonction d'ajout dans la requete SQL des conditions (WHERE ...) quand le paramètre passé est masque.contributeur
|
250 |
/** fonction d'ajout dans la requete SQL des conditions (WHERE ...) quand le paramètre passé est masque.contributeur
|
260 |
* @param $valeur
|
251 |
* @param $valeur
|
261 |
*/
|
252 |
*/
|
262 |
public function ajouterLeFiltreContributeur($valeur) {
|
253 |
public function ajouterLeFiltreContributeur($valeur) {
|
263 |
$requete_contr = $this->creerRequeteContributeur($valeur);
|
254 |
$requete_contr = $this->creerRequeteContributeur($valeur);
|
264 |
$res = $this->getBdd()->recupererTous($requete_contr);
|
255 |
$res = $this->getBdd()->recupererTous($requete_contr);
|
265 |
if ($res == '') { //cas ou la requete comporte des erreurs
|
256 |
if ($res == '') { //cas ou la requete comporte des erreurs
|
266 |
$c = 'La requête SQL formée comporte une erreur !!';
|
257 |
$c = 'La requête SQL formée comporte une erreur !!';
|
267 |
$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $c);
|
258 |
$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $c);
|
268 |
Debug::printr($requete_contr);
|
259 |
Debug::printr($requete_contr);
|
269 |
} elseif ($res) {
|
260 |
} elseif ($res) {
|
270 |
unset($res[0]['id'],$res[0]['nom'],$res[0]['prenom'],$res[0]['courriel']);
|
261 |
unset($res[0]['id'],$res[0]['nom'],$res[0]['prenom'],$res[0]['courriel']);
|
271 |
// si il y a un masque station et que le contributeur n'a pas de données dans ce dept
|
262 |
// si il y a un masque station et que le contributeur n'a pas de données dans ce dept
|
272 |
if (isset($this->table_param['masque_station']) && isset($res[0][$this->table_param['masque_station']])) {
|
263 |
if (isset($this->table_param['masque_station']) && isset($res[0][$this->table_param['masque_station']])) {
|
273 |
if ($res[0][$this->table_param['masque_station']] != 1) {
|
264 |
if ($res[0][$this->table_param['masque_station']] != 1) {
|
274 |
$d = "Les données recherchées sont introuvables pour l'observateur ".$valeur." dans le département "
|
265 |
$d = "Les données recherchées sont introuvables pour l'observateur ".$valeur." dans le département "
|
275 |
.$this->table_param['masque_station'];
|
266 |
.$this->table_param['masque_station'];
|
276 |
$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $d);
|
267 |
$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $d);
|
277 |
}
|
268 |
}
|
278 |
} else {
|
269 |
} else {
|
279 |
foreach ($res[0] as $dept=>$presence) {
|
270 |
foreach ($res[0] as $dept=>$presence) {
|
280 |
if ($presence == 1) {
|
271 |
if ($presence == 1) {
|
281 |
$this->ajouterUnfiltre('station', $dept);
|
272 |
$this->ajouterUnfiltre('station', $dept);
|
282 |
$requete_condition[] = array_pop($this->requete_condition); // recupere le filtre créé précédement
|
273 |
$requete_condition[] = array_pop($this->requete_condition); // recupere le filtre créé précédement
|
283 |
}
|
274 |
}
|
284 |
}
|
275 |
}
|
285 |
$this->requete_condition[] = '(( '.implode(' ) OR ( ', $requete_condition).' ))'; // créé un filtre sur les dept
|
276 |
$this->requete_condition[] = '(( '.implode(' ) OR ( ', $requete_condition).' ))'; // créé un filtre sur les dept
|
286 |
}
|
277 |
}
|
287 |
} else {
|
278 |
} else {
|
288 |
$i = "Les données recherchées sont introuvables pour l'observateur ".$valeur;
|
279 |
$i = "Les données recherchées sont introuvables pour l'observateur ".$valeur;
|
289 |
$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $i);
|
280 |
$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $i);
|
290 |
}
|
281 |
}
|
291 |
}
|
282 |
}
|
292 |
|
283 |
|
293 |
public function creerRequeteContributeur($valeur) {
|
284 |
public function creerRequeteContributeur($valeur) {
|
294 |
$condition = '';
|
285 |
$condition = '';
|
295 |
if (preg_match('/(.*@[a-z]+\.[a-z]{2,3})/', $valeur, $match)) {// cherche sur le mail
|
286 |
if (preg_match('/(.*@[a-z]+\.[a-z]{2,3})/', $valeur, $match)) {// cherche sur le mail
|
296 |
$condition = 'courriel = '.$this->getBdd()->proteger($match[1]);
|
287 |
$condition = 'courriel = '.$this->getBdd()->proteger($match[1]);
|
297 |
} elseif (preg_match('/^(\w+)\s+(\w+)$/', $valeur, $match)) {// cherche sur les nom prenom
|
288 |
} elseif (preg_match('/^(\w+)\s+(\w+)$/', $valeur, $match)) {// cherche sur les nom prenom
|
298 |
$condition = ' ((nom = '.$this->getBdd()->proteger($match[1]).' OR prenom = '.$this->getBdd()->proteger($match[1]).
|
289 |
$condition = ' ((nom = '.$this->getBdd()->proteger($match[1]).' OR prenom = '.$this->getBdd()->proteger($match[1]).
|
299 |
' ) AND (nom = '.$this->getBdd()->proteger($match[2]).' OR prenom = '.$this->getBdd()->proteger($match[2]).'))'.
|
290 |
' ) AND (nom = '.$this->getBdd()->proteger($match[2]).' OR prenom = '.$this->getBdd()->proteger($match[2]).'))'.
|
300 |
' OR ( nom LIKE '.$this->getBdd()->proteger($valeur.'%').')';
|
291 |
' OR ( nom LIKE '.$this->getBdd()->proteger($valeur.'%').')';
|
301 |
} else {// cherche si nom association
|
292 |
} else {// cherche si nom association
|
302 |
$condition = 'nom LIKE '.$this->getBdd()->proteger($valeur.'%');
|
293 |
$condition = 'nom LIKE '.$this->getBdd()->proteger($valeur.'%');
|
303 |
}
|
294 |
}
|
304 |
list($table, $version) = explode('_v',$this->table);
|
295 |
list($table, $version) = explode('_v',$this->table);
|
305 |
$requete_contr = "SELECT * FROM chorodep_contributeurs_v$version WHERE ".$condition;
|
296 |
$requete_contr = "SELECT * FROM chorodep_contributeurs_v$version WHERE ".$condition;
|
306 |
}
|
297 |
}
|
307 |
|
298 |
|
308 |
/**
|
299 |
/**
|
309 |
* @param type $id un offset ou une combinaison de la forme "num_nom:departement"
|
300 |
* @param type $id un offset ou une combinaison de la forme "num_nom:departement"
|
310 |
*/
|
301 |
*/
|
311 |
public function ajouterLimiteDepart($id) {
|
302 |
public function ajouterLimiteDepart($id) {
|
312 |
if ($id !== '') {
|
303 |
if ($id !== '') {
|
313 |
// $id est de la forme nn:dept - wtf ? en plus ça marche pas, le lien
|
304 |
// $id est de la forme nn:dept - wtf ? en plus ça marche pas, le lien
|
314 |
// "href.suivant" génère du caca d'oie
|
305 |
// "href.suivant" génère du caca d'oie
|
315 |
$d = explode(":", $id);
|
306 |
$d = explode(":", $id);
|
316 |
if (count($d) == 2) {
|
307 |
if (count($d) == 2) {
|
317 |
$this->limite_requete['depart'] = 0;
|
308 |
$this->limite_requete['depart'] = 0;
|
318 |
$this->limite_requete['dept'] = $d[1];
|
309 |
$this->limite_requete['dept'] = $d[1];
|
319 |
if (!isset($this->parametres['masque.determination.nn'])) {
|
310 |
if (!isset($this->parametres['masque.determination.nn'])) {
|
320 |
$requete_condition = (is_numeric($d[0])) ? '`num_nom` = '.$d[0] : '`nom_sci` like "'.urldecode($d[0]).'%"';
|
311 |
$requete_condition = (is_numeric($d[0])) ? '`num_nom` = '.$d[0] : '`nom_sci` like "'.urldecode($d[0]).'%"';
|
321 |
$requete = "SELECT id FROM $this->table WHERE ".$requete_condition;
|
312 |
$requete = "SELECT id FROM $this->table WHERE ".$requete_condition;
|
322 |
$res = $this->getBdd()->recuperer($requete);
|
313 |
$res = $this->getBdd()->recuperer($requete);
|
323 |
if ($res == '') { //cas ou la requete comporte des erreurs
|
314 |
if ($res == '') { //cas ou la requete comporte des erreurs
|
324 |
$r = 'La requête SQL formée comporte une erreur !!';
|
315 |
$r = 'La requête SQL formée comporte une erreur !!';
|
325 |
$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $r);
|
316 |
$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $r);
|
326 |
Debug::printr($requete);
|
317 |
Debug::printr($requete);
|
327 |
} elseif ($res) {
|
318 |
} elseif ($res) {
|
328 |
$this->limite_requete['depart'] = $res['id'] - 1;
|
319 |
$this->limite_requete['depart'] = $res['id'] - 1;
|
329 |
} else {
|
320 |
} else {
|
330 |
$i = "Les données recherchées sont introuvables";
|
321 |
$i = "Les données recherchées sont introuvables";
|
331 |
$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $i);
|
322 |
$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $i);
|
332 |
}
|
323 |
}
|
333 |
}
|
324 |
}
|
334 |
} else {
|
325 |
} else {
|
335 |
// $id est un simple offset
|
326 |
// $id est un simple offset
|
336 |
$this->limite_requete['depart'] = $id;
|
327 |
$this->limite_requete['depart'] = $id;
|
337 |
}
|
328 |
}
|
338 |
}
|
329 |
}
|
339 |
}
|
330 |
}
|
340 |
|
331 |
|
341 |
// +-------------------------------------------------------------------------------------------------------------------+
|
332 |
// +-------------------------------------------------------------------------------------------------------------------+
|
342 |
public function retournerResultatFormate($resultat) {
|
333 |
public function retournerResultatFormate($resultat) {
|
343 |
$this->table_retour = array(); // stocke les données générales d'une observation et écrase les données d'un dep
|
334 |
$this->table_retour = array(); // stocke les données générales d'une observation et écrase les données d'un dep
|
344 |
$this->chargerInfosGenerales();
|
335 |
$this->chargerInfosGenerales();
|
345 |
switch ($this->format_reponse) {
|
336 |
switch ($this->format_reponse) {
|
346 |
case 'observations' : $reponse = $this->formaterObservations($resultat); break;
|
337 |
case 'observations' : $reponse = $this->formaterObservations($resultat); break;
|
347 |
case 'observations/id' : $reponse = $this->formaterObservationsId($resultat[0]); break;
|
338 |
case 'observations/id' : $reponse = $this->formaterObservationsId($resultat[0]); break;
|
348 |
case 'observations/id/champ': $reponse = $this->formaterObservationsIdChamp($resultat[0]); break;
|
339 |
case 'observations/id/champ': $reponse = $this->formaterObservationsIdChamp($resultat[0]); break;
|
349 |
default : break;
|
340 |
default : break;
|
350 |
}
|
341 |
}
|
351 |
return $reponse;
|
342 |
return $reponse;
|
352 |
}
|
343 |
}
|
353 |
|
344 |
|
354 |
|
345 |
|
355 |
public function formaterObservations($resultat) {
|
346 |
public function formaterObservations($resultat) {
|
356 |
$num = 0; // compte le nombre d'observations pour retourner le nombre d'obs indiqué
|
347 |
$num = 0; // compte le nombre d'observations pour retourner le nombre d'obs indiqué
|
357 |
$depart = false; //le depart du resultat est noté ss forme #ligne:#departement $depart indique le departement est correct
|
348 |
$depart = false; //le depart du resultat est noté ss forme #ligne:#departement $depart indique le departement est correct
|
358 |
//on remplit la table $table_retour_json['resultat']
|
349 |
//on remplit la table $table_retour_json['resultat']
|
359 |
$this->table_retour = array();
|
350 |
$this->table_retour = array();
|
360 |
foreach ($resultat as $tab) {
|
351 |
foreach ($resultat as $tab) {
|
361 |
foreach ($tab as $key => $valeur) {
|
352 |
foreach ($tab as $key => $valeur) {
|
362 |
switch ($key) {
|
353 |
switch ($key) {
|
363 |
case 'id' : break;
|
354 |
case 'id' : break;
|
364 |
case 'catminat' : break;
|
355 |
case 'catminat' : break;
|
365 |
case 'rang' : break;
|
356 |
case 'rang' : break;
|
366 |
case 'num_tax' : break;
|
357 |
case 'num_tax' : break;
|
367 |
case 'freq_abs' : break;
|
358 |
case 'freq_abs' : break;
|
368 |
case 'freq_rel' : break;
|
359 |
case 'freq_rel' : break;
|
369 |
case 'rare_nat' : break;
|
360 |
case 'rare_nat' : break;
|
370 |
case 'num_nom' : ($valeur == 'nc')? $num_nom = urlencode($tab['nom_sci']) : $num_nom = $valeur ; break;
|
361 |
case 'num_nom' : ($valeur == 'nc')? $num_nom = urlencode($tab['nom_sci']) : $num_nom = $valeur ; break;
|
371 |
case 'nom_sci' : $this->table_retour['determination.nom_sci'] = $valeur; break;
|
362 |
case 'nom_sci' : $this->table_retour['determination.nom_sci'] = $valeur; break;
|
372 |
default : // pour les depts
|
363 |
default : // pour les depts
|
373 |
if (isset($this->parametres['masque.station'])) {
|
364 |
if (isset($this->parametres['masque.station'])) {
|
374 |
if ($key == $this->parametres['masque.station']) {
|
365 |
if ($key == $this->parametres['masque.station']) {
|
375 |
$id = $num_nom.":".$key;
|
366 |
$id = $num_nom.":".$key;
|
376 |
$this->completerDonnees($key, $valeur, $id);
|
367 |
$this->completerDonnees($key, $valeur, $id);
|
377 |
$resultat_json[$id] = $this->table_retour;
|
368 |
$resultat_json[$id] = $this->table_retour;
|
378 |
$num++;
|
369 |
$num++;
|
379 |
}
|
370 |
}
|
380 |
} else {
|
371 |
} else {
|
381 |
if ($depart == true && $valeur != '') {
|
372 |
if ($depart == true && $valeur != '') {
|
382 |
if (($this->presenceChorologie != '' && $valeur == $this->presenceChorologie) ||
|
373 |
if (($this->presenceChorologie != '' && $valeur == $this->presenceChorologie) ||
|
383 |
($this->presenceChorologie == '' && $valeur != $this->presenceChorologie)) {
|
374 |
($this->presenceChorologie == '' && $valeur != $this->presenceChorologie)) {
|
384 |
$id = $num_nom.":".$key;
|
375 |
$id = $num_nom.":".$key;
|
385 |
$this->completerDonnees($key, $valeur, $id);
|
376 |
$this->completerDonnees($key, $valeur, $id);
|
386 |
$resultat_json[$id] = $this->table_retour;
|
377 |
$resultat_json[$id] = $this->table_retour;
|
387 |
$num++;
|
378 |
$num++;
|
388 |
}
|
379 |
}
|
389 |
}
|
380 |
}
|
390 |
if ($key == $this->limite_requete['dept']) $depart = true;
|
381 |
if ($key == $this->limite_requete['dept']) $depart = true;
|
391 |
}
|
382 |
}
|
392 |
break;
|
383 |
break;
|
393 |
}
|
384 |
}
|
394 |
if ($num == $this->limite_requete['limite']) {
|
385 |
if ($num == $this->limite_requete['limite']) {
|
395 |
break;
|
386 |
break;
|
396 |
}
|
387 |
}
|
397 |
}
|
388 |
}
|
398 |
if ($num == $this->limite_requete['limite']) {
|
389 |
if ($num == $this->limite_requete['limite']) {
|
399 |
break;
|
390 |
break;
|
400 |
}
|
391 |
}
|
401 |
$this->table_retour = array();
|
392 |
$this->table_retour = array();
|
402 |
}
|
393 |
}
|
403 |
//on remplit la table $table_retour_json['entete']
|
394 |
//on remplit la table $table_retour_json['entete']
|
404 |
// Mode moderne rétrocompatible : les départ sont toujours de simples offsets
|
395 |
// Mode moderne rétrocompatible : les départ sont toujours de simples offsets
|
405 |
if (strpos($this->limite_requete['depart'], ':') === false) {
|
396 |
if (strpos($this->limite_requete['depart'], ':') === false) {
|
406 |
$id = $this->limite_requete['depart'] + $this->limite_requete['limite'];
|
397 |
$id = $this->limite_requete['depart'] + $this->limite_requete['limite'];
|
407 |
}
|
398 |
}
|
408 |
//formuler les urls precedentes et suivantes affichées dans l'entete du resultat
|
399 |
//formuler les urls precedentes et suivantes affichées dans l'entete du resultat
|
409 |
$url = $this->formulerUrlObs($id, $num, '/observations');
|
400 |
$url = $this->formulerUrlObs($id, $num, '/observations');
|
410 |
if ($url['precedent'] != '') { $this->table_entete['href.precedent'] = $url['precedent']; }
|
401 |
if ($url['precedent'] != '') { $this->table_entete['href.precedent'] = $url['precedent']; }
|
411 |
if ($url['suivant'] != '') { $this->table_entete['href.suivant'] = $url['suivant']; }
|
402 |
if ($url['suivant'] != '') { $this->table_entete['href.suivant'] = $url['suivant']; }
|
412 |
$this->table_entete['total'] = $num;
|
403 |
$this->table_entete['total'] = $num;
|
413 |
$table_retour_json['entete'] = $this->table_entete;
|
404 |
$table_retour_json['entete'] = $this->table_entete;
|
414 |
$table_retour_json['resultat'] = $resultat_json;
|
405 |
$table_retour_json['resultat'] = $resultat_json;
|
415 |
return $table_retour_json;
|
406 |
return $table_retour_json;
|
416 |
}
|
407 |
}
|
417 |
|
408 |
|
418 |
public function completerDonnees($key, $valeur, $id) {
|
409 |
public function completerDonnees($key, $valeur, $id) {
|
419 |
if ($this->retour_format == 'max' ) {
|
410 |
if ($this->retour_format == 'max' ) {
|
420 |
$this->afficherDonneesMax($key, $valeur);
|
411 |
$this->afficherDonneesMax($key, $valeur);
|
421 |
$this->table_retour['href'] = $this->ajouterHref('observations',$id);
|
412 |
$this->table_retour['href'] = $this->ajouterHref('observations',$id);
|
422 |
} else {
|
413 |
} else {
|
423 |
$this->table_retour['station.departement.code'] = 'INSEE-D.'.$key;
|
414 |
$this->table_retour['station.departement.code'] = 'INSEE-D.'.$key;
|
424 |
$this->table_retour['valeur.code'] = $valeur;
|
415 |
$this->table_retour['valeur.code'] = $valeur;
|
425 |
}
|
416 |
}
|
426 |
}
|
417 |
}
|
427 |
|
418 |
|
428 |
public function formaterObservationsId($resultat) {
|
419 |
public function formaterObservationsId($resultat) {
|
429 |
foreach ($resultat as $key => $valeur) {
|
420 |
foreach ($resultat as $key => $valeur) {
|
430 |
switch ($key) {
|
421 |
switch ($key) {
|
431 |
case 'id' : break;
|
422 |
case 'id' : break;
|
432 |
case 'catminat' : if ($this->retour_format == 'max') $this->table_retour['determination.catminat'] = $valeur; break;
|
423 |
case 'catminat' : if ($this->retour_format == 'max') $this->table_retour['determination.catminat'] = $valeur; break;
|
433 |
case 'rang' : $this->table_retour['determination.rang'] = $valeur; break;
|
424 |
case 'rang' : $this->table_retour['determination.rang'] = $valeur; break;
|
434 |
case 'num_tax' : $this->table_retour['determination.num_tax'] = $valeur; break;
|
425 |
case 'num_tax' : $this->table_retour['determination.num_tax'] = $valeur; break;
|
435 |
case 'freq_abs' : break;
|
426 |
case 'freq_abs' : break;
|
436 |
case 'freq_rel' : break;
|
427 |
case 'freq_rel' : break;
|
437 |
case 'rare_nat' : $this->table_retour['determination.rarete_nationale.code'] = $valeur; break;
|
428 |
case 'rare_nat' : $this->table_retour['determination.rarete_nationale.code'] = $valeur; break;
|
438 |
case 'nom_sci' : $this->table_retour['determination.nom_sci'] = $valeur; break;
|
429 |
case 'nom_sci' : $this->table_retour['determination.nom_sci'] = $valeur; break;
|
439 |
case 'num_nom' : $this->table_retour['determination.num_nom'] = $valeur; break;
|
430 |
case 'num_nom' : $this->table_retour['determination.num_nom'] = $valeur; break;
|
440 |
default : if ($this->retour_format == 'max') {
|
431 |
default : if ($this->retour_format == 'max') {
|
441 |
$this->afficherDonneesMax($key, $valeur, true);
|
432 |
$this->afficherDonneesMax($key, $valeur, true);
|
442 |
} else {
|
433 |
} else {
|
443 |
$this->table_retour['station.departement.code'] = 'INSEE-D.'.$key;
|
434 |
$this->table_retour['station.departement.code'] = 'INSEE-D.'.$key;
|
444 |
$this->table_retour['valeur.code'] = $valeur;
|
435 |
$this->table_retour['valeur.code'] = $valeur;
|
445 |
} break;
|
436 |
} break;
|
446 |
}
|
437 |
}
|
447 |
}
|
438 |
}
|
448 |
return $this->table_retour;
|
439 |
return $this->table_retour;
|
449 |
}
|
440 |
}
|
450 |
|
441 |
|
451 |
public function afficherDonneesMax($key, $valeur, $id = false) {
|
442 |
public function afficherDonneesMax($key, $valeur, $id = false) {
|
452 |
if ($key != 20) { //à part la Corse
|
443 |
if ($key != 20) { //à part la Corse
|
453 |
$url_dep = $this->ajouterHrefAutreProjet('zone-geo','',$key, 'insee-d');
|
444 |
$url_dep = $this->ajouterHrefAutreProjet('zone-geo','',$key, 'insee-d');
|
454 |
$dep = $this->consulterHref($url_dep);
|
445 |
$dep = $this->consulterHref($url_dep);
|
455 |
if (isset($dep)) {
|
446 |
if (isset($dep)) {
|
456 |
$this->table_retour['station.departement'] = $dep->nom;
|
447 |
$this->table_retour['station.departement'] = $dep->nom;
|
457 |
$this->table_retour['station.departement.code'] = 'INSEE-D.'.$key;
|
448 |
$this->table_retour['station.departement.code'] = 'INSEE-D.'.$key;
|
458 |
$this->table_retour['station.departement.href'] = $url_dep;
|
449 |
$this->table_retour['station.departement.href'] = $url_dep;
|
459 |
} else {
|
450 |
} else {
|
460 |
$this->table_retour['station.departement.code'] = 'INSEE-D.'.$key;
|
451 |
$this->table_retour['station.departement.code'] = 'INSEE-D.'.$key;
|
461 |
}
|
452 |
}
|
462 |
} else {
|
453 |
} else {
|
463 |
$this->table_retour['station.departement.code'] = 'INSEE-D.'.$key;
|
454 |
$this->table_retour['station.departement.code'] = 'INSEE-D.'.$key;
|
464 |
}
|
455 |
}
|
465 |
//double encodage des paramétres contre validation de Apache
|
456 |
//double encodage des paramétres contre validation de Apache
|
466 |
$url_val = $this->ajouterHref('ontologies', 'presenceChorologie:'.urlencode(urlencode($valeur)));
|
457 |
$url_val = $this->ajouterHref('ontologies', 'presenceChorologie:'.urlencode(urlencode($valeur)));
|
467 |
$val = $this->consulterHref($url_val);
|
458 |
$val = $this->consulterHref($url_val);
|
468 |
$this->table_retour['valeur'] = $val->nom;
|
459 |
$this->table_retour['valeur'] = $val->nom;
|
469 |
$this->table_retour['valeur.code'] = $valeur;
|
460 |
$this->table_retour['valeur.code'] = $valeur;
|
470 |
$this->table_retour['valeur.href'] = $url_val;
|
461 |
$this->table_retour['valeur.href'] = $url_val;
|
471 |
if ($this->format_reponse == 'observations/id') { // si on est
|
462 |
if ($this->format_reponse == 'observations/id') { // si on est
|
472 |
$contr = $this->chargerContributeurs($key);
|
463 |
$contr = $this->chargerContributeurs($key);
|
473 |
if (isset($contr['general'])) {
|
464 |
if (isset($contr['general'])) {
|
474 |
$this->table_retour['contributeur'] = $contr['general'];
|
465 |
$this->table_retour['contributeur'] = $contr['general'];
|
475 |
$this->table_retour['contributeur.details'] = $contr['details'];
|
466 |
$this->table_retour['contributeur.details'] = $contr['details'];
|
476 |
}
|
467 |
}
|
477 |
$source = $this->chargerSources($key);
|
468 |
$source = $this->chargerSources($key);
|
478 |
if (isset($source['general'])) $this->table_retour['sources'] = $source['general'];
|
469 |
if (isset($source['general'])) $this->table_retour['sources'] = $source['general'];
|
479 |
if (isset($source['autres'])) $this->table_retour['sources.autres'] = $source['autres'];
|
470 |
if (isset($source['autres'])) $this->table_retour['sources.autres'] = $source['autres'];
|
480 |
}
|
471 |
}
|
481 |
}
|
472 |
}
|
482 |
|
473 |
|
483 |
public function chargerInfosGenerales() {
|
474 |
public function chargerInfosGenerales() {
|
484 |
list($table, $version) = explode('_v',$this->table);
|
475 |
list($table, $version) = explode('_v',$this->table);
|
485 |
$version = str_replace('_', '.', $version);
|
476 |
$version = str_replace('_', '.', $version);
|
486 |
$requete = "SELECT createurs, date_creation FROM chorodep_meta WHERE version = \"$version\";";
|
477 |
$requete = "SELECT createurs, date_creation FROM chorodep_meta WHERE version = \"$version\";";
|
487 |
$resultat = $this->getBdd()->recuperer($requete); //Debug::printr($resultat);
|
478 |
$resultat = $this->getBdd()->recuperer($requete); //Debug::printr($resultat);
|
488 |
|
479 |
|
489 |
if ($resultat == '') { //cas ou la requete comporte des erreurs
|
480 |
if ($resultat == '') { //cas ou la requete comporte des erreurs
|
490 |
$r = 'La requête SQL metadonnees formée comporte une erreur !!';
|
481 |
$r = 'La requête SQL metadonnees formée comporte une erreur !!';
|
491 |
$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $r);
|
482 |
$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $r);
|
492 |
Debug::printr($requete);
|
483 |
Debug::printr($requete);
|
493 |
} elseif ($resultat) {
|
484 |
} elseif ($resultat) {
|
494 |
$this->table_retour['type'] = 'chorologie';
|
485 |
$this->table_retour['type'] = 'chorologie';
|
495 |
$this->table_retour['date_observation'] = $resultat['date_creation'];
|
486 |
$this->table_retour['date_observation'] = $resultat['date_creation'];
|
496 |
$this->table_retour['observateur.details'] = $this->traiterChampFormateDCSV($resultat['createurs']);
|
487 |
$this->table_retour['observateur.details'] = $this->traiterChampFormateDCSV($resultat['createurs']);
|
497 |
}
|
488 |
}
|
498 |
}
|
489 |
}
|
499 |
|
490 |
|
500 |
public function chargerContributeurs($dept) {
|
491 |
public function chargerContributeurs($dept) {
|
501 |
$contributeur = array();
|
492 |
$contributeur = array();
|
502 |
list($table, $version) = explode('_v',$this->table);
|
493 |
list($table, $version) = explode('_v',$this->table);
|
503 |
$requete = "SELECT prenom, nom, courriel FROM chorodep_contributeurs WHERE `$dept` = '1';";
|
494 |
$requete = "SELECT prenom, nom, courriel FROM chorodep_contributeurs WHERE `$dept` = '1';";
|
504 |
$resultat = $this->getBdd()->recupererTous($requete); //Debug::printr($resultat);
|
495 |
$resultat = $this->getBdd()->recupererTous($requete); //Debug::printr($resultat);
|
505 |
|
496 |
|
506 |
if ($resultat == '') { //cas ou la requete comporte des erreurs
|
497 |
if ($resultat == '') { //cas ou la requete comporte des erreurs
|
507 |
$r = 'La requête SQL contributeurs formée comporte une erreur !!';
|
498 |
$r = 'La requête SQL contributeurs formée comporte une erreur !!';
|
508 |
$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $r);
|
499 |
$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $r);
|
509 |
Debug::printr($requete);
|
500 |
Debug::printr($requete);
|
510 |
} elseif ($resultat) {
|
501 |
} elseif ($resultat) {
|
511 |
$contributeur['general'] = '';
|
502 |
$contributeur['general'] = '';
|
512 |
foreach ($resultat as $res) {
|
503 |
foreach ($resultat as $res) {
|
513 |
$contributeur['general'] .= $res['prenom'].' '.$res['nom'].', ';
|
504 |
$contributeur['general'] .= $res['prenom'].' '.$res['nom'].', ';
|
514 |
foreach ($res as $cle => $valeur) {
|
505 |
foreach ($res as $cle => $valeur) {
|
515 |
if ($valeur == "") {
|
506 |
if ($valeur == "") {
|
516 |
unset($res[$cle]);
|
507 |
unset($res[$cle]);
|
517 |
}
|
508 |
}
|
518 |
}
|
509 |
}
|
519 |
$type = ($res['prenom'] == '') ? 'o' : 'p';
|
510 |
$type = ($res['prenom'] == '') ? 'o' : 'p';
|
520 |
$url = $this->ajouterHrefAutreProjet('ontologies', 'contactType:', $type, 'eflore');
|
511 |
$url = $this->ajouterHrefAutreProjet('ontologies', 'contactType:', $type, 'eflore');
|
521 |
$val = $this->consulterHref($url);
|
512 |
$val = $this->consulterHref($url);
|
522 |
$res['type'] = $val->nom;
|
513 |
$res['type'] = $val->nom;
|
523 |
$res['type.code'] = $type;
|
514 |
$res['type.code'] = $type;
|
524 |
$res['type.href'] = $url;
|
515 |
$res['type.href'] = $url;
|
525 |
$contributeur['details'][] = $res;
|
516 |
$contributeur['details'][] = $res;
|
526 |
}
|
517 |
}
|
527 |
}
|
518 |
}
|
528 |
return $contributeur;
|
519 |
return $contributeur;
|
529 |
}
|
520 |
}
|
530 |
|
521 |
|
531 |
// prend en paramètre un champ comme createur, contributeur... sous forme p.prenom=ygggg,p.nom=fk;p.prenom=fdfs,p.nom=ek
|
522 |
// prend en paramètre un champ comme createur, contributeur... sous forme p.prenom=ygggg,p.nom=fk;p.prenom=fdfs,p.nom=ek
|
532 |
//retourne un tableau
|
523 |
//retourne un tableau
|
533 |
public function creerPointDetails($resultat) {
|
524 |
public function creerPointDetails($resultat) {
|
534 |
$organismes = explode(';', $resultat);
|
525 |
$organismes = explode(';', $resultat);
|
535 |
$num_org = 1;
|
526 |
$num_org = 1;
|
536 |
$general = '';
|
527 |
$general = '';
|
537 |
foreach ($organismes as $organisme) {
|
528 |
foreach ($organismes as $organisme) {
|
538 |
$infos = explode(',', $organisme);
|
529 |
$infos = explode(',', $organisme);
|
539 |
$t = '';
|
530 |
$t = '';
|
540 |
$type = '.';
|
531 |
$type = '.';
|
541 |
|
532 |
|
542 |
foreach ($infos as $info) {
|
533 |
foreach ($infos as $info) {
|
543 |
list($key, $val) = explode('=', $info);
|
534 |
list($key, $val) = explode('=', $info);
|
544 |
list($type, $champ) = explode('.', trim($key));
|
535 |
list($type, $champ) = explode('.', trim($key));
|
545 |
if ($type == 'p' && $champ == 'prenom') $general .= $val.' ';
|
536 |
if ($type == 'p' && $champ == 'prenom') $general .= $val.' ';
|
546 |
if (($type == 'p' || $type == 'o') && $champ == 'nom') $general .= $val.' ';
|
537 |
if (($type == 'p' || $type == 'o') && $champ == 'nom') $general .= $val.' ';
|
547 |
$res[$num_org][$champ] = $val;
|
538 |
$res[$num_org][$champ] = $val;
|
548 |
$res[$num_org]['type'] = $type;// à modifier
|
539 |
$res[$num_org]['type'] = $type;// à modifier
|
549 |
}
|
540 |
}
|
550 |
$general = rtrim($general).', ';
|
541 |
$general = rtrim($general).', ';
|
551 |
$num_org ++;
|
542 |
$num_org ++;
|
552 |
}
|
543 |
}
|
553 |
$this->table_retour['observateur'] = rtrim($general, ', ');
|
544 |
$this->table_retour['observateur'] = rtrim($general, ', ');
|
554 |
$this->table_retour['observateur.details'] = $res;
|
545 |
$this->table_retour['observateur.details'] = $res;
|
555 |
}
|
546 |
}
|
556 |
/**
|
547 |
/**
|
557 |
* Recupère à partir de la valeur du champ les différentes informations séparées par ';' (stocke ds un tableau)
|
548 |
* Recupère à partir de la valeur du champ les différentes informations séparées par ';' (stocke ds un tableau)
|
558 |
* pour éditeurs, créateurs, contributeurs,...
|
549 |
* pour éditeurs, créateurs, contributeurs,...
|
559 |
* (ex : nom=Tela Botanica,guid=urn:lsid:tela-botanica.org,courriel=accueil@tela-botanica.org,...
|
550 |
* (ex : nom=Tela Botanica,guid=urn:lsid:tela-botanica.org,courriel=accueil@tela-botanica.org,...
|
560 |
*/
|
551 |
*/
|
561 |
public function traiterChampFormateDCSV($val) {
|
552 |
public function traiterChampFormateDCSV($val) {
|
562 |
$tab = array();
|
553 |
$tab = array();
|
563 |
$num_entite = 0;
|
554 |
$num_entite = 0;
|
564 |
$type = '';
|
555 |
$type = '';
|
565 |
|
556 |
|
566 |
// découpe chaque participant
|
557 |
// découpe chaque participant
|
567 |
$tab_entites = explode(';', $val);
|
558 |
$tab_entites = explode(';', $val);
|
568 |
foreach ($tab_entites as $entite) {
|
559 |
foreach ($tab_entites as $entite) {
|
569 |
$tab[$num_entite] = array();
|
560 |
$tab[$num_entite] = array();
|
570 |
|
561 |
|
571 |
if ($entite != '') {
|
562 |
if ($entite != '') {
|
572 |
// découpe les informations du participant
|
563 |
// découpe les informations du participant
|
573 |
$entite_detail = explode(',', $entite);
|
564 |
$entite_detail = explode(',', $entite);
|
574 |
foreach ($entite_detail as $detail) {
|
565 |
foreach ($entite_detail as $detail) {
|
575 |
|
566 |
|
576 |
if ($detail != '') {
|
567 |
if ($detail != '') {
|
577 |
if (preg_match('/^([^=]*)\.([^=]+)=([^=]*)$/', $detail, $match)) {
|
568 |
if (preg_match('/^([^=]*)\.([^=]+)=([^=]*)$/', $detail, $match)) {
|
578 |
$tab[$num_entite][$match[2]] = $match[3];
|
569 |
$tab[$num_entite][$match[2]] = $match[3];
|
579 |
if ($match[1] != $type) $type = $match[1];
|
570 |
if ($match[1] != $type) $type = $match[1];
|
580 |
} else {
|
571 |
} else {
|
581 |
$tab[$num_entite][] = $detail;
|
572 |
$tab[$num_entite][] = $detail;
|
582 |
}
|
573 |
}
|
583 |
}
|
574 |
}
|
584 |
}
|
575 |
}
|
585 |
if ($type != '') {
|
576 |
if ($type != '') {
|
586 |
if ($this->retour_format == 'max') {
|
577 |
if ($this->retour_format == 'max') {
|
587 |
|
578 |
|
588 |
}
|
579 |
}
|
589 |
}
|
580 |
}
|
590 |
}
|
581 |
}
|
591 |
$num_entite++;
|
582 |
$num_entite++;
|
592 |
}
|
583 |
}
|
593 |
return $tab;
|
584 |
return $tab;
|
594 |
}
|
585 |
}
|
595 |
|
586 |
|
596 |
public function chargerSources($dept) {
|
587 |
public function chargerSources($dept) {
|
597 |
$contributeur = array();
|
588 |
$contributeur = array();
|
598 |
$requete = "SELECT biblio FROM chorodep_sources WHERE `$dept` = '1';";
|
589 |
$requete = "SELECT biblio FROM chorodep_sources WHERE `$dept` = '1';";
|
599 |
$resultat = $this->getBdd()->recupererTous($requete); //Debug::printr($resultat);
|
590 |
$resultat = $this->getBdd()->recupererTous($requete); //Debug::printr($resultat);
|
600 |
|
591 |
|
601 |
if ($resultat == '') { //cas ou la requete comporte des erreurs
|
592 |
if ($resultat == '') { //cas ou la requete comporte des erreurs
|
602 |
$r = 'La requête SQL sources formée comporte une erreur !!';
|
593 |
$r = 'La requête SQL sources formée comporte une erreur !!';
|
603 |
$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $r);
|
594 |
$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $r);
|
604 |
Debug::printr($requete);
|
595 |
Debug::printr($requete);
|
605 |
} elseif ($resultat) {
|
596 |
} elseif ($resultat) {
|
606 |
foreach ($resultat as $cle=>$res) {
|
597 |
foreach ($resultat as $cle=>$res) {
|
607 |
if ($cle == 0) {
|
598 |
if ($cle == 0) {
|
608 |
$contributeur['general'] = $res['biblio'];
|
599 |
$contributeur['general'] = $res['biblio'];
|
609 |
} else {
|
600 |
} else {
|
610 |
$contributeur['autres'][] = $res['biblio'];
|
601 |
$contributeur['autres'][] = $res['biblio'];
|
611 |
}
|
602 |
}
|
612 |
}
|
603 |
}
|
613 |
}
|
604 |
}
|
614 |
return $contributeur;
|
605 |
return $contributeur;
|
615 |
}
|
606 |
}
|
616 |
|
607 |
|
617 |
|
608 |
|
618 |
/* public function formaterObservationsIdChamp($resultat) {
|
609 |
/* public function formaterObservationsIdChamp($resultat) {
|
619 |
|
610 |
|
620 |
//on recupère tous les resultats possibles
|
611 |
//on recupère tous les resultats possibles
|
621 |
$reponse = $this->formaterObservationsId($resultat);
|
612 |
$reponse = $this->formaterObservationsId($resultat);
|
622 |
$this->table_retour = array();
|
613 |
$this->table_retour = array();
|
623 |
|
614 |
|
624 |
//on recupère les résultats demandés à partir du tableau de résultat complet
|
615 |
//on recupère les résultats demandés à partir du tableau de résultat complet
|
625 |
$this->table_retour['id'] = $reponse['id'];
|
616 |
$this->table_retour['id'] = $reponse['id'];
|
626 |
$champs = explode(' ', $this->table_ressources[1]);
|
617 |
$champs = explode(' ', $this->table_ressources[1]);
|
627 |
|
618 |
|
628 |
foreach ($champs as $champ) {
|
619 |
foreach ($champs as $champ) {
|
629 |
|
620 |
|
630 |
if ($this->verifierValiditeChamp($champ, $reponse)) {
|
621 |
if ($this->verifierValiditeChamp($champ, $reponse)) {
|
631 |
|
622 |
|
632 |
if (strrpos($champ, '.*') !== false) {
|
623 |
if (strrpos($champ, '.*') !== false) {
|
633 |
$this->afficherPointEtoile($champ, $reponse);
|
624 |
$this->afficherPointEtoile($champ, $reponse);
|
634 |
|
625 |
|
635 |
} else {
|
626 |
} else {
|
636 |
if (isset($reponse[$champ])) {
|
627 |
if (isset($reponse[$champ])) {
|
637 |
$this->table_retour[$champ] = $reponse[$champ];
|
628 |
$this->table_retour[$champ] = $reponse[$champ];
|
638 |
} else {
|
629 |
} else {
|
639 |
$this->table_retour[$champ] = null;
|
630 |
$this->table_retour[$champ] = null;
|
640 |
}
|
631 |
}
|
641 |
}
|
632 |
}
|
642 |
}
|
633 |
}
|
643 |
}
|
634 |
}
|
644 |
return $this->table_retour;
|
635 |
return $this->table_retour;
|
645 |
}*/
|
636 |
}*/
|
646 |
|
637 |
|
647 |
// +-------------------------------------------------------------------------------------------------------------------+
|
638 |
// +-------------------------------------------------------------------------------------------------------------------+
|
648 |
/**
|
639 |
/**
|
649 |
* Description :
|
640 |
* Description :
|
650 |
* Est appelée pour former l'url complete des resultats precedants ou suivants.
|
641 |
* Est appelée pour former l'url complete des resultats precedants ou suivants.
|
651 |
* @param int : Permet de connaitre le nombre de noms obtenus par la requete
|
642 |
* @param int : Permet de connaitre le nombre de noms obtenus par la requete
|
652 |
* @return string Retourne l'url complete des resultats precedents ou suivant sous la forme d'un tableau
|
643 |
* @return string Retourne l'url complete des resultats precedents ou suivant sous la forme d'un tableau
|
653 |
*/
|
644 |
*/
|
654 |
public function formulerUrlObs($suivant, $total, $id = null) {
|
645 |
public function formulerUrlObs($suivant, $total, $id = null) {
|
655 |
$debut_url = Config::get('url_service').$id.'?';
|
646 |
$debut_url = Config::get('url_service').$id.'?';
|
656 |
//on recrée l'url sans les parametres de navigation qui seront rajouter ci-apres. On les enlève dc de la table des parametres
|
647 |
//on recrée l'url sans les parametres de navigation qui seront rajouter ci-apres. On les enlève dc de la table des parametres
|
657 |
$table_bis = $this->table_param;
|
648 |
$table_bis = $this->table_param;
|
658 |
if (isset($table_bis['navigation.depart'] )) {
|
649 |
if (isset($table_bis['navigation.depart'] )) {
|
659 |
unset($table_bis['navigation.depart']);
|
650 |
unset($table_bis['navigation.depart']);
|
660 |
}
|
651 |
}
|
661 |
if (isset($table_bis['navigation.limite'])) {
|
652 |
if (isset($table_bis['navigation.limite'])) {
|
662 |
unset($table_bis['navigation.limite']);
|
653 |
unset($table_bis['navigation.limite']);
|
663 |
}
|
654 |
}
|
664 |
$parametre_url = http_build_query($table_bis);
|
655 |
$parametre_url = http_build_query($table_bis);
|
665 |
//on recupere les limites
|
656 |
//on recupere les limites
|
666 |
$url['suivant'] = $this->recupererLesLimitesSuivantesObs($suivant, $total);
|
657 |
$url['suivant'] = $this->recupererLesLimitesSuivantesObs($suivant, $total);
|
667 |
$url['precedent'] = $this->recupererLesLimitesPrecedentesObs($suivant);
|
658 |
$url['precedent'] = $this->recupererLesLimitesPrecedentesObs($suivant);
|
668 |
//on reconstitue les deux urls avec leurs limites
|
659 |
//on reconstitue les deux urls avec leurs limites
|
669 |
foreach ($url as $key => $limite) {
|
660 |
foreach ($url as $key => $limite) {
|
670 |
if ($limite != '') {
|
661 |
if ($limite != '') {
|
671 |
if ($parametre_url == '') {
|
662 |
if ($parametre_url == '') {
|
672 |
//si il n'y a aucun parametres, seules les limites sont à ajouter.On enleve dc le signe & du début
|
663 |
//si il n'y a aucun parametres, seules les limites sont à ajouter.On enleve dc le signe & du début
|
673 |
$limite = str_replace('&navigation.depart=', 'navigation.depart=', $limite);
|
664 |
$limite = str_replace('&navigation.depart=', 'navigation.depart=', $limite);
|
674 |
if (strpos($limite, 'navigation.depart') === false) {
|
665 |
if (strpos($limite, 'navigation.depart') === false) {
|
675 |
$limite = str_replace('&navigation.limite=', 'navigation.limite=', $limite);
|
666 |
$limite = str_replace('&navigation.limite=', 'navigation.limite=', $limite);
|
676 |
}
|
667 |
}
|
677 |
}
|
668 |
}
|
678 |
$url_complete = $debut_url.$parametre_url.$limite;
|
669 |
$url_complete = $debut_url.$parametre_url.$limite;
|
679 |
$url[$key] = $url_complete;
|
670 |
$url[$key] = $url_complete;
|
680 |
}
|
671 |
}
|
681 |
}
|
672 |
}
|
682 |
return $url;
|
673 |
return $url;
|
683 |
}
|
674 |
}
|
684 |
|
675 |
|
685 |
/**
|
676 |
/**
|
686 |
* Description :
|
677 |
* Description :
|
687 |
* Permet de former les limites de la requete retournant les résultats suivants.
|
678 |
* Permet de former les limites de la requete retournant les résultats suivants.
|
688 |
* Cette url sera afficher dans l'entete de la reponse retournée en format JSON (retour.format=defaut).
|
679 |
* Cette url sera afficher dans l'entete de la reponse retournée en format JSON (retour.format=defaut).
|
689 |
* @param int : $nb_resultat : Permet de connaitre le nombre de résultats obtenus par la requete
|
680 |
* @param int : $nb_resultat : Permet de connaitre le nombre de résultats obtenus par la requete
|
690 |
* @return string : la fin de l'url decrivant les limites des resultats suivants. Si aucun résultats ne suient,
|
681 |
* @return string : la fin de l'url decrivant les limites des resultats suivants. Si aucun résultats ne suient,
|
691 |
* une chaine de caractère vide est retournée
|
682 |
* une chaine de caractère vide est retournée
|
692 |
*/
|
683 |
*/
|
693 |
public function recupererLesLimitesSuivantesObs($suivant, $total) {
|
684 |
public function recupererLesLimitesSuivantesObs($suivant, $total) {
|
694 |
if ($this->limite_requete['limite'] <= $total) {
|
685 |
if ($this->limite_requete['limite'] <= $total) {
|
695 |
$url_suivante = '&navigation.depart='.$suivant.'&navigation.limite='.$this->limite_requete['limite'];
|
686 |
$url_suivante = '&navigation.depart='.$suivant.'&navigation.limite='.$this->limite_requete['limite'];
|
696 |
} else {
|
687 |
} else {
|
697 |
$url_suivante = '';
|
688 |
$url_suivante = '';
|
698 |
}
|
689 |
}
|
699 |
return $url_suivante;
|
690 |
return $url_suivante;
|
700 |
}
|
691 |
}
|
701 |
|
692 |
|
702 |
/**
|
693 |
/**
|
703 |
* Description :
|
694 |
* Description :
|
704 |
* Permet de former les limites de la requete retournant les résultats precedents.
|
695 |
* Permet de former les limites de la requete retournant les résultats precedents.
|
705 |
* Cette url sera afficher dans l'entete de la taxons/105reponse retournée en format JSON (retour.format=defaut)
|
696 |
* Cette url sera afficher dans l'entete de la taxons/105reponse retournée en format JSON (retour.format=defaut)
|
706 |
* @return string : la fin de l'url decrivant les limites des resultats precedents.
|
697 |
* @return string : la fin de l'url decrivant les limites des resultats precedents.
|
707 |
* Si aucun résultats ne precedent, une chaine de caractère vide est retournée
|
698 |
* Si aucun résultats ne precedent, une chaine de caractère vide est retournée
|
708 |
*/
|
699 |
*/
|
709 |
public function recupererLesLimitesPrecedentesObs($suivant) {
|
700 |
public function recupererLesLimitesPrecedentesObs($suivant) {
|
710 |
$url_precedente = '';
|
701 |
$url_precedente = '';
|
711 |
// tentative de fonctionnement normal
|
702 |
// tentative de fonctionnement normal
|
712 |
if (strpos($this->limite_requete['depart'], ':') === false && $this->limite_requete['depart'] != 0) {
|
703 |
if (strpos($this->limite_requete['depart'], ':') === false && $this->limite_requete['depart'] != 0) {
|
713 |
$departPrec = max(0, $this->limite_requete['depart'] - $this->limite_requete['limite']);
|
704 |
$departPrec = max(0, $this->limite_requete['depart'] - $this->limite_requete['limite']);
|
714 |
$url_precedente = "&navigation.depart=$departPrec&navigation.limite=" . $this->limite_requete['limite'];
|
705 |
$url_precedente = "&navigation.depart=$departPrec&navigation.limite=" . $this->limite_requete['limite'];
|
715 |
}
|
706 |
}
|
716 |
if (isset($this->table_param['navigation_depart'])) { // si on utilise un parametre de départ
|
707 |
if (isset($this->table_param['navigation_depart'])) { // si on utilise un parametre de départ
|
717 |
// si l'adresse d'appel de la page est inférieur au départ
|
708 |
// si l'adresse d'appel de la page est inférieur au départ
|
718 |
$regex = '/http:\/\/.*\/service:eflore:0.1\/chorodep\/observations\?.*navigation.depart=(.*\:[0-9]*).*/';
|
709 |
$regex = '/http:\/\/.*\/service:eflore:0.1\/chorodep\/observations\?.*navigation.depart=(.*\:[0-9]*).*/';
|
719 |
if (isset($_SERVER['HTTP_REFERER']) && preg_match($regex, $_SERVER['HTTP_REFERER'], $match)) {
|
710 |
if (isset($_SERVER['HTTP_REFERER']) && preg_match($regex, $_SERVER['HTTP_REFERER'], $match)) {
|
720 |
if ($match[1] != $this->table_param['navigation_depart'] && $match[1] != $suivant) {
|
711 |
if ($match[1] != $this->table_param['navigation_depart'] && $match[1] != $suivant) {
|
721 |
$url_precedente = '&navigation.depart='.$match[1].'&navigation.limite='.$this->limite_requete['limite'];
|
712 |
$url_precedente = '&navigation.depart='.$match[1].'&navigation.limite='.$this->limite_requete['limite'];
|
722 |
}
|
713 |
}
|
723 |
} else {
|
714 |
} else {
|
724 |
$url_precedente = '&navigation.limite='.$this->limite_requete['limite'];
|
715 |
$url_precedente = '&navigation.limite='.$this->limite_requete['limite'];
|
725 |
}
|
716 |
}
|
726 |
}
|
717 |
}
|
727 |
return $url_precedente;
|
718 |
return $url_precedente;
|
728 |
}
|
719 |
}
|
729 |
|
720 |
|
730 |
}
|
721 |
}
|
731 |
?>
|
722 |
?>
|