Line 12... |
Line 12... |
12 |
* - bbox : rectangle dont les bords delimitent en coordonnees l'espace de recherche de donnees spatiales
|
12 |
* - bbox : rectangle dont les bords delimitent en coordonnees l'espace de recherche de donnees spatiales
|
13 |
* L'ordre des valeurs est le suivant : ouest, sud, est, nord
|
13 |
* L'ordre des valeurs est le suivant : ouest, sud, est, nord
|
14 |
* On va verifier que c'est une serie de quatre nombre decimaux delimites par des virgules
|
14 |
* On va verifier que c'est une serie de quatre nombre decimaux delimites par des virgules
|
15 |
* et compris dans l'espace representant le monde a partir du systeme de projection WGS84 (EPSG:4326)
|
15 |
* et compris dans l'espace representant le monde a partir du systeme de projection WGS84 (EPSG:4326)
|
16 |
*
|
16 |
*
|
- |
|
17 |
* - stations : liste de points d'observations. C'est une serie de stations qui est passee en parametres
|
17 |
* - longitude et latitude : representent les coordonnees d'un point dans l'espace
|
18 |
* de cette maniere, separees entre elles par un seperateur vertical |. Chaque station est decrite
|
18 |
* On va verifier que ces coordonnees soient valides dans le systeme de projection utilise
|
19 |
* par sa source de donnees, le type de site et ses coordonnees longitude et latitude.
|
19 |
*
|
20 |
*
|
20 |
* - referentiel : referentiel taxonomique a utiliser. On peut passer aussi bien en parametres
|
21 |
* - referentiel : referentiel taxonomique a utiliser. On peut passer aussi bien en parametres
|
21 |
* son nom court que son nom complet (incluant le numero de version)
|
22 |
* son nom court que son nom complet (incluant le numero de version)
|
22 |
* On va verifier la disponibilite du referentiel pour ce service
|
23 |
* On va verifier la disponibilite du referentiel pour ce service
|
23 |
*
|
24 |
*
|
Line 29... |
Line 30... |
29 |
* - dept : une liste de numeros de departements separees entre eux par des virgules
|
30 |
* - dept : une liste de numeros de departements separees entre eux par des virgules
|
30 |
* On va verifier que chaque numero est un nombre entier et represente un code de departement valide
|
31 |
* On va verifier que chaque numero est un nombre entier et represente un code de departement valide
|
31 |
*
|
32 |
*
|
32 |
* - auteur : l'auteur de l'observation
|
33 |
* - auteur : l'auteur de l'observation
|
33 |
*
|
34 |
*
|
34 |
* - type_site : pour les observations, le type de point correspondant a la station cliquee
|
- |
|
35 |
* (STATION ou COMMUNE). Cela indique le niveau de precision ramene aux coordonnees des observations
|
- |
|
36 |
*
|
- |
|
37 |
* - date_debut et date_fin : intervalle de dates d'observation. On verifie que ce sont des dates valides
|
35 |
* - date_debut et date_fin : intervalle de dates d'observation. On verifie que ce sont des dates valides
|
38 |
* et que date_debut <= date_fin. Le programme peut accepter la presence d'un seul de ces deux
|
36 |
* et que date_debut <= date_fin. Le programme peut accepter la presence d'un seul de ces deux
|
39 |
* parametres : soit une date de debut, soit une date de fin
|
37 |
* parametres : soit une date de debut, soit une date de fin
|
- |
|
38 |
*
|
- |
|
39 |
* - nb_jours : valeur entiere qui indique de recuperer les observations effectuees ou transmises
|
- |
|
40 |
* sur les derniers jours avant la date d'execution du script
|
40 |
*
|
41 |
*
|
41 |
* La fonction principale de verification des parametres va parcourir tous les parametres, et verifier
|
42 |
* La fonction principale de verification des parametres va parcourir tous les parametres, et verifier
|
42 |
* pour chacun d'eux la validite de leurs valeurs. Dans le cas ou une valeur anormale est detectee
|
43 |
* pour chacun d'eux la validite de leurs valeurs. Dans le cas ou une valeur anormale est detectee
|
43 |
* ou qu'elle se trouve en dehors de l'intervalle des resultats acceptes, une liste de messages d'erreur
|
44 |
* ou qu'elle se trouve en dehors de l'intervalle des resultats acceptes, une liste de messages d'erreur
|
44 |
* sera generee et mise a jour.
|
45 |
* sera generee et mise a jour.
|
Line 68... |
Line 69... |
68 |
private $bboxMonde = null;
|
69 |
private $bboxMonde = null;
|
Line 69... |
Line 70... |
69 |
|
70 |
|
70 |
|
71 |
|
71 |
public function __construct($parametres) {
|
- |
|
72 |
foreach ($parametres as $nomParametre => $valeur) {
|
72 |
public function __construct($parametres) {
|
73 |
if ($nomParametre != 'source') {
|
- |
|
74 |
$this->parametres[$nomParametre] = $valeur;
|
73 |
foreach ($parametres as $nomParametre => $valeur) {
|
75 |
}
|
74 |
$this->parametres[$nomParametre] = $valeur;
|
76 |
}
|
75 |
}
|
77 |
$this->bboxMonde = array(
|
76 |
$this->bboxMonde = array(
|
78 |
'ouest' => floatval(Config::get('carte.limite_ouest')),
|
77 |
'ouest' => floatval(Config::get('carte.limite_ouest')),
|
Line 88... |
Line 87... |
88 |
switch ($nomParametre) {
|
87 |
switch ($nomParametre) {
|
89 |
case 'zoom' : $this->traiterParametreZoom($valeur);
|
88 |
case 'zoom' : $this->traiterParametreZoom($valeur);
|
90 |
break;
|
89 |
break;
|
91 |
case 'bbox' : $this->traiterParametreBbox($valeur);
|
90 |
case 'bbox' : $this->traiterParametreBbox($valeur);
|
92 |
break;
|
91 |
break;
|
93 |
case 'longitude' :
|
- |
|
94 |
case 'latitude' : $this->traiterParametresCoordonnees($this->parametres['longitude'],
|
92 |
case 'stations' : $this->traiterParametreStations($this->parametres['stations']);
|
95 |
$this->parametres['latitude']);
|
- |
|
96 |
break;
|
93 |
break;
|
97 |
case 'dept' : $this->traiterParametreDepartement($valeur);
|
94 |
case 'dept' : $this->traiterParametreDepartement($valeur);
|
98 |
break;
|
95 |
break;
|
99 |
case 'auteur' : $this->traiterParametreAuteur($valeur);
|
96 |
case 'auteur' : $this->traiterParametreAuteur($valeur);
|
100 |
break;
|
97 |
break;
|
Line 116... |
Line 113... |
116 |
$this->traiterParametresDate($dateDebut, $dateFin);
|
113 |
$this->traiterParametresDate($dateDebut, $dateFin);
|
117 |
$this->dateTraitee = true;
|
114 |
$this->dateTraitee = true;
|
118 |
}
|
115 |
}
|
119 |
break;
|
116 |
break;
|
120 |
}
|
117 |
}
|
- |
|
118 |
case 'format' : $this->validation->format = strtolower($valeur); break;
|
121 |
// autres parametres ==> les ignorer
|
119 |
// autres parametres ==> les ignorer
|
122 |
default : break;
|
120 |
default : break;
|
123 |
}
|
121 |
}
|
124 |
}
|
122 |
}
|
125 |
$this->verifierPresenceParametreSpatial();
|
123 |
$this->verifierPresenceParametreSpatial();
|
Line 162... |
Line 160... |
162 |
} else {
|
160 |
} else {
|
163 |
$this->validation->zoom = $zoom;
|
161 |
$this->validation->zoom = $zoom;
|
164 |
}
|
162 |
}
|
165 |
}
|
163 |
}
|
Line 166... |
Line 164... |
166 |
|
164 |
|
- |
|
165 |
private function traiterParametreBbox($chaineBbox) {
|
- |
|
166 |
$listeBbox = explode('|', trim($chaineBbox));
|
- |
|
167 |
$critereBbox = array();
|
- |
|
168 |
foreach ($listeBbox as $bbox) {
|
- |
|
169 |
$bboxVerifiee = $this->verifierCoordonneesBbox($bbox);
|
- |
|
170 |
if (!is_null($bboxVerifiee)) {
|
- |
|
171 |
$critereBbox[] = $bboxVerifiee;
|
- |
|
172 |
}
|
- |
|
173 |
}
|
- |
|
174 |
$this->validation->bbox = $critereBbox;
|
- |
|
175 |
}
|
- |
|
176 |
|
- |
|
177 |
private function verifierCoordonneesBbox($bbox) {
|
167 |
private function traiterParametreBbox($bbox) {
|
178 |
$bboxVerifiee = null;
|
168 |
// verifier que la chaine de caracteres $bbox est une serie de chaque nombre decimaux
|
179 |
// verifier que la chaine de caracteres $bbox est une serie de chaque nombre decimaux
|
169 |
// separes entre eux par une virgule
|
180 |
// separes entre eux par une virgule
|
170 |
if (preg_match('/^(-?\d{1,3}(.\d+)?,){3}(-?\d{1,3}(.\d+)?)$/', $bbox) == 0) {
|
181 |
if (preg_match('/^(-?\d{1,3}(.\d+)?,){3}(-?\d{1,3}(.\d+)?)$/', $bbox) == 0) {
|
171 |
$message = "Format de saisie des coordonnees de la bounding box non valide. Le service ".
|
182 |
$message = "Format de saisie des coordonnees de la bounding box non valide. Le service ".
|
Line 179... |
Line 190... |
179 |
for ($i = 0; $i < count($coordonnees); $i ++) {
|
190 |
for ($i = 0; $i < count($coordonnees); $i ++) {
|
180 |
$bbox[$nomsIndexBbox[$i]] = $coordonnees[$i];
|
191 |
$bbox[$nomsIndexBbox[$i]] = $coordonnees[$i];
|
181 |
}
|
192 |
}
|
182 |
// verifier que les coordonnees de chaque bord de la bbox sont valides
|
193 |
// verifier que les coordonnees de chaque bord de la bbox sont valides
|
183 |
if ($this->estUneBboxValide($bbox)) {
|
194 |
if ($this->estUneBboxValide($bbox)) {
|
184 |
$this->validation->bbox = $bbox;
|
195 |
$bboxVerifiee = $bbox;
|
185 |
} else {
|
196 |
} else {
|
186 |
$message = "Certaines coordonnées de la bounding box sont situés en dehors des limites ".
|
197 |
$message = "Certaines coordonnées de la bounding box sont situés en dehors des limites ".
|
187 |
"de notre monde";
|
198 |
"de notre monde";
|
188 |
$this->ajouterErreur($message);
|
199 |
$this->ajouterErreur($message);
|
189 |
}
|
200 |
}
|
190 |
}
|
201 |
}
|
- |
|
202 |
return $bboxVerifiee;
|
191 |
}
|
203 |
}
|
Line 192... |
Line 204... |
192 |
|
204 |
|
193 |
private function estUneBboxValide($bbox) {
|
205 |
private function estUneBboxValide($bbox) {
|
194 |
$monde = $this->bboxMonde;
|
206 |
$monde = $this->bboxMonde;
|
195 |
return (floatval($bbox['ouest']) >= $monde['ouest'] && floatval($bbox['ouest']) <= $monde['est']
|
207 |
return (floatval($bbox['ouest']) >= $monde['ouest'] && floatval($bbox['ouest']) <= $monde['est']
|
196 |
&& floatval($bbox['est']) >= $monde['ouest'] && floatval($bbox['est']) <= $monde['est']
|
208 |
&& floatval($bbox['est']) >= $monde['ouest'] && floatval($bbox['est']) <= $monde['est']
|
197 |
&& floatval($bbox['nord']) >= $monde['sud'] && floatval($bbox['nord']) <= $monde['nord']
|
209 |
&& floatval($bbox['nord']) >= $monde['sud'] && floatval($bbox['nord']) <= $monde['nord']
|
198 |
&& floatval($bbox['sud']) >= $monde['sud'] && floatval($bbox['sud']) <= $monde['nord']);
|
210 |
&& floatval($bbox['sud']) >= $monde['sud'] && floatval($bbox['sud']) <= $monde['nord']);
|
Line 199... |
Line 211... |
199 |
}
|
211 |
}
|
- |
|
212 |
|
- |
|
213 |
private function traiterParametreStations($listeStations) {
|
- |
|
214 |
$stations = explode('|', trim($listeStations));
|
- |
|
215 |
$critereStations = array();
|
- |
|
216 |
foreach ($stations as $station) {
|
- |
|
217 |
preg_match("/([a-z]+):([a-z]+):(-?\d{1,3}.\d+),(-?\d{1,3}.\d+)/", $station, $matches);
|
- |
|
218 |
if (count($matches) < 5) {
|
- |
|
219 |
$message = "Les données transmises sur la station à interroger sont incomplètes. ".
|
- |
|
220 |
"Le format suivant doit être respecté : source:type_site:longitude:latitude";
|
- |
|
221 |
$this->ajouterErreur($message);
|
- |
|
222 |
} else {
|
- |
|
223 |
$matches = array_splice($matches, 1, count($matches));
|
- |
|
224 |
$this->verifierCoordonneesStation($matches);
|
- |
|
225 |
$this->verifierSourceStation($matches[0]);
|
- |
|
226 |
$this->verifierTypeStation($matches[1]);
|
- |
|
227 |
$critereStations[] = $matches;
|
- |
|
228 |
}
|
- |
|
229 |
}
|
- |
|
230 |
$this->validation->stations = $critereStations;
|
- |
|
231 |
}
|
- |
|
232 |
|
- |
|
233 |
private function verifierCoordonneesStation(& $station) {
|
200 |
|
234 |
$longitude = floatval($station[2]);
|
201 |
private function traiterParametresCoordonnees($longitude, $latitude) {
|
235 |
$latitude = floatval($station[3]);
|
202 |
if ($this->sontDesCoordonneesValides($longitude, $latitude)) {
|
236 |
if ($this->sontDesCoordonneesValides($longitude, $latitude)) {
|
203 |
$this->validation->latitude = $latitude;
|
237 |
$station[2] = $latitude;
|
204 |
$this->validation->longitude = $longitude;
|
238 |
$station[3] = $longitude;
|
205 |
} else {
|
- |
|
206 |
$message = "Les coordonnees du point passées en parametres sont en dehors des limites de ".
|
239 |
} else {
|
207 |
"notre monde";
|
240 |
$message = "Les coordonnees du point passées en parametres sont en dehors des limites de notre monde";
|
208 |
$this->ajouterErreur($message);
|
241 |
$this->ajouterErreur($message);
|
Line 209... |
Line 242... |
209 |
}
|
242 |
}
|
210 |
}
|
243 |
}
|
211 |
|
244 |
|
212 |
private function sontDesCoordonneesValides($longitude, $latitude) {
|
245 |
private function sontDesCoordonneesValides($longitude, $latitude) {
|
213 |
$monde = $this->bboxMonde;
|
246 |
$monde = $this->bboxMonde;
|
Line -... |
Line 247... |
- |
|
247 |
return (floatval($longitude) >= $monde['ouest'] && floatval($longitude) <= $monde['est']
|
- |
|
248 |
&& floatval($latitude) >= $monde['sud'] && floatval($latitude) <= $monde['nord']);
|
- |
|
249 |
}
|
- |
|
250 |
|
- |
|
251 |
private function verifierTypeStation($typeStation) {
|
- |
|
252 |
$typeStationsValides = array('station', 'commune');
|
- |
|
253 |
if (!in_array($typeStation, $typeStationsValides)) {
|
- |
|
254 |
$message = "'$typeStation' n'est pas un type de station reconnu. Sont acceptés seulement 'station' et 'commune'.";
|
- |
|
255 |
$this->ajouterErreur($message);
|
- |
|
256 |
}
|
- |
|
257 |
}
|
- |
|
258 |
|
- |
|
259 |
private function verifierSourceStation($source) {
|
- |
|
260 |
$sourcesARequeter = explode(',', trim($this->parametres['source']));
|
- |
|
261 |
if (!in_array($source, $sourcesARequeter)) {
|
- |
|
262 |
$message = "La source '$source' n'est pas listée dans le paramètre source de l'URL (sont disponibles ".
|
- |
|
263 |
implode(',', $sourcesARequeter).").";
|
214 |
return (floatval($longitude) >= $monde['ouest'] && floatval($longitude) <= $monde['est']
|
264 |
$this->ajouterErreur($message);
|
215 |
&& floatval($latitude) >= $monde['sud'] && floatval($latitude) <= $monde['nord']);
|
265 |
}
|
216 |
}
|
266 |
}
|
217 |
|
267 |
|
218 |
private function traiterParametreDepartement($numeroDepartement) {
|
268 |
private function traiterParametreDepartement($numeroDepartement) {
|
Line 398... |
Line 448... |
398 |
}
|
448 |
}
|
Line 399... |
Line 449... |
399 |
|
449 |
|
400 |
private function verifierPresenceParametreSpatial() {
|
450 |
private function verifierPresenceParametreSpatial() {
|
401 |
$presenceParametreSpatial = false;
|
451 |
$presenceParametreSpatial = false;
|
402 |
if (isset($this->parametres['bbox'])
|
452 |
if (isset($this->parametres['bbox'])
|
403 |
|| (isset($this->parametres['longitude']) && isset($this->parametres['latitude']))) {
|
453 |
|| (isset($this->parametres['stations']))) {
|
404 |
$presenceParametreSpatial = true;
|
454 |
$presenceParametreSpatial = true;
|
405 |
}
|
455 |
}
|
406 |
if ($presenceParametreSpatial == false) {
|
456 |
if ($presenceParametreSpatial == false) {
|
407 |
$message = "Aucune coordonnée n'a été saisie";
|
457 |
$message = "Aucune coordonnée n'a été saisie";
|