Subversion Repositories Sites.obs-saisons.fr

Rev

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

Rev 279 Rev 281
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
	const ABBR_LISTE_MILIEUX = 'environnement';
8
	const ABBR_LISTE_MILIEUX = 'environnement';
9
 
9
 
10
	private $type_mime = 'text/html';
10
	private $type_mime = 'text/html';
11
	
11
	
12
	/**
12
	/**
13
 	* Méthodes d'extractions d'informations
13
 	* Méthodes d'extractions d'informations
14
 	*/
14
 	*/
15
	
15
	
16
	/**
16
	/**
17
     * Méthode appelée avec une requête de type GET.
17
     * Méthode appelée avec une requête de type GET.
18
     *
18
     *
19
     */
19
     */
20
    function getElement($param = array()) {
20
    function getElement($param = array()) {
21
    	
21
    	
22
    	$type = $param[0];
22
    	$type = $param[0];
23
    	    	
23
    	    	
24
        if ($type == '*' || is_numeric($type)) {
24
        if ($type == '*' || is_numeric($type)) {
25
            $info = $this->getElementParDefaut($param);
25
            $info = $this->getElementParDefaut($param);
26
        } else {
26
        } else {
27
            $methode = self::PREFIXE.$type;
27
            $methode = self::PREFIXE.$type;
28
            if (method_exists($this, $methode)) {
28
            if (method_exists($this, $methode)) {
29
                array_shift($param);
29
                array_shift($param);
30
                $info = $this->$methode($param);
30
                $info = $this->$methode($param);
31
            } else {
31
            } else {
32
                $this->messages[] = "Le type d'information demandé '$type' n'est pas disponible.";
32
                $this->messages[] = "Le type d'information demandé '$type' n'est pas disponible.";
33
            }
33
            }
34
        }
34
        }
35
 
35
 
36
		$this->envoyer($info,$this->type_mime);
36
		$this->envoyer($info,$this->type_mime);
37
    }
37
    }
38
    
38
        
39
    public function getExportStationJson() {
39
    public function getExportStationJson() {
40
    
40
    	    
41
    	$donnees = $this->getExportStation();
41
    	$donnees = $this->getExportStation();
42
    	$donnees_formatees = $this->formaterListeStationPourExportJson($donnees);
42
    	$donnees_formatees = $this->formaterListeStationPourExportJson($donnees);
43
    
43
    
44
    	$this->type_mime = 'application/json';
44
    	$this->type_mime = 'application/json';
45
    
45
    
46
    	return $donnees_formatees;
46
    	return $donnees_formatees;
47
    }
47
    }
48
    
48
    
49
    public function getExportStation($start = null,$limit = null, $order_by = 'oo_date') {
49
    public function getExportStation($start = null,$limit = null, $order_by = 'oo_date') {
50
    
50
    
51
    	$id_demo = $this->config['appli']['id_participant_demo'];
51
    	$id_demo = $this->config['appli']['id_participant_demo'];
52
    	$requete_selection_stations = 'SELECT * FROM ods_stations WHERE os_ce_participant != '.$this->proteger($id_demo);    
52
    	$requete_selection_stations = 'SELECT * FROM ods_stations WHERE os_ce_participant != '.$this->proteger($id_demo);    
53
    	$res_selection_stations = $this->executerRequete($requete_selection_stations);
53
    	$res_selection_stations = $this->executerRequete($requete_selection_stations);
54
    
54
    
55
    	return $res_selection_stations;
55
    	return $res_selection_stations;
56
    }
56
    }
-
 
57
    
-
 
58
    public function getExportUtilisateurCsv() {
-
 
59
    	
-
 
60
    	$controle = new ControleUtilisateur($this->config);
-
 
61
    	$controle->authentifierAdmin();
-
 
62
    	
-
 
63
    	$gestionnaire_utilisateurs = new OdsUtilisateur($this->config);
-
 
64
    	$utilisateurs = $gestionnaire_utilisateurs->getListeUtilisateurAvecInfosComplementairesFormateeId();
-
 
65
    	
-
 
66
    	$utilisateurs_formates = array();
-
 
67
    	$premiere_annee = 2006;
-
 
68
    	
-
 
69
    	$nb_obs = $this->compterObservationsParUtilisateur();
-
 
70
    	
-
 
71
    	foreach ($utilisateurs as $id => $utilisateur) {
-
 
72
    		$utilisateur_formate = array(
-
 
73
	    		'id' => isset($utilisateur['uid']) ? $utilisateur['uid'] : '',
-
 
74
	    		'pseudo' => isset($utilisateur['name']) ? $utilisateur['name'] : '',
-
 
75
	    		'mail' => isset($utilisateur['mail']) ? $utilisateur['mail'] : '',
-
 
76
	    		'nom' => isset($utilisateur['profile_nom']) ? $utilisateur['profile_nom'] : '',
-
 
77
	    		'prenom' => isset($utilisateur['profile_prenom']) ? $utilisateur['profile_prenom'] : '',
-
 
78
	    		'code postal' => isset($utilisateur['profile_code_postal']) ? $utilisateur['profile_code_postal'] : '',
-
 
79
	    		'ville' => isset($utilisateur['profile_ville']) ? $utilisateur['profile_ville'] : '',
-
 
80
	    		'type' => isset($utilisateur['profile_type']) ? $utilisateur['profile_type'] : ''
-
 
81
    		);
-
 
82
    		
-
 
83
    		for($i = $premiere_annee; $i <= date('Y'); $i++) {
-
 
84
    			$utilisateur_formate['annee '.$i] = isset($nb_obs[$utilisateur['uid']]) && isset($nb_obs[$utilisateur['uid']][$i]) ? $nb_obs[$utilisateur['uid']][$i] : '0';
-
 
85
    		}
-
 
86
    		
-
 
87
    		$utilisateurs_formates[] = $utilisateur_formate;
-
 
88
    	}
-
 
89
    	
-
 
90
    	$csv = $this->convertirTableauAssocVersCSV($utilisateurs_formates);
-
 
91
    	$this->envoyerFichier($csv, 'utilisateurs');
-
 
92
    }
-
 
93
    
-
 
94
    private function compterObservationsParUtilisateur() {
-
 
95
    	$requete = 'SELECT COUNT(*) as nb_obs, oo_ce_participant as participant, YEAR(oo_date) as annee '.
-
 
96
    			   'FROM `ods_observations` WHERE oo_date != "0000-00-00" GROUP BY oo_ce_participant, YEAR(oo_date)';
-
 
97
    	
-
 
98
    	$res_selection_obs = $this->executerRequete($requete);
-
 
99
    	$stats = array();
-
 
100
    	foreach ($res_selection_obs as $obs_nb) {
-
 
101
    		$stats[$obs_nb['participant']][$obs_nb['annee']] = $obs_nb['nb_obs'];
-
 
102
    	}
-
 
103
    	
-
 
104
    	return $stats;
-
 
105
    }
57
    
106
    
58
    public function formaterListeStationPourExportJson($tableau_stations_infos) {
107
    public function formaterListeStationPourExportJson($tableau_stations_infos) {
59
    
108
    
60
    	$gestionnaire_especes = new OdsEspece($this->config);
109
    	$gestionnaire_especes = new OdsEspece($this->config);
61
    	$gestionnaire_communes = new OdsCommune($this->config);
110
    	$gestionnaire_communes = new OdsCommune($this->config);
62
    	$gestionnaire_utilisateurs = new OdsUtilisateur($this->config);
111
    	$gestionnaire_utilisateurs = new OdsUtilisateur($this->config);
63
    
112
    
64
    	$especes = $gestionnaire_especes->getToutesEspeces();
113
    	$especes = $gestionnaire_especes->getToutesEspeces();
65
    	$evenements = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_EVENEMENTS);
114
    	$evenements = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_EVENEMENTS);
66
    	$milieux = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_MILIEUX);
115
    	$milieux = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_MILIEUX);
67
    	$utilisateurs = $gestionnaire_utilisateurs->getListeUtilisateurAvecInfosComplementairesFormateeId();
116
    	$utilisateurs = $gestionnaire_utilisateurs->getListeUtilisateurAvecInfosComplementairesFormateeId();
68
    	$communes = $gestionnaire_communes->obtenirCommunesLieesAStationIndexeesCodeInsee();
117
    	$communes = $gestionnaire_communes->obtenirCommunesLieesAStationIndexeesCodeInsee();
69
  
118
  
70
    	$resultats_formates = array();
119
    	$resultats_formates = array();
71
    	$stats = array('total' => count($tableau_stations_infos));
120
    	$stats = array('total' => count($tableau_stations_infos));
72
    	
121
    	
73
    	foreach($tableau_stations_infos as $stations_infos) {    		
122
    	foreach($tableau_stations_infos as $stations_infos) {    		
74
    		$commune = isset($communes[$stations_infos['os_ce_commune']]['oc_nom']) ? $communes[$stations_infos['os_ce_commune']]['oc_nom'] : '';
123
    		$commune = isset($communes[$stations_infos['os_ce_commune']]['oc_nom']) ? $communes[$stations_infos['os_ce_commune']]['oc_nom'] : '';
75
    		
124
    		
76
    		$id_station = $stations_infos['os_id_station'];
125
    		$id_station = $stations_infos['os_id_station'];
77
    		$resultats_formates[$id_station]['nom'] = $stations_infos['os_nom'];
126
    		$resultats_formates[$id_station]['nom'] = $stations_infos['os_nom'];
78
    		$resultats_formates[$id_station]['code_commune'] = is_numeric($stations_infos['os_ce_commune']) ? substr($stations_infos['os_ce_commune'], 0, 2) : '';
127
    		$resultats_formates[$id_station]['code_commune'] = is_numeric($stations_infos['os_ce_commune']) ? substr($stations_infos['os_ce_commune'], 0, 2) : '';
79
    		$resultats_formates[$id_station]['nom_commune'] = $commune;
128
    		$resultats_formates[$id_station]['nom_commune'] = $commune;
80
    		$resultats_formates[$id_station]['latitude'] = $stations_infos['os_latitude'];
129
    		$resultats_formates[$id_station]['latitude'] = $stations_infos['os_latitude'];
81
    		$resultats_formates[$id_station]['longitude'] = $stations_infos['os_longitude'];
130
    		$resultats_formates[$id_station]['longitude'] = $stations_infos['os_longitude'];
82
    		$resultats_formates[$id_station]['altitude'] = $stations_infos['os_altitude'];
131
    		$resultats_formates[$id_station]['altitude'] = $stations_infos['os_altitude'];
83
    		$resultats_formates[$id_station]['type_participant'] = 'Particulier';
132
    		$resultats_formates[$id_station]['type_participant'] = 'Particulier';
84
    		
133
    		
85
    		if(isset($utilisateurs[$stations_infos['os_ce_participant']])) {
134
    		if(isset($utilisateurs[$stations_infos['os_ce_participant']])) {
86
    			$participant = $utilisateurs[$stations_infos['os_ce_participant']];
135
    			$participant = $utilisateurs[$stations_infos['os_ce_participant']];
87
    			$resultats_formates[$id_station]['participant']['id'] = $participant['uid'];
136
    			$resultats_formates[$id_station]['participant']['id'] = $participant['uid'];
88
    			$resultats_formates[$id_station]['participant']['nom'] = $participant['name'];
137
    			$resultats_formates[$id_station]['participant']['nom'] = $participant['name'];
89
    			$resultats_formates[$id_station]['type_participant'] = isset($participant['profile_type']) ? $participant['profile_type'] : 'Particulier';
138
    			$resultats_formates[$id_station]['type_participant'] = isset($participant['profile_type']) ? $participant['profile_type'] : 'Particulier';
90
    		} else {
139
    		} else {
91
    			$resultats_formates[$id_station]['participant']['id'] = null;
140
    			$resultats_formates[$id_station]['participant']['id'] = null;
92
    			$resultats_formates[$id_station]['participant']['nom'] = 'Anonyme';
141
    			$resultats_formates[$id_station]['participant']['nom'] = 'Anonyme';
93
    			$resultats_formates[$id_station]['type_participant'] = 'Particulier';
142
    			$resultats_formates[$id_station]['type_participant'] = 'Particulier';
94
    		}
143
    		}
95
    		if(isset($stats[$resultats_formates[$id_station]['type_participant']])) {
144
    		if(isset($stats[$resultats_formates[$id_station]['type_participant']])) {
96
    			$stats[$resultats_formates[$id_station]['type_participant']]++;
145
    			$stats[$resultats_formates[$id_station]['type_participant']]++;
97
    		} else {
146
    		} else {
98
    			$stats[$resultats_formates[$id_station]['type_participant']] = 1;
147
    			$stats[$resultats_formates[$id_station]['type_participant']] = 1;
99
    		}
148
    		}
100
    	}
149
    	}
101
    	$resultat = array('stats' => $stats, 'stations' => $resultats_formates);    	
150
    	$resultat = array('stats' => $stats, 'stations' => $resultats_formates);    	
102
    	return $resultat;
151
    	return $resultat;
103
    }
152
    }
104
	
153
	
105
	public function getExportObservation($start = null,$limit = null, $order_by = 'oo_date') {
154
	public function getExportObservation($start = null,$limit = null, $order_by = 'oo_date') {
106
						
155
						
107
		$requete_selection_observations = 'SELECT * FROM ods_observations '.
156
		$requete_selection_observations = 'SELECT * FROM ods_observations '.
108
									' LEFT JOIN ods_individus '. 
157
									' LEFT JOIN ods_individus '. 
109
									' ON oi_id_individu = oo_ce_individu'.
158
									' ON oi_id_individu = oo_ce_individu'.
110
									' LEFT JOIN ods_stations '.
159
									' LEFT JOIN ods_stations '.
111
									' ON oi_ce_station = os_id_station '.
160
									' ON oi_ce_station = os_id_station '.
112
									' LEFT JOIN ods_communes '.
161
									' LEFT JOIN ods_communes '.
113
									'ON os_ce_commune = oc_code_insee ';
162
									'ON os_ce_commune = oc_code_insee ';
114
		
163
		
115
		$requete_selection_observations .= $this->construireConditionRequete();
164
		$requete_selection_observations .= $this->construireConditionRequete();
116
		$requete_selection_observations .= ' ORDER BY oo_date DESC';
165
		$requete_selection_observations .= ' ORDER BY oo_date DESC';
117
		
166
		
118
		$res_selection_observations = $this->executerRequete($requete_selection_observations);
167
		$res_selection_observations = $this->executerRequete($requete_selection_observations);
119
				
168
				
120
		return $res_selection_observations;
169
		return $res_selection_observations;
121
	}
170
	}
122
	
171
	
123
	private function creerFiltreIdZoneGeo($valeurMasque) {
172
	private function creerFiltreIdZoneGeo($valeurMasque) {
124
		$masque = '';
173
		$masque = '';
125
		$dept = $valeurMasque;
174
		$dept = $valeurMasque;
126
		$dept = sprintf('%02s', $dept);
175
		$dept = sprintf('%02s', $dept);
127
		$dept = sprintf("%-'_5s", $dept);
176
		$dept = sprintf("%-'_5s", $dept);
128
		$masque = " oc_code_insee LIKE ".$this->proteger($dept);
177
		$masque = " oc_code_insee LIKE ".$this->proteger($dept);
129
		return $masque;
178
		return $masque;
130
	}
179
	}
131
	
180
	
132
	public function construireConditionRequete() {
181
	public function construireConditionRequete() {
133
		
182
		
134
		$condition = ' WHERE oo_date != "0000-00-00" AND DAY(oo_date) != "00" AND ';
183
		$condition = ' WHERE oo_date != "0000-00-00" AND DAY(oo_date) != "00" AND ';
135
		
184
		
136
		foreach($_GET as $cle => $valeur) {
185
		foreach($_GET as $cle => $valeur) {
137
			
186
			
138
			switch($cle) {
187
			switch($cle) {
139
			
188
			
140
				case 'type_espece':
189
				case 'type_espece':
141
					$condition .= 'oi_ce_espece IN (SELECT oe_id_espece FROM ods_especes WHERE oe_ce_type = '.$this->proteger($valeur).')';
190
					$condition .= 'oi_ce_espece IN (SELECT oe_id_espece FROM ods_especes WHERE oe_ce_type = '.$this->proteger($valeur).')';
142
				break;
191
				break;
143
				
192
				
144
				case 'annee':
193
				case 'annee':
145
					if($this->anneesMultiplesDemandees($valeur)) {
194
					if($this->anneesMultiplesDemandees($valeur)) {
146
						$valeur = rtrim($valeur,',');
195
						$valeur = rtrim($valeur,',');
147
						$condition .= 'YEAR(oo_date) IN ('.$valeur.')';						
196
						$condition .= 'YEAR(oo_date) IN ('.$valeur.')';						
148
					} else {
197
					} else {
149
						$condition .= 'YEAR(oo_date) ';
198
						$condition .= 'YEAR(oo_date) ';
150
						$condition .= ' = '.$this->proteger($valeur);
199
						$condition .= ' = '.$this->proteger($valeur);
151
					}
200
					}
152
				break;
201
				break;
153
				
202
				
154
				case 'mois':
203
				case 'mois':
155
					$condition .= 'MONTH(oo_date) <= '.$this->proteger($valeur);
204
					$condition .= 'MONTH(oo_date) <= '.$this->proteger($valeur);
156
				break;
205
				break;
157
				
206
				
158
				case 'espece':
207
				case 'espece':
159
					$condition .= 'oi_ce_espece IN ('.$valeur.') ';
208
					$condition .= 'oi_ce_espece IN ('.$valeur.') ';
160
				break;
209
				break;
161
				
210
				
162
				case 'evenement':
211
				case 'evenement':
163
					$condition .= 'oo_ce_evenement = '.$this->proteger($valeur);
212
					$condition .= 'oo_ce_evenement = '.$this->proteger($valeur);
164
				break;
213
				break;
165
				
214
				
166
				case 'utilisateur':
215
				case 'utilisateur':
167
					$condition .= 'oo_ce_participant = '.$this->proteger($valeur);	
216
					$condition .= 'oo_ce_participant = '.$this->proteger($valeur);	
168
				break;
217
				break;
169
				
218
				
170
				case 'departement' :
219
				case 'departement' :
171
					$condition .= $this->creerFiltreIdZoneGeo($valeur);
220
					$condition .= $this->creerFiltreIdZoneGeo($valeur);
172
				break;
221
				break;
173
				
222
				
174
				case 'region' :
223
				case 'region' :
175
					$requete_association_region .= 'SELECT * FROM ods_triples WHERE ot_ce_parent = 36 AND ot_valeur = '.$valeur;
224
					$requete_association_region .= 'SELECT * FROM ods_triples WHERE ot_ce_parent = 36 AND ot_valeur = '.$valeur;
176
					$listeAssociationRegions = $this->executerRequete($requete_association_region);
225
					$listeAssociationRegions = $this->executerRequete($requete_association_region);
177
					$departements = array();
226
					$departements = array();
178
					foreach ($listeAssociationRegions as $associationRegion) {
227
					foreach ($listeAssociationRegions as $associationRegion) {
179
						$departements[] = $this->creerFiltreIdZoneGeo($associationRegion['ot_cle']);
228
						$departements[] = $this->creerFiltreIdZoneGeo($associationRegion['ot_cle']);
180
					}
229
					}
181
					$condition .= ' ('. implode(' OR ', $departements).')';
230
					$condition .= ' ('. implode(' OR ', $departements).')';
182
				break;
231
				break;
183
				default:
232
				default:
184
			}
233
			}
185
			
234
			
186
			$condition .= ' AND ';
235
			$condition .= ' AND ';
187
		}
236
		}
188
		
237
		
189
		$condition = rtrim($condition,'AND ');
238
		$condition = rtrim($condition,'AND ');
190
		
239
		
191
		$id_demo = $this->config['appli']['id_participant_demo'];
240
		$id_demo = $this->config['appli']['id_participant_demo'];
192
		$id_admin = $this->config['appli']['id_participant_admin'];
241
		$id_admin = $this->config['appli']['id_participant_admin'];
193
		
242
		
194
		$condition .= ' AND oo_ce_participant != '.$id_demo;
243
		$condition .= ' AND oo_ce_participant != '.$id_demo;
195
		$condition .= ' AND oo_ce_participant != '.$id_admin;
244
		$condition .= ' AND oo_ce_participant != '.$id_admin;
196
		
245
		
197
		return $condition;
246
		return $condition;
198
	}
247
	}
199
	
248
	
200
	private function anneesMultiplesDemandees($annee) {
249
	private function anneesMultiplesDemandees($annee) {
201
		// un ensemble d'identifiants est une suite d'identifiants séparés par des virgules
250
		// un ensemble d'identifiants est une suite d'identifiants séparés par des virgules
202
		// sans virgule terminale
251
		// sans virgule terminale
203
		$reg_exp = "/^(([0-9])+,)*([0-9])+$/";
252
		$reg_exp = "/^(([0-9])+,)*([0-9])+$/";
204
		return preg_match($reg_exp, $annee);
253
		return preg_match($reg_exp, $annee);
205
	}
254
	}
206
	
255
	
207
	public function getExportObservationPlat() {
256
	public function getExportObservationPlat() {
208
				
257
				
209
		$donnees = $this->getExportObservation();
258
		$donnees = $this->getExportObservation();
210
		$donnees_formatees = $this->formaterListeObservationPourExportCSV($donnees);	
259
		$donnees_formatees = $this->formaterListeObservationPourExportCSV($donnees);	
211
			
260
			
212
		return $donnees_formatees ;
261
		return $donnees_formatees ;
213
	}
262
	}
214
	
263
	
215
	public function getExportObservationJson() {
264
	public function getExportObservationJson() {
216
		
265
		
217
		$donnees = $this->getExportObservation();
266
		$donnees = $this->getExportObservation();
218
		$donnees_formatees = $this->formaterListeObservationPourExportJson($donnees);
267
		$donnees_formatees = $this->formaterListeObservationPourExportJson($donnees);
219
 
268
 
220
		$this->type_mime = 'application/json';
269
		$this->type_mime = 'application/json';
221
		
270
		
222
		return $donnees_formatees;
271
		return $donnees_formatees;
223
	}
272
	}
224
	
273
	
225
	public function formaterListeObservationPourExportJson($tableau_observations_infos) {
274
	public function formaterListeObservationPourExportJson($tableau_observations_infos) {
226
		
275
		
227
		$gestionnaire_especes = new OdsEspece($this->config);
276
		$gestionnaire_especes = new OdsEspece($this->config);
228
		$gestionnaire_communes = new OdsCommune($this->config);
277
		$gestionnaire_communes = new OdsCommune($this->config);
229
				
278
				
230
		$especes = $gestionnaire_especes->getToutesEspeces();
279
		$especes = $gestionnaire_especes->getToutesEspeces();
231
		$evenements = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_EVENEMENTS);
280
		$evenements = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_EVENEMENTS);
232
		$milieux = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_MILIEUX);
281
		$milieux = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_MILIEUX);
233
		
282
		
234
		$resultats_formates = array();
283
		$resultats_formates = array();
235
		
284
		
236
		foreach($tableau_observations_infos as $observations_infos) {
285
		foreach($tableau_observations_infos as $observations_infos) {
237
		
286
		
238
			$id_espece = $observations_infos['oi_ce_espece'];
287
			$id_espece = $observations_infos['oi_ce_espece'];
239
			if($id_espece == 0) {
288
			if($id_espece == 0) {
240
				continue;
289
				continue;
241
			}
290
			}
242
			$nom_espece =  $especes[$id_espece]['nom_scientifique'];
291
			$nom_espece =  $especes[$id_espece]['nom_scientifique'];
243
				
292
				
244
			$id_evenement = $observations_infos['oo_ce_evenement'];
293
			$id_evenement = $observations_infos['oo_ce_evenement'];
245
			$chaine_evenement = $evenements[$id_evenement]['ot_cle'];
294
			$chaine_evenement = $evenements[$id_evenement]['ot_cle'];
246
				
295
				
247
			$infos_evenement = $this->renvoyerInformationStadeAPartirChaineTriple($chaine_evenement);
296
			$infos_evenement = $this->renvoyerInformationStadeAPartirChaineTriple($chaine_evenement);
248
				
297
				
249
			$date_observation_formatee = date($this->config['appli']['format_date'], strtotime($observations_infos['oo_date']));
298
			$date_observation_formatee = date($this->config['appli']['format_date'], strtotime($observations_infos['oo_date']));
250
			
299
			
251
			$id_observation = $observations_infos['oo_id_observation'];
300
			$id_observation = $observations_infos['oo_id_observation'];
252
			$infos_formatees = array(
301
			$infos_formatees = array(
253
				'date' => $date_observation_formatee,
302
				'date' => $date_observation_formatee,
254
				'evenenement' => $infos_evenement['nom'],
303
				'evenenement' => $infos_evenement['nom'],
255
				'code_bbch' => $infos_evenement['numero'],
304
				'code_bbch' => $infos_evenement['numero'],
256
				'nom_scientifique' => $nom_espece,
305
				'nom_scientifique' => $nom_espece,
257
				'id_espece' => $id_espece,
306
				'id_espece' => $id_espece,
258
				'participant' => $observations_infos['os_ce_participant']
307
				'participant' => $observations_infos['os_ce_participant']
259
			);
308
			);
260
			
309
			
261
			$id_station = $observations_infos['oi_ce_station'];
310
			$id_station = $observations_infos['oi_ce_station'];
262
			
311
			
263
			if(!isset($resultats_formates[$id_station])) {
312
			if(!isset($resultats_formates[$id_station])) {
264
				$resultats_formates[$id_station]['station'] = $observations_infos['os_nom'];
313
				$resultats_formates[$id_station]['station'] = $observations_infos['os_nom'];
265
				$resultats_formates[$id_station]['code_commune'] = $observations_infos['os_ce_commune'];
314
				$resultats_formates[$id_station]['code_commune'] = $observations_infos['os_ce_commune'];
266
				//$resultats_formates[$id_station]['nom_commune'] = $gestionnaire_communes->obtenirNomCommuneParCodeInsee($observations_infos['os_ce_commune']);
315
				//$resultats_formates[$id_station]['nom_commune'] = $gestionnaire_communes->obtenirNomCommuneParCodeInsee($observations_infos['os_ce_commune']);
267
				$resultats_formates[$id_station]['latitude'] = $observations_infos['os_latitude'];
316
				$resultats_formates[$id_station]['latitude'] = $observations_infos['os_latitude'];
268
				$resultats_formates[$id_station]['longitude'] = $observations_infos['os_longitude'];
317
				$resultats_formates[$id_station]['longitude'] = $observations_infos['os_longitude'];
269
				$resultats_formates[$id_station]['altitude'] = $observations_infos['os_altitude'];
318
				$resultats_formates[$id_station]['altitude'] = $observations_infos['os_altitude'];
270
				if(isset($milieux[$observations_infos['os_ce_environnement']]['ot_valeur'])) {
319
				if(isset($milieux[$observations_infos['os_ce_environnement']]['ot_valeur'])) {
271
					$resultats_formates[$id_station]['milieu'] = $milieux[$observations_infos['os_ce_environnement']]['ot_valeur'];
320
					$resultats_formates[$id_station]['milieu'] = $milieux[$observations_infos['os_ce_environnement']]['ot_valeur'];
272
				} else {
321
				} else {
273
					$resultats_formates[$id_station]['milieu'] = '';
322
					$resultats_formates[$id_station]['milieu'] = '';
274
				}
323
				}
275
				$resultats_formates[$id_station]['participant'] = $observations_infos['os_ce_participant'];
324
				$resultats_formates[$id_station]['participant'] = $observations_infos['os_ce_participant'];
276
			}
325
			}
277
			
326
			
278
			$resultats_formates[$id_station]['obs'][$id_observation] = $infos_formatees;
327
			$resultats_formates[$id_station]['obs'][$id_observation] = $infos_formatees;
279
		}
328
		}
280
		
329
		
281
		return $resultats_formates;
330
		return $resultats_formates;
282
	}
331
	}
283
	
332
	
284
	public function getFichierExportObservationCsv() {
333
	public function getFichierExportObservationCsv() {
285
				
334
				
286
		$donnees = $this->getExportObservation();
335
		$donnees = $this->getExportObservation();
287
		$donnees_formatees = $this->formaterListeObservationPourExportCSV($donnees);		
336
		$donnees_formatees = $this->formaterListeObservationPourExportCSV($donnees);		
288
		$chaine_csv = $this->convertirTableauAssocVersCSV($donnees_formatees);
337
		$chaine_csv = $this->convertirTableauAssocVersCSV($donnees_formatees);
289
			
338
			
290
		$this->envoyerFichier($chaine_csv);
339
		$this->envoyerFichier($chaine_csv);
291
	}
340
	}
292
	
341
	
293
	public function formaterListeObservationPourExportCSV($tableau_observations_infos) {
342
	public function formaterListeObservationPourExportCSV($tableau_observations_infos) {
294
		
343
		
295
		$gestionnaire_especes = new OdsEspece($this->config);
344
		$gestionnaire_especes = new OdsEspece($this->config);
296
		$gestionnaire_communes = new OdsCommune($this->config);
345
		$gestionnaire_communes = new OdsCommune($this->config);
297
		$gestionnaire_utilisateurs = new OdsUtilisateur($this->config);
346
		$gestionnaire_utilisateurs = new OdsUtilisateur($this->config);
298
				
347
				
299
		$especes = $gestionnaire_especes->getToutesEspeces();
348
		$especes = $gestionnaire_especes->getToutesEspeces();
300
		$evenements = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_EVENEMENTS);
349
		$evenements = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_EVENEMENTS);
301
		$milieux = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_MILIEUX);
350
		$milieux = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_MILIEUX);
302
		
351
		
303
		$codes_insee_communes = array();
352
		$codes_insee_communes = array();
304
		
353
		
305
		$resultats_formates = array();
354
		$resultats_formates = array();
306
		
355
		
307
		foreach($tableau_observations_infos as $observations_infos) {
356
		foreach($tableau_observations_infos as $observations_infos) {
308
		
357
		
309
			$id_espece = $observations_infos['oi_ce_espece'];
358
			$id_espece = $observations_infos['oi_ce_espece'];
310
			$nom_espece =  $especes[$id_espece]['nom_scientifique'];
359
			$nom_espece =  $especes[$id_espece]['nom_scientifique'];
311
				
360
				
312
			$id_evenement = $observations_infos['oo_ce_evenement'];
361
			$id_evenement = $observations_infos['oo_ce_evenement'];
313
			$chaine_evenement = $evenements[$id_evenement]['ot_cle'];
362
			$chaine_evenement = $evenements[$id_evenement]['ot_cle'];
314
				
363
				
315
			$infos_evenement = $this->renvoyerInformationStadeAPartirChaineTriple($chaine_evenement);
364
			$infos_evenement = $this->renvoyerInformationStadeAPartirChaineTriple($chaine_evenement);
316
				
365
				
317
			$date_observation_formatee = date($this->config['appli']['format_date'], strtotime($observations_infos['oo_date']));
366
			$date_observation_formatee = date($this->config['appli']['format_date'], strtotime($observations_infos['oo_date']));
318
			
367
			
319
			$id_observation = $observations_infos['oo_id_observation'];
368
			$id_observation = $observations_infos['oo_id_observation'];
-
 
369
			$milieu = isset($milieux[$observations_infos['os_ce_environnement']]['ot_valeur']) ? $milieux[$observations_infos['os_ce_environnement']]['ot_valeur'] : '';
320
			
370
			
321
			$infos_formatees = array(
371
			$infos_formatees = array(
322
				'id_observation' => $id_observation,
372
				'id_observation' => $id_observation,
323
				'date' => $date_observation_formatee,
373
				'date' => $date_observation_formatee,
324
				'evenenement' => $infos_evenement['nom'],
374
				'evenenement' => $infos_evenement['nom'],
325
				'code_bbch' => $infos_evenement['numero'],
375
				'code_bbch' => $infos_evenement['numero'],
326
				'nom_scientifique' => $nom_espece,
376
				'nom_scientifique' => $nom_espece,
327
				'station' => $observations_infos['os_nom'],
377
				'station' => $observations_infos['os_nom'],
328
				'code_commune' => $observations_infos['os_ce_commune'],
378
				'code_commune' => $observations_infos['os_ce_commune'],
329
				'nom_commune' => '',
379
				'nom_commune' => '',
330
				'latitude' => $observations_infos['os_latitude'],
380
				'latitude' => $observations_infos['os_latitude'],
331
				'longitude' => $observations_infos['os_longitude'],
381
				'longitude' => $observations_infos['os_longitude'],
332
				'altitude' => $observations_infos['os_altitude'],
382
				'altitude' => $observations_infos['os_altitude'],
333
				'milieu' => $milieux[$observations_infos['os_ce_environnement']]['ot_valeur'],
383
				'milieu' => $milieu,
334
				'id_participant' => $observations_infos['os_ce_participant'],
384
				'id_participant' => $observations_infos['os_ce_participant'],
335
				'pseudo_participant' => '',
385
				'pseudo_participant' => '',
336
				'mail_participant' => ''
386
				'mail_participant' => ''
337
			);
387
			);
338
			
388
			
339
			$resultats_formates[] = $infos_formatees;
389
			$resultats_formates[] = $infos_formatees;
340
			
390
			
341
			if(is_numeric($observations_infos['os_ce_commune'])) {
391
			if(is_numeric($observations_infos['os_ce_commune'])) {
342
				$codes_insee_communes[] = $observations_infos['os_ce_commune'];
392
				$codes_insee_communes[] = $observations_infos['os_ce_commune'];
343
			}
393
			}
344
		}
394
		}
345
		
395
 
346
		$correspondance_codes_insee_noms = $gestionnaire_communes->obtenirTableauNomsCommunesParTableauCodesInsee($codes_insee_communes);
396
		$correspondance_codes_insee_noms = $gestionnaire_communes->obtenirTableauNomsCommunesParTableauCodesInsee($codes_insee_communes);
347
		$correspondance_id_utilisateur = $gestionnaire_utilisateurs->getListeUtilisateurFormateeId();
397
		$correspondance_id_utilisateur = $gestionnaire_utilisateurs->getListeUtilisateurFormateeId();
348
		
398
		
349
		foreach($resultats_formates as &$resultat) {
399
		foreach($resultats_formates as &$resultat) {
350
			
400
			
351
			if(isset($correspondance_codes_insee_noms[$resultat['code_commune']]) && trim($correspondance_codes_insee_noms[$resultat['code_commune']]) != '') {								
401
			if(isset($correspondance_codes_insee_noms[$resultat['code_commune']]) && trim($correspondance_codes_insee_noms[$resultat['code_commune']]) != '') {								
352
				$resultat['nom_commune'] = $correspondance_codes_insee_noms[$resultat['code_commune']];
402
				$resultat['nom_commune'] = $correspondance_codes_insee_noms[$resultat['code_commune']];
353
			}
403
			}
354
			
404
			
355
			$resultat['pseudo_participant'] = $correspondance_id_utilisateur[$resultat['id_participant']]['name'];
405
			$resultat['pseudo_participant'] = $correspondance_id_utilisateur[$resultat['id_participant']]['name'];
356
			$resultat['mail_participant'] = $correspondance_id_utilisateur[$resultat['id_participant']]['mail'];
406
			$resultat['mail_participant'] = $correspondance_id_utilisateur[$resultat['id_participant']]['mail'];
357
		}
407
		}
358
		
408
		
359
		return $resultats_formates;
409
		return $resultats_formates;
360
	}
410
	}
361
	
411
	
362
	public function convertirTableauAssocVersCSV($tableau) {
412
	public function convertirTableauAssocVersCSV($tableau) {
363
		
413
		
364
		$csv = '';
414
		$csv = '';
365
		$colonnes = array_keys($tableau[0]);
415
		$colonnes = array_keys($tableau[0]);
366
		$csv .= implode(';',$colonnes).";\n";
416
		$csv .= implode(';',$colonnes).";\n";
367
		
417
		
368
		foreach($tableau as $elements) {
418
		foreach($tableau as $elements) {
-
 
419
			$ligne = "";
-
 
420
			// parcours des cases de chaque ligne nécessaire car si on utilise implode
-
 
421
			// les valeurs vides ne sont pas prises et ça décale les colonnes
-
 
422
			foreach ($elements as $element) {
369
			$csv .= implode(';',$elements).";\n";
423
				$ligne .= '"'.$element.'";';
-
 
424
			}
-
 
425
			$csv .= $ligne."\n";
370
		}
426
		}
371
		
427
		
372
		return $csv;
428
		return $csv;
373
	}
429
	}
374
	
430
	
375
	public function envoyerFichier($contenu) {
431
	public function envoyerFichier($contenu, $nom = 'observations_export') {
376
		
432
		
377
		$nom_fichier = "observations_export.csv";
433
		$nom_fichier = $nom.".csv";
378
		$chemin_fichier = $this->config['appli']['chemin_fichiers_temp'].'/'.$nom_fichier;
434
		$chemin_fichier = $this->config['appli']['chemin_fichiers_temp'].'/'.$nom_fichier;
379
		
435
		
380
		file_put_contents($chemin_fichier, $contenu);	
436
		file_put_contents($chemin_fichier, $contenu);	
381
			
437
			
382
		$contenu = file_get_contents($chemin_fichier);
438
		$contenu = file_get_contents($chemin_fichier);
383
		$taille_fichier = filesize($chemin_fichier);
439
		$taille_fichier = filesize($chemin_fichier);
384
		
440
		
385
		unlink($chemin_fichier);
441
		unlink($chemin_fichier);
386
		
442
		
387
		ini_set('zlib.output_compression','Off');
443
		ini_set('zlib.output_compression','Off');
388
		
444
		
389
		header('Pragma: public');
445
		header('Pragma: public');
390
		header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
446
		header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
391
		header('Cache-Control: must-revalidate, pre-check=0, post-check=0, max-age=0');
447
		header('Cache-Control: must-revalidate, pre-check=0, post-check=0, max-age=0');
392
		
448
		
393
		header('Content-Tranfer-Encoding: none');
449
		header('Content-Tranfer-Encoding: none');
394
		
450
		
395
		header('Content-Type: application/octetstream; name="'.$nom_fichier.'"');
451
		header('Content-Type: application/octetstream; name="'.$nom_fichier.'"');
396
		header('Content-Disposition: attachement; filename="'.$nom_fichier.'"');
452
		header('Content-Disposition: attachement; filename="'.$nom_fichier.'"');
397
		
453
		
398
		header('Content-Length: '.$taille_fichier);
454
		header('Content-Length: '.$taille_fichier);
399
		
455
		
400
		echo $contenu;
456
		echo $contenu;
401
		exit();
457
		exit();
402
	}
458
	}
403
	
459
	
404
	private function formaterInformationPourEnvoi($tableauinfos) {
460
	private function formaterInformationPourEnvoi($tableauinfos) {
405
 
461
 
406
	}
462
	}
407
}
463
}
408
?>
464
?>