Subversion Repositories eFlore/Projets.eflore-projets

Rev

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

Rev 1072 Rev 1141
Line 21... Line 21...
21
 * @license		CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt>
21
 * @license		CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt>
22
 * @license		GNU-GPL <http://www.gnu.org/licenses/gpl.html>
22
 * @license		GNU-GPL <http://www.gnu.org/licenses/gpl.html>
23
 */
23
 */
24
class ZoneADmin {
24
class ZoneADmin {
Line 25... Line 25...
25
 
25
 
26
	const PATTERN_LAT = '/^[0-9]+(?:[.][0-9]+|)$/';
26
	const PATTERN_LAT = '/^[-]?[0-9]+(?:[.][0-9]+|)$/';
27
	const PATTERN_LON = '/^[-]?[0-9]+(?:[.][0-9]+|)$/';
27
	const PATTERN_LON = '/^[-]?[0-9]+(?:[.][0-9]+|)$/';
Line 28... Line 28...
28
	const MIME_JSON = 'application/json';
28
	const MIME_JSON = 'application/json';
29
 
29
 
Line 30... Line 30...
30
	private $parametres = array();
30
	private $parametres = array();
31
	private $bdd = null;
31
	private $bdd = null;
32
 
32
 
-
 
33
	private $lat = null;
Line 33... Line 34...
33
	private $lat = null;
34
	private $lon = null;
34
	private $lon = null;
35
	private $zone = null;
35
	private $zone = null;
36
	private $niveaux = null;
Line 42... Line 43...
42
		$this->parametres = $parametres;
43
		$this->parametres = $parametres;
43
		$this->verifierParametres();
44
		$this->verifierParametres();
44
		$this->lat = $this->parametres['lat'];
45
		$this->lat = $this->parametres['lat'];
45
		$this->lon = $this->parametres['lon'];
46
		$this->lon = $this->parametres['lon'];
46
		$this->zone = isset($this->parametres['zone']) ? $this->parametres['zone'] : null;
47
		$this->zone = isset($this->parametres['zone']) ? $this->parametres['zone'] : null;
-
 
48
		$this->niveaux = isset($this->parametres['niveau']) ? explode(',', $this->parametres['niveau']) : null;
Line 47... Line 49...
47
 
49
 
48
		$zoneTrouveeInfos = $this->localiserPointLatLon();
50
		$zoneTrouveeInfos = $this->localiserPointLatLon();
Line 49... Line 51...
49
		$corps = $this->formaterResultats($zoneTrouveeInfos);
51
		$corps = $this->formaterResultats($zoneTrouveeInfos);
Line 58... Line 60...
58
		extract($this->parametres);
60
		extract($this->parametres);
59
		$messages = array();
61
		$messages = array();
60
		if (! array_key_exists('lat', $this->parametres)) {
62
		if (! array_key_exists('lat', $this->parametres)) {
61
			$messages[] = "Vous devez indiquer une latitude en degré décimal à l'aide du paramètres d'url : lat";
63
			$messages[] = "Vous devez indiquer une latitude en degré décimal à l'aide du paramètres d'url : lat";
62
		} else if (!preg_match(self::PATTERN_LAT, $lat)) {
64
		} else if (!preg_match(self::PATTERN_LAT, $lat)) {
63
			$messages[] = "La valeur de latitude doit être un nombre décimal positif dont le séparateur décimal est un point. Ex. : 44 ou 43.03";
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";
64
		}
66
		}
65
		if (! array_key_exists('lon', $this->parametres)) {
67
		if (! array_key_exists('lon', $this->parametres)) {
66
			$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";
67
		} else if (!preg_match(self::PATTERN_LON, $lon)) {
69
		} else if (!preg_match(self::PATTERN_LON, $lon)) {
68
			$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";
Line 129... Line 131...
129
		return $osmIdsInClause;
131
		return $osmIdsInClause;
130
	}
132
	}
Line 131... Line 133...
131
 
133
 
132
	private function construireRequeteUnion() {
134
	private function construireRequeteUnion() {
-
 
135
		$zone = isset($this->zone) ? $this->bdd->proteger($this->zone) : null;
-
 
136
		$niveaux = isset($this->niveaux) ? $this->niveaux : null;
133
		$zone = isset($this->zone) ? $this->bdd->proteger($this->zone) : null;
137
		
134
		$requeteTpl = 'SELECT osm_id, '.
138
		$requeteTpl = 'SELECT osm_id, '.
135
			"(($this->lon - centre_lng) * ($this->lon -centre_lng) + ($this->lat - centre_lat) * ($this->lat - centre_lat)) AS distance ".
139
			"(($this->lon - centre_lng) * ($this->lon -centre_lng) + ($this->lat - centre_lat) * ($this->lat - centre_lat)) AS distance ".
136
			'FROM osm_zones_admin '.
140
			'FROM osm_zones_admin '.
137
			'WHERE niveau = %s '.
141
			'WHERE niveau = %s '.
138
			(isset($zone) ? "AND zone = $zone " : '').
142
			(isset($zone) ? "AND zone = $zone " : '').
139
			'ORDER BY distance ASC '.
143
			'ORDER BY distance ASC '.
140
			"LIMIT %s ";
144
			"LIMIT %s ";
141
		$niveaux = array(2,3,4,5,6,7,8);
145
		$niveaux = isset($niveaux) ? $niveaux : array(2,3,4,5,6,7,8);
142
		$requetesAUnir = array();
146
		$requetesAUnir = array();
143
		foreach ($niveaux as $niveau) {
147
		foreach ($niveaux as $niveau) {
144
			$requetesAUnir[] = sprintf($requeteTpl, $niveau, ($niveau * 2));
148
			$requetesAUnir[] = sprintf($requeteTpl, $this->bdd->proteger($niveau), ($niveau * 2));
145
		}
149
		}
146
		$requete = '('.implode(') UNION (', $requetesAUnir).') -- '.__FILE__.' : '.__LINE__;
150
		$requete = '('.implode(') UNION (', $requetesAUnir).') -- '.__FILE__.' : '.__LINE__;
147
		return $requete;
151
		return $requete;