Subversion Repositories Sites.obs-saisons.fr

Rev

Rev 255 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
31 aurelien 1
<?php
2
 
92 aurelien 3
class OdsStation extends OdsTriple {
31 aurelien 4
 
5
	/**
6
     * Méthode appelée avec une requête de type GET.
7
     *
8
     */
9
    function getElement($param = array()) {
10
 
255 aurelien 11
    	if(isset($param[0]) && isset($param[1])) {
31 aurelien 12
    		$id_participant = $param[0];
13
    	} else {
14
    		return;
15
    	}
16
 
297 aurelien 17
		if($param[1] == "*") {
31 aurelien 18
			$info = $this->obtenirListeStationPourParticipant($id_participant);
19
		} else if(is_numeric($param[1])) {
20
			$id_station = $param[1];
21
			$info = $this->obtenirInformationsStation($id_station);
22
		}
23
 
24
        $this->envoyer($info);
25
    }
26
 
27
    /**
28
     * Méthode appelée pour ajouter un élément.
29
     */
30
    public function createElement($params) {
31
 
105 aurelien 32
    	$elements_requis = array('id_participant','station_nom', 'station_commune', 'station_lat', 'station_lon','station_milieu','station_alt');
31 aurelien 33
    	$erreurs = array();
34
 
35
    	foreach($elements_requis as $requis) {
36
    		if(!isset($params[$requis])) {
37
    			//$erreurs[$requis] = 'erreur ';
38
    		}
39
    	}
40
 
41
    	if(!empty($erreurs)) {
42
    		$this->envoyer($erreurs);
43
    	}
44
 
45
    	$id_participant = $params['id_participant'];
297 aurelien 46
    	$commune = $this->traiterParametreCommune($params);
31 aurelien 47
 
297 aurelien 48
    	// description n'est pas obligatoire, et également pour le moment inutilisé
49
    	$params['station_description'] = isset($params['station_description']) ? $params['station_description'] : '';
173 aurelien 50
 
31 aurelien 51
    	$requete_creation_station = 'INSERT INTO ods_stations '.
52
					'(os_ce_participant, os_nom, os_ce_commune, os_latitude, os_longitude, os_altitude, os_ce_environnement, os_commentaire) '.
53
					'VALUES ('.
33 aurelien 54
							$this->proteger($id_participant).','.
55
							$this->proteger($params['station_nom']).','.
194 aurelien 56
							$this->proteger($commune).','.
33 aurelien 57
							$this->proteger($params['station_lat']).','.
58
							$this->proteger($params['station_lon']).','.
59
							$this->proteger($params['station_alt']).','.
60
							$this->proteger($params['station_milieu']).','.
61
							$this->proteger($params['station_description']).')';
31 aurelien 62
 
63
		$creation_station = $this->executerRequeteSimple($requete_creation_station);
64
 
65
		if(!$creation_station) {
46 aurelien 66
    		$retour['erreurs'] = 'erreur d\'insertion';
67
    	} else {
68
    		$retour['id_nouvelle_station'] = $this->renvoyerDernierIdInsere();
31 aurelien 69
    	}
70
 
46 aurelien 71
    	$this->envoyer($retour);
31 aurelien 72
 
73
    }
74
 
75
    /**
76
     * Méthode appelée pour mettre à jour un élément
77
     */
78
    public function updateElement($uid, $params)    {
79
 
105 aurelien 80
	    $elements_requis = array('id_participant','station_nom', 'station_commune', 'station_lat', 'station_lon','station_milieu','station_alt');
81
    	$erreurs = array();
82
 
83
    	foreach($elements_requis as $requis) {
84
    		if(!isset($params[$requis])) {
85
    			$erreurs[$requis] = 'erreur ';
86
    		}
31 aurelien 87
    	}
88
 
105 aurelien 89
    	if(!empty($erreurs)) {
90
    		$this->envoyer($erreurs);
91
    	}
92
 
93
    	$id_participant = $params['id_participant'];
94
 
95
    	if(!isset($uid[0])) {
96
    		return;
31 aurelien 97
    	} else {
297 aurelien 98
    		$id_station = $uid[0];
31 aurelien 99
    	}
100
 
297 aurelien 101
    	$commune = $this->traiterParametreCommune($params);
173 aurelien 102
 
31 aurelien 103
        $requete_modification_station = 'UPDATE ods_stations '.
104
			'SET '.
33 aurelien 105
			'os_nom ='.$this->proteger($params['station_nom']).','.
194 aurelien 106
			'os_ce_commune ='.$this->proteger($commune).','.
33 aurelien 107
			'os_latitude ='.$this->proteger($params['station_lat']).','.
108
			'os_longitude ='.$this->proteger($params['station_lon']).','.
109
			'os_altitude ='.$this->proteger($params['station_alt']).','.
110
			'os_ce_environnement ='.$this->proteger($params['station_milieu']).','.
111
			'os_commentaire ='.$this->proteger($params['station_description']).' '.
105 aurelien 112
			'WHERE os_ce_participant = '.$this->proteger($id_participant).' '.
33 aurelien 113
        	'AND os_id_station = '.$this->proteger($id_station);
31 aurelien 114
 
105 aurelien 115
		$modification_station = $this->executerRequeteSimple($requete_modification_station);
31 aurelien 116
 
105 aurelien 117
		$retour = array();
118
 
31 aurelien 119
		if(!$modification_station) {
105 aurelien 120
    		$retour['erreurs'] = 'Erreur lors de la modification de la station';
121
    	} else {
122
    		$retour['reponse'] = 'OK';
31 aurelien 123
    	}
105 aurelien 124
 
125
    	$this->envoyer($retour);
31 aurelien 126
    }
297 aurelien 127
 
128
    private function traiterParametreCommune($params) {
129
    	// Si on a pas de code INSEE on mettra la valeur brute que
130
    	// l'utilisateur a saisi afin de ne pas perdre d'infos
131
    	$commune = $params['station_commune'];
132
    	// Si un code INSEE semble présent
133
    	if(isset($params['station_code_insee']) && trim($params['station_code_insee']) != '') {
134
    		// Si c'est le cas affectation directe
135
    		if($this->estUnCodeInsee($params)) {
136
    			$commune = $params['station_code_insee'];
137
    			// Cas du code saisi sans le 0 de gauche
138
    			$commune = (strlen($commune) == 4) ? '0'.$commune : $commune;
139
    		} elseif($this->estUnCommunePlusDepartement($params)) {
140
    			// Cas du département sur un ou deux chiffres + une commune
141
    			// tentative de retrouve le code INSEE complet
142
    			$params['station_code_insee'] = (strlen($params['station_code_insee']) == 1) ? '0'.$params['station_code_insee'] : $params['station_code_insee'];
143
    			$infos = $this->obtenirInformationsCommuneParNomEtDepartement($params['station_commune'], $params['station_code_insee']);
144
    			$commune = ($infos != null) ? $infos['oc_code_insee'] : $commune;
145
    			//TODO: quoi faire si on a 3 chiffres par exemple ou plus de 5 chiffres ?
146
    		}
147
    	}
148
 
149
    	return $commune;
150
    }
151
 
152
    private function estUnCodeInsee($params) {
153
    	return  is_numeric($params['station_code_insee']) &&
154
    			(strlen($params['station_code_insee']) == 5 ||
155
    			strlen($params['station_code_insee']) == 4);
156
    }
157
 
158
    private function estUnCommunePlusDepartement($params) {
159
    	return  is_numeric($params['station_code_insee']) &&
160
    			(strlen($params['station_code_insee']) == 2 ||
161
    			strlen($params['station_code_insee']) == 1) &&
162
    			isset($params['station_commune']) &&
163
    			trim($params['station_commune']) != "";
164
    }
31 aurelien 165
 
166
    /**
167
     * Méthode appelée pour supprimer un élément
168
     */
169
    public function deleteElement($uid) {
210 aurelien 170
 
171
    	if(isset($uid[0])) {
31 aurelien 172
    		$id_participant = $uid[0];
173
    	} else {
174
    		return;
175
    	}
176
 
210 aurelien 177
    	if(isset($uid[1])) {
31 aurelien 178
    		$id_station = $uid[1];
179
    	} else {
180
    		return;
181
    	}
210 aurelien 182
 
31 aurelien 183
    	$requete_suppression_station = 'DELETE FROM ods_stations '.
210 aurelien 184
    	'WHERE os_ce_participant = '.$this->proteger($id_participant).' '.
33 aurelien 185
        	'AND os_id_station = '.$this->proteger($id_station);
210 aurelien 186
 
31 aurelien 187
    	$suppression_station = $this->executerRequeteSimple($requete_suppression_station);
188
 
189
    	if(!$suppression_station) {
190
    		// TODO: comment gère t'on les erreurs ?
191
    	}
192
 
193
    	$this->envoyer();
194
 
195
    }
196
 
197
	private function obtenirListeStationPourParticipant($id_participant) {
198
 
33 aurelien 199
    	$requete_liste_station = 'SELECT * FROM ods_stations WHERE os_ce_participant = '.$this->proteger($id_participant);
31 aurelien 200
 
201
    	$liste_station = $this->executerRequete($requete_liste_station);
202
 
203
    	$liste_station_formatees = array();
204
 
205
    	foreach($liste_station as $indice => $station) {
206
 
207
    		$station_champs_formates = $this->formaterChampsStationPourEnvoi($station);
208
		    $liste_station_formatees[$station['os_id_station']] = $station_champs_formates;
209
    	}
210
 
211
    	return $liste_station_formatees;
212
	}
213
 
214
    private function obtenirInformationsStation($id_station) {
215
 
33 aurelien 216
    	$requete_infos_station = 'SELECT * FROM ods_stations WHERE os_id_station = '.$this->proteger($id_station);
31 aurelien 217
 
218
    	$infos_station = $this->executerRequete($requete_infos_station);
219
 
220
    	$infos_station_formatees = array();
221
 
222
    	if(!empty($infos_station)) {
223
    		$infos_station = $infos_station[0];
224
    		$infos_station_formatees = $this->formaterChampsStationPourEnvoi($infos_station);
225
    	}
226
 
227
    	return $infos_station_formatees;
228
    }
229
 
230
    private function formaterChampsStationPourEnvoi($station) {
231
 
173 aurelien 232
    	if(is_numeric($station['os_ce_commune'])) {
233
    		$commune = $this->obtenirInformationsCommuneParCodeInsee($station['os_ce_commune']);
234
    	} else {
235
    		$commune = $station['os_ce_commune'];
236
    	}
237
 
31 aurelien 238
    	$station_champs_formates = array(
239
		    	'id' => $station['os_id_station'],
240
		    	'nom' => $station['os_nom'],
173 aurelien 241
				'code_insee' => $station['os_ce_commune'],
242
    			'commune' => $commune,
92 aurelien 243
				'id_milieu' => $station['os_ce_environnement'],
244
    			'milieu' => $this->obtenirInformationsMilieuParId($station['os_ce_environnement']),
31 aurelien 245
				'latitude' => $station['os_latitude'],
246
				'longitude' => $station['os_longitude'],
247
    			'altitude' => $station['os_altitude'],
248
				'description' => $station['os_commentaire']
249
		    );
250
 
251
		return $station_champs_formates;
252
    }
253
 
254
	private function obtenirInformationsCommuneParCodeInsee($code_insee_commune) {
255
 
173 aurelien 256
    	$requete_infos_commune = 'SELECT * FROM ods_communes WHERE oc_code_insee = '.$this->proteger($code_insee_commune);
257
    	$infos_commune = $this->executerRequete($requete_infos_commune);
31 aurelien 258
 
173 aurelien 259
		return $infos_commune[0]['oc_nom'];
31 aurelien 260
    }
261
 
297 aurelien 262
    private function obtenirInformationsCommuneParNomEtDepartement($nom, $departement) {
263
    	// un remplacement par des underscores permet de s'affranchir des problèmes de saisie
264
    	// des communes avec des tirets espaces etc...
265
    	$nom = str_replace(array("'","-",'"',' ') ,'_', $nom);
266
    	$requete_infos_commune = 'SELECT oc_nom, oc_code_insee FROM ods_communes '.
267
    							 'WHERE oc_code_insee LIKE '.$this->proteger($departement.'%').' AND '.
268
    							 'oc_nom LIKE '.$this->proteger($nom);
269
 
270
    	$infos_commune = $this->executerRequete($requete_infos_commune);
271
    	$retour = null;
272
    	if($infos_commune && isset($infos_commune[0])) {
273
    		$retour = $infos_commune[0];
274
    	}
275
 
276
    	return $retour;
277
    }
278
 
279
 
92 aurelien 280
    private function obtenirInformationsMilieuParId($id_milieu) {
31 aurelien 281
 
92 aurelien 282
    	$informations_milieu = $this->obtenirValeurTripleParId($id_milieu);
31 aurelien 283
    	return $informations_milieu;
284
 
285
    }
286
}
287
?>