Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 1635 Rev 1638
Line 63... Line 63...
63
			header('HTTP/1.0 204 No Content');
63
			header('HTTP/1.0 204 No Content');
64
			exit;
64
			exit;
65
		}
65
		}
66
		// trim() car: `POST http://url<<<"range=*"`
66
		// trim() car: `POST http://url<<<"range=*"`
67
		elseif(trim($_POST['range']) == '*') {
67
		elseif(trim($_POST['range']) == '*') {
68
			$records = Array('*');
68
			$obs_ids = Array('*');
69
		}
69
		}
70
		else {
70
		else {
71
			$records = self::rangeToList(trim($_POST['range']));
71
			$obs_ids = self::rangeToList(trim($_POST['range']));
72
		}
72
		}
73
		$this->export($records, NULL, $params);
73
		$this->export($obs_ids, NULL, $params);
74
		exit;
74
		exit;
75
	}
75
	}
Line 76... Line 76...
76
 
76
 
77
	/*
77
	/*
78
	 * $param: Tableau associatif, indexes supportés:
78
	 * $param: Tableau associatif, indexes supportés:
79
	 * 		   - widget: le nom du widget d'origine (utilisé pour les méta-données du tableur)
79
	 * 		   - widget: le nom du widget d'origine (utilisé pour les méta-données du tableur)
80
	 *
80
	 *
81
	 */
81
	 */
82
	function export(Array $records, String $fieldSets = NULL, Array $params = Array()) {
82
	function export(Array $obs_ids, String $fieldSets = NULL, Array $params = Array()) {
83
		$colonnes = self::fieldSetsToColumns($fieldSets);
83
		$colonnes = self::nom_d_ensemble_vers_liste_de_colonnes($fieldSets);
84
		$columnSlugs = array_keys($colonnes);
84
		// $colonne_abbrev = array_keys($colonnes);
Line 85... Line 85...
85
		$chercheur_observations = new RechercheObservation($this->config);
85
		$chercheur_observations = new RechercheObservation($this->config);
Line 86... Line 86...
86
 
86
 
Line 92... Line 92...
92
		if(! $params['uid']) { // || ! $this->controleUtilisateur($params['uid'])) {
92
		if(! $params['uid']) { // || ! $this->controleUtilisateur($params['uid'])) {
93
			$params['uid'] = NULL;
93
			$params['uid'] = NULL;
94
		}
94
		}
Line 95... Line 95...
95
 
95
 
96
		$criteres = Array();
96
		$criteres = Array();
97
		if(! $records || count($records) == 1 && $records[0] == '*') {
97
		if(! $obs_ids || count($obs_ids) == 1 && $obs_ids[0] == '*') {
98
			unset($criteres['raw']);
98
			unset($criteres['raw']);
99
		}
99
		}
100
		else {
100
		else {
101
			$criteres = Array('raw' =>
101
			$criteres = Array('raw' =>
102
							  sprintf('id_observation IN (%s)', implode(',', $records)));
102
							  sprintf('id_observation IN (%s)', implode(',', $obs_ids)));
Line 103... Line 103...
103
		}
103
		}
104
 
104
 
105
		$criteres['debut'] = isset($_GET['debut']) ? intval($_GET['debut']) : 0;
105
		$criteres['debut'] = isset($_GET['debut']) ? intval($_GET['debut']) : 0;
Line 122... Line 122...
122
			->setDescription("Export blah");
122
			->setDescription("Export blah");
123
			//->setKeywords("office PHPExcel php")
123
			//->setKeywords("office PHPExcel php")
124
			//->setCategory("Test result file")
124
			//->setCategory("Test result file")
Line 125... Line 125...
125
 
125
 
126
		$objPHPExcel->getActiveSheet()->setTitle("Observations");
126
		$objPHPExcel->getActiveSheet()->setTitle("Observations");
127
		$sheet = $objPHPExcel->setActiveSheetIndex(0);
127
		$feuille = $objPHPExcel->setActiveSheetIndex(0);
128
		$colid = 0;
128
		$colid = 0;
129
		foreach($colonnes as $colonne) {
129
		foreach($colonnes as $colonne) {
130
			$sheet->setCellValueByColumnAndRow($colid, 1, $colonne['nom']);
130
			$feuille->setCellValueByColumnAndRow($colid, 1, $colonne['nom']);
131
			if($colonne['extra']) {
131
			if($colonne['extra']) {
132
				$sheet->getStyleByColumnAndRow($colid, 1)->getBorders()->applyFromArray(
132
				$feuille->getStyleByColumnAndRow($colid, 1)->getBorders()->applyFromArray(
133
					array(
133
					array(
134
						'allborders' => array(
134
						'allborders' => array(
135
							'style' => PHPExcel_Style_Border::BORDER_DASHDOT,
135
							'style' => PHPExcel_Style_Border::BORDER_DASHDOT,
136
							'color' => array('rgb' => PHPExcel_Style_Color::COLOR_BLUE)
136
							'color' => array('rgb' => PHPExcel_Style_Color::COLOR_BLUE)
Line 141... Line 141...
141
			$colid++;
141
			$colid++;
142
		}
142
		}
Line 143... Line 143...
143
 
143
 
Line 144... Line 144...
144
		$objPHPExcel->getActiveSheet()->getDefaultColumnDimension()->setWidth(12);
144
		$objPHPExcel->getActiveSheet()->getDefaultColumnDimension()->setWidth(12);
145
 
145
 
146
		$row = 2;
146
		$ligne = 2;
147
		foreach ($observations as $obs) {
147
		foreach ($observations as $obs) {
148
			$colid = 0;
148
			$colid = 0;
149
			foreach($colonnes as $slug => $colonne) {
149
			foreach($colonnes as $abbrev => $colonne) {
Line 150... Line 150...
150
				// valeur direct depuis cel_obs ?
150
				// valeur direct depuis cel_obs ?
151
				if(isset($obs[$slug])) $valeur = $obs[$slug];
151
				if(isset($obs[$abbrev])) $valeur = $obs[$abbrev];
152
 
152
 
153
				// pré-processeur de la champs
153
				// pré-processeur de la champs
Line 167... Line 167...
167
				}
167
				}
Line 168... Line 168...
168
 
168
 
169
 
169
 
170
				// // cette section devrait être vide:
170
				// // cette section devrait être vide:
171
				// // cas particuliers ingérable avec l'architecture actuelle:
171
				// // cas particuliers ingérable avec l'architecture actuelle:
Line 172... Line 172...
172
				if(false && $slug == 'date_observation' && $valeur == "0000-00-00") { /* blah */ }
172
				if(false && $abbrev == 'date_observation' && $valeur == "0000-00-00") { /* blah */ }
173
				// // fin de section "cas particuliers"
173
				// // fin de section "cas particuliers"
174
 
174
 
175
				$sheet->setCellValueByColumnAndRow($colid, $row, $valeur);
175
				$feuille->setCellValueByColumnAndRow($colid, $ligne, $valeur);
176
				$colid++;
176
				$colid++;
Line 177... Line 177...
177
			}
177
			}
178
			$row++;
178
			$ligne++;
179
		}
179
		}
180
 
180
 
181
		header("Content-Type: application/vnd.ms-excel");
181
		header("Content-Type: application/vnd.ms-excel");
182
		header("Content-Disposition: attachment; filename=\"liste.xls\"; charset=utf-8");
182
		header("Content-Disposition: attachment; filename=\"liste.xls\"; charset=utf-8");
183
		header("Cache-Control: max-age=0");
183
		header("Cache-Control: max-age=0");
184
		// Le format Excel2007 utilise un fichier temporaire
184
		// Le format Excel2007 utilise un fichier temporaire
185
		$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
185
		$generateur = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
Line 186... Line 186...
186
		// $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
186
		// $generateur = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
187
		$objWriter->save('php://output');
187
		$generateur->save('php://output');
188
		exit;
188
		exit;
-
 
189
	}
189
	}
190
 
190
 
191
	/*
191
	/*
192
	 * @param $fieldSets: un range, eg: 1-5,8,32,58-101
192
	 * @param $fieldSets: un range, eg: 1-5,8,32,58-101
193
	 * @return un tableau trié, eg: 1,2,3,4,5,8,32,58,...,101
Line 212... Line 213...
212
	 * @param $fieldSets: un liste de noms de colonnes ou de sets de colonnes
213
	 * @param $fieldSets: un liste de noms de colonnes ou de sets de colonnes
213
	 *		séparés par des virgules
214
	 *		séparés par des virgules
214
	 * 		eg: "espece" ou "champs-etendus", ...
215
	 * 		eg: "espece" ou "champs-etendus", ...
215
	 *
216
	 *
216
	 * @return: un tableau associatif déjà ordonné
217
	 * @return: un tableau associatif déjà ordonné
217
	 * 		clé: slug [machine-name] de la colonne (eg: "espece" ou "mot-clef")
218
	 * 		clé: abbrev [machine-name] de la colonne (eg: "espece" ou "mot-clef")
218
	 * 		valeur: des données relative à cette colonne, cf GenColInfo
219
	 * 		valeur: des données relative à cette colonne, cf GenColInfo
219
	 *
220
	 *
220
	 * @TODO: fonction commune à la génération en CSV
221
	 * @TODO: fonction commune à la génération en CSV
-
 
222
	 *
221
	 */
223
	 */
222
	static function fieldSetsToColumns($fieldSets = 'standard') {
224
	static function nom_d_ensemble_vers_liste_de_colonnes($groupe_de_champs = 'standard') {
223
		if(! $fieldSets) $fieldSets = 'standard';
225
		if(! $groupe_de_champs) $groupe_de_champs = 'standard';
224
		$fieldSets = array_flip(explode(',', $fieldSets));
226
		$groupe_de_champs = array_flip(explode(',', $groupe_de_champs));
225
		$colonnes = Array();
227
		$colonnes = Array();
Line 226... Line 228...
226
 
228
 
227
		if(isset($fieldSets['standard'])) {
229
		if(isset($groupe_de_champs['standard'])) {
228
		   $colonnes += Array(
230
		   $colonnes += Array(
229
			   'nom_sel'			=> self::GenColInfo('nom_sel', 'Espèce'),
231
			   'nom_sel'			=> self::GenColInfo('nom_sel', 'Espèce'),
230
			   'nom_sel_nn'			=> self::GenColInfo('nom_sel_nn', 'Numéro nomenclatural'),
232
			   'nom_sel_nn'			=> self::GenColInfo('nom_sel_nn', 'Numéro nomenclatural'),
231
			   'nom_ret'			=> self::GenColInfo('nom_ret', 'Nom retenu'),
233
			   'nom_ret'			=> self::GenColInfo('nom_ret', 'Nom retenu'),
Line 276... Line 278...
276
	 * @param $fonction_data (optionnel): une *méthode* d'obtention de donnée
278
	 * @param $fonction_data (optionnel): une *méthode* d'obtention de donnée
277
	 * 		  $fonction_data doit prendre comme premier argument les champs de l'enregistrement existant
279
	 * 		  $fonction_data doit prendre comme premier argument les champs de l'enregistrement existant
278
	 *		  $fonction_data doit retourner une valeur
280
	 *		  $fonction_data doit retourner une valeur
Line 279... Line 281...
279
 
281
 
280
	 */
282
	 */
281
	static function GenColInfo($slug, $nom, $is_extra = 0, $fonction = NULL, $fonction_data = NULL, $importable = TRUE) {
283
	static function GenColInfo($abbrev, $nom, $is_extra = 0, $fonction = NULL, $fonction_data = NULL, $importable = TRUE) {
282
		return Array('slug' => $slug,
284
		return Array('abbrev' => $abbrev,
283
					 'nom' => $nom,
285
					 'nom' => $nom,
284
					 'extra' => $is_extra ? 1 : 0,
286
					 'extra' => $is_extra ? 1 : 0,
285
					 'fonction' => $fonction,
287
					 'fonction' => $fonction,
286
					 'fonction_data' => $fonction_data,
288
					 'fonction_data' => $fonction_data,
Line 351... Line 353...
351
			return $this->cache['getNomCommun'][$cache_id];
353
			return $this->cache['getNomCommun'][$cache_id];
352
		}
354
		}
353
		// pas de cache:
355
		// pas de cache:
354
		error_log("require NomsVernaculaires.php pour \"{$obs['nom_ret']}\"");
356
		error_log("require NomsVernaculaires.php pour \"{$obs['nom_ret']}\"");
Line 355... Line 357...
355
 
357
 
356
		$data = Array('masque.nt' => $obs['nt'],
358
		$donnees = Array('masque.nt' => $obs['nt'],
357
							 'masque.lg' => $langue,
359
							 'masque.lg' => $langue,
358
							 'retour.champs' => 'num_statut');
360
							 'retour.champs' => 'num_statut');
Line 359... Line 361...
359
		$noms = $service->consulter(Array('nvjfl', 'noms-vernaculaires'), $data);
361
		$noms = $service->consulter(Array('nvjfl', 'noms-vernaculaires'), $donnees);
360
 
362
 
361
		if(! $noms) return '';
363
		if(! $noms) return '';
Line 385... Line 387...
385
			return $this->cache['getNomCommun'][$cache_id];
387
			return $this->cache['getNomCommun'][$cache_id];
386
		}
388
		}
387
		// pas de cache:
389
		// pas de cache:
388
		error_log("require NomsVernaculaires.php pour \"{$obs['nom_ret']}\"");
390
		error_log("require NomsVernaculaires.php pour \"{$obs['nom_ret']}\"");
Line 389... Line 391...
389
 
391
 
390
		$data = Array('masque.nt' => $obs['nt'],
392
		$donnees = Array('masque.nt' => $obs['nt'],
391
					  'masque.lg' => $langue,
393
					  'masque.lg' => $langue,
392
					  'retour.champs' => 'conseil_emploi');
394
					  'retour.champs' => 'conseil_emploi');
393
		$this->service->initialiserRessourcesEtParametres(Array('nvjfl', 'noms-vernaculaires', 'attributions'), $data);
395
		$this->service->initialiserRessourcesEtParametres(Array('nvjfl', 'noms-vernaculaires', 'attributions'), $donnees);
394
		try {
396
		try {
395
			$noms = $this->service->traiterRessources();
397
			$noms = $this->service->traiterRessources();
396
		} catch(Exception $e) { return ''; }
398
		} catch(Exception $e) { return ''; }
397
		if(! $noms) return '';
399
		if(! $noms) return '';