Subversion Repositories Sites.obs-saisons.fr

Rev

Rev 210 | Go to most recent revision | Details | 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
 
102
	public function getExportObservationJson() {
103
 
104
		$donnees = $this->getExportObservation();
105
		$donnees_formatees = $this->formaterPourExportJson($donnees);
106
 
107
		return $donnees_formatees;
108
	}
109
 
110
	public function formaterPourExportJson($tableau_observations_infos) {
111
 
112
		$gestionnaire_especes = new OdsEspece($this->config);
113
		$gestionnaire_communes = new OdsCommune($this->config);
114
 
115
		$especes = $gestionnaire_especes->getToutesEspeces();
116
		$evenements = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_EVENEMENTS);
117
 
118
		$resultats_formates = array();
119
 
120
		foreach($tableau_observations_infos as $observations_infos) {
121
 
122
			$id_espece = $observations_infos['oi_ce_espece'];
123
			$nom_espece =  $especes[$id_espece]['nom_scientifique'];
124
 
125
			$id_evenement = $observations_infos['oo_ce_evenement'];
126
			$chaine_evenement = $evenements[$id_evenement]['ot_cle'];
127
 
128
			$infos_evenement = $this->renvoyerInformationStadeAPartirChaineTriple($chaine_evenement);
129
 
130
			$date_observation_formatee = date($this->config['appli']['format_date'], strtotime($observations_infos['oo_date']));
131
 
132
			$id_observation = $observations_infos['oo_id_observation'];
133
			$infos_formatees = array(
134
				'date' => $date_observation_formatee,
135
				'evenenement' => $infos_evenement['nom'],
136
				'code_bbch' => $infos_evenement['numero'],
137
				'nom_scientifique' => $nom_espece,
138
			);
139
 
140
			$id_station = $observations_infos['oi_ce_station'];
141
 
142
			if(!isset($resultats_formates[$id_station])) {
143
				$resultats_formates[$id_station]['station'] = $observations_infos['os_nom'];
144
				$resultats_formates[$id_station]['code_commune'] = $observations_infos['os_ce_commune'];
145
				//$resultats_formates[$id_station]['nom_commune'] = $gestionnaire_communes->obtenirNomCommuneParCodeInsee($observations_infos['os_ce_commune']);
146
				$resultats_formates[$id_station]['latitude'] = $observations_infos['os_latitude'];
147
				$resultats_formates[$id_station]['longitude'] = $observations_infos['os_longitude'];
148
				$resultats_formates[$id_station]['altitude'] = $observations_infos['os_altitude'];
149
				$resultats_formates[$id_station]['milieu'] = $observations_infos['os_milieu'];
150
				$resultats_formates[$id_station]['participant'] = $observations_infos['os_ce_participant'];
151
			}
152
 
153
			$resultats_formates[$id_station]['obs'][$id_observation] = $infos_formatees;
154
		}
155
 
156
		return $resultats_formates;
157
	}
158
 
159
	public function getExportObservationCsv() {
160
 
161
		$utilisateur = new Utilisateur();
162
		$est_admin = $utilisateur->estAdmin();
163
 
164
		if($est_admin) {
165
			$donnees = $this->getExportObservation();
166
			$donnees_formatees = $this->formaterPourExportCSV($donnees);
167
			$chaine_csv = $this->convertirTableauAssocVersCSV($donnees_formatees);
168
 
169
			$this->envoyerFichier($chaine_csv);
170
		} else {
171
			echo "echo non non non non non, vous êtes pas admin !!!!";
172
		}
173
	}
174
 
175
	public function formaterPourExportCSV($tableau_observations_infos) {
176
 
177
		$gestionnaire_especes = new OdsEspece($this->config);
178
		$gestionnaire_communes = new OdsCommune($this->config);
179
 
180
		$especes = $gestionnaire_especes->getToutesEspeces();
181
		$evenements = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_EVENEMENTS);
182
 
183
		$resultats_formates = array();
184
 
185
		foreach($tableau_observations_infos as $observations_infos) {
186
 
187
			$id_espece = $observations_infos['oi_ce_espece'];
188
			$nom_espece =  $especes[$id_espece]['nom_scientifique'];
189
 
190
			$id_evenement = $observations_infos['oo_ce_evenement'];
191
			$chaine_evenement = $evenements[$id_evenement]['ot_cle'];
192
 
193
			$infos_evenement = $this->renvoyerInformationStadeAPartirChaineTriple($chaine_evenement);
194
 
195
			$date_observation_formatee = date($this->config['appli']['format_date'], strtotime($observations_infos['oo_date']));
196
 
197
			$id_observation = $observations_infos['oo_id_observation'];
198
 
199
			$infos_formatees = array(
200
				'id_observation' => $id_observation,
201
				'date' => $date_observation_formatee,
202
				'evenenement' => $infos_evenement['nom'],
203
				'code_bbch' => $infos_evenement['numero'],
204
				'nom_scientifique' => $nom_espece,
205
				'station' => $observations_infos['os_nom'],
206
				'code_commune' => $observations_infos['os_ce_commune'],
207
				'nom_commune' => $gestionnaire_communes->obtenirNomCommuneParCodeInsee($observations_infos['os_ce_commune']),
208
				'latitude' => $observations_infos['os_latitude'],
209
				'longitude' => $observations_infos['os_longitude'],
210
				'altitude' => $observations_infos['os_altitude'],
211
				'milieu' => $observations_infos['os_milieu'],
212
				'participant' => $observations_infos['os_ce_participant']
213
			);
214
 
215
			$resultats_formates[] = $infos_formatees;
216
		}
217
 
218
		return $resultats_formates;
219
	}
220
 
221
	public function convertirTableauAssocVersCSV($tableau) {
222
 
223
		$csv = '';
224
		$colonnes = array_keys($tableau[0]);
225
		$csv .= implode(';',$colonnes).";\n";
226
 
227
		foreach($tableau as $elements) {
228
			$csv .= implode(';',$elements).";\n";
229
		}
230
 
231
		return $csv;
232
	}
233
 
234
	public function envoyerFichier($contenu) {
235
 
236
		$nom_fichier = "observations_export.csv";
237
		$chemin_fichier = $this->config['appli']['chemin_fichiers_temp'].'/'.$nom_fichier;
238
 
239
		file_put_contents($chemin_fichier, $contenu);
240
 
241
		$contenu = file_get_contents($chemin_fichier);
242
		$taille_fichier = filesize($chemin_fichier);
243
 
244
		unlink($chemin_fichier);
245
 
246
		ini_set('zlib.output_compression','Off');
247
 
248
		header('Pragma: public');
249
		header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
250
		header('Cache-Control: must-revalidate, pre-check=0, post-check=0, max-age=0');
251
 
252
		header('Content-Tranfer-Encoding: none');
253
 
254
		header('Content-Type: application/octetstream; name="'.$nom_fichier.'"');
255
		header('Content-Disposition: attachement; filename="'.$nom_fichier.'"');
256
 
257
		header('Content-Length: '.$taille_fichier);
258
 
259
		echo $contenu;
260
		exit();
261
	}
262
 
263
	private function formaterInformationPourEnvoi($tableauinfos) {
264
 
265
	}
266
}
267
?>