Subversion Repositories eFlore/Projets.eflore-projets

Rev

Rev 1141 | Rev 1149 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1141 Rev 1143
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