Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 1638 Rev 1639
Line 35... Line 35...
35
// TERM
35
// TERM
36
ini_set('html_errors', 0);
36
ini_set('html_errors', 0);
37
ini_set('xdebug.cli_color', 2);
37
ini_set('xdebug.cli_color', 2);
38
require_once('lib/PHPExcel/Classes/PHPExcel.php');
38
require_once('lib/PHPExcel/Classes/PHPExcel.php');
Line -... Line 39...
-
 
39
 
-
 
40
define('SEPARATEUR_IMAGES', ",");
39
 
41
 
40
// si getNomCommun_v2 ou getNomCommun_v3 sont utilisés
42
// si getNomCommun_v2 ou getNomCommun_v3 sont utilisés
41
/*require_once('/home/raphael/eflore/framework/framework/Framework.php');
43
/*require_once('/home/raphael/eflore/framework/framework/Framework.php');
42
Framework::setCheminAppli("/home/raphael/eflore/projets/services/index.php");
44
Framework::setCheminAppli("/home/raphael/eflore/projets/services/index.php");
43
Framework::setInfoAppli(Config::get('info'));
45
Framework::setInfoAppli(Config::get('info'));
Line 44... Line 46...
44
require_once('/home/raphael/eflore/projets/services/modules/0.1/Projets.php');*/
46
require_once('/home/raphael/eflore/projets/services/modules/0.1/Projets.php');*/
Line 45... Line 47...
45
 
47
 
-
 
48
class ExportXLS extends Cel  {
Line 46... Line 49...
46
class ExportXLS extends Cel  {
49
 
47
 
50
	private $cache = Array();
48
	private $cache = Array();
51
	private $id_utilisateur = NULL;
Line 90... Line 93...
90
		$params['widget'] = isset($params['widget']) ? $params['widget'] : 'CEL';
93
		$params['widget'] = isset($params['widget']) ? $params['widget'] : 'CEL';
91
		// TODO: controleUtilisateur()
94
		// TODO: controleUtilisateur()
92
		if(! $params['uid']) { // || ! $this->controleUtilisateur($params['uid'])) {
95
		if(! $params['uid']) { // || ! $this->controleUtilisateur($params['uid'])) {
93
			$params['uid'] = NULL;
96
			$params['uid'] = NULL;
94
		}
97
		}
-
 
98
		if($params['uid']) $this->id_utilisateur = intval($params['uid']);
Line 95... Line 99...
95
 
99
 
96
		$criteres = Array();
100
		$criteres = Array();
97
		if(! $obs_ids || count($obs_ids) == 1 && $obs_ids[0] == '*') {
101
		if(! $obs_ids || count($obs_ids) == 1 && $obs_ids[0] == '*') {
98
			unset($criteres['raw']);
102
			unset($criteres['raw']);
Line 125... Line 129...
125
 
129
 
126
		$objPHPExcel->getActiveSheet()->setTitle("Observations");
130
		$objPHPExcel->getActiveSheet()->setTitle("Observations");
127
		$feuille = $objPHPExcel->setActiveSheetIndex(0);
131
		$feuille = $objPHPExcel->setActiveSheetIndex(0);
128
		$colid = 0;
132
		$colid = 0;
-
 
133
		foreach($colonnes as $colonne) {
-
 
134
			if($colonne['extra'] == 2) continue;
129
		foreach($colonnes as $colonne) {
135
 
130
			$feuille->setCellValueByColumnAndRow($colid, 1, $colonne['nom']);
136
			$feuille->setCellValueByColumnAndRow($colid, 1, $colonne['nom']);
131
			if($colonne['extra']) {
137
			if($colonne['extra'] == 1) {
132
				$feuille->getStyleByColumnAndRow($colid, 1)->getBorders()->applyFromArray(
138
				$feuille->getStyleByColumnAndRow($colid, 1)->getBorders()->applyFromArray(
133
					array(
139
					array(
134
						'allborders' => array(
140
						'allborders' => array(
135
							'style' => PHPExcel_Style_Border::BORDER_DASHDOT,
141
							'style' => PHPExcel_Style_Border::BORDER_DASHDOT,
Line 145... Line 151...
145
 
151
 
146
		$ligne = 2;
152
		$ligne = 2;
147
		foreach ($observations as $obs) {
153
		foreach ($observations as $obs) {
148
			$colid = 0;
154
			$colid = 0;
-
 
155
			foreach($colonnes as $abbrev => $colonne) {
-
 
156
				if($colonne['extra'] == 2) continue;
149
			foreach($colonnes as $abbrev => $colonne) {
157
 
150
				// valeur direct depuis cel_obs ?
158
				// valeur direct depuis cel_obs ?
Line 151... Line 159...
151
				if(isset($obs[$abbrev])) $valeur = $obs[$abbrev];
159
				if(isset($obs[$abbrev])) $valeur = $obs[$abbrev];
152
 
160
 
Line 252... Line 260...
252
 
260
 
253
			   'mots_cles_texte'	=> self::GenColInfo('mots_cles_texte', 'Mots Clés', 1),
261
			   'mots_cles_texte'	=> self::GenColInfo('mots_cles_texte', 'Mots Clés', 1),
254
			   'commentaire'		=> self::GenColInfo('commentaire', 'Commentaires', 1),
262
			   'commentaire'		=> self::GenColInfo('commentaire', 'Commentaires', 1),
255
			   'date_creation'		=> self::GenColInfo('date_creation', 'Date Création', 1),
263
			   'date_creation'		=> self::GenColInfo('date_creation', 'Date Création', 1),
-
 
264
			   'date_modification'	=> self::GenColInfo('date_modification', 'Date Modification', 1),
-
 
265
 
256
			   'date_modification'	=> self::GenColInfo('date_modification', 'Date Modification', 1),
266
			   // rappel transmission = 1, signifie simplement "public"
-
 
267
			   // des données importées peuvent être d'emblée "publiques"
257
			   // importable = FALSE car à l'import ce sont de "nouvelles" données, donc "non-transmises"
268
			   // "importable" = TRUE
258
			   'transmission'		=> self::GenColInfo('transmission', 'Transmis', 1, NULL, NULL, FALSE),
269
			   'transmission'		=> self::GenColInfo('transmission', 'Transmis', 1),
259
			   'date_transmission'	=> self::GenColInfo('date_transmission', 'Date Transmission', 1),
270
			   'date_transmission'	=> self::GenColInfo('date_transmission', 'Date Transmission', 1),
260
			   'abondance'			=> self::GenColInfo('abondance', 'Abondance', 1, NULL, NULL, FALSE),
271
			   'abondance'			=> self::GenColInfo('abondance', 'Abondance', 1, NULL, NULL, FALSE),
261
			   'certitude'			=> self::GenColInfo('certitude', 'Certitude', 1, NULL, NULL, FALSE),
272
			   'certitude'			=> self::GenColInfo('certitude', 'Certitude', 1, NULL, NULL, FALSE),
Line 262... Line 273...
262
			   'phenologie'			=> self::GenColInfo('phenologie', 'Phénologie', 1, NULL, NULL, FALSE),
273
			   'phenologie'			=> self::GenColInfo('phenologie', 'Phénologie', 1, NULL, NULL, FALSE),
263
 
274
 
264
			   'nom_commun'			=> self::GenColInfo('nom_commun', 'Nom Commun', 1, NULL, 'getNomCommun', FALSE)
275
			   'nom_commun'			=> self::GenColInfo('nom_commun', 'Nom Commun', 1, NULL, 'getNomCommun', FALSE),
-
 
276
			   //'nom-commun'			=> self::GenColInfo('nom-commun', 'Nom Commun', 1, NULL, 'getNomCommun_v2'),
-
 
277
			   //'nom-commun'			=> self::GenColInfo('nom-commun', 'Nom Commun', 1, NULL, 'getNomCommun_v3'),
265
			   //'nom-commun'			=> self::GenColInfo('nom-commun', 'Nom Commun', 1, NULL, 'getNomCommun_v2')
278
 
266
			   //'nom-commun'			=> self::GenColInfo('nom-commun', 'Nom Commun', 1, NULL, 'getNomCommun_v3')
279
			   'images'				=> self::GenColInfo('image', 'Image(s)', 1, NULL, 'getImages', TRUE),
Line 267... Line 280...
267
		   );
280
		   );
268
		}
281
		}
Line 269... Line 282...
269
 
282
 
270
		return $colonnes;
283
		return $colonnes;
-
 
284
	}
-
 
285
 
-
 
286
	/*
-
 
287
	 * Wrapper générant un tableau associatif:
-
 
288
 
-
 
289
	 * @param $abbrev (obligatoire): nom court de colonne, largement utilisé lors de l'import.
-
 
290
	 *		  En effet chaque ligne importée est accessible à l'aide du `define` de $abbrev en majuscule, préfixé de "C_"
-
 
291
	 *		  Exemple: $ligne[C_LONGITUDE] pour "longitude".
-
 
292
	 *		  cf: ImportXLS::detectionEntete()
-
 
293
 
-
 
294
	 * @param $nom (obligatoire): nom complet de colonne (utilisé pour la ligne d'en-tête)
271
	}
295
 
-
 
296
	 * @param $is_extra:
-
 
297
	 * Si 0, la colonne est une colonne standard
-
 
298
	 * Si 1, la colonne est extra [le plus souvent générée automatiquement]
272
 
299
	 *		 (auquel cas une bordure bleue entoure son nom dans la ligne d'entête)
273
	/*
300
	 * Si 2, la colonne n'est pas traité à l'export, mais une définition peut lui être donnée
-
 
301
	 *		 qui pourra être utilisée à l'import, exemple: "image"
274
	 * Wrapper générant un tableau associatif:
302
 
275
	 * @param $is_extra: défini si la colonne est extra (auquelle une bordure bleue entoure son nom dans la première ligne
303
	 * @param $fonction (optionnel): un nom d'un fonction de préprocessing
276
	 * @param $fonction (optionnel): un nom d'un fonction de préprocessing
304
	 * 		  $fonction doit prendre comme seul argument la valeur d'origine et retourner la valeur transformée
Line -... Line 305...
-
 
305
 
-
 
306
	 * @param $fonction_data (optionnel): une *méthode* d'obtention de donnée
-
 
307
	 * 		  $fonction_data doit prendre comme premier argument le tableau des champs de l'enregistrement existant
277
	 * 		  $fonction doit prendre comme seul argument la valeur d'origine et retourner la valeur transformée
308
	 *		  $fonction_data doit retourner une valeur
278
	 * @param $fonction_data (optionnel): une *méthode* d'obtention de donnée
309
 
279
	 * 		  $fonction_data doit prendre comme premier argument les champs de l'enregistrement existant
310
	 * @param $importable (optionnel): défini si la colonne est traitée (ou absolument ignorée par PHPExcel) lors de
280
	 *		  $fonction_data doit retourner une valeur
311
	 *		  l'import.
281
 
312
 
Line 293... Line 324...
293
	protected function formaterDate($date_heure_mysql, $format = NULL) {
324
	protected function formaterDate($date_heure_mysql, $format = NULL) {
294
		if (!$date_heure_mysql || $date_heure_mysql == "0000-00-00 00:00:00") return "00/00/0000";
325
		if (!$date_heure_mysql || $date_heure_mysql == "0000-00-00 00:00:00") return "00/00/0000";
295
		$timestamp = DateTime::createFromFormat("Y-m-d H:i:s", $date_heure_mysql)->getTimestamp();
326
		$timestamp = DateTime::createFromFormat("Y-m-d H:i:s", $date_heure_mysql)->getTimestamp();
296
		if(!$timestamp) return "00/00/0000";
327
		if(!$timestamp) return "00/00/0000";
297
		// TODO: les widget ne font malheureusement pas usage de l'heure dans le CEL
328
		// TODO: les widget ne font malheureusement pas usage de l'heure dans le CEL
-
 
329
		// TODO: si modification, ne pas oublier de modifier le format d'import correspondant
-
 
330
		//		 dans ImportXLS (actuellement: "d/m/Y")
298
		$date_formatee = strftime('%A %d %B %Y', $timestamp);
331
		$date_formatee = strftime('%d/%m/%Y', $timestamp);
299
		if(!$date_formatee) return "00/00/0000";
332
		if(!$date_formatee) return "00/00/0000";
300
		return $date_formatee;
333
		return $date_formatee;
301
	}
334
	}
Line -... Line 335...
-
 
335
 
-
 
336
 
-
 
337
	// TODO: mettre en static + param "id_utilisateur"
-
 
338
	function getImages($obs) {
-
 
339
		if(! $this->id_utilisateur) return NULL;
-
 
340
 
-
 
341
		$rec = $this->requeter(
-
 
342
			sprintf("SELECT GROUP_CONCAT(nom_original SEPARATOR '%s') FROM cel_images i"
-
 
343
					. " LEFT JOIN cel_obs_images oi ON (i.id_image = oi.id_image)"
-
 
344
					. " LEFT JOIN cel_obs o ON (oi.id_observation = o.id_observation)"
-
 
345
					. " WHERE ce_utilisateur = %d",
-
 
346
					
-
 
347
					SEPARATEUR_IMAGES,
-
 
348
					$this->id_utilisateur));
-
 
349
		return $rec ? array_pop($rec) : NULL;
-
 
350
 
-
 
351
	}
302
 
352
 
303
 
353
 
304
	// TODO: référentiel ne devrait pas être généré au moment d'un Config::get,
354
	// TODO: référentiel ne devrait pas être généré au moment d'un Config::get,
305
	// comme dans Config::get('nomsVernaRechercheLimiteeTpl')
355
	// comme dans Config::get('nomsVernaRechercheLimiteeTpl')
306
	// Par exemple, la variable pour "nva" ?
356
	// Par exemple, la variable pour "nva" ?