Subversion Repositories Sites.obs-saisons.fr

Rev

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

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