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;
|