Subversion Repositories Sites.obs-saisons.fr

Rev

Rev 207 | Rev 227 | 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 {
4
 
5
	const PREFIXE = 'get';
6
	const ABBR_LISTE_EVENEMENTS = 'evenement';
7
	const ABBR_LISTE_ESPECES = 'espece';
8
 
9
	/**
10
 	* Méthodes d'extractions d'informations
11
 	*/
12
 
13
	/**
14
     * Méthode appelée avec une requête de type GET.
15
     *
16
     */
17
    function getElement($param = array()) {
18
 
19
    	$type = $param[0];
20
 
21
        if ($type == '*' || is_numeric($type)) {
22
            $info = $this->getElementParDefaut($param);
23
        } else {
24
            $methode = self::PREFIXE.$type;
25
            if (method_exists($this, $methode)) {
26
                array_shift($param);
27
                $info = $this->$methode($param);
28
            } else {
29
                $this->messages[] = "Le type d'information demandé '$type' n'est pas disponible.";
30
            }
31
        }
32
 
33
        // Envoi sur la sortie standard
34
        $this->envoyer($info);
35
    }
36
 
37
	public function getExportObservation($start = null,$limit = null, $order_by = 'oo_date') {
38
 
39
		$requete_selection_observations = 'SELECT * FROM ods_observations '.
40
									' LEFT JOIN ods_individus '.
41
									' ON oi_id_individu = oo_ce_individu'.
42
									' LEFT JOIN ods_stations '.
43
									' ON oi_ce_station = os_id_station ';
44
 
45
		$requete_selection_observations .= $this->construireConditionRequete();
46
		$requete_selection_observations .= ' ORDER BY oo_date DESC';
47
 
48
		$res_selection_observations = $this->executerRequete($requete_selection_observations);
49
 
50
		return $res_selection_observations;
51
	}
52
 
53
	public function construireConditionRequete() {
54
 
55
		$condition = ' WHERE oo_date != "0000-00-00" AND ';
56
 
57
		foreach($_GET as $cle => $valeur) {
58
 
59
			switch($cle) {
60
 
61
				case 'type_espece':
62
					$condition .= 'oi_ce_espece IN (SELECT oe_id_espece FROM ods_especes WHERE oe_ce_type = '.$this->proteger($valeur).')';
63
				break;
64
 
65
				case 'annee':
66
					$condition .= 'YEAR(oo_date) = '.$this->proteger($valeur);
67
				break;
68
 
69
				case 'mois':
70
					$condition .= 'MONTH(oo_date) <= '.$this->proteger($valeur);
71
				break;
72
 
73
				case 'espece':
74
					$condition .= 'oi_ce_espece = '.$this->proteger($valeur);
75
				break;
76
 
77
				case 'evenement':
78
					$condition .= 'oo_ce_evenement = '.$this->proteger($valeur);
79
				break;
80
 
81
				case 'departement':
82
					$condition .= 'os_ce_commune LIKE "'.$valeur.'%" ';
83
				break;
84
 
85
				case 'utilisateur':
86
					$condition .= 'oo_ce_participant = '.$this->proteger($valeur);
87
				break;
88
 
89
				default:
90
				break;
91
			}
92
 
93
			$condition .= ' AND ';
94
		}
95
 
96
		$condition = rtrim($condition,'AND ');
97
		$condition .= ' AND oo_ce_participant != 4';
98
 
99
		return $condition;
100
	}
101
 
210 aurelien 102
	public function getExportObservationPlat() {
103
 
104
		$donnees = $this->getExportObservation();
105
		$donnees_formatees = $this->formaterPourExportCSV($donnees);
106
 
107
		return $donnees_formatees ;
108
	}
109
 
207 aurelien 110
	public function getExportObservationJson() {
111
 
112
		$donnees = $this->getExportObservation();
113
		$donnees_formatees = $this->formaterPourExportJson($donnees);
114
 
115
		return $donnees_formatees;
116
	}
117
 
118
	public function formaterPourExportJson($tableau_observations_infos) {
119
 
120
		$gestionnaire_especes = new OdsEspece($this->config);
121
		$gestionnaire_communes = new OdsCommune($this->config);
122
 
123
		$especes = $gestionnaire_especes->getToutesEspeces();
124
		$evenements = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_EVENEMENTS);
125
 
126
		$resultats_formates = array();
127
 
128
		foreach($tableau_observations_infos as $observations_infos) {
129
 
130
			$id_espece = $observations_infos['oi_ce_espece'];
131
			$nom_espece =  $especes[$id_espece]['nom_scientifique'];
132
 
133
			$id_evenement = $observations_infos['oo_ce_evenement'];
134
			$chaine_evenement = $evenements[$id_evenement]['ot_cle'];
135
 
136
			$infos_evenement = $this->renvoyerInformationStadeAPartirChaineTriple($chaine_evenement);
137
 
138
			$date_observation_formatee = date($this->config['appli']['format_date'], strtotime($observations_infos['oo_date']));
139
 
140
			$id_observation = $observations_infos['oo_id_observation'];
141
			$infos_formatees = array(
142
				'date' => $date_observation_formatee,
143
				'evenenement' => $infos_evenement['nom'],
144
				'code_bbch' => $infos_evenement['numero'],
145
				'nom_scientifique' => $nom_espece,
146
			);
147
 
148
			$id_station = $observations_infos['oi_ce_station'];
149
 
150
			if(!isset($resultats_formates[$id_station])) {
151
				$resultats_formates[$id_station]['station'] = $observations_infos['os_nom'];
152
				$resultats_formates[$id_station]['code_commune'] = $observations_infos['os_ce_commune'];
153
				//$resultats_formates[$id_station]['nom_commune'] = $gestionnaire_communes->obtenirNomCommuneParCodeInsee($observations_infos['os_ce_commune']);
154
				$resultats_formates[$id_station]['latitude'] = $observations_infos['os_latitude'];
155
				$resultats_formates[$id_station]['longitude'] = $observations_infos['os_longitude'];
156
				$resultats_formates[$id_station]['altitude'] = $observations_infos['os_altitude'];
157
				$resultats_formates[$id_station]['milieu'] = $observations_infos['os_milieu'];
158
				$resultats_formates[$id_station]['participant'] = $observations_infos['os_ce_participant'];
159
			}
160
 
161
			$resultats_formates[$id_station]['obs'][$id_observation] = $infos_formatees;
162
		}
163
 
164
		return $resultats_formates;
165
	}
166
 
210 aurelien 167
	public function getFichierExportObservationCsv() {
168
 
169
		$donnees = $this->getExportObservation();
170
		$donnees_formatees = $this->formaterPourExportCSV($donnees);
171
		$chaine_csv = $this->convertirTableauAssocVersCSV($donnees_formatees);
207 aurelien 172
 
210 aurelien 173
		$this->envoyerFichier($chaine_csv);
207 aurelien 174
	}
175
 
176
	public function formaterPourExportCSV($tableau_observations_infos) {
177
 
178
		$gestionnaire_especes = new OdsEspece($this->config);
179
		$gestionnaire_communes = new OdsCommune($this->config);
180
 
181
		$especes = $gestionnaire_especes->getToutesEspeces();
182
		$evenements = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_EVENEMENTS);
183
 
210 aurelien 184
		$codes_insee_communes = array();
185
 
207 aurelien 186
		$resultats_formates = array();
187
 
188
		foreach($tableau_observations_infos as $observations_infos) {
189
 
190
			$id_espece = $observations_infos['oi_ce_espece'];
191
			$nom_espece =  $especes[$id_espece]['nom_scientifique'];
192
 
193
			$id_evenement = $observations_infos['oo_ce_evenement'];
194
			$chaine_evenement = $evenements[$id_evenement]['ot_cle'];
195
 
196
			$infos_evenement = $this->renvoyerInformationStadeAPartirChaineTriple($chaine_evenement);
197
 
198
			$date_observation_formatee = date($this->config['appli']['format_date'], strtotime($observations_infos['oo_date']));
199
 
200
			$id_observation = $observations_infos['oo_id_observation'];
201
 
202
			$infos_formatees = array(
203
				'id_observation' => $id_observation,
204
				'date' => $date_observation_formatee,
205
				'evenenement' => $infos_evenement['nom'],
206
				'code_bbch' => $infos_evenement['numero'],
207
				'nom_scientifique' => $nom_espece,
208
				'station' => $observations_infos['os_nom'],
209
				'code_commune' => $observations_infos['os_ce_commune'],
210 aurelien 210
				'nom_commune' => '',
207 aurelien 211
				'latitude' => $observations_infos['os_latitude'],
212
				'longitude' => $observations_infos['os_longitude'],
213
				'altitude' => $observations_infos['os_altitude'],
214
				'milieu' => $observations_infos['os_milieu'],
215
				'participant' => $observations_infos['os_ce_participant']
216
			);
217
 
218
			$resultats_formates[] = $infos_formatees;
210 aurelien 219
 
220
			if(is_numeric($observations_infos['os_ce_commune'])) {
221
				$codes_insee_communes[] = $observations_infos['os_ce_commune'];
222
			}
207 aurelien 223
		}
224
 
210 aurelien 225
		$correspondance_codes_insee_noms = $gestionnaire_communes->obtenirTableauNomsCommunesParTableauCodesInsee($codes_insee_communes);
226
 
227
		foreach($resultats_formates as &$resultat) {
228
 
229
			if(isset($correspondance_codes_insee_noms[$resultat['code_commune']]) && trim($correspondance_codes_insee_noms[$resultat['code_commune']]) != '') {
230
 
231
				$resultat['nom_commune'] = $correspondance_codes_insee_noms[$resultat['code_commune']];
232
			}
233
		}
234
 
207 aurelien 235
		return $resultats_formates;
236
	}
237
 
238
	public function convertirTableauAssocVersCSV($tableau) {
239
 
240
		$csv = '';
241
		$colonnes = array_keys($tableau[0]);
242
		$csv .= implode(';',$colonnes).";\n";
243
 
244
		foreach($tableau as $elements) {
245
			$csv .= implode(';',$elements).";\n";
246
		}
247
 
248
		return $csv;
249
	}
250
 
251
	public function envoyerFichier($contenu) {
252
 
253
		$nom_fichier = "observations_export.csv";
254
		$chemin_fichier = $this->config['appli']['chemin_fichiers_temp'].'/'.$nom_fichier;
255
 
256
		file_put_contents($chemin_fichier, $contenu);
257
 
258
		$contenu = file_get_contents($chemin_fichier);
259
		$taille_fichier = filesize($chemin_fichier);
260
 
261
		unlink($chemin_fichier);
262
 
263
		ini_set('zlib.output_compression','Off');
264
 
265
		header('Pragma: public');
266
		header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
267
		header('Cache-Control: must-revalidate, pre-check=0, post-check=0, max-age=0');
268
 
269
		header('Content-Tranfer-Encoding: none');
270
 
271
		header('Content-Type: application/octetstream; name="'.$nom_fichier.'"');
272
		header('Content-Disposition: attachement; filename="'.$nom_fichier.'"');
273
 
274
		header('Content-Length: '.$taille_fichier);
275
 
276
		echo $contenu;
277
		exit();
278
	}
279
 
280
	private function formaterInformationPourEnvoi($tableauinfos) {
281
 
282
	}
283
}
284
?>