Subversion Repositories eFlore/Applications.cel

Rev

Rev 1654 | Rev 1660 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1654 Rev 1659
Line 54... Line 54...
54
	
54
	
Line 55... Line 55...
55
	private $limite_decoupage_defaut = 9000; 
55
	private $limite_decoupage_defaut = 9000; 
Line -... Line 56...
-
 
56
	
-
 
57
	private $format = 'csv';
56
	
58
	
57
	private $format = 'csv';
59
	public $id_utilisateur = null;
58
	
60
	
Line 59... Line 61...
59
	public function getRessource() {
61
	public function getRessource() {
Line 86... Line 88...
86
		$criteres = $this->traiterParametresAutorises($_GET);
88
		$criteres = $this->traiterParametresAutorises($_GET);
Line 87... Line 89...
87
 
89
 
88
		$criteres['transmission'] = 1;
90
		$criteres['transmission'] = 1;
89
		if($this->doitEtPeutExporterObsPrivees($criteres)) {
91
		if($this->doitEtPeutExporterObsPrivees($criteres)) {
-
 
92
			unset($criteres['transmission']);
90
			unset($criteres['transmission']);
93
			$this->id_utilisateur = $criteres['id_utilisateur'];
91
		}
94
		}
Line 92... Line 95...
92
		$chercheur_observations = new RechercheObservation($this->config);
95
		$chercheur_observations = new RechercheObservation($this->config);
93
		
96
		
Line 150... Line 153...
150
		unset($criteres['debut']);
153
		unset($criteres['debut']);
151
		unset($criteres['format']);
154
		unset($criteres['format']);
152
		unset($criteres['colonnes']);
155
		unset($criteres['colonnes']);
Line 153... Line 156...
153
		
156
		
-
 
157
		$observations = $chercheur_observations->rechercherObservations(null, $criteres, $debut, $limite)->get();
-
 
158
		$ids = array();
-
 
159
		foreach($observations as &$obs) {
-
 
160
			$ids[] = $obs['id_observation'];
-
 
161
		}
-
 
162
		$gestion_champs_etendus = new GestionChampsEtendus($this->config, 'obs');
-
 
163
    	$champs_supp_par_obs = $gestion_champs_etendus->consulterParLots($ids);
-
 
164
    	$colonnes_champs_supp_par_obs = $gestion_champs_etendus->consulterClesParLots($ids);
-
 
165
 
-
 
166
    	// TODO: tous les champs étendus et les paramètres supplémentaires devraient être passés en un seul
154
		$observations = $chercheur_observations->rechercherObservations(null, $criteres, $debut, $limite)->get();
167
    	// tableau (et chaque formateur csv, xls etc... pourrait également être dans une classe à part)
155
		switch($this->format) {
168
		switch($this->format) {
156
			case 'csv':
169
			case 'csv':
157
				$csv = $this->convertirEnCsv($observations, $colonnes);
170
				$csv = $this->convertirEnCsv($observations, $colonnes, $colonnes_champs_supp_par_obs, $champs_supp_par_obs);
158
				$this->envoyerCsv($csv);
171
				$this->envoyerCsv($csv);
159
				break;
172
				break;
160
			case 'xls':
173
			case 'xls':
161
				$xls = $this->convertirEnXls($observations, $colonnes);
174
				$xls = $this->convertirEnXls($observations, $colonnes, $colonnes_champs_supp_par_obs, $champs_supp_par_obs);
162
				$this->envoyerXls($xls);
175
				$this->envoyerXls($xls);
163
				break;
176
				break;
164
			default:
177
			default:
165
		}
178
		}
Line 186... Line 199...
186
	private function envoyerXls($workbook) {
199
	private function envoyerXls($workbook) {
187
		$workbook->close();
200
		$workbook->close();
188
		exit;
201
		exit;
189
	}
202
	}
Line 190... Line 203...
190
	
203
	
191
	private function convertirEnCsv($data, $colonnes)
204
	private function convertirEnCsv($data, $colonnes, $colonnes_supplementaires, $champs_supplementaires = array())
192
	{
205
	{
193
		$chemin_temp = "php://temp";
206
		$chemin_temp = "php://temp";
194
		$outstream = fopen($chemin_temp, 'r+');
207
		$outstream = fopen($chemin_temp, 'r+');
-
 
208
		$intitule_champs = array();
195
		$intitule_champs = array();
209
		$nb_colonnes_supp = count($colonnes_supplementaires);
196
		$groupe_colonnes = FormateurGroupeColonne::nomEnsembleVersListeColonnes($colonnes);
210
		$groupe_colonnes = FormateurGroupeColonne::nomEnsembleVersListeColonnes($colonnes);
-
 
211
		foreach($data as &$ligne) {
197
		foreach($data as &$ligne) {
212
			$id_obs = $ligne['id_observation'];
198
			$ligne = $this->filtrerDonneesSensibles($ligne);
213
			$ligne = $this->filtrerDonneesSensibles($ligne);
-
 
214
			$ligne = FormateurGroupeColonne::getLigneObservation($ligne, $groupe_colonnes, $this);
-
 
215
			$ligne_supp = $nb_colonnes_supp > 0 ? array_fill(0, $nb_colonnes_supp, '') : array();
-
 
216
			if(isset($champs_supplementaires[$id_obs])) {
-
 
217
				$ligne_supp = $this->traiterLigneEtendue($colonnes_supplementaires, $champs_supplementaires[$id_obs]);
-
 
218
			}
199
			$ligne = FormateurGroupeColonne::getLigneObservation($ligne, $groupe_colonnes);
219
			$ligne += $ligne_supp;
200
			if(empty($intitule_champs)) {
220
			if(empty($intitule_champs)) {
-
 
221
				$intitule_champs = FormateurGroupeColonne::getIntitulesColonnes($groupe_colonnes);
-
 
222
				foreach($colonnes_supplementaires as $colonne_sup) {
-
 
223
					$intitule_champs[] = $colonne_sup;
201
				$intitule_champs = FormateurGroupeColonne::getIntitulesColonnes($groupe_colonnes);
224
				}
202
				fputcsv($outstream, $intitule_champs, ',', '"');			
225
				fputcsv($outstream, $intitule_champs, ',', '"');			
203
			}
226
			}
204
			fputcsv($outstream, $ligne, ',', '"');
227
			fputcsv($outstream, $ligne, ',', '"');
205
		}
228
		}
206
		rewind($outstream);
229
		rewind($outstream);
207
		$csv = stream_get_contents($outstream);
230
		$csv = stream_get_contents($outstream);
208
		fclose($outstream);
231
		fclose($outstream);
209
		return $csv;
232
		return $csv;
Line 210... Line 233...
210
	}
233
	}
211
	
234
	
212
	private function convertirEnXls($data, $colonnes) {		
235
	private function convertirEnXls($data, $colonnes,  $colonnes_supplementaires, $champs_supplementaires = array()) {		
Line -... Line 236...
-
 
236
		$this->extendSpreadsheetProductor = new SpreadsheetProductor();
-
 
237
		$this->extendSpreadsheetProductor->initSpreadsheet();
213
		$this->extendSpreadsheetProductor = new SpreadsheetProductor();
238
		
214
		$this->extendSpreadsheetProductor->initSpreadsheet();
239
		$nb_colonnes_supp = count($colonnes_supplementaires);
215
		
240
		
216
		$workbook = new Spreadsheet_Excel_Writer();
241
		$workbook = new Spreadsheet_Excel_Writer();
Line 222... Line 247...
222
		$workbook->send($this->nom_fichier_export.'.xls');
247
		$workbook->send($this->nom_fichier_export.'.xls');
Line 223... Line 248...
223
		
248
		
224
		$nb_lignes = 1;
249
		$nb_lignes = 1;
225
		$groupe_colonnes = FormateurGroupeColonne::nomEnsembleVersListeColonnes($colonnes);
250
		$groupe_colonnes = FormateurGroupeColonne::nomEnsembleVersListeColonnes($colonnes);
-
 
251
		foreach($data as &$ligne) {
226
		foreach($data as &$ligne) {
252
			$id_obs = $ligne['id_observation'];
227
			$ligne = $this->filtrerDonneesSensibles($ligne);
253
			$ligne = $this->filtrerDonneesSensibles($ligne);
228
			$ligne = FormateurGroupeColonne::getLigneObservation($ligne, $groupe_colonnes);
254
			$ligne = FormateurGroupeColonne::getLigneObservation($ligne, $groupe_colonnes, $this);
229
			if(empty($intitule_champs)) {
255
			if(empty($intitule_champs)) {
230
				$indice = 0;
256
				$indice = 0;
-
 
257
				$intitule_champs = FormateurGroupeColonne::getIntitulesColonnes($groupe_colonnes);
-
 
258
				foreach($colonnes_supplementaires as $colonne_sup) {
-
 
259
					$intitule_champs[] = $colonne_sup;
231
				$intitule_champs = FormateurGroupeColonne::getIntitulesColonnes($groupe_colonnes);
260
				}
232
				foreach ($intitule_champs as &$intitule) {	
261
				foreach ($intitule_champs as &$intitule) {	
233
					$colonne = $intitule_champs[$indice];
262
					$colonne = $intitule_champs[$indice];
234
					$worksheet->write(0,$indice,$colonne);
263
					$worksheet->write(0,$indice,$colonne);
235
					$indice++;
264
					$indice++;
236
				}
265
				}
-
 
266
			}
-
 
267
			$ligne_supp = $nb_colonnes_supp > 0 ? array_fill(0, $nb_colonnes_supp, '') : array();
-
 
268
			if(isset($champs_supplementaires[$id_obs])) {
-
 
269
				$ligne_supp = $this->traiterLigneEtendue($colonnes_supplementaires, $champs_supplementaires[$id_obs]);
-
 
270
			}
237
			}
271
			$ligne += $ligne_supp;
238
			$indice = 0;
272
			$indice = 0;
239
			foreach($ligne as &$champ) {
273
			foreach($ligne as &$champ) {
240
				$worksheet->write($nb_lignes,$indice,$champ);
274
				$worksheet->write($nb_lignes,$indice,$champ);
241
				$indice++;
275
				$indice++;
242
			}
276
			}
243
			$nb_lignes++;
277
			$nb_lignes++;
244
		}
278
		}
245
		return $workbook;
279
		return $workbook;
Line -... Line 280...
-
 
280
	}
-
 
281
	
-
 
282
	private function traiterLigneEtendue(&$colonnes_etendues, &$ligne_champs_etendus) {
-
 
283
		$ligne_etendue_aplatie = $this->aplatirChampsEtendus($ligne_champs_etendus);
-
 
284
		$ligne_etendue_fmt = array();
-
 
285
		foreach($colonnes_etendues as $colonne) {
-
 
286
			if(!isset($ligne_etendue_aplatie[$colonne])) {
-
 
287
				$ligne_etendue_fmt[$colonne] = ''; 
-
 
288
			} else {
-
 
289
				$ligne_etendue_fmt[$colonne] = $ligne_etendue_aplatie[$colonne];
-
 
290
			}
-
 
291
		}
-
 
292
		return $ligne_etendue_fmt;
-
 
293
	}
-
 
294
	
-
 
295
	private function aplatirChampsEtendus(&$ligne_champs_etendus) {
-
 
296
		$champs_etendus_fmt = array();
-
 
297
		foreach($ligne_champs_etendus as $champ) {
-
 
298
			$champs_etendus_fmt[$champ->cle] = $champ->valeur;
-
 
299
		}
-
 
300
		return $champs_etendus_fmt;
246
	}
301
	}
247
	
302
	
248
	private function filtrerDonneesSensibles($ligne) {
303
	private function filtrerDonneesSensibles($ligne) {
249
		if(stripos($ligne['mots_cles_texte'], 'sensible') !== false) {
304
		if(stripos($ligne['mots_cles_texte'], 'sensible') !== false) {
250
			$ligne['latitude'] = '';
305
			$ligne['latitude'] = '';