Subversion Repositories Sites.obs-saisons.fr

Rev

Rev 227 | Rev 246 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 227 Rev 235
1
<?php
1
<?php
2
 
2
 
3
class OdsExport extends OdsTriple {
3
class OdsExport extends OdsTriple {
4
	
4
	
5
	const PREFIXE = 'get';
5
	const PREFIXE = 'get';
6
	const ABBR_LISTE_EVENEMENTS = 'evenement';
6
	const ABBR_LISTE_EVENEMENTS = 'evenement';
7
	const ABBR_LISTE_ESPECES = 'espece';
7
	const ABBR_LISTE_ESPECES = 'espece';
8
	
8
	
9
	/**
9
	/**
10
 	* Méthodes d'extractions d'informations
10
 	* Méthodes d'extractions d'informations
11
 	*/
11
 	*/
12
	
12
	
13
	/**
13
	/**
14
     * Méthode appelée avec une requête de type GET.
14
     * Méthode appelée avec une requête de type GET.
15
     *
15
     *
16
     */
16
     */
17
    function getElement($param = array()) {
17
    function getElement($param = array()) {
18
    	
18
    	
19
    	$type = $param[0];
19
    	$type = $param[0];
20
    	    	
20
    	    	
21
        if ($type == '*' || is_numeric($type)) {
21
        if ($type == '*' || is_numeric($type)) {
22
            $info = $this->getElementParDefaut($param);
22
            $info = $this->getElementParDefaut($param);
23
        } else {
23
        } else {
24
            $methode = self::PREFIXE.$type;
24
            $methode = self::PREFIXE.$type;
25
            if (method_exists($this, $methode)) {
25
            if (method_exists($this, $methode)) {
26
                array_shift($param);
26
                array_shift($param);
27
                $info = $this->$methode($param);
27
                $info = $this->$methode($param);
28
            } else {
28
            } else {
29
                $this->messages[] = "Le type d'information demandé '$type' n'est pas disponible.";
29
                $this->messages[] = "Le type d'information demandé '$type' n'est pas disponible.";
30
            }
30
            }
31
        }
31
        }
32
       
-
 
33
        // Envoi sur la sortie standard
32
       
34
        $this->envoyer($info);
33
        $this->envoyer($info);
35
    }
34
    }
36
	
35
	
37
	public function getExportObservation($start = null,$limit = null, $order_by = 'oo_date') {
36
	public function getExportObservation($start = null,$limit = null, $order_by = 'oo_date') {
38
						
37
						
39
		$requete_selection_observations = 'SELECT * FROM ods_observations '.
38
		$requete_selection_observations = 'SELECT * FROM ods_observations '.
40
									' LEFT JOIN ods_individus '. 
39
									' LEFT JOIN ods_individus '. 
41
									' ON oi_id_individu = oo_ce_individu'.
40
									' ON oi_id_individu = oo_ce_individu'.
42
									' LEFT JOIN ods_stations '.
41
									' LEFT JOIN ods_stations '.
43
									' ON oi_ce_station = os_id_station ';
42
									' ON oi_ce_station = os_id_station ';
44
		
43
		
45
		$requete_selection_observations .= $this->construireConditionRequete();
44
		$requete_selection_observations .= $this->construireConditionRequete();
46
		$requete_selection_observations .= ' ORDER BY oo_date DESC';
45
		$requete_selection_observations .= ' ORDER BY oo_date DESC';
47
		
46
		
48
		$res_selection_observations = $this->executerRequete($requete_selection_observations);
47
		$res_selection_observations = $this->executerRequete($requete_selection_observations);
49
				
48
				
50
		return $res_selection_observations;
49
		return $res_selection_observations;
51
	}
50
	}
52
	
51
	
53
	public function construireConditionRequete() {
52
	public function construireConditionRequete() {
54
		
53
		
55
		$condition = ' WHERE oo_date != "0000-00-00" AND ';
54
		$condition = ' WHERE oo_date != "0000-00-00" AND DAY(oo_date) != "00" AND ';
56
		
55
		
57
		foreach($_GET as $cle => $valeur) {
56
		foreach($_GET as $cle => $valeur) {
58
			
57
			
59
			switch($cle) {
58
			switch($cle) {
60
			
59
			
61
				case 'type_espece':
60
				case 'type_espece':
62
					$condition .= 'oi_ce_espece IN (SELECT oe_id_espece FROM ods_especes WHERE oe_ce_type = '.$this->proteger($valeur).')';
61
					$condition .= 'oi_ce_espece IN (SELECT oe_id_espece FROM ods_especes WHERE oe_ce_type = '.$this->proteger($valeur).')';
63
				break;
62
				break;
64
				
63
				
65
				case 'annee':
64
				case 'annee':
-
 
65
					if($this->anneesMultiplesDemandees($valeur)) {
-
 
66
						$valeur = rtrim($valeur,',');
-
 
67
						$condition .= 'YEAR(oo_date) IN ('.$valeur.')';						
-
 
68
					} else {
-
 
69
						$condition .= 'YEAR(oo_date) ';
66
					$condition .= 'YEAR(oo_date) = '.$this->proteger($valeur);
70
						$condition .= ' = '.$this->proteger($valeur);
-
 
71
					}
67
				break;
72
				break;
68
				
73
				
69
				case 'mois':
74
				case 'mois':
70
					$condition .= 'MONTH(oo_date) <= '.$this->proteger($valeur);
75
					$condition .= 'MONTH(oo_date) <= '.$this->proteger($valeur);
71
				break;
76
				break;
72
				
77
				
73
				case 'espece':
78
				case 'espece':
74
					$condition .= 'oi_ce_espece = '.$this->proteger($valeur);
79
					$condition .= 'oi_ce_espece IN ('.$valeur.') ';
75
				break;
80
				break;
76
				
81
				
77
				case 'evenement':
82
				case 'evenement':
78
					$condition .= 'oo_ce_evenement = '.$this->proteger($valeur);
83
					$condition .= 'oo_ce_evenement = '.$this->proteger($valeur);
79
				break;
84
				break;
80
				
85
				
81
				case 'departement':
86
				case 'departement':
82
					$condition .= 'os_ce_commune LIKE "'.$valeur.'%" ';
87
					$condition .= 'os_ce_commune LIKE "'.$valeur.'%" ';
83
				break;
88
				break;
84
				
89
				
85
				case 'utilisateur':
90
				case 'utilisateur':
86
					$condition .= 'oo_ce_participant = '.$this->proteger($valeur);	
91
					$condition .= 'oo_ce_participant = '.$this->proteger($valeur);	
87
				break;
92
				break;
88
				
93
				
89
				default:
94
				default:
90
				break;
95
				break;
91
			}
96
			}
92
			
97
			
93
			$condition .= ' AND ';
98
			$condition .= ' AND ';
94
		}
99
		}
95
		
100
		
96
		$condition = rtrim($condition,'AND ');
101
		$condition = rtrim($condition,'AND ');
97
		
102
		
98
		$id_demo = $this->config['appli']['id_participant_demo'];
103
		$id_demo = $this->config['appli']['id_participant_demo'];
99
		$id_admin = $this->config['appli']['id_participant_admin'];
104
		$id_admin = $this->config['appli']['id_participant_admin'];
100
		
105
		
101
		$condition .= ' AND oo_ce_participant != '.$id_demo;
106
		$condition .= ' AND oo_ce_participant != '.$id_demo;
102
		$condition .= ' AND oo_ce_participant != '.$id_admin;
107
		$condition .= ' AND oo_ce_participant != '.$id_admin;
103
		
108
		
104
		return $condition;
109
		return $condition;
105
	}
110
	}
-
 
111
	
-
 
112
	private function anneesMultiplesDemandees($annee) {
-
 
113
		// un ensemble d'identifiants est une suite d'identifiants séparés par des virgules
-
 
114
		// sans virgule terminale
-
 
115
		$reg_exp = "/^(([0-9])+,)*([0-9])+$/";
-
 
116
		return preg_match($reg_exp, $annee);
-
 
117
	}
106
	
118
	
107
	public function getExportObservationPlat() {
119
	public function getExportObservationPlat() {
108
				
120
				
109
		$donnees = $this->getExportObservation();
121
		$donnees = $this->getExportObservation();
110
		$donnees_formatees = $this->formaterPourExportCSV($donnees);		
122
		$donnees_formatees = $this->formaterPourExportCSV($donnees);	
111
			
123
			
112
		return $donnees_formatees ;
124
		return $donnees_formatees ;
113
	}
125
	}
114
	
126
	
115
	public function getExportObservationJson() {
127
	public function getExportObservationJson() {
116
		
128
		
117
		$donnees = $this->getExportObservation();
129
		$donnees = $this->getExportObservation();
118
		$donnees_formatees = $this->formaterPourExportJson($donnees);
130
		$donnees_formatees = $this->formaterPourExportJson($donnees);
119
		
131
		
120
		return $donnees_formatees;
132
		return $donnees_formatees;
121
	}
133
	}
122
	
134
	
123
	public function formaterPourExportJson($tableau_observations_infos) {
135
	public function formaterPourExportJson($tableau_observations_infos) {
124
		
136
		
125
		$gestionnaire_especes = new OdsEspece($this->config);
137
		$gestionnaire_especes = new OdsEspece($this->config);
126
		$gestionnaire_communes = new OdsCommune($this->config);
138
		$gestionnaire_communes = new OdsCommune($this->config);
127
				
139
				
128
		$especes = $gestionnaire_especes->getToutesEspeces();
140
		$especes = $gestionnaire_especes->getToutesEspeces();
129
		$evenements = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_EVENEMENTS);
141
		$evenements = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_EVENEMENTS);
130
		
142
		
131
		$resultats_formates = array();
143
		$resultats_formates = array();
132
		
144
		
133
		foreach($tableau_observations_infos as $observations_infos) {
145
		foreach($tableau_observations_infos as $observations_infos) {
134
		
146
		
135
			$id_espece = $observations_infos['oi_ce_espece'];
147
			$id_espece = $observations_infos['oi_ce_espece'];
136
			$nom_espece =  $especes[$id_espece]['nom_scientifique'];
148
			$nom_espece =  $especes[$id_espece]['nom_scientifique'];
137
				
149
				
138
			$id_evenement = $observations_infos['oo_ce_evenement'];
150
			$id_evenement = $observations_infos['oo_ce_evenement'];
139
			$chaine_evenement = $evenements[$id_evenement]['ot_cle'];
151
			$chaine_evenement = $evenements[$id_evenement]['ot_cle'];
140
				
152
				
141
			$infos_evenement = $this->renvoyerInformationStadeAPartirChaineTriple($chaine_evenement);
153
			$infos_evenement = $this->renvoyerInformationStadeAPartirChaineTriple($chaine_evenement);
142
				
154
				
143
			$date_observation_formatee = date($this->config['appli']['format_date'], strtotime($observations_infos['oo_date']));
155
			$date_observation_formatee = date($this->config['appli']['format_date'], strtotime($observations_infos['oo_date']));
144
			
156
			
145
			$id_observation = $observations_infos['oo_id_observation'];
157
			$id_observation = $observations_infos['oo_id_observation'];
146
			$infos_formatees = array(
158
			$infos_formatees = array(
147
				'date' => $date_observation_formatee,
159
				'date' => $date_observation_formatee,
148
				'evenenement' => $infos_evenement['nom'],
160
				'evenenement' => $infos_evenement['nom'],
149
				'code_bbch' => $infos_evenement['numero'],
161
				'code_bbch' => $infos_evenement['numero'],
150
				'nom_scientifique' => $nom_espece,
162
				'nom_scientifique' => $nom_espece,
-
 
163
				'id_espece' => $id_espece,
-
 
164
				'participant' => $observations_infos['os_ce_participant']
151
			);
165
			);
152
			
166
			
153
			$id_station = $observations_infos['oi_ce_station'];
167
			$id_station = $observations_infos['oi_ce_station'];
154
			
168
			
155
			if(!isset($resultats_formates[$id_station])) {
169
			if(!isset($resultats_formates[$id_station])) {
156
				$resultats_formates[$id_station]['station'] = $observations_infos['os_nom'];
170
				$resultats_formates[$id_station]['station'] = $observations_infos['os_nom'];
157
				$resultats_formates[$id_station]['code_commune'] = $observations_infos['os_ce_commune'];
171
				$resultats_formates[$id_station]['code_commune'] = $observations_infos['os_ce_commune'];
158
				//$resultats_formates[$id_station]['nom_commune'] = $gestionnaire_communes->obtenirNomCommuneParCodeInsee($observations_infos['os_ce_commune']);
172
				//$resultats_formates[$id_station]['nom_commune'] = $gestionnaire_communes->obtenirNomCommuneParCodeInsee($observations_infos['os_ce_commune']);
159
				$resultats_formates[$id_station]['latitude'] = $observations_infos['os_latitude'];
173
				$resultats_formates[$id_station]['latitude'] = $observations_infos['os_latitude'];
160
				$resultats_formates[$id_station]['longitude'] = $observations_infos['os_longitude'];
174
				$resultats_formates[$id_station]['longitude'] = $observations_infos['os_longitude'];
161
				$resultats_formates[$id_station]['altitude'] = $observations_infos['os_altitude'];
175
				$resultats_formates[$id_station]['altitude'] = $observations_infos['os_altitude'];
162
				$resultats_formates[$id_station]['milieu'] = $observations_infos['os_milieu'];
176
				$resultats_formates[$id_station]['milieu'] = $observations_infos['os_milieu'];
163
				$resultats_formates[$id_station]['participant'] = $observations_infos['os_ce_participant'];
177
				$resultats_formates[$id_station]['participant'] = $observations_infos['os_ce_participant'];
164
			}
178
			}
165
			
179
			
166
			$resultats_formates[$id_station]['obs'][$id_observation] = $infos_formatees;
180
			$resultats_formates[$id_station]['obs'][$id_observation] = $infos_formatees;
167
		}
181
		}
168
		
182
		
169
		return $resultats_formates;
183
		return $resultats_formates;
170
	}
184
	}
171
	
185
	
172
	public function getFichierExportObservationCsv() {
186
	public function getFichierExportObservationCsv() {
173
				
187
				
174
		$donnees = $this->getExportObservation();
188
		$donnees = $this->getExportObservation();
175
		$donnees_formatees = $this->formaterPourExportCSV($donnees);		
189
		$donnees_formatees = $this->formaterPourExportCSV($donnees);		
176
		$chaine_csv = $this->convertirTableauAssocVersCSV($donnees_formatees);
190
		$chaine_csv = $this->convertirTableauAssocVersCSV($donnees_formatees);
177
			
191
			
178
		$this->envoyerFichier($chaine_csv);
192
		$this->envoyerFichier($chaine_csv);
179
	}
193
	}
180
	
194
	
181
	public function formaterPourExportCSV($tableau_observations_infos) {
195
	public function formaterPourExportCSV($tableau_observations_infos) {
182
		
196
		
183
		$gestionnaire_especes = new OdsEspece($this->config);
197
		$gestionnaire_especes = new OdsEspece($this->config);
184
		$gestionnaire_communes = new OdsCommune($this->config);
198
		$gestionnaire_communes = new OdsCommune($this->config);
185
		$gestionnaire_utilisateurs = new OdsUtilisateur($this->config);
199
		$gestionnaire_utilisateurs = new OdsUtilisateur($this->config);
186
				
200
				
187
		$especes = $gestionnaire_especes->getToutesEspeces();
201
		$especes = $gestionnaire_especes->getToutesEspeces();
188
		$evenements = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_EVENEMENTS);
202
		$evenements = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_EVENEMENTS);
189
		
203
		
190
		$codes_insee_communes = array();
204
		$codes_insee_communes = array();
191
		
205
		
192
		$resultats_formates = array();
206
		$resultats_formates = array();
193
		
207
		
194
		foreach($tableau_observations_infos as $observations_infos) {
208
		foreach($tableau_observations_infos as $observations_infos) {
195
		
209
		
196
			$id_espece = $observations_infos['oi_ce_espece'];
210
			$id_espece = $observations_infos['oi_ce_espece'];
197
			$nom_espece =  $especes[$id_espece]['nom_scientifique'];
211
			$nom_espece =  $especes[$id_espece]['nom_scientifique'];
198
				
212
				
199
			$id_evenement = $observations_infos['oo_ce_evenement'];
213
			$id_evenement = $observations_infos['oo_ce_evenement'];
200
			$chaine_evenement = $evenements[$id_evenement]['ot_cle'];
214
			$chaine_evenement = $evenements[$id_evenement]['ot_cle'];
201
				
215
				
202
			$infos_evenement = $this->renvoyerInformationStadeAPartirChaineTriple($chaine_evenement);
216
			$infos_evenement = $this->renvoyerInformationStadeAPartirChaineTriple($chaine_evenement);
203
				
217
				
204
			$date_observation_formatee = date($this->config['appli']['format_date'], strtotime($observations_infos['oo_date']));
218
			$date_observation_formatee = date($this->config['appli']['format_date'], strtotime($observations_infos['oo_date']));
205
			
219
			
206
			$id_observation = $observations_infos['oo_id_observation'];
220
			$id_observation = $observations_infos['oo_id_observation'];
207
			
221
			
208
			$infos_formatees = array(
222
			$infos_formatees = array(
209
				'id_observation' => $id_observation,
223
				'id_observation' => $id_observation,
210
				'date' => $date_observation_formatee,
224
				'date' => $date_observation_formatee,
211
				'evenenement' => $infos_evenement['nom'],
225
				'evenenement' => $infos_evenement['nom'],
212
				'code_bbch' => $infos_evenement['numero'],
226
				'code_bbch' => $infos_evenement['numero'],
213
				'nom_scientifique' => $nom_espece,
227
				'nom_scientifique' => $nom_espece,
214
				'station' => $observations_infos['os_nom'],
228
				'station' => $observations_infos['os_nom'],
215
				'code_commune' => $observations_infos['os_ce_commune'],
229
				'code_commune' => $observations_infos['os_ce_commune'],
216
				'nom_commune' => '',
230
				'nom_commune' => '',
217
				'latitude' => $observations_infos['os_latitude'],
231
				'latitude' => $observations_infos['os_latitude'],
218
				'longitude' => $observations_infos['os_longitude'],
232
				'longitude' => $observations_infos['os_longitude'],
219
				'altitude' => $observations_infos['os_altitude'],
233
				'altitude' => $observations_infos['os_altitude'],
220
				'milieu' => $observations_infos['os_milieu'],
234
				'milieu' => $observations_infos['os_milieu'],
221
				'id_participant' => $observations_infos['os_ce_participant'],
235
				'id_participant' => $observations_infos['os_ce_participant'],
222
				'pseudo_participant' => '',
236
				'pseudo_participant' => '',
223
				'mail_participant' => ''
237
				'mail_participant' => ''
224
			);
238
			);
225
			
239
			
226
			$resultats_formates[] = $infos_formatees;
240
			$resultats_formates[] = $infos_formatees;
227
			
241
			
228
			if(is_numeric($observations_infos['os_ce_commune'])) {
242
			if(is_numeric($observations_infos['os_ce_commune'])) {
229
				$codes_insee_communes[] = $observations_infos['os_ce_commune'];
243
				$codes_insee_communes[] = $observations_infos['os_ce_commune'];
230
			}
244
			}
231
		}
245
		}
232
		
246
		
233
		$correspondance_codes_insee_noms = $gestionnaire_communes->obtenirTableauNomsCommunesParTableauCodesInsee($codes_insee_communes);
247
		$correspondance_codes_insee_noms = $gestionnaire_communes->obtenirTableauNomsCommunesParTableauCodesInsee($codes_insee_communes);
234
		$correspondance_id_utilisateur = $gestionnaire_utilisateurs->getListeUtilisateurFormateeId();
248
		$correspondance_id_utilisateur = $gestionnaire_utilisateurs->getListeUtilisateurFormateeId();
235
		
249
		
236
		foreach($resultats_formates as &$resultat) {
250
		foreach($resultats_formates as &$resultat) {
237
			
251
			
238
			if(isset($correspondance_codes_insee_noms[$resultat['code_commune']]) && trim($correspondance_codes_insee_noms[$resultat['code_commune']]) != '') {								
252
			if(isset($correspondance_codes_insee_noms[$resultat['code_commune']]) && trim($correspondance_codes_insee_noms[$resultat['code_commune']]) != '') {								
239
				$resultat['nom_commune'] = $correspondance_codes_insee_noms[$resultat['code_commune']];
253
				$resultat['nom_commune'] = $correspondance_codes_insee_noms[$resultat['code_commune']];
240
			}
254
			}
241
			
255
			
242
			$resultat['pseudo_participant'] = $correspondance_id_utilisateur[$resultat['id_participant']]['name'];
256
			$resultat['pseudo_participant'] = $correspondance_id_utilisateur[$resultat['id_participant']]['name'];
243
			$resultat['mail_participant'] = $correspondance_id_utilisateur[$resultat['id_participant']]['mail'];
257
			$resultat['mail_participant'] = $correspondance_id_utilisateur[$resultat['id_participant']]['mail'];
244
		}
258
		}
245
		
259
		
246
		return $resultats_formates;
260
		return $resultats_formates;
247
	}
261
	}
248
	
262
	
249
	public function convertirTableauAssocVersCSV($tableau) {
263
	public function convertirTableauAssocVersCSV($tableau) {
250
		
264
		
251
		$csv = '';
265
		$csv = '';
252
		$colonnes = array_keys($tableau[0]);
266
		$colonnes = array_keys($tableau[0]);
253
		$csv .= implode(';',$colonnes).";\n";
267
		$csv .= implode(';',$colonnes).";\n";
254
		
268
		
255
		foreach($tableau as $elements) {
269
		foreach($tableau as $elements) {
256
			$csv .= implode(';',$elements).";\n";
270
			$csv .= implode(';',$elements).";\n";
257
		}
271
		}
258
		
272
		
259
		return $csv;
273
		return $csv;
260
	}
274
	}
261
	
275
	
262
	public function envoyerFichier($contenu) {
276
	public function envoyerFichier($contenu) {
263
		
277
		
264
		$nom_fichier = "observations_export.csv";
278
		$nom_fichier = "observations_export.csv";
265
		$chemin_fichier = $this->config['appli']['chemin_fichiers_temp'].'/'.$nom_fichier;
279
		$chemin_fichier = $this->config['appli']['chemin_fichiers_temp'].'/'.$nom_fichier;
266
		
280
		
267
		file_put_contents($chemin_fichier, $contenu);	
281
		file_put_contents($chemin_fichier, $contenu);	
268
			
282
			
269
		$contenu = file_get_contents($chemin_fichier);
283
		$contenu = file_get_contents($chemin_fichier);
270
		$taille_fichier = filesize($chemin_fichier);
284
		$taille_fichier = filesize($chemin_fichier);
271
		
285
		
272
		unlink($chemin_fichier);
286
		unlink($chemin_fichier);
273
		
287
		
274
		ini_set('zlib.output_compression','Off');
288
		ini_set('zlib.output_compression','Off');
275
		
289
		
276
		header('Pragma: public');
290
		header('Pragma: public');
277
		header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
291
		header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
278
		header('Cache-Control: must-revalidate, pre-check=0, post-check=0, max-age=0');
292
		header('Cache-Control: must-revalidate, pre-check=0, post-check=0, max-age=0');
279
		
293
		
280
		header('Content-Tranfer-Encoding: none');
294
		header('Content-Tranfer-Encoding: none');
281
		
295
		
282
		header('Content-Type: application/octetstream; name="'.$nom_fichier.'"');
296
		header('Content-Type: application/octetstream; name="'.$nom_fichier.'"');
283
		header('Content-Disposition: attachement; filename="'.$nom_fichier.'"');
297
		header('Content-Disposition: attachement; filename="'.$nom_fichier.'"');
284
		
298
		
285
		header('Content-Length: '.$taille_fichier);
299
		header('Content-Length: '.$taille_fichier);
286
		
300
		
287
		echo $contenu;
301
		echo $contenu;
288
		exit();
302
		exit();
289
	}
303
	}
290
	
304
	
291
	private function formaterInformationPourEnvoi($tableauinfos) {
305
	private function formaterInformationPourEnvoi($tableauinfos) {
292
 
306
 
293
	}
307
	}
294
}
308
}
295
?>
309
?>