Subversion Repositories Sites.obs-saisons.fr

Rev

Rev 324 | Rev 330 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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