Subversion Repositories Sites.obs-saisons.fr

Rev

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

Rev 270 Rev 271
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
    	$requete_selection_stations = 'SELECT * FROM ods_stations ';    
51
    	$requete_selection_stations = 'SELECT * FROM ods_stations ';    
52
    	$res_selection_stations = $this->executerRequete($requete_selection_stations);
52
    	$res_selection_stations = $this->executerRequete($requete_selection_stations);
53
    
53
    
54
    	return $res_selection_stations;
54
    	return $res_selection_stations;
55
    }
55
    }
56
    
56
    
57
    public function formaterListeStationPourExportJson($tableau_stations_infos) {
57
    public function formaterListeStationPourExportJson($tableau_stations_infos) {
58
    
58
    
59
    	$gestionnaire_especes = new OdsEspece($this->config);
59
    	$gestionnaire_especes = new OdsEspece($this->config);
60
    	$gestionnaire_communes = new OdsCommune($this->config);
60
    	$gestionnaire_communes = new OdsCommune($this->config);
61
    	$gestionnaire_utilisateurs = new OdsUtilisateur($this->config);
61
    	$gestionnaire_utilisateurs = new OdsUtilisateur($this->config);
62
    
62
    
63
    	$especes = $gestionnaire_especes->getToutesEspeces();
63
    	$especes = $gestionnaire_especes->getToutesEspeces();
64
    	$evenements = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_EVENEMENTS);
64
    	$evenements = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_EVENEMENTS);
65
    	$milieux = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_MILIEUX);
65
    	$milieux = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_MILIEUX);
66
    	$utilisateurs = $gestionnaire_utilisateurs->getListeUtilisateurAvecInfosComplementairesFormateeId();
66
    	$utilisateurs = $gestionnaire_utilisateurs->getListeUtilisateurAvecInfosComplementairesFormateeId();
67
    	$communes = $gestionnaire_communes->obtenirCommunesLieesAStationIndexeesCodeInsee();
67
    	$communes = $gestionnaire_communes->obtenirCommunesLieesAStationIndexeesCodeInsee();
68
  
68
  
69
    	$resultats_formates = array();
69
    	$resultats_formates = array();
70
    	$stats = array('total' => count($tableau_stations_infos));
70
    	$stats = array('total' => count($tableau_stations_infos));
71
    	
71
    	
72
    	foreach($tableau_stations_infos as $stations_infos) {    		
72
    	foreach($tableau_stations_infos as $stations_infos) {    		
73
    		$commune = isset($communes[$stations_infos['os_ce_commune']]['oc_nom']) ? $communes[$stations_infos['os_ce_commune']]['oc_nom'] : '';
73
    		$commune = isset($communes[$stations_infos['os_ce_commune']]['oc_nom']) ? $communes[$stations_infos['os_ce_commune']]['oc_nom'] : '';
74
    		
74
    		
75
    		$id_station = $stations_infos['os_id_station'];
75
    		$id_station = $stations_infos['os_id_station'];
76
    		$resultats_formates[$id_station]['nom'] = $stations_infos['os_nom'];
76
    		$resultats_formates[$id_station]['nom'] = $stations_infos['os_nom'];
77
    		$resultats_formates[$id_station]['code_commune'] = is_numeric($stations_infos['os_ce_commune']) ? substr($stations_infos['os_ce_commune'], 0, 2) : '';
77
    		$resultats_formates[$id_station]['code_commune'] = is_numeric($stations_infos['os_ce_commune']) ? substr($stations_infos['os_ce_commune'], 0, 2) : '';
78
    		$resultats_formates[$id_station]['nom_commune'] = $commune;
78
    		$resultats_formates[$id_station]['nom_commune'] = $commune;
79
    		$resultats_formates[$id_station]['latitude'] = $stations_infos['os_latitude'];
79
    		$resultats_formates[$id_station]['latitude'] = $stations_infos['os_latitude'];
80
    		$resultats_formates[$id_station]['longitude'] = $stations_infos['os_longitude'];
80
    		$resultats_formates[$id_station]['longitude'] = $stations_infos['os_longitude'];
81
    		$resultats_formates[$id_station]['altitude'] = $stations_infos['os_altitude'];
81
    		$resultats_formates[$id_station]['altitude'] = $stations_infos['os_altitude'];
82
    		$resultats_formates[$id_station]['type_participant'] = 'Particulier';
82
    		$resultats_formates[$id_station]['type_participant'] = 'Particulier';
83
    		
83
    		
84
    		if(isset($utilisateurs[$stations_infos['os_ce_participant']])) {
84
    		if(isset($utilisateurs[$stations_infos['os_ce_participant']])) {
85
    			$participant = $utilisateurs[$stations_infos['os_ce_participant']];
85
    			$participant = $utilisateurs[$stations_infos['os_ce_participant']];
86
    			$resultats_formates[$id_station]['participant']['id'] = $participant['uid'];
86
    			$resultats_formates[$id_station]['participant']['id'] = $participant['uid'];
87
    			$resultats_formates[$id_station]['participant']['nom'] = $participant['name'];
87
    			$resultats_formates[$id_station]['participant']['nom'] = $participant['name'];
88
    			$resultats_formates[$id_station]['type_participant'] = isset($participant['profile_type']) ? $participant['profile_type'] : 'Particulier';
88
    			$resultats_formates[$id_station]['type_participant'] = isset($participant['profile_type']) ? $participant['profile_type'] : 'Particulier';
89
    		} else {
89
    		} else {
90
    			$resultats_formates[$id_station]['participant']['id'] = null;
90
    			$resultats_formates[$id_station]['participant']['id'] = null;
91
    			$resultats_formates[$id_station]['participant']['nom'] = 'Anonyme';
91
    			$resultats_formates[$id_station]['participant']['nom'] = 'Anonyme';
92
    			$resultats_formates[$id_station]['type_participant'] = 'Particulier';
92
    			$resultats_formates[$id_station]['type_participant'] = 'Particulier';
93
    		}
93
    		}
94
    		if(isset($stats[$resultats_formates[$id_station]['type_participant']])) {
94
    		if(isset($stats[$resultats_formates[$id_station]['type_participant']])) {
95
    			$stats[$resultats_formates[$id_station]['type_participant']]++;
95
    			$stats[$resultats_formates[$id_station]['type_participant']]++;
96
    		} else {
96
    		} else {
97
    			$stats[$resultats_formates[$id_station]['type_participant']] = 1;
97
    			$stats[$resultats_formates[$id_station]['type_participant']] = 1;
98
    		}
98
    		}
99
    	}
99
    	}
100
    	$resultat = array('stats' => $stats, 'stations' => $resultats_formates);
100
    	$resultat = array('stats' => $stats, 'stations' => $resultats_formates);    	
101
    	
-
 
102
    	return $resultat;
101
    	return $resultat;
103
    }
102
    }
104
	
103
	
105
	public function getExportObservation($start = null,$limit = null, $order_by = 'oo_date') {
104
	public function getExportObservation($start = null,$limit = null, $order_by = 'oo_date') {
106
						
105
						
107
		$requete_selection_observations = 'SELECT * FROM ods_observations '.
106
		$requete_selection_observations = 'SELECT * FROM ods_observations '.
108
									' LEFT JOIN ods_individus '. 
107
									' LEFT JOIN ods_individus '. 
109
									' ON oi_id_individu = oo_ce_individu'.
108
									' ON oi_id_individu = oo_ce_individu'.
110
									' LEFT JOIN ods_stations '.
109
									' LEFT JOIN ods_stations '.
111
									' ON oi_ce_station = os_id_station '.
110
									' ON oi_ce_station = os_id_station '.
112
									' LEFT JOIN ods_communes '.
111
									' LEFT JOIN ods_communes '.
113
									'ON os_ce_commune = oc_code_insee ';
112
									'ON os_ce_commune = oc_code_insee ';
114
		
113
		
115
		$requete_selection_observations .= $this->construireConditionRequete();
114
		$requete_selection_observations .= $this->construireConditionRequete();
116
		$requete_selection_observations .= ' ORDER BY oo_date DESC';
115
		$requete_selection_observations .= ' ORDER BY oo_date DESC';
117
		
116
		
118
		$res_selection_observations = $this->executerRequete($requete_selection_observations);
117
		$res_selection_observations = $this->executerRequete($requete_selection_observations);
119
				
118
				
120
		return $res_selection_observations;
119
		return $res_selection_observations;
121
	}
120
	}
122
	
121
	
123
	private function creerFiltreIdZoneGeo($valeurMasque) {
122
	private function creerFiltreIdZoneGeo($valeurMasque) {
124
		$masque = '';
123
		$masque = '';
125
		$dept = $valeurMasque;
124
		$dept = $valeurMasque;
126
		$dept = sprintf('%02s', $dept);
125
		$dept = sprintf('%02s', $dept);
127
		$dept = sprintf("%-'_5s", $dept);
126
		$dept = sprintf("%-'_5s", $dept);
128
		$masque = " oc_code_insee LIKE ".$this->proteger($dept);
127
		$masque = " oc_code_insee LIKE ".$this->proteger($dept);
129
		return $masque;
128
		return $masque;
130
	}
129
	}
131
	
130
	
132
	public function construireConditionRequete() {
131
	public function construireConditionRequete() {
133
		
132
		
134
		$condition = ' WHERE oo_date != "0000-00-00" AND DAY(oo_date) != "00" AND ';
133
		$condition = ' WHERE oo_date != "0000-00-00" AND DAY(oo_date) != "00" AND ';
135
		
134
		
136
		foreach($_GET as $cle => $valeur) {
135
		foreach($_GET as $cle => $valeur) {
137
			
136
			
138
			switch($cle) {
137
			switch($cle) {
139
			
138
			
140
				case 'type_espece':
139
				case 'type_espece':
141
					$condition .= 'oi_ce_espece IN (SELECT oe_id_espece FROM ods_especes WHERE oe_ce_type = '.$this->proteger($valeur).')';
140
					$condition .= 'oi_ce_espece IN (SELECT oe_id_espece FROM ods_especes WHERE oe_ce_type = '.$this->proteger($valeur).')';
142
				break;
141
				break;
143
				
142
				
144
				case 'annee':
143
				case 'annee':
145
					if($this->anneesMultiplesDemandees($valeur)) {
144
					if($this->anneesMultiplesDemandees($valeur)) {
146
						$valeur = rtrim($valeur,',');
145
						$valeur = rtrim($valeur,',');
147
						$condition .= 'YEAR(oo_date) IN ('.$valeur.')';						
146
						$condition .= 'YEAR(oo_date) IN ('.$valeur.')';						
148
					} else {
147
					} else {
149
						$condition .= 'YEAR(oo_date) ';
148
						$condition .= 'YEAR(oo_date) ';
150
						$condition .= ' = '.$this->proteger($valeur);
149
						$condition .= ' = '.$this->proteger($valeur);
151
					}
150
					}
152
				break;
151
				break;
153
				
152
				
154
				case 'mois':
153
				case 'mois':
155
					$condition .= 'MONTH(oo_date) <= '.$this->proteger($valeur);
154
					$condition .= 'MONTH(oo_date) <= '.$this->proteger($valeur);
156
				break;
155
				break;
157
				
156
				
158
				case 'espece':
157
				case 'espece':
159
					$condition .= 'oi_ce_espece IN ('.$valeur.') ';
158
					$condition .= 'oi_ce_espece IN ('.$valeur.') ';
160
				break;
159
				break;
161
				
160
				
162
				case 'evenement':
161
				case 'evenement':
163
					$condition .= 'oo_ce_evenement = '.$this->proteger($valeur);
162
					$condition .= 'oo_ce_evenement = '.$this->proteger($valeur);
164
				break;
163
				break;
165
				
164
				
166
				case 'utilisateur':
165
				case 'utilisateur':
167
					$condition .= 'oo_ce_participant = '.$this->proteger($valeur);	
166
					$condition .= 'oo_ce_participant = '.$this->proteger($valeur);	
168
				break;
167
				break;
169
				
168
				
170
				case 'departement' :
169
				case 'departement' :
171
					$condition .= $this->creerFiltreIdZoneGeo($valeur);
170
					$condition .= $this->creerFiltreIdZoneGeo($valeur);
172
				break;
171
				break;
173
				
172
				
174
				case 'region' :
173
				case 'region' :
175
					$requete_association_region .= 'SELECT * FROM ods_triples WHERE ot_ce_parent = 36 AND ot_valeur = '.$valeur;
174
					$requete_association_region .= 'SELECT * FROM ods_triples WHERE ot_ce_parent = 36 AND ot_valeur = '.$valeur;
176
					$listeAssociationRegions = $this->executerRequete($requete_association_region);
175
					$listeAssociationRegions = $this->executerRequete($requete_association_region);
177
					$departements = array();
176
					$departements = array();
178
					foreach ($listeAssociationRegions as $associationRegion) {
177
					foreach ($listeAssociationRegions as $associationRegion) {
179
						$departements[] = $this->creerFiltreIdZoneGeo($associationRegion['ot_cle']);
178
						$departements[] = $this->creerFiltreIdZoneGeo($associationRegion['ot_cle']);
180
					}
179
					}
181
					$condition .= ' ('. implode(' OR ', $departements).')';
180
					$condition .= ' ('. implode(' OR ', $departements).')';
182
				break;
181
				break;
183
				default:
182
				default:
184
			}
183
			}
185
			
184
			
186
			$condition .= ' AND ';
185
			$condition .= ' AND ';
187
		}
186
		}
188
		
187
		
189
		$condition = rtrim($condition,'AND ');
188
		$condition = rtrim($condition,'AND ');
190
		
189
		
191
		$id_demo = $this->config['appli']['id_participant_demo'];
190
		$id_demo = $this->config['appli']['id_participant_demo'];
192
		$id_admin = $this->config['appli']['id_participant_admin'];
191
		$id_admin = $this->config['appli']['id_participant_admin'];
193
		
192
		
194
		$condition .= ' AND oo_ce_participant != '.$id_demo;
193
		$condition .= ' AND oo_ce_participant != '.$id_demo;
195
		$condition .= ' AND oo_ce_participant != '.$id_admin;
194
		$condition .= ' AND oo_ce_participant != '.$id_admin;
196
		
195
		
197
		return $condition;
196
		return $condition;
198
	}
197
	}
199
	
198
	
200
	private function anneesMultiplesDemandees($annee) {
199
	private function anneesMultiplesDemandees($annee) {
201
		// un ensemble d'identifiants est une suite d'identifiants séparés par des virgules
200
		// un ensemble d'identifiants est une suite d'identifiants séparés par des virgules
202
		// sans virgule terminale
201
		// sans virgule terminale
203
		$reg_exp = "/^(([0-9])+,)*([0-9])+$/";
202
		$reg_exp = "/^(([0-9])+,)*([0-9])+$/";
204
		return preg_match($reg_exp, $annee);
203
		return preg_match($reg_exp, $annee);
205
	}
204
	}
206
	
205
	
207
	public function getExportObservationPlat() {
206
	public function getExportObservationPlat() {
208
				
207
				
209
		$donnees = $this->getExportObservation();
208
		$donnees = $this->getExportObservation();
210
		$donnees_formatees = $this->formaterListeObservationPourExportCSV($donnees);	
209
		$donnees_formatees = $this->formaterListeObservationPourExportCSV($donnees);	
211
			
210
			
212
		return $donnees_formatees ;
211
		return $donnees_formatees ;
213
	}
212
	}
214
	
213
	
215
	public function getExportObservationJson() {
214
	public function getExportObservationJson() {
216
		
215
		
217
		$donnees = $this->getExportObservation();
216
		$donnees = $this->getExportObservation();
218
		$donnees_formatees = $this->formaterListeObservationPourExportJson($donnees);
217
		$donnees_formatees = $this->formaterListeObservationPourExportJson($donnees);
219
 
218
 
220
		$this->type_mime = 'application/json';
219
		$this->type_mime = 'application/json';
221
		
220
		
222
		return $donnees_formatees;
221
		return $donnees_formatees;
223
	}
222
	}
224
	
223
	
225
	public function formaterListeObservationPourExportJson($tableau_observations_infos) {
224
	public function formaterListeObservationPourExportJson($tableau_observations_infos) {
226
		
225
		
227
		$gestionnaire_especes = new OdsEspece($this->config);
226
		$gestionnaire_especes = new OdsEspece($this->config);
228
		$gestionnaire_communes = new OdsCommune($this->config);
227
		$gestionnaire_communes = new OdsCommune($this->config);
229
				
228
				
230
		$especes = $gestionnaire_especes->getToutesEspeces();
229
		$especes = $gestionnaire_especes->getToutesEspeces();
231
		$evenements = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_EVENEMENTS);
230
		$evenements = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_EVENEMENTS);
232
		$milieux = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_MILIEUX);
231
		$milieux = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_MILIEUX);
233
		
232
		
234
		$resultats_formates = array();
233
		$resultats_formates = array();
235
		
234
		
236
		foreach($tableau_observations_infos as $observations_infos) {
235
		foreach($tableau_observations_infos as $observations_infos) {
237
		
236
		
238
			$id_espece = $observations_infos['oi_ce_espece'];
237
			$id_espece = $observations_infos['oi_ce_espece'];
239
			$nom_espece =  $especes[$id_espece]['nom_scientifique'];
238
			$nom_espece =  $especes[$id_espece]['nom_scientifique'];
240
				
239
				
241
			$id_evenement = $observations_infos['oo_ce_evenement'];
240
			$id_evenement = $observations_infos['oo_ce_evenement'];
242
			$chaine_evenement = $evenements[$id_evenement]['ot_cle'];
241
			$chaine_evenement = $evenements[$id_evenement]['ot_cle'];
243
				
242
				
244
			$infos_evenement = $this->renvoyerInformationStadeAPartirChaineTriple($chaine_evenement);
243
			$infos_evenement = $this->renvoyerInformationStadeAPartirChaineTriple($chaine_evenement);
245
				
244
				
246
			$date_observation_formatee = date($this->config['appli']['format_date'], strtotime($observations_infos['oo_date']));
245
			$date_observation_formatee = date($this->config['appli']['format_date'], strtotime($observations_infos['oo_date']));
247
			
246
			
248
			$id_observation = $observations_infos['oo_id_observation'];
247
			$id_observation = $observations_infos['oo_id_observation'];
249
			$infos_formatees = array(
248
			$infos_formatees = array(
250
				'date' => $date_observation_formatee,
249
				'date' => $date_observation_formatee,
251
				'evenenement' => $infos_evenement['nom'],
250
				'evenenement' => $infos_evenement['nom'],
252
				'code_bbch' => $infos_evenement['numero'],
251
				'code_bbch' => $infos_evenement['numero'],
253
				'nom_scientifique' => $nom_espece,
252
				'nom_scientifique' => $nom_espece,
254
				'id_espece' => $id_espece,
253
				'id_espece' => $id_espece,
255
				'participant' => $observations_infos['os_ce_participant']
254
				'participant' => $observations_infos['os_ce_participant']
256
			);
255
			);
257
			
256
			
258
			$id_station = $observations_infos['oi_ce_station'];
257
			$id_station = $observations_infos['oi_ce_station'];
259
			
258
			
260
			if(!isset($resultats_formates[$id_station])) {
259
			if(!isset($resultats_formates[$id_station])) {
261
				$resultats_formates[$id_station]['station'] = $observations_infos['os_nom'];
260
				$resultats_formates[$id_station]['station'] = $observations_infos['os_nom'];
262
				$resultats_formates[$id_station]['code_commune'] = $observations_infos['os_ce_commune'];
261
				$resultats_formates[$id_station]['code_commune'] = $observations_infos['os_ce_commune'];
263
				//$resultats_formates[$id_station]['nom_commune'] = $gestionnaire_communes->obtenirNomCommuneParCodeInsee($observations_infos['os_ce_commune']);
262
				//$resultats_formates[$id_station]['nom_commune'] = $gestionnaire_communes->obtenirNomCommuneParCodeInsee($observations_infos['os_ce_commune']);
264
				$resultats_formates[$id_station]['latitude'] = $observations_infos['os_latitude'];
263
				$resultats_formates[$id_station]['latitude'] = $observations_infos['os_latitude'];
265
				$resultats_formates[$id_station]['longitude'] = $observations_infos['os_longitude'];
264
				$resultats_formates[$id_station]['longitude'] = $observations_infos['os_longitude'];
266
				$resultats_formates[$id_station]['altitude'] = $observations_infos['os_altitude'];
265
				$resultats_formates[$id_station]['altitude'] = $observations_infos['os_altitude'];
267
				$resultats_formates[$id_station]['milieu'] = $milieux[$observations_infos['os_ce_environnement']]['ot_valeur'];
266
				$resultats_formates[$id_station]['milieu'] = $milieux[$observations_infos['os_ce_environnement']]['ot_valeur'];
268
				$resultats_formates[$id_station]['participant'] = $observations_infos['os_ce_participant'];
267
				$resultats_formates[$id_station]['participant'] = $observations_infos['os_ce_participant'];
269
			}
268
			}
270
			
269
			
271
			$resultats_formates[$id_station]['obs'][$id_observation] = $infos_formatees;
270
			$resultats_formates[$id_station]['obs'][$id_observation] = $infos_formatees;
272
		}
271
		}
273
		
272
		
274
		return $resultats_formates;
273
		return $resultats_formates;
275
	}
274
	}
276
	
275
	
277
	public function getFichierExportObservationCsv() {
276
	public function getFichierExportObservationCsv() {
278
				
277
				
279
		$donnees = $this->getExportObservation();
278
		$donnees = $this->getExportObservation();
280
		$donnees_formatees = $this->formaterListeObservationPourExportCSV($donnees);		
279
		$donnees_formatees = $this->formaterListeObservationPourExportCSV($donnees);		
281
		$chaine_csv = $this->convertirTableauAssocVersCSV($donnees_formatees);
280
		$chaine_csv = $this->convertirTableauAssocVersCSV($donnees_formatees);
282
			
281
			
283
		$this->envoyerFichier($chaine_csv);
282
		$this->envoyerFichier($chaine_csv);
284
	}
283
	}
285
	
284
	
286
	public function formaterListeObservationPourExportCSV($tableau_observations_infos) {
285
	public function formaterListeObservationPourExportCSV($tableau_observations_infos) {
287
		
286
		
288
		$gestionnaire_especes = new OdsEspece($this->config);
287
		$gestionnaire_especes = new OdsEspece($this->config);
289
		$gestionnaire_communes = new OdsCommune($this->config);
288
		$gestionnaire_communes = new OdsCommune($this->config);
290
		$gestionnaire_utilisateurs = new OdsUtilisateur($this->config);
289
		$gestionnaire_utilisateurs = new OdsUtilisateur($this->config);
291
				
290
				
292
		$especes = $gestionnaire_especes->getToutesEspeces();
291
		$especes = $gestionnaire_especes->getToutesEspeces();
293
		$evenements = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_EVENEMENTS);
292
		$evenements = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_EVENEMENTS);
294
		$milieux = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_MILIEUX);
293
		$milieux = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_MILIEUX);
295
		
294
		
296
		$codes_insee_communes = array();
295
		$codes_insee_communes = array();
297
		
296
		
298
		$resultats_formates = array();
297
		$resultats_formates = array();
299
		
298
		
300
		foreach($tableau_observations_infos as $observations_infos) {
299
		foreach($tableau_observations_infos as $observations_infos) {
301
		
300
		
302
			$id_espece = $observations_infos['oi_ce_espece'];
301
			$id_espece = $observations_infos['oi_ce_espece'];
303
			$nom_espece =  $especes[$id_espece]['nom_scientifique'];
302
			$nom_espece =  $especes[$id_espece]['nom_scientifique'];
304
				
303
				
305
			$id_evenement = $observations_infos['oo_ce_evenement'];
304
			$id_evenement = $observations_infos['oo_ce_evenement'];
306
			$chaine_evenement = $evenements[$id_evenement]['ot_cle'];
305
			$chaine_evenement = $evenements[$id_evenement]['ot_cle'];
307
				
306
				
308
			$infos_evenement = $this->renvoyerInformationStadeAPartirChaineTriple($chaine_evenement);
307
			$infos_evenement = $this->renvoyerInformationStadeAPartirChaineTriple($chaine_evenement);
309
				
308
				
310
			$date_observation_formatee = date($this->config['appli']['format_date'], strtotime($observations_infos['oo_date']));
309
			$date_observation_formatee = date($this->config['appli']['format_date'], strtotime($observations_infos['oo_date']));
311
			
310
			
312
			$id_observation = $observations_infos['oo_id_observation'];
311
			$id_observation = $observations_infos['oo_id_observation'];
313
			
312
			
314
			$infos_formatees = array(
313
			$infos_formatees = array(
315
				'id_observation' => $id_observation,
314
				'id_observation' => $id_observation,
316
				'date' => $date_observation_formatee,
315
				'date' => $date_observation_formatee,
317
				'evenenement' => $infos_evenement['nom'],
316
				'evenenement' => $infos_evenement['nom'],
318
				'code_bbch' => $infos_evenement['numero'],
317
				'code_bbch' => $infos_evenement['numero'],
319
				'nom_scientifique' => $nom_espece,
318
				'nom_scientifique' => $nom_espece,
320
				'station' => $observations_infos['os_nom'],
319
				'station' => $observations_infos['os_nom'],
321
				'code_commune' => $observations_infos['os_ce_commune'],
320
				'code_commune' => $observations_infos['os_ce_commune'],
322
				'nom_commune' => '',
321
				'nom_commune' => '',
323
				'latitude' => $observations_infos['os_latitude'],
322
				'latitude' => $observations_infos['os_latitude'],
324
				'longitude' => $observations_infos['os_longitude'],
323
				'longitude' => $observations_infos['os_longitude'],
325
				'altitude' => $observations_infos['os_altitude'],
324
				'altitude' => $observations_infos['os_altitude'],
326
				'milieu' => $milieux[$observations_infos['os_ce_environnement']]['ot_valeur'],
325
				'milieu' => $milieux[$observations_infos['os_ce_environnement']]['ot_valeur'],
327
				'id_participant' => $observations_infos['os_ce_participant'],
326
				'id_participant' => $observations_infos['os_ce_participant'],
328
				'pseudo_participant' => '',
327
				'pseudo_participant' => '',
329
				'mail_participant' => ''
328
				'mail_participant' => ''
330
			);
329
			);
331
			
330
			
332
			$resultats_formates[] = $infos_formatees;
331
			$resultats_formates[] = $infos_formatees;
333
			
332
			
334
			if(is_numeric($observations_infos['os_ce_commune'])) {
333
			if(is_numeric($observations_infos['os_ce_commune'])) {
335
				$codes_insee_communes[] = $observations_infos['os_ce_commune'];
334
				$codes_insee_communes[] = $observations_infos['os_ce_commune'];
336
			}
335
			}
337
		}
336
		}
338
		
337
		
339
		$correspondance_codes_insee_noms = $gestionnaire_communes->obtenirTableauNomsCommunesParTableauCodesInsee($codes_insee_communes);
338
		$correspondance_codes_insee_noms = $gestionnaire_communes->obtenirTableauNomsCommunesParTableauCodesInsee($codes_insee_communes);
340
		$correspondance_id_utilisateur = $gestionnaire_utilisateurs->getListeUtilisateurFormateeId();
339
		$correspondance_id_utilisateur = $gestionnaire_utilisateurs->getListeUtilisateurFormateeId();
341
		
340
		
342
		foreach($resultats_formates as &$resultat) {
341
		foreach($resultats_formates as &$resultat) {
343
			
342
			
344
			if(isset($correspondance_codes_insee_noms[$resultat['code_commune']]) && trim($correspondance_codes_insee_noms[$resultat['code_commune']]) != '') {								
343
			if(isset($correspondance_codes_insee_noms[$resultat['code_commune']]) && trim($correspondance_codes_insee_noms[$resultat['code_commune']]) != '') {								
345
				$resultat['nom_commune'] = $correspondance_codes_insee_noms[$resultat['code_commune']];
344
				$resultat['nom_commune'] = $correspondance_codes_insee_noms[$resultat['code_commune']];
346
			}
345
			}
347
			
346
			
348
			$resultat['pseudo_participant'] = $correspondance_id_utilisateur[$resultat['id_participant']]['name'];
347
			$resultat['pseudo_participant'] = $correspondance_id_utilisateur[$resultat['id_participant']]['name'];
349
			$resultat['mail_participant'] = $correspondance_id_utilisateur[$resultat['id_participant']]['mail'];
348
			$resultat['mail_participant'] = $correspondance_id_utilisateur[$resultat['id_participant']]['mail'];
350
		}
349
		}
351
		
350
		
352
		return $resultats_formates;
351
		return $resultats_formates;
353
	}
352
	}
354
	
353
	
355
	public function convertirTableauAssocVersCSV($tableau) {
354
	public function convertirTableauAssocVersCSV($tableau) {
356
		
355
		
357
		$csv = '';
356
		$csv = '';
358
		$colonnes = array_keys($tableau[0]);
357
		$colonnes = array_keys($tableau[0]);
359
		$csv .= implode(';',$colonnes).";\n";
358
		$csv .= implode(';',$colonnes).";\n";
360
		
359
		
361
		foreach($tableau as $elements) {
360
		foreach($tableau as $elements) {
362
			$csv .= implode(';',$elements).";\n";
361
			$csv .= implode(';',$elements).";\n";
363
		}
362
		}
364
		
363
		
365
		return $csv;
364
		return $csv;
366
	}
365
	}
367
	
366
	
368
	public function envoyerFichier($contenu) {
367
	public function envoyerFichier($contenu) {
369
		
368
		
370
		$nom_fichier = "observations_export.csv";
369
		$nom_fichier = "observations_export.csv";
371
		$chemin_fichier = $this->config['appli']['chemin_fichiers_temp'].'/'.$nom_fichier;
370
		$chemin_fichier = $this->config['appli']['chemin_fichiers_temp'].'/'.$nom_fichier;
372
		
371
		
373
		file_put_contents($chemin_fichier, $contenu);	
372
		file_put_contents($chemin_fichier, $contenu);	
374
			
373
			
375
		$contenu = file_get_contents($chemin_fichier);
374
		$contenu = file_get_contents($chemin_fichier);
376
		$taille_fichier = filesize($chemin_fichier);
375
		$taille_fichier = filesize($chemin_fichier);
377
		
376
		
378
		unlink($chemin_fichier);
377
		unlink($chemin_fichier);
379
		
378
		
380
		ini_set('zlib.output_compression','Off');
379
		ini_set('zlib.output_compression','Off');
381
		
380
		
382
		header('Pragma: public');
381
		header('Pragma: public');
383
		header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
382
		header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
384
		header('Cache-Control: must-revalidate, pre-check=0, post-check=0, max-age=0');
383
		header('Cache-Control: must-revalidate, pre-check=0, post-check=0, max-age=0');
385
		
384
		
386
		header('Content-Tranfer-Encoding: none');
385
		header('Content-Tranfer-Encoding: none');
387
		
386
		
388
		header('Content-Type: application/octetstream; name="'.$nom_fichier.'"');
387
		header('Content-Type: application/octetstream; name="'.$nom_fichier.'"');
389
		header('Content-Disposition: attachement; filename="'.$nom_fichier.'"');
388
		header('Content-Disposition: attachement; filename="'.$nom_fichier.'"');
390
		
389
		
391
		header('Content-Length: '.$taille_fichier);
390
		header('Content-Length: '.$taille_fichier);
392
		
391
		
393
		echo $contenu;
392
		echo $contenu;
394
		exit();
393
		exit();
395
	}
394
	}
396
	
395
	
397
	private function formaterInformationPourEnvoi($tableauinfos) {
396
	private function formaterInformationPourEnvoi($tableauinfos) {
398
 
397
 
399
	}
398
	}
400
}
399
}
401
?>
400
?>