Subversion Repositories Sites.obs-saisons.fr

Rev

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

Rev 327 Rev 330
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
 
-
 
49
		public function getExportEvolutionPhenologiqueJson() {
-
 
50
 
-
 
51
				$evenements = explode(',', $_GET['evenements']);
-
 
52
				$condition_evenements = '';
-
 
53
				$sous_condition_evenements = [];
-
 
54
				foreach($evenements as $evenement) {
-
 
55
					$sous_condition_evenements[] = 'oo_ce_evenement = '.$this->proteger($evenement);
-
 
56
				}
-
 
57
				$condition_evenements .= '('.implode(' OR ', $sous_condition_evenements).')';
-
 
58
				$condition_espece = 'oi_ce_espece = '.$this->proteger($_GET['espece']);
-
 
59
 
-
 
60
				$formule_moyenne_date = 'FROM_UNIXTIME(AVG(UNIX_TIMESTAMP((oo_date))))';
-
 
61
 
-
 
62
				$requete = 'SELECT '.$formule_moyenne_date.' as date_moyenne, oo_ce_evenement FROM ods_observations oo '.
-
 
63
										'LEFT JOIN ods_individus oi ON oi_id_individu = oo_ce_individu '.
-
 
64
										'INNER JOIN ods_especes oe ON oe.oe_espece_active = 1 '.
-
 
65
										'AND oe.oe_id_espece = oi_ce_espece '.
-
 
66
										'WHERE oo_date != "0000-00-00" AND DAY(oo_date) != "00" '.
-
 
67
										'AND '.$condition_espece.' '.
-
 
68
										'AND '.$condition_evenements.' '.
-
 
69
										'AND oo_ce_participant != "4" AND oo_ce_participant != 1 AND oo_absence_evenement = "0" '.
-
 
70
										'GROUP BY YEAR(oo_date), oo_ce_evenement '.
-
 
71
										'ORDER BY oo_date DESC';
-
 
72
 
-
 
73
				$donnees = $this->executerRequete($requete);
-
 
74
 
-
 
75
				$donnees_formatees = [];
-
 
76
				foreach($donnees as $donnee) {
-
 
77
					$stade = $donnee['oo_ce_evenement'];
-
 
78
					if(empty($donnees_formatees[$stade])) {
-
 
79
						$donnees_formatees[$stade] = ['x' => [], 'y' => []];
-
 
80
					}
-
 
81
 
-
 
82
					$date_time = strtotime($donnee['date_moyenne']);
-
 
83
					// on ramène grossièrement la date de l'année à une valeur numérique
-
 
84
					// ex: le 15 janvier devient 1.5
-
 
85
					$nb_jours_dans_mois = date(' t ', strtotime($date_time));
-
 
86
					$jour_mois_num = (date('d', $date_time)/$nb_jours_dans_mois)+date('m', $date_time);
-
 
87
 
-
 
88
					$donnees_formatees[$stade]['x'][] = $donnee['date_moyenne'];
-
 
89
					$donnees_formatees[$stade]['y'][] = $jour_mois_num;
-
 
90
					$donnees_formatees[$stade]['text'][] = date('d/m/Y', strtotime($donnee['date_moyenne']));
-
 
91
				}
-
 
92
 
-
 
93
				$this->type_mime = 'application/json';
-
 
94
 
-
 
95
				return $donnees_formatees;
-
 
96
		}
-
 
97
 
-
 
98
		public function getExportPhasesPhenologiquesJson() {
-
 
99
 
-
 
100
			$evenements = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_EVENEMENTS);
-
 
101
			$evenements_a_regrouper = [];
-
 
102
 
-
 
103
			foreach($evenements as $evenement) {
-
 
104
				$nom_evenement = $evenement['ot_cle'];
-
 
105
				$nom_evenement_tab = explode('_', $nom_evenement);
-
 
106
 
-
 
107
				// évènement à plusieurs stades (evenement_floraison_stade_11 par exemple)
-
 
108
				if(count($nom_evenement_tab) == 4) {
-
 
109
					// on fait pointer la clé de l'évènement vers sont groupe (dans l'exemple floraison)
-
 
110
					$evenements_a_regrouper[$evenement['ot_id_triple']] = $nom_evenement_tab[1];
-
 
111
				} else {
-
 
112
					// sinon ce sont des evènements à un seul stade (comme premiere_apparition)
-
 
113
					// auquel cas on supprime juste le suffixe evenement_
-
 
114
					$evenements_a_regrouper[$evenement['ot_id_triple']] = str_replace('evenement_', '',$nom_evenement);
-
 
115
				}
-
 
116
			}
-
 
117
 
-
 
118
			$requete = 'SELECT oo_date, oo_ce_evenement FROM ods_observations oo '.
-
 
119
									'LEFT JOIN ods_individus oi ON oi_id_individu = oo_ce_individu '.
-
 
120
									'INNER JOIN ods_especes oe ON oe.oe_espece_active = 1 '.
-
 
121
									'AND oe.oe_id_espece = oi_ce_espece '.
-
 
122
									'WHERE oo_date != "0000-00-00" AND DAY(oo_date) != "00" '.
-
 
123
									'AND YEAR(oo_date) = '.$this->proteger($_GET['annee']).' '.
-
 
124
									'AND oi_ce_espece = '.$this->proteger($_GET['espece']).' '.
-
 
125
									'AND oo_ce_participant != "4" AND oo_ce_participant != 1 AND oo_absence_evenement = "0" '.
-
 
126
									'ORDER BY oo_date DESC';
-
 
127
 
-
 
128
			$donnees = $this->executerRequete($requete);
-
 
129
 
-
 
130
			$donnees_formatees = [];
-
 
131
			// Regroupement d'évenements allant ensemble (ex.: début et fin de floraison)
-
 
132
			foreach($donnees as $donnee) {
-
 
133
				$cle_groupe_evenements = $evenements_a_regrouper[$donnee['oo_ce_evenement']];
-
 
134
				if(empty($donnees_formatees[$cle_groupe_evenements])) {
-
 
135
					$donnees_formatees[$cle_groupe_evenements] = [];
-
 
136
				}
-
 
137
 
-
 
138
				$date_time = strtotime($donnee['oo_date']);
-
 
139
				// on ramène la date de l'année à une valeur numérique
-
 
140
				// ex: le 15 janvier devient 1.5 pour pouvoir afficher ça plus simplement
-
 
141
				// sur le graphique d'arrivée qui n'aura à travailler qu'avec des nombres
-
 
142
				$nb_jours_dans_mois = date(' t ', strtotime($date_time));
-
 
143
				$jour_mois_num = (date('d', $date_time)/$nb_jours_dans_mois)+date('m', $date_time);
-
 
144
				// on garde 7 chiffres après la virgule car côté client on a besoin de s'assurer d'une largeur
-
 
145
				// suffisante lors du calcul de la légende de chaque point.
-
 
146
				// En fait la largeur du nombre détermine la largeur de son conteneur affiché lorsdu hover sur le point,
-
 
147
				// or il est nécessaire de remplacer cette légende lors de l'affichage (qui contient un nombre) par une vraie date.
-
 
148
				$jour_mois_num = number_format($jour_mois_num, 7);
-
 
149
 
-
 
150
				$donnees_formatees[$cle_groupe_evenements]['x'][] = $jour_mois_num;
-
 
151
				$donnees_formatees[$cle_groupe_evenements]['text'][] = date('d/m/Y', strtotime($donnee['oo_date']));
-
 
152
 
-
 
153
 
-
 
154
				$donnees_formatees[$cle_groupe_evenements]['text_index']["'".$jour_mois_num."'"] = date('d/m/Y', strtotime($donnee['oo_date']));
-
 
155
			}
-
 
156
 
-
 
157
			$this->type_mime = 'application/json';
-
 
158
 
-
 
159
			return $donnees_formatees;
-
 
160
		}
48
 
161
 
49
    public function getExportStation($start = null,$limit = null, $order_by = 'oo_date') {
162
    public function getExportStation($start = null,$limit = null, $order_by = 'oo_date') {
50
 
163
 
51
    	$id_demo = $this->config['appli']['id_participant_demo'];
164
    	$id_demo = $this->config['appli']['id_participant_demo'];
52
    	$requete_selection_stations = 'SELECT * FROM ods_stations WHERE os_ce_participant != '.$this->proteger($id_demo);
165
    	$requete_selection_stations = 'SELECT * FROM ods_stations WHERE os_ce_participant != '.$this->proteger($id_demo);
53
    	$res_selection_stations = $this->executerRequete($requete_selection_stations);
166
    	$res_selection_stations = $this->executerRequete($requete_selection_stations);
54
 
167
 
55
    	return $res_selection_stations;
168
    	return $res_selection_stations;
56
    }
169
    }
57
 
170
 
58
    public function getExportUtilisateurCsv() {
171
    public function getExportUtilisateurCsv() {
59
 
172
 
60
    	$controle = new ControleUtilisateur($this->config);
173
    	$controle = new ControleUtilisateur($this->config);
61
    	$controle->authentifierAdmin();
174
    	$controle->authentifierAdmin();
62
 
175
 
63
    	$gestionnaire_utilisateurs = new OdsUtilisateur($this->config);
176
    	$gestionnaire_utilisateurs = new OdsUtilisateur($this->config);
64
    	$utilisateurs = $gestionnaire_utilisateurs->getListeUtilisateurAvecInfosComplementairesFormateeId();
177
    	$utilisateurs = $gestionnaire_utilisateurs->getListeUtilisateurAvecInfosComplementairesFormateeId();
65
 
178
 
66
    	$utilisateurs_formates = array();
179
    	$utilisateurs_formates = array();
67
    	$premiere_annee = 2006;
180
    	$premiere_annee = 2006;
68
 
181
 
69
    	$nb_obs = $this->compterObservationsParUtilisateur();
182
    	$nb_obs = $this->compterObservationsParUtilisateur();
70
    	$annees = array();
183
    	$annees = array();
71
 
184
 
72
    	foreach ($utilisateurs as $id => $utilisateur) {
185
    	foreach ($utilisateurs as $id => $utilisateur) {
73
    		$utilisateur_formate = array(
186
    		$utilisateur_formate = array(
74
	    		'id' => isset($utilisateur['uid']) ? $utilisateur['uid'] : '',
187
	    		'id' => isset($utilisateur['uid']) ? $utilisateur['uid'] : '',
75
	    		'pseudo' => isset($utilisateur['name']) ? $utilisateur['name'] : '',
188
	    		'pseudo' => isset($utilisateur['name']) ? $utilisateur['name'] : '',
76
	    		'mail' => isset($utilisateur['mail']) ? $utilisateur['mail'] : '',
189
	    		'mail' => isset($utilisateur['mail']) ? $utilisateur['mail'] : '',
77
	    		'nom' => isset($utilisateur['profile_nom']) ? $utilisateur['profile_nom'] : '',
190
	    		'nom' => isset($utilisateur['profile_nom']) ? $utilisateur['profile_nom'] : '',
78
	    		'prenom' => isset($utilisateur['profile_prenom']) ? $utilisateur['profile_prenom'] : '',
191
	    		'prenom' => isset($utilisateur['profile_prenom']) ? $utilisateur['profile_prenom'] : '',
79
	    		'code postal' => isset($utilisateur['profile_code_postal']) ? $utilisateur['profile_code_postal'] : '',
192
	    		'code postal' => isset($utilisateur['profile_code_postal']) ? $utilisateur['profile_code_postal'] : '',
80
	    		'ville' => isset($utilisateur['profile_ville']) ? $utilisateur['profile_ville'] : '',
193
	    		'ville' => isset($utilisateur['profile_ville']) ? $utilisateur['profile_ville'] : '',
81
	    		'type' => isset($utilisateur['profile_type']) ? $utilisateur['profile_type'] : '',
194
	    		'type' => isset($utilisateur['profile_type']) ? $utilisateur['profile_type'] : '',
82
	    		'date inscription' => isset($utilisateur['created']) ? date('d/m/Y', $utilisateur['created']) : '',
195
	    		'date inscription' => isset($utilisateur['created']) ? date('d/m/Y', $utilisateur['created']) : '',
83
    		);
196
    		);
84
 
197
 
85
    		for($i = $premiere_annee; $i <= date('Y'); $i++) {
198
    		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';
199
    			$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';
200
    			$utilisateur_formate['annee '.$i] = isset($nb_obs[$utilisateur['uid']]) && isset($nb_obs[$utilisateur['uid']][$i]) ? $nb_obs[$utilisateur['uid']][$i] : '0';
88
    		}
201
    		}
89
 
202
 
90
    		$utilisateurs_formates[] = $utilisateur_formate;
203
    		$utilisateurs_formates[] = $utilisateur_formate;
91
    	}
204
    	}
92
 
205
 
93
    	$ligne_total_obs = array(
206
    	$ligne_total_obs = array(
94
    		'id' => '',
207
    		'id' => '',
95
    		'pseudo' => '',
208
    		'pseudo' => '',
96
    		'mail' => '',
209
    		'mail' => '',
97
    		'nom' => '',
210
    		'nom' => '',
98
    		'prenom' => '',
211
    		'prenom' => '',
99
    		'code postal' => '',
212
    		'code postal' => '',
100
    		'ville' => '',
213
    		'ville' => '',
101
    		'type' => '',
214
    		'type' => '',
102
    		'date inscription' => ''
215
    		'date inscription' => ''
103
    	);
216
    	);
104
    	$ligne_total_obs = array_merge($ligne_total_obs, $annees);
217
    	$ligne_total_obs = array_merge($ligne_total_obs, $annees);
105
    	$utilisateurs_formates[] = $ligne_total_obs;
218
    	$utilisateurs_formates[] = $ligne_total_obs;
106
    	$csv = $this->convertirTableauAssocVersCSV($utilisateurs_formates);
219
    	$csv = $this->convertirTableauAssocVersCSV($utilisateurs_formates);
107
    	$this->envoyerFichier($csv, 'utilisateurs');
220
    	$this->envoyerFichier($csv, 'utilisateurs');
108
    }
221
    }
109
 
222
 
110
    private function compterObservationsParUtilisateur() {
223
    private function compterObservationsParUtilisateur() {
111
    	$requete = 'SELECT COUNT(*) as nb_obs, oo_ce_participant as participant, YEAR(oo_date) as annee '.
224
    	$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)';
225
    			   'FROM `ods_observations` WHERE oo_date != "0000-00-00" GROUP BY oo_ce_participant, YEAR(oo_date)';
113
 
226
 
114
    	$res_selection_obs = $this->executerRequete($requete);
227
    	$res_selection_obs = $this->executerRequete($requete);
115
    	$stats = array();
228
    	$stats = array();
116
    	foreach ($res_selection_obs as $obs_nb) {
229
    	foreach ($res_selection_obs as $obs_nb) {
117
    		$stats[$obs_nb['participant']][$obs_nb['annee']] = $obs_nb['nb_obs'];
230
    		$stats[$obs_nb['participant']][$obs_nb['annee']] = $obs_nb['nb_obs'];
118
    	}
231
    	}
119
 
232
 
120
    	return $stats;
233
    	return $stats;
121
    }
234
    }
122
 
235
 
123
    public function formaterListeStationPourExportJson($tableau_stations_infos) {
236
    public function formaterListeStationPourExportJson($tableau_stations_infos) {
124
 
237
 
125
    	$gestionnaire_especes = new OdsEspece($this->config);
238
    	$gestionnaire_especes = new OdsEspece($this->config);
126
    	$gestionnaire_communes = new OdsCommune($this->config);
239
    	$gestionnaire_communes = new OdsCommune($this->config);
127
    	$gestionnaire_utilisateurs = new OdsUtilisateur($this->config);
240
    	$gestionnaire_utilisateurs = new OdsUtilisateur($this->config);
128
 
241
 
129
    	$especes = $gestionnaire_especes->getToutesEspeces();
242
    	$especes = $gestionnaire_especes->getToutesEspeces();
130
    	$evenements = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_EVENEMENTS);
243
    	$evenements = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_EVENEMENTS);
131
    	$milieux = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_MILIEUX);
244
    	$milieux = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_MILIEUX);
132
    	$utilisateurs = $gestionnaire_utilisateurs->getListeUtilisateurAvecInfosComplementairesFormateeId();
245
    	$utilisateurs = $gestionnaire_utilisateurs->getListeUtilisateurAvecInfosComplementairesFormateeId();
133
    	$communes = $gestionnaire_communes->obtenirCommunesLieesAStationIndexeesCodeInsee();
246
    	$communes = $gestionnaire_communes->obtenirCommunesLieesAStationIndexeesCodeInsee();
134
 
247
 
135
    	$resultats_formates = array();
248
    	$resultats_formates = array();
136
    	$stats = array('total' => count($tableau_stations_infos));
249
    	$stats = array('total' => count($tableau_stations_infos));
137
 
250
 
138
    	foreach($tableau_stations_infos as $stations_infos) {
251
    	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'] : '';
252
    		$commune = isset($communes[$stations_infos['os_ce_commune']]['oc_nom']) ? $communes[$stations_infos['os_ce_commune']]['oc_nom'] : '';
140
 
253
 
141
    		$id_station = $stations_infos['os_id_station'];
254
    		$id_station = $stations_infos['os_id_station'];
142
    		$resultats_formates[$id_station]['nom'] = $stations_infos['os_nom'];
255
    		$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) : '';
256
    		$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;
257
    		$resultats_formates[$id_station]['nom_commune'] = $commune;
145
    		$resultats_formates[$id_station]['latitude'] = $stations_infos['os_latitude'];
258
    		$resultats_formates[$id_station]['latitude'] = $stations_infos['os_latitude'];
146
    		$resultats_formates[$id_station]['longitude'] = $stations_infos['os_longitude'];
259
    		$resultats_formates[$id_station]['longitude'] = $stations_infos['os_longitude'];
147
    		$resultats_formates[$id_station]['altitude'] = $stations_infos['os_altitude'];
260
    		$resultats_formates[$id_station]['altitude'] = $stations_infos['os_altitude'];
148
    		$resultats_formates[$id_station]['type_participant'] = 'Particulier';
261
    		$resultats_formates[$id_station]['type_participant'] = 'Particulier';
149
 
262
 
150
    		if(isset($utilisateurs[$stations_infos['os_ce_participant']])) {
263
    		if(isset($utilisateurs[$stations_infos['os_ce_participant']])) {
151
    			$participant = $utilisateurs[$stations_infos['os_ce_participant']];
264
    			$participant = $utilisateurs[$stations_infos['os_ce_participant']];
152
    			$resultats_formates[$id_station]['participant']['id'] = $participant['uid'];
265
    			$resultats_formates[$id_station]['participant']['id'] = $participant['uid'];
153
    			$resultats_formates[$id_station]['participant']['nom'] = $participant['name'];
266
    			$resultats_formates[$id_station]['participant']['nom'] = $participant['name'];
154
    			$resultats_formates[$id_station]['type_participant'] = isset($participant['profile_type']) ? $participant['profile_type'] : 'Particulier';
267
    			$resultats_formates[$id_station]['type_participant'] = isset($participant['profile_type']) ? $participant['profile_type'] : 'Particulier';
155
    		} else {
268
    		} else {
156
    			$resultats_formates[$id_station]['participant']['id'] = null;
269
    			$resultats_formates[$id_station]['participant']['id'] = null;
157
    			$resultats_formates[$id_station]['participant']['nom'] = 'Anonyme';
270
    			$resultats_formates[$id_station]['participant']['nom'] = 'Anonyme';
158
    			$resultats_formates[$id_station]['type_participant'] = 'Particulier';
271
    			$resultats_formates[$id_station]['type_participant'] = 'Particulier';
159
    		}
272
    		}
160
    		if(isset($stats[$resultats_formates[$id_station]['type_participant']])) {
273
    		if(isset($stats[$resultats_formates[$id_station]['type_participant']])) {
161
    			$stats[$resultats_formates[$id_station]['type_participant']]++;
274
    			$stats[$resultats_formates[$id_station]['type_participant']]++;
162
    		} else {
275
    		} else {
163
    			$stats[$resultats_formates[$id_station]['type_participant']] = 1;
276
    			$stats[$resultats_formates[$id_station]['type_participant']] = 1;
164
    		}
277
    		}
165
    	}
278
    	}
166
    	$resultat = array('stats' => $stats, 'stations' => $resultats_formates);
279
    	$resultat = array('stats' => $stats, 'stations' => $resultats_formates);
167
    	return $resultat;
280
    	return $resultat;
168
    }
281
    }
169
 
282
 
170
	public function getExportObservation($start = null,$limit = null, $order_by = 'oo_date') {
283
	public function getExportObservation($start = null,$limit = null, $order_by = 'oo_date') {
171
 
284
 
172
		$requete_selection_observations = 'SELECT oo.*, oi.*, os.*, oc.* FROM ods_observations oo'.
285
		$requete_selection_observations = 'SELECT oo.*, oi.*, os.*, oc.* FROM ods_observations oo'.
173
									' LEFT JOIN ods_individus oi'.
286
									' LEFT JOIN ods_individus oi'.
174
									' ON oi_id_individu = oo_ce_individu'.
287
									' ON oi_id_individu = oo_ce_individu'.
175
									' INNER JOIN ods_especes oe'.
288
									' INNER JOIN ods_especes oe'.
176
									' ON oe.oe_espece_active = 1 '.
289
									' ON oe.oe_espece_active = 1 '.
177
									' AND oe.oe_id_espece = oi_ce_espece '.
290
									' AND oe.oe_id_espece = oi_ce_espece '.
178
									' LEFT JOIN ods_stations os'.
291
									' LEFT JOIN ods_stations os'.
179
									' ON oi_ce_station = os_id_station '.
292
									' ON oi_ce_station = os_id_station '.
180
									' LEFT JOIN ods_communes oc'.
293
									' LEFT JOIN ods_communes oc'.
181
									' ON os_ce_commune = oc_code_insee ';
294
									' ON os_ce_commune = oc_code_insee ';
182
 
295
 
183
		$requete_selection_observations .= $this->construireConditionRequete();
296
		$requete_selection_observations .= $this->construireConditionRequete();
184
		$requete_selection_observations .= ' ORDER BY oo_date DESC';
297
		$requete_selection_observations .= ' ORDER BY oo_date DESC';
185
 
298
 
186
		$res_selection_observations = $this->executerRequete($requete_selection_observations);
299
		$res_selection_observations = $this->executerRequete($requete_selection_observations);
187
 
300
 
188
		return $res_selection_observations;
301
		return $res_selection_observations;
189
	}
302
	}
190
 
303
 
191
	private function creerFiltreIdZoneGeo($valeurMasque) {
304
	private function creerFiltreIdZoneGeo($valeurMasque) {
192
		$masque = '';
305
		$masque = '';
193
		$dept = $valeurMasque;
306
		$dept = $valeurMasque;
194
		$dept = sprintf('%02s', $dept);
307
		$dept = sprintf('%02s', $dept);
195
		$dept = sprintf("%-'_5s", $dept);
308
		$dept = sprintf("%-'_5s", $dept);
196
		$masque = " oc_code_insee LIKE ".$this->proteger($dept);
309
		$masque = " oc_code_insee LIKE ".$this->proteger($dept);
197
		return $masque;
310
		return $masque;
198
	}
311
	}
199
 
312
 
200
	public function construireConditionRequete() {
313
	public function construireConditionRequete() {
201
 
314
 
202
		$condition = ' WHERE oo_date != "0000-00-00" AND DAY(oo_date) != "00" AND ';
315
		$condition = ' WHERE oo_date != "0000-00-00" AND DAY(oo_date) != "00" AND ';
203
 
316
 
204
		foreach($_GET as $cle => $valeur) {
317
		foreach($_GET as $cle => $valeur) {
205
 
318
 
206
			switch($cle) {
319
			switch($cle) {
207
 
320
 
208
				case 'type_espece':
321
				case 'type_espece':
209
					$condition .= 'oi_ce_espece IN (SELECT oe_id_espece FROM ods_especes WHERE oe_ce_type = '.$this->proteger($valeur).')';
322
					$condition .= 'oi_ce_espece IN (SELECT oe_id_espece FROM ods_especes WHERE oe_ce_type = '.$this->proteger($valeur).')';
210
				break;
323
				break;
211
 
324
 
212
				case 'annee':
325
				case 'annee':
213
					if($this->anneesMultiplesDemandees($valeur)) {
326
					if($this->anneesMultiplesDemandees($valeur)) {
214
						$valeur = rtrim($valeur,',');
327
						$valeur = rtrim($valeur,',');
215
						$condition .= 'YEAR(oo_date) IN ('.$valeur.')';
328
						$condition .= 'YEAR(oo_date) IN ('.$valeur.')';
216
					} else {
329
					} else {
217
						$condition .= 'YEAR(oo_date) ';
330
						$condition .= 'YEAR(oo_date) ';
218
						$condition .= ' = '.$this->proteger($valeur);
331
						$condition .= ' = '.$this->proteger($valeur);
219
					}
332
					}
220
				break;
333
				break;
221
 
334
 
222
				case 'mois':
335
				case 'mois':
223
					$condition .= 'MONTH(oo_date) <= '.$this->proteger($valeur);
336
					$condition .= 'MONTH(oo_date) <= '.$this->proteger($valeur);
224
				break;
337
				break;
225
 
338
 
226
				case 'espece':
339
				case 'espece':
227
					$condition .= 'oi_ce_espece IN ('.$valeur.') ';
340
					$condition .= 'oi_ce_espece IN ('.$valeur.') ';
228
				break;
341
				break;
229
 
342
 
230
				case 'evenement':
343
				case 'evenement':
231
					$condition .= 'oo_ce_evenement = '.$this->proteger($valeur);
344
					$condition .= 'oo_ce_evenement = '.$this->proteger($valeur);
232
				break;
345
				break;
-
 
346
 
-
 
347
				case 'evenements':
-
 
348
					//$condition .= 'oo_ce_evenement IN ('.$this->proteger($valeur).')';
-
 
349
					$evenements = explode(',', $valeur);
-
 
350
					$sous_condition_evenements = [];
-
 
351
					foreach($evenements as $evenement) {
-
 
352
						$sous_condition_evenements[] = 'oo_ce_evenement = '.$this->proteger($evenement);
-
 
353
					}
-
 
354
					$condition .= '('.implode(' OR ', $sous_condition_evenements).')';
-
 
355
				break;
233
 
356
 
234
				case 'utilisateur':
357
				case 'utilisateur':
235
					$condition .= 'oo_ce_participant = '.$this->proteger($valeur);
358
					$condition .= 'oo_ce_participant = '.$this->proteger($valeur);
236
				break;
359
				break;
237
 
360
 
238
				case 'departement' :
361
				case 'departement' :
239
					$condition .= $this->creerFiltreIdZoneGeo($valeur);
362
					$condition .= $this->creerFiltreIdZoneGeo($valeur);
240
				break;
363
				break;
241
 
364
 
242
				case 'region' :
365
				case 'region' :
243
					$requete_association_region = 'SELECT * FROM ods_triples WHERE ot_ce_parent = 36 AND ot_valeur = '.$valeur;
366
					$requete_association_region = 'SELECT * FROM ods_triples WHERE ot_ce_parent = 36 AND ot_valeur = '.$valeur;
244
					$listeAssociationRegions = $this->executerRequete($requete_association_region);
367
					$listeAssociationRegions = $this->executerRequete($requete_association_region);
245
					$departements = array();
368
					$departements = array();
246
					foreach ($listeAssociationRegions as $associationRegion) {
369
					foreach ($listeAssociationRegions as $associationRegion) {
247
						$departements[] = $this->creerFiltreIdZoneGeo($associationRegion['ot_cle']);
370
						$departements[] = $this->creerFiltreIdZoneGeo($associationRegion['ot_cle']);
248
					}
371
					}
249
					$condition .= ' ('. implode(' OR ', $departements).')';
372
					$condition .= ' ('. implode(' OR ', $departements).')';
250
				break;
373
				break;
251
			}
374
			}
252
 
375
 
253
			$condition .= ' AND ';
376
			$condition .= ' AND ';
254
		}
377
		}
255
 
378
 
256
		$condition = rtrim($condition,'AND ');
379
		$condition = rtrim($condition,'AND ');
257
 
380
 
258
		$id_demo = $this->config['appli']['id_participant_demo'];
381
		$id_demo = $this->config['appli']['id_participant_demo'];
259
		$id_admin = $this->config['appli']['id_participant_admin'];
382
		$id_admin = $this->config['appli']['id_participant_admin'];
260
 
383
 
261
		$condition .= ' AND oo_ce_participant != '.$id_demo;
384
		$condition .= ' AND oo_ce_participant != '.$id_demo;
262
		$condition .= ' AND oo_ce_participant != '.$id_admin;
385
		$condition .= ' AND oo_ce_participant != '.$id_admin;
263
 
386
 
264
		// par défaut les observations d'absence d'évènement ne sont pas incluses
387
		// par défaut les observations d'absence d'évènement ne sont pas incluses
265
		// sauf si on le demande explicitement
388
		// sauf si on le demande explicitement
266
		if(empty($_GET['inclure-absences']) || $_GET['inclure-absences'] == 0) {
389
		if(empty($_GET['inclure-absences']) || $_GET['inclure-absences'] == 0) {
267
			$condition .= ' AND oo_absence_evenement = 0';
390
			$condition .= ' AND oo_absence_evenement = 0';
268
		}
391
		}
269
 
392
 
270
		return $condition;
393
		return $condition;
271
	}
394
	}
272
 
395
 
273
	private function anneesMultiplesDemandees($annee) {
396
	private function anneesMultiplesDemandees($annee) {
274
		// un ensemble d'identifiants est une suite d'identifiants séparés par des virgules
397
		// un ensemble d'identifiants est une suite d'identifiants séparés par des virgules
275
		// sans virgule terminale
398
		// sans virgule terminale
276
		$reg_exp = "/^(([0-9])+,)*([0-9])+$/";
399
		$reg_exp = "/^(([0-9])+,)*([0-9])+$/";
277
		return preg_match($reg_exp, $annee);
400
		return preg_match($reg_exp, $annee);
278
	}
401
	}
279
 
402
 
280
	public function getExportObservationPlat() {
403
	public function getExportObservationPlat() {
281
		// dans le csv les observations d'absence sont inclues par contre
404
		// dans le csv les observations d'absence sont inclues par contre
282
		$_GET['inclure-absences'] = 1;
405
		$_GET['inclure-absences'] = 1;
283
		$donnees = $this->getExportObservation();
406
		$donnees = $this->getExportObservation();
284
		$donnees_formatees = $this->formaterListeObservationPourExportCSV($donnees);
407
		$donnees_formatees = $this->formaterListeObservationPourExportCSV($donnees);
285
 
408
 
286
		return $donnees_formatees ;
409
		return $donnees_formatees ;
287
	}
410
	}
288
 
411
 
289
	public function getExportObservationJson() {
412
	public function getExportObservationJson() {
290
 
413
 
291
		$donnees = $this->getExportObservation();
414
		$donnees = $this->getExportObservation();
292
		$donnees_formatees = $this->formaterListeObservationPourExportJson($donnees);
415
		$donnees_formatees = $this->formaterListeObservationPourExportJson($donnees);
293
 
416
 
294
		$this->type_mime = 'application/json';
417
		$this->type_mime = 'application/json';
295
 
418
 
296
		return $donnees_formatees;
419
		return $donnees_formatees;
297
	}
420
	}
298
 
421
 
299
	public function formaterListeObservationPourExportJson($tableau_observations_infos) {
422
	public function formaterListeObservationPourExportJson($tableau_observations_infos) {
300
 
423
 
301
		$gestionnaire_especes = new OdsEspece($this->config);
424
		$gestionnaire_especes = new OdsEspece($this->config);
302
		$gestionnaire_communes = new OdsCommune($this->config);
425
		$gestionnaire_communes = new OdsCommune($this->config);
303
 
426
 
304
		$especes = $gestionnaire_especes->getToutesEspeces();
427
		$especes = $gestionnaire_especes->getToutesEspeces();
305
		$evenements = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_EVENEMENTS);
428
		$evenements = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_EVENEMENTS);
306
		$milieux = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_MILIEUX);
429
		$milieux = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_MILIEUX);
307
 
430
 
308
		$resultats_formates = array();
431
		$resultats_formates = array();
309
 
432
 
310
		foreach($tableau_observations_infos as $observations_infos) {
433
		foreach($tableau_observations_infos as $observations_infos) {
311
 
434
 
312
			$id_espece = $observations_infos['oi_ce_espece'];
435
			$id_espece = $observations_infos['oi_ce_espece'];
313
			if($id_espece == 0) {
436
			if($id_espece == 0) {
314
				continue;
437
				continue;
315
			}
438
			}
316
			$nom_espece =  $especes[$id_espece]['nom_scientifique'];
439
			$nom_espece =  $especes[$id_espece]['nom_scientifique'];
317
 
440
 
318
			$id_evenement = $observations_infos['oo_ce_evenement'];
441
			$id_evenement = $observations_infos['oo_ce_evenement'];
319
			$chaine_evenement = $evenements[$id_evenement]['ot_cle'];
442
			$chaine_evenement = $evenements[$id_evenement]['ot_cle'];
320
 
443
 
321
			$infos_evenement = $this->renvoyerInformationStadeAPartirChaineTriple($chaine_evenement);
444
			$infos_evenement = $this->renvoyerInformationStadeAPartirChaineTriple($chaine_evenement);
322
 
445
 
323
			$date_observation_formatee = date($this->config['appli']['format_date'], strtotime($observations_infos['oo_date']));
446
			$date_observation_formatee = date($this->config['appli']['format_date'], strtotime($observations_infos['oo_date']));
324
 
447
 
325
			$id_observation = $observations_infos['oo_id_observation'];
448
			$id_observation = $observations_infos['oo_id_observation'];
326
			$infos_formatees = array(
449
			$infos_formatees = array(
327
				'date' => $date_observation_formatee,
450
				'date' => $date_observation_formatee,
328
				'evenenement' => $infos_evenement['nom'],
451
				'evenenement' => $infos_evenement['nom'],
329
				'code_bbch' => $infos_evenement['numero'],
452
				'code_bbch' => $infos_evenement['numero'],
330
				'nom_scientifique' => $nom_espece,
453
				'nom_scientifique' => $nom_espece,
331
				'id_espece' => $id_espece,
454
				'id_espece' => $id_espece,
332
				'participant' => $observations_infos['os_ce_participant']
455
				'participant' => $observations_infos['os_ce_participant']
333
			);
456
			);
334
 
457
 
335
			$id_station = $observations_infos['oi_ce_station'];
458
			$id_station = $observations_infos['oi_ce_station'];
336
 
459
 
337
			if(!isset($resultats_formates[$id_station])) {
460
			if(!isset($resultats_formates[$id_station])) {
338
				$resultats_formates[$id_station]['station'] = $observations_infos['os_nom'];
461
				$resultats_formates[$id_station]['station'] = $observations_infos['os_nom'];
339
				$resultats_formates[$id_station]['code_commune'] = $observations_infos['os_ce_commune'];
462
				$resultats_formates[$id_station]['code_commune'] = $observations_infos['os_ce_commune'];
340
				//$resultats_formates[$id_station]['nom_commune'] = $gestionnaire_communes->obtenirNomCommuneParCodeInsee($observations_infos['os_ce_commune']);
463
				//$resultats_formates[$id_station]['nom_commune'] = $gestionnaire_communes->obtenirNomCommuneParCodeInsee($observations_infos['os_ce_commune']);
341
				$resultats_formates[$id_station]['latitude'] = $observations_infos['os_latitude'];
464
				$resultats_formates[$id_station]['latitude'] = $observations_infos['os_latitude'];
342
				$resultats_formates[$id_station]['longitude'] = $observations_infos['os_longitude'];
465
				$resultats_formates[$id_station]['longitude'] = $observations_infos['os_longitude'];
343
				$resultats_formates[$id_station]['altitude'] = $observations_infos['os_altitude'];
466
				$resultats_formates[$id_station]['altitude'] = $observations_infos['os_altitude'];
344
				if(isset($milieux[$observations_infos['os_ce_environnement']]['ot_valeur'])) {
467
				if(isset($milieux[$observations_infos['os_ce_environnement']]['ot_valeur'])) {
345
					$resultats_formates[$id_station]['milieu'] = $milieux[$observations_infos['os_ce_environnement']]['ot_valeur'];
468
					$resultats_formates[$id_station]['milieu'] = $milieux[$observations_infos['os_ce_environnement']]['ot_valeur'];
346
				} else {
469
				} else {
347
					$resultats_formates[$id_station]['milieu'] = '';
470
					$resultats_formates[$id_station]['milieu'] = '';
348
				}
471
				}
349
				$resultats_formates[$id_station]['participant'] = $observations_infos['os_ce_participant'];
472
				$resultats_formates[$id_station]['participant'] = $observations_infos['os_ce_participant'];
350
			}
473
			}
351
 
474
 
352
			$resultats_formates[$id_station]['obs'][$id_observation] = $infos_formatees;
475
			$resultats_formates[$id_station]['obs'][$id_observation] = $infos_formatees;
353
		}
476
		}
354
 
477
 
355
		return $resultats_formates;
478
		return $resultats_formates;
356
	}
479
	}
357
 
480
 
358
	public function getFichierExportObservationCsv() {
481
	public function getFichierExportObservationCsv() {
359
		// dans le csv les observations d'absence sont inclues par contre
482
		// dans le csv les observations d'absence sont inclues par contre
360
		$_GET['inclure-absences'] = 1;
483
		$_GET['inclure-absences'] = 1;
361
		$donnees = $this->getExportObservation();
484
		$donnees = $this->getExportObservation();
362
		$donnees_formatees = $this->formaterListeObservationPourExportCSV($donnees);
485
		$donnees_formatees = $this->formaterListeObservationPourExportCSV($donnees);
363
		$chaine_csv = $this->convertirTableauAssocVersCSV($donnees_formatees);
486
		$chaine_csv = $this->convertirTableauAssocVersCSV($donnees_formatees);
364
 
487
 
365
		$this->envoyerFichier($chaine_csv);
488
		$this->envoyerFichier($chaine_csv);
366
	}
489
	}
367
 
490
 
368
	public function formaterListeObservationPourExportCSV($tableau_observations_infos) {
491
	public function formaterListeObservationPourExportCSV($tableau_observations_infos) {
369
 
492
 
370
		$gestionnaire_especes = new OdsEspece($this->config);
493
		$gestionnaire_especes = new OdsEspece($this->config);
371
		$gestionnaire_communes = new OdsCommune($this->config);
494
		$gestionnaire_communes = new OdsCommune($this->config);
372
		$gestionnaire_utilisateurs = new OdsUtilisateur($this->config);
495
		$gestionnaire_utilisateurs = new OdsUtilisateur($this->config);
373
 
496
 
374
		$especes = $gestionnaire_especes->getToutesEspeces();
497
		$especes = $gestionnaire_especes->getToutesEspeces();
375
		$evenements = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_EVENEMENTS);
498
		$evenements = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_EVENEMENTS);
376
		$milieux = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_MILIEUX);
499
		$milieux = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_MILIEUX);
377
 
500
 
378
		$codes_insee_communes = array();
501
		$codes_insee_communes = array();
379
 
502
 
380
		$resultats_formates = array();
503
		$resultats_formates = array();
381
		foreach($tableau_observations_infos as $observations_infos) {
504
		foreach($tableau_observations_infos as $observations_infos) {
382
 
505
 
383
			$id_espece = $observations_infos['oi_ce_espece'];
506
			$id_espece = $observations_infos['oi_ce_espece'];
384
			$nom_espece =  $especes[$id_espece]['nom_scientifique'];
507
			$nom_espece =  $especes[$id_espece]['nom_scientifique'];
385
 
508
 
386
			$id_evenement = $observations_infos['oo_ce_evenement'];
509
			$id_evenement = $observations_infos['oo_ce_evenement'];
387
			$chaine_evenement = $evenements[$id_evenement]['ot_cle'];
510
			$chaine_evenement = $evenements[$id_evenement]['ot_cle'];
388
 
511
 
389
			$infos_evenement = $this->renvoyerInformationStadeAPartirChaineTriple($chaine_evenement);
512
			$infos_evenement = $this->renvoyerInformationStadeAPartirChaineTriple($chaine_evenement);
390
 
513
 
391
			$date_observation_formatee = date($this->config['appli']['format_date'], strtotime($observations_infos['oo_date']));
514
			$date_observation_formatee = date($this->config['appli']['format_date'], strtotime($observations_infos['oo_date']));
392
 
515
 
393
			$id_observation = $observations_infos['oo_id_observation'];
516
			$id_observation = $observations_infos['oo_id_observation'];
394
			$milieu = isset($milieux[$observations_infos['os_ce_environnement']]['ot_valeur']) ? $milieux[$observations_infos['os_ce_environnement']]['ot_valeur'] : '';
517
			$milieu = isset($milieux[$observations_infos['os_ce_environnement']]['ot_valeur']) ? $milieux[$observations_infos['os_ce_environnement']]['ot_valeur'] : '';
395
 
518
 
396
			$infos_formatees = array(
519
			$infos_formatees = array(
397
				'id_observation' => $id_observation,
520
				'id_observation' => $id_observation,
398
				'id_individu' => $observations_infos['oo_ce_individu'],
521
				'id_individu' => $observations_infos['oo_ce_individu'],
399
				'commentaire_individu' => $observations_infos['oi_commentaire'],
522
				'commentaire_individu' => $observations_infos['oi_commentaire'],
400
				'presence_evenement' => $observations_infos['oo_absence_evenement'] == 1 ? 'Absence' : 'Présence',
523
				'presence_evenement' => $observations_infos['oo_absence_evenement'] == 1 ? 'Absence' : 'Présence',
401
				'date' => $date_observation_formatee,
524
				'date' => $date_observation_formatee,
402
				'evenenement' => $infos_evenement['nom'],
525
				'evenenement' => $infos_evenement['nom'],
403
				'code_bbch' => $infos_evenement['numero'],
526
				'code_bbch' => $infos_evenement['numero'],
404
				'nom_scientifique' => $nom_espece,
527
				'nom_scientifique' => $nom_espece,
405
				'station' => $observations_infos['os_nom'],
528
				'station' => $observations_infos['os_nom'],
406
				'code_commune' => $observations_infos['os_ce_commune'],
529
				'code_commune' => $observations_infos['os_ce_commune'],
407
				'nom_commune' => '',
530
				'nom_commune' => '',
408
				'latitude' => $observations_infos['os_latitude'],
531
				'latitude' => $observations_infos['os_latitude'],
409
				'longitude' => $observations_infos['os_longitude'],
532
				'longitude' => $observations_infos['os_longitude'],
410
				'altitude' => $observations_infos['os_altitude'],
533
				'altitude' => $observations_infos['os_altitude'],
411
				'milieu' => $milieu,
534
				'milieu' => $milieu,
412
				'id_participant' => $observations_infos['os_ce_participant'],
535
				'id_participant' => $observations_infos['os_ce_participant'],
413
				'pseudo_participant' => '',
536
				'pseudo_participant' => '',
414
				'mail_participant' => ''
537
				'mail_participant' => ''
415
			);
538
			);
416
 
539
 
417
			$resultats_formates[] = $infos_formatees;
540
			$resultats_formates[] = $infos_formatees;
418
 
541
 
419
			if(is_numeric($observations_infos['os_ce_commune'])) {
542
			if(is_numeric($observations_infos['os_ce_commune'])) {
420
				$codes_insee_communes[] = $observations_infos['os_ce_commune'];
543
				$codes_insee_communes[] = $observations_infos['os_ce_commune'];
421
			}
544
			}
422
		}
545
		}
423
 
546
 
424
		$correspondance_codes_insee_noms = $gestionnaire_communes->obtenirTableauNomsCommunesParTableauCodesInsee($codes_insee_communes);
547
		$correspondance_codes_insee_noms = $gestionnaire_communes->obtenirTableauNomsCommunesParTableauCodesInsee($codes_insee_communes);
425
		$correspondance_id_utilisateur = $gestionnaire_utilisateurs->getListeUtilisateurFormateeId();
548
		$correspondance_id_utilisateur = $gestionnaire_utilisateurs->getListeUtilisateurFormateeId();
426
 
549
 
427
		foreach($resultats_formates as &$resultat) {
550
		foreach($resultats_formates as &$resultat) {
428
 
551
 
429
			if(isset($correspondance_codes_insee_noms[$resultat['code_commune']]) && trim($correspondance_codes_insee_noms[$resultat['code_commune']]) != '') {
552
			if(isset($correspondance_codes_insee_noms[$resultat['code_commune']]) && trim($correspondance_codes_insee_noms[$resultat['code_commune']]) != '') {
430
				$resultat['nom_commune'] = $correspondance_codes_insee_noms[$resultat['code_commune']];
553
				$resultat['nom_commune'] = $correspondance_codes_insee_noms[$resultat['code_commune']];
431
			}
554
			}
432
 
555
 
433
			$resultat['pseudo_participant'] = isset($correspondance_id_utilisateur[$resultat['id_participant']]) ? $correspondance_id_utilisateur[$resultat['id_participant']]['name'] : '';
556
			$resultat['pseudo_participant'] = isset($correspondance_id_utilisateur[$resultat['id_participant']]) ? $correspondance_id_utilisateur[$resultat['id_participant']]['name'] : '';
434
			$resultat['mail_participant'] = isset($correspondance_id_utilisateur[$resultat['id_participant']]) ? $correspondance_id_utilisateur[$resultat['id_participant']]['mail'] : '';
557
			$resultat['mail_participant'] = isset($correspondance_id_utilisateur[$resultat['id_participant']]) ? $correspondance_id_utilisateur[$resultat['id_participant']]['mail'] : '';
435
		}
558
		}
436
 
559
 
437
		return $resultats_formates;
560
		return $resultats_formates;
438
	}
561
	}
439
 
562
 
440
	public function convertirTableauAssocVersCSV($tableau) {
563
	public function convertirTableauAssocVersCSV($tableau) {
441
 
564
 
442
		$csv = '';
565
		$csv = '';
443
		$colonnes = array_keys($tableau[0]);
566
		$colonnes = array_keys($tableau[0]);
444
		$csv .= implode(';',$colonnes).";\n";
567
		$csv .= implode(';',$colonnes).";\n";
445
 
568
 
446
		foreach($tableau as $elements) {
569
		foreach($tableau as $elements) {
447
			$ligne = "";
570
			$ligne = "";
448
			// parcours des cases de chaque ligne nécessaire car si on utilise implode
571
			// parcours des cases de chaque ligne nécessaire car si on utilise implode
449
			// les valeurs vides ne sont pas prises et ça décale les colonnes
572
			// les valeurs vides ne sont pas prises et ça décale les colonnes
450
			foreach ($elements as $element) {
573
			foreach ($elements as $element) {
451
				$ligne .= '"'.$element.'";';
574
				$ligne .= '"'.$element.'";';
452
			}
575
			}
453
			$csv .= $ligne."\n";
576
			$csv .= $ligne."\n";
454
		}
577
		}
455
 
578
 
456
		return $csv;
579
		return $csv;
457
	}
580
	}
458
 
581
 
459
	public function envoyerFichier($contenu, $nom = 'observations_export') {
582
	public function envoyerFichier($contenu, $nom = 'observations_export') {
460
 
583
 
461
		$nom_fichier = $nom.".csv";
584
		$nom_fichier = $nom.".csv";
462
		$chemin_fichier = $this->config['appli']['chemin_fichiers_temp'].'/'.$nom_fichier;
585
		$chemin_fichier = $this->config['appli']['chemin_fichiers_temp'].'/'.$nom_fichier;
463
 
586
 
464
		file_put_contents($chemin_fichier, $contenu);
587
		file_put_contents($chemin_fichier, $contenu);
465
 
588
 
466
		$contenu = file_get_contents($chemin_fichier);
589
		$contenu = file_get_contents($chemin_fichier);
467
		$taille_fichier = filesize($chemin_fichier);
590
		$taille_fichier = filesize($chemin_fichier);
468
 
591
 
469
		unlink($chemin_fichier);
592
		unlink($chemin_fichier);
470
 
593
 
471
		ini_set('zlib.output_compression','Off');
594
		ini_set('zlib.output_compression','Off');
472
 
595
 
473
		header('Pragma: public');
596
		header('Pragma: public');
474
		header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
597
		header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
475
		header('Cache-Control: must-revalidate, pre-check=0, post-check=0, max-age=0');
598
		header('Cache-Control: must-revalidate, pre-check=0, post-check=0, max-age=0');
476
 
599
 
477
		header('Content-Tranfer-Encoding: none');
600
		header('Content-Tranfer-Encoding: none');
478
 
601
 
479
		header('Content-Type: application/octetstream; name="'.$nom_fichier.'"');
602
		header('Content-Type: application/octetstream; name="'.$nom_fichier.'"');
480
		header('Content-Disposition: attachement; filename="'.$nom_fichier.'"');
603
		header('Content-Disposition: attachement; filename="'.$nom_fichier.'"');
481
 
604
 
482
		header('Content-Length: '.$taille_fichier);
605
		header('Content-Length: '.$taille_fichier);
483
 
606
 
484
		echo $contenu;
607
		echo $contenu;
485
		exit();
608
		exit();
486
	}
609
	}
487
 
610
 
488
	private function formaterInformationPourEnvoi($tableauinfos) {
611
	private function formaterInformationPourEnvoi($tableauinfos) {
489
 
612
 
490
	}
613
	}
491
}
614
}
492
?>
615
?>