Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 1376 Rev 1378
1
<?php
1
<?php
2
/**
2
/**
3
* Service fournissant des informations concernant le CEL au format RSS1, RSS2 ou ATOM.
3
* Service fournissant des informations concernant le CEL au format RSS1, RSS2 ou ATOM.
4
* Encodage en entrée : utf8
4
* Encodage en entrée : utf8
5
* Encodage en sortie : utf8
5
* Encodage en sortie : utf8
6
* Format du service :
6
* Format du service :
7
* /CelWidgetExport/format
7
* /CelWidgetExport/format
8
* /CelWidgetExport/csv
8
* /CelWidgetExport/csv
9
*
9
*
10
* Les paramêtres :
10
* Les paramêtres :
11
*  - "start" indique le numéro du premier item à afficher
11
*  - "start" indique le numéro du premier item à afficher
12
*  - "limit" nombre d'items à afficher
12
*  - "limit" nombre d'items à afficher
13
*
13
*
14
* @author Aurélien Peronnet <aurelien@tela-botanica.org>
14
* @author Aurélien Peronnet <aurelien@tela-botanica.org>
15
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
15
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
16
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
16
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
17
* @version $Id$
17
* @version $Id$
18
* @copyright 2012
18
* @copyright 2012
19
*/
19
*/
20
class CelWidgetExport extends Cel {
20
class CelWidgetExport extends Cel {
21
	
21
	
22
	private $nom_fichier_export = 'cel_export.csv';
22
	private $nom_fichier_export = 'cel_export.csv';
23
	private $champs_a_exclure = array('ce_utilisateur' => 'ce_utilisateur', 
23
	private $champs_a_exclure = array('ce_utilisateur' => 'ce_utilisateur', 
24
		'courriel_utilisateur' => 'courriel_utilisateur',
24
		'courriel_utilisateur' => 'courriel_utilisateur',
25
		'transmission' => 'transmission');
25
		'transmission' => 'transmission');
26
	private $correspondance_champs = array(
26
	private $correspondance_champs = array(
27
		'id_observation' => 'Identifiant Observation',
27
		'id_observation' => 'Identifiant Observation',
28
		'ordre' => 'Ordre Observation',
28
		'ordre' => 'Ordre Observation',
29
		'prenom_utilisateur' => 'Prénom',
29
		'prenom_utilisateur' => 'Prénom',
30
		'nom_utilisateur' => 'Nom',
30
		'nom_utilisateur' => 'Nom',
31
		'nom_sel' => 'Nom Sélectionné',
31
		'nom_sel' => 'Nom Sélectionné',
32
		'nom_sel_nn' => 'Numéro Nomenclatural Nom Selectionné',
32
		'nom_sel_nn' => 'Numéro Nomenclatural Nom Selectionné',
33
		'nom_ret' => 'Nom Retenu',
33
		'nom_ret' => 'Nom Retenu',
34
		'nom_ret_nn' => 'Numéro Nomenclatural Nom Retenu',
34
		'nom_ret_nn' => 'Numéro Nomenclatural Nom Retenu',
35
		'nt' => 'Numéro Taxonomique',
35
		'nt' => 'Numéro Taxonomique',
36
		'famille' => 'Famille',
36
		'famille' => 'Famille',
37
		'nom_referentiel' => 'Référentiel Taxonomique',
37
		'nom_referentiel' => 'Référentiel Taxonomique',
38
		'ce_zone_geo' => 'Code Insee',
38
		'ce_zone_geo' => 'Code Insee',
39
		'zone_geo' => 'Commune',
39
		'zone_geo' => 'Commune',
40
		'lieudit' => 'Lieu-Dit',
40
		'lieudit' => 'Lieu-Dit',
41
		'station' => 'Station',
41
		'station' => 'Station',
42
		'milieu' => 'Milieu',
42
		'milieu' => 'Milieu',
43
		'latitude' => 'Latitude',
43
		'latitude' => 'Latitude',
44
		'longitude' => 'Longitude',
44
		'longitude' => 'Longitude',
45
		'geodatum' => 'Référentiel Géographique',
45
		'geodatum' => 'Référentiel Géographique',
46
		'date_observation' => 'Date Observation',
46
		'date_observation' => 'Date Observation',
47
		'mots_cles_texte' => 'Mots Clés',
47
		'mots_cles_texte' => 'Mots Clés',
48
		'commentaire' => 'Commentaires',
48
		'commentaire' => 'Commentaires',
49
		'date_creation' => 'Date Création',
49
		'date_creation' => 'Date Création',
50
		'date_modification' => 'Date Modification',
50
		'date_modification' => 'Date Modification',
51
		'date_transmission' => 'Date Transmission'
51
		'date_transmission' => 'Date Transmission'
52
		);
52
		);
53
	private $parametres_autorises = array(
53
	private $parametres_autorises = array(
54
		'utilisateur' => 'courriel_utilisateur',
54
		'utilisateur' => 'courriel_utilisateur',
55
		'commune' => 'zone_geo',
55
		'commune' => 'zone_geo',
56
		'dept' => 'departement',
56
		'dept' => 'departement',
57
		'projet' => 'mots_cles',
57
		'projet' => 'mots_cles',
58
		'num_tax' => 'nt'
58
		'num_tax' => 'nt',
-
 
59
		'date_debut' => 'date_debut',
-
 
60
		'date_fin' => 'date_fin'
59
	);
61
	);
60
		
62
		
61
	/**
63
	/**
62
	 * Méthode appelée avec une requête de type GET.
64
	 * Méthode appelée avec une requête de type GET.
63
	 */
65
	 */
64
	public function getElement($params = array()) {
66
	public function getElement($params = array()) {
65
		
67
		
66
		$criteres = $this->traiterParametres($_GET);
68
		$criteres = $this->traiterParametres($_GET);
67
		// Seulement les observation publiques
69
		// Seulement les observation publiques
68
		$criteres['transmission'] = 1;
70
		$criteres['transmission'] = 1;
69
		$chercheur_observations = new RechercheObservation($this->config);
71
		$chercheur_observations = new RechercheObservation($this->config);
70
		
72
		
71
		$numero_page = isset($criteres['debut']) ? $criteres['debut'] : 1;
73
		$numero_page = isset($criteres['debut']) ? $criteres['debut'] : 1;
72
		$limite = isset($criteres['limite']) ? $criteres['limite'] : 50;
74
		$limite = isset($criteres['limite']) ? $criteres['limite'] : 10000;
73
		
75
		
74
		unset($criteres['limite']);
76
		unset($criteres['limite']);
75
		unset($criteres['debut']);
77
		unset($criteres['debut']);
76
	
78
	
77
		$observations = $chercheur_observations->rechercherObservations(null, $criteres, $numero_page, $limite);
79
		$observations = $chercheur_observations->rechercherObservations(null, $criteres, $numero_page, $limite);
78
		$csv = $this->convertirEnCsv($observations);
80
		$csv = $this->convertirEnCsv($observations);
79
		$this->envoyerCsv($csv);
81
		$this->envoyerCsv($csv);
80
	}
82
	}
81
	
83
	
82
	protected function traiterParametres(Array $parametres) {
84
	protected function traiterParametres(Array $parametres) {
83
		$parametres_traites = array();
85
		$parametres_traites = array();
84
		foreach($parametres as $cle => $valeur) {
86
		foreach($parametres as $cle => $valeur) {
85
			if(trim($valeur) != '' && isset($this->parametres_autorises[$cle])) {
87
			if(trim($valeur) != '' && isset($this->parametres_autorises[$cle])) {
86
				$parametres_traites[$this->parametres_autorises[$cle]] = $valeur;
88
				$parametres_traites[$this->parametres_autorises[$cle]] = $valeur;
87
			}
89
			}
88
		}
90
		}
89
		return $parametres_traites;
91
		return $parametres_traites;
90
	}
92
	}
91
	
93
	
92
	private function envoyerCsv($csv) {
94
	private function envoyerCsv($csv) {
93
		header('Content-Type: text/csv; charset=UTF-8');
95
		header('Content-Type: text/csv; charset=UTF-8');
94
		header('Content-Disposition: attachment;filename='.$this->nom_fichier_export);
96
		header('Content-Disposition: attachment;filename='.$this->nom_fichier_export);
95
		echo $csv;
97
		echo $csv;
96
		exit;
98
		exit;
97
	}
99
	}
98
	
100
	
99
	private function convertirEnCsv($data)
101
	private function convertirEnCsv($data)
100
	{
102
	{
101
		$chemin_temp = "php://temp";
103
		$chemin_temp = "php://temp";
102
		$outstream = fopen($chemin_temp, 'r+');
104
		$outstream = fopen($chemin_temp, 'r+');
103
		$intitule_champs = array();
105
		$intitule_champs = array();
104
		foreach($data as $ligne) {
106
		foreach($data as $ligne) {
-
 
107
			//echo '<pre>'.print_r($ligne,true).'</pre>';
105
			$ligne = array_diff_key($ligne, $this->champs_a_exclure);
108
			$ligne = array_diff_key($ligne, $this->champs_a_exclure);
-
 
109
			//echo '<pre>'.print_r($ligne,true).'</pre>';
106
			if(empty($intitule_champs)) {
110
			if(empty($intitule_champs)) {
107
				$intitule_champs = $this->creerEntetesChamps($ligne);
111
				$intitule_champs = $this->creerEntetesChamps($ligne);
108
				fputcsv($outstream, $intitule_champs, ',', '"');			
112
				fputcsv($outstream, $intitule_champs, ',', '"');			
109
			}
113
			}
110
			fputcsv($outstream, $ligne, ',', '"');
114
			fputcsv($outstream, $ligne, ',', '"');
111
		}
115
		}
112
		rewind($outstream);
116
		rewind($outstream);
113
		$csv = stream_get_contents($outstream);
117
		$csv = stream_get_contents($outstream);
114
		fclose($outstream);
118
		fclose($outstream);
115
		return $csv;
119
		return $csv;
116
	}
120
	}
117
	
121
	
118
	private function creerEntetesChamps($noms_colonnes) {
122
	private function creerEntetesChamps($noms_colonnes) {
119
		$champs_presents = array_intersect_key($this->correspondance_champs, $noms_colonnes);
123
		$champs_presents = array_intersect_key($this->correspondance_champs, $noms_colonnes);
120
		return array_values($champs_presents);
124
		return array_values($champs_presents);
121
	}
125
	}
122
}
126
}
123
?>
127
?>