Subversion Repositories Sites.obs-saisons.fr

Rev

Rev 315 | Rev 324 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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