Subversion Repositories Sites.obs-saisons.fr

Rev

Rev 297 | 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);
314 aurelien 102
    	$params['station_description'] = empty($params['station_description']) ? '' : $params['station_description'];
173 aurelien 103
 
31 aurelien 104
        $requete_modification_station = 'UPDATE ods_stations '.
105
			'SET '.
33 aurelien 106
			'os_nom ='.$this->proteger($params['station_nom']).','.
194 aurelien 107
			'os_ce_commune ='.$this->proteger($commune).','.
33 aurelien 108
			'os_latitude ='.$this->proteger($params['station_lat']).','.
109
			'os_longitude ='.$this->proteger($params['station_lon']).','.
110
			'os_altitude ='.$this->proteger($params['station_alt']).','.
111
			'os_ce_environnement ='.$this->proteger($params['station_milieu']).','.
112
			'os_commentaire ='.$this->proteger($params['station_description']).' '.
105 aurelien 113
			'WHERE os_ce_participant = '.$this->proteger($id_participant).' '.
33 aurelien 114
        	'AND os_id_station = '.$this->proteger($id_station);
31 aurelien 115
 
105 aurelien 116
		$modification_station = $this->executerRequeteSimple($requete_modification_station);
31 aurelien 117
 
105 aurelien 118
		$retour = array();
119
 
31 aurelien 120
		if(!$modification_station) {
105 aurelien 121
    		$retour['erreurs'] = 'Erreur lors de la modification de la station';
122
    	} else {
123
    		$retour['reponse'] = 'OK';
31 aurelien 124
    	}
105 aurelien 125
 
126
    	$this->envoyer($retour);
31 aurelien 127
    }
297 aurelien 128
 
129
    private function traiterParametreCommune($params) {
130
    	// Si on a pas de code INSEE on mettra la valeur brute que
131
    	// l'utilisateur a saisi afin de ne pas perdre d'infos
132
    	$commune = $params['station_commune'];
133
    	// Si un code INSEE semble présent
134
    	if(isset($params['station_code_insee']) && trim($params['station_code_insee']) != '') {
135
    		// Si c'est le cas affectation directe
136
    		if($this->estUnCodeInsee($params)) {
137
    			$commune = $params['station_code_insee'];
138
    			// Cas du code saisi sans le 0 de gauche
139
    			$commune = (strlen($commune) == 4) ? '0'.$commune : $commune;
140
    		} elseif($this->estUnCommunePlusDepartement($params)) {
141
    			// Cas du département sur un ou deux chiffres + une commune
142
    			// tentative de retrouve le code INSEE complet
143
    			$params['station_code_insee'] = (strlen($params['station_code_insee']) == 1) ? '0'.$params['station_code_insee'] : $params['station_code_insee'];
144
    			$infos = $this->obtenirInformationsCommuneParNomEtDepartement($params['station_commune'], $params['station_code_insee']);
145
    			$commune = ($infos != null) ? $infos['oc_code_insee'] : $commune;
146
    			//TODO: quoi faire si on a 3 chiffres par exemple ou plus de 5 chiffres ?
147
    		}
148
    	}
149
 
150
    	return $commune;
151
    }
152
 
153
    private function estUnCodeInsee($params) {
154
    	return  is_numeric($params['station_code_insee']) &&
155
    			(strlen($params['station_code_insee']) == 5 ||
156
    			strlen($params['station_code_insee']) == 4);
157
    }
158
 
159
    private function estUnCommunePlusDepartement($params) {
160
    	return  is_numeric($params['station_code_insee']) &&
161
    			(strlen($params['station_code_insee']) == 2 ||
162
    			strlen($params['station_code_insee']) == 1) &&
163
    			isset($params['station_commune']) &&
164
    			trim($params['station_commune']) != "";
165
    }
31 aurelien 166
 
167
    /**
168
     * Méthode appelée pour supprimer un élément
169
     */
170
    public function deleteElement($uid) {
210 aurelien 171
 
172
    	if(isset($uid[0])) {
31 aurelien 173
    		$id_participant = $uid[0];
174
    	} else {
175
    		return;
176
    	}
177
 
210 aurelien 178
    	if(isset($uid[1])) {
31 aurelien 179
    		$id_station = $uid[1];
180
    	} else {
181
    		return;
182
    	}
210 aurelien 183
 
31 aurelien 184
    	$requete_suppression_station = 'DELETE FROM ods_stations '.
210 aurelien 185
    	'WHERE os_ce_participant = '.$this->proteger($id_participant).' '.
33 aurelien 186
        	'AND os_id_station = '.$this->proteger($id_station);
210 aurelien 187
 
31 aurelien 188
    	$suppression_station = $this->executerRequeteSimple($requete_suppression_station);
189
 
190
    	if(!$suppression_station) {
191
    		// TODO: comment gère t'on les erreurs ?
192
    	}
193
 
194
    	$this->envoyer();
195
 
196
    }
197
 
198
	private function obtenirListeStationPourParticipant($id_participant) {
199
 
33 aurelien 200
    	$requete_liste_station = 'SELECT * FROM ods_stations WHERE os_ce_participant = '.$this->proteger($id_participant);
31 aurelien 201
 
202
    	$liste_station = $this->executerRequete($requete_liste_station);
203
 
204
    	$liste_station_formatees = array();
205
 
206
    	foreach($liste_station as $indice => $station) {
207
 
208
    		$station_champs_formates = $this->formaterChampsStationPourEnvoi($station);
209
		    $liste_station_formatees[$station['os_id_station']] = $station_champs_formates;
210
    	}
211
 
212
    	return $liste_station_formatees;
213
	}
214
 
215
    private function obtenirInformationsStation($id_station) {
216
 
33 aurelien 217
    	$requete_infos_station = 'SELECT * FROM ods_stations WHERE os_id_station = '.$this->proteger($id_station);
31 aurelien 218
 
219
    	$infos_station = $this->executerRequete($requete_infos_station);
220
 
221
    	$infos_station_formatees = array();
222
 
223
    	if(!empty($infos_station)) {
224
    		$infos_station = $infos_station[0];
225
    		$infos_station_formatees = $this->formaterChampsStationPourEnvoi($infos_station);
226
    	}
227
 
228
    	return $infos_station_formatees;
229
    }
230
 
231
    private function formaterChampsStationPourEnvoi($station) {
232
 
173 aurelien 233
    	if(is_numeric($station['os_ce_commune'])) {
234
    		$commune = $this->obtenirInformationsCommuneParCodeInsee($station['os_ce_commune']);
235
    	} else {
236
    		$commune = $station['os_ce_commune'];
237
    	}
238
 
31 aurelien 239
    	$station_champs_formates = array(
240
		    	'id' => $station['os_id_station'],
241
		    	'nom' => $station['os_nom'],
173 aurelien 242
				'code_insee' => $station['os_ce_commune'],
243
    			'commune' => $commune,
92 aurelien 244
				'id_milieu' => $station['os_ce_environnement'],
245
    			'milieu' => $this->obtenirInformationsMilieuParId($station['os_ce_environnement']),
31 aurelien 246
				'latitude' => $station['os_latitude'],
247
				'longitude' => $station['os_longitude'],
248
    			'altitude' => $station['os_altitude'],
249
				'description' => $station['os_commentaire']
250
		    );
251
 
252
		return $station_champs_formates;
253
    }
254
 
255
	private function obtenirInformationsCommuneParCodeInsee($code_insee_commune) {
256
 
173 aurelien 257
    	$requete_infos_commune = 'SELECT * FROM ods_communes WHERE oc_code_insee = '.$this->proteger($code_insee_commune);
258
    	$infos_commune = $this->executerRequete($requete_infos_commune);
31 aurelien 259
 
173 aurelien 260
		return $infos_commune[0]['oc_nom'];
31 aurelien 261
    }
262
 
297 aurelien 263
    private function obtenirInformationsCommuneParNomEtDepartement($nom, $departement) {
264
    	// un remplacement par des underscores permet de s'affranchir des problèmes de saisie
265
    	// des communes avec des tirets espaces etc...
266
    	$nom = str_replace(array("'","-",'"',' ') ,'_', $nom);
267
    	$requete_infos_commune = 'SELECT oc_nom, oc_code_insee FROM ods_communes '.
268
    							 'WHERE oc_code_insee LIKE '.$this->proteger($departement.'%').' AND '.
269
    							 'oc_nom LIKE '.$this->proteger($nom);
270
 
271
    	$infos_commune = $this->executerRequete($requete_infos_commune);
272
    	$retour = null;
273
    	if($infos_commune && isset($infos_commune[0])) {
274
    		$retour = $infos_commune[0];
275
    	}
276
 
277
    	return $retour;
278
    }
279
 
280
 
92 aurelien 281
    private function obtenirInformationsMilieuParId($id_milieu) {
31 aurelien 282
 
92 aurelien 283
    	$informations_milieu = $this->obtenirValeurTripleParId($id_milieu);
31 aurelien 284
    	return $informations_milieu;
285
 
286
    }
287
}
288
?>