Line 32... |
Line 32... |
32 |
|
32 |
|
33 |
private $lat = null;
|
33 |
private $lat = null;
|
34 |
private $lon = null;
|
34 |
private $lon = null;
|
35 |
private $zone = null;
|
35 |
private $zone = null;
|
- |
|
36 |
private $niveaux = null;
|
- |
|
37 |
|
Line 36... |
Line 38... |
36 |
private $niveaux = null;
|
38 |
private $masque = null;
|
37 |
|
39 |
|
38 |
public function __construct(Bdd $bdd) {
|
40 |
public function __construct(Bdd $bdd) {
|
Line 39... |
Line 41... |
39 |
$this->bdd = $bdd;
|
41 |
$this->bdd = $bdd;
|
40 |
}
|
42 |
}
|
41 |
|
43 |
|
- |
|
44 |
public function consulter($ressources, $parametres) {
|
42 |
public function consulter($ressources, $parametres) {
|
45 |
$this->parametres = $parametres;
|
43 |
$this->parametres = $parametres;
|
46 |
$this->verifierParametres();
|
44 |
$this->verifierParametres();
|
47 |
$this->masque = isset($this->parametres['masque']) ? $this->parametres['masque'] : null;
|
45 |
$this->lat = $this->parametres['lat'];
|
48 |
$this->lat = isset($this->parametres['lat']) ? $this->parametres['lat'] : null;
|
46 |
$this->lon = $this->parametres['lon'];
|
49 |
$this->lon = isset($this->parametres['lon']) ? $this->parametres['lon'] : null;
|
- |
|
50 |
$this->zone = isset($this->parametres['zone']) ? $this->parametres['zone'] : null;
|
- |
|
51 |
$this->niveaux = isset($this->parametres['niveau']) ? explode(',', $this->parametres['niveau']) : null;
|
- |
|
52 |
|
47 |
$this->zone = isset($this->parametres['zone']) ? $this->parametres['zone'] : null;
|
53 |
if($this->masque != null) {
|
48 |
$this->niveaux = isset($this->parametres['niveau']) ? explode(',', $this->parametres['niveau']) : null;
|
54 |
$corps = $this->rechercherZoneGeoParNom($this->masque);
|
- |
|
55 |
} else {
|
Line 49... |
Line 56... |
49 |
|
56 |
$zoneTrouveeInfos = $this->localiserPointLatLon();
|
50 |
$zoneTrouveeInfos = $this->localiserPointLatLon();
|
57 |
$corps = $this->formaterResultats($zoneTrouveeInfos);
|
51 |
$corps = $this->formaterResultats($zoneTrouveeInfos);
|
58 |
}
|
52 |
|
59 |
|
53 |
$resultat = new ResultatService();
|
60 |
$resultat = new ResultatService();
|
Line 54... |
Line 61... |
54 |
$resultat->mime = self::MIME_JSON;
|
61 |
$resultat->mime = self::MIME_JSON;
|
55 |
$resultat->corps = $corps;
|
62 |
$resultat->corps = $corps;
|
56 |
return $resultat;
|
63 |
return $resultat;
|
- |
|
64 |
}
|
- |
|
65 |
|
- |
|
66 |
private function verifierParametres() {
|
- |
|
67 |
extract($this->parametres);
|
- |
|
68 |
$messages = array();
|
- |
|
69 |
|
57 |
}
|
70 |
if(array_key_exists('masque', $this->parametres)) {
|
58 |
|
71 |
if (empty($masque)) {
|
59 |
private function verifierParametres() {
|
72 |
$messages[] = "S'il est présent le paramètre recherche ne peut pas être vide";
|
60 |
extract($this->parametres);
|
73 |
}
|
61 |
$messages = array();
|
74 |
} else {
|
62 |
if (! array_key_exists('lat', $this->parametres)) {
|
75 |
if (! array_key_exists('lat', $this->parametres)) {
|
63 |
$messages[] = "Vous devez indiquer une latitude en degré décimal à l'aide du paramètres d'url : lat";
|
76 |
$messages[] = "Vous devez indiquer une latitude en degré décimal à l'aide du paramètres d'url : lat";
|
64 |
} else if (!preg_match(self::PATTERN_LAT, $lat)) {
|
77 |
} else if (!preg_match(self::PATTERN_LAT, $lat)) {
|
65 |
$messages[] = "La valeur de latitude doit être un nombre décimal dont le séparateur décimal est un point. Ex. : 44 ou 43.03";
|
78 |
$messages[] = "La valeur de latitude doit être un nombre décimal dont le séparateur décimal est un point. Ex. : 44 ou 43.03";
|
- |
|
79 |
}
|
66 |
}
|
80 |
if (! array_key_exists('lon', $this->parametres)) {
|
67 |
if (! array_key_exists('lon', $this->parametres)) {
|
81 |
$messages[] = "Vous devez indiquer une longitude en degré décimal à l'aide du paramètres d'url : lon";
|
68 |
$messages[] = "Vous devez indiquer une longitude en degré décimal à l'aide du paramètres d'url : lon";
|
82 |
} else if (!preg_match(self::PATTERN_LON, $lon)) {
|
69 |
} else if (!preg_match(self::PATTERN_LON, $lon)) {
|
83 |
$messages[] = "La valeur de longitude doit être un nombre décimal dont le séparateur décimal est un point. Ex. : -4.03 ou 3.256";
|
70 |
$messages[] = "La valeur de longitude doit être un nombre décimal dont le séparateur décimal est un point. Ex. : -4.03 ou 3.256";
|
84 |
}
|
Line 155... |
Line 169... |
155 |
list($lang, $page) = explode(':', $infoWikipedia);
|
169 |
list($lang, $page) = explode(':', $infoWikipedia);
|
156 |
$pageEncode = rawurlencode($page);
|
170 |
$pageEncode = rawurlencode($page);
|
157 |
$urlTpl = 'https://%s.wikipedia.org/wiki/%s';
|
171 |
$urlTpl = 'https://%s.wikipedia.org/wiki/%s';
|
158 |
return sprintf($urlTpl, $lang, $pageEncode);
|
172 |
return sprintf($urlTpl, $lang, $pageEncode);
|
159 |
}
|
173 |
}
|
- |
|
174 |
|
- |
|
175 |
public function rechercherZoneGeoParNom($masque) {
|
- |
|
176 |
$masque_fmt = str_replace(array(' ', '-'), '_', $masque);
|
- |
|
177 |
|
- |
|
178 |
$champs = 'id_zone_geo, osm_id, intitule, centre_lat, centre_lng, '.
|
- |
|
179 |
'zone, niveau, code_iso_3166_1, code_iso_3166_2, code_insee, '.
|
- |
|
180 |
'nom, nom_fr, nom_en, nom_es, wikipedia';
|
- |
|
181 |
|
- |
|
182 |
$requete = "SELECT $champs FROM osm_zones_admin WHERE nom_fr LIKE ".$this->bdd->proteger($masque_fmt).' '.
|
- |
|
183 |
"ORDER BY NIVEAU DESC LIMIT 1";
|
- |
|
184 |
|
- |
|
185 |
$resultat = $this->bdd->recupererTous($requete);
|
- |
|
186 |
if (empty($resultat)) {
|
- |
|
187 |
$msgTpl = "Service '%s' : aucune zone correspondant au nom : %s .";
|
- |
|
188 |
$msg = sprintf($msgTpl, get_class($this), $masque);
|
- |
|
189 |
throw new Exception($msg, RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE);
|
- |
|
190 |
}
|
- |
|
191 |
|
- |
|
192 |
return $resultat[0];
|
- |
|
193 |
}
|
160 |
}
|
194 |
}
|
161 |
|
195 |
|