Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 2751 Rev 2765
Line 347... Line 347...
347
		die();
347
		die();
348
	}
348
	}
Line 349... Line 349...
349
	
349
	
350
	public function getElement($uid) {
350
	public function getElement($uid) {
351
		if($uid[0] == "template") {
-
 
-
 
351
		if($uid[0] == "template") {
352
			//$tpl = '/home/aurelien/web/cel_GWT2/jrest/modele_import.xls';
352
 
353
			$tpl = dirname(__FILE__).DIRECTORY_SEPARATOR.'squelettes'.DIRECTORY_SEPARATOR.'modele_import.xls';
353
			$tpl_dir = dirname(__FILE__).DIRECTORY_SEPARATOR.'squelettes'.DIRECTORY_SEPARATOR;
-
 
354
			$tpl = $tpl_dir.'modele_import.xls';
354
			//echo $tpl;exit;
355
 
355
			$lecteur = PHPExcel_IOFactory::createReaderForFile($tpl);
356
			$lecteur = PHPExcel_IOFactory::createReaderForFile($tpl);
356
			$classeur_tpl = $lecteur->load($tpl);
357
			$classeur_tpl = $lecteur->load($tpl);
Line -... Line 358...
-
 
358
			$feuille_tpl = $classeur_tpl->getActiveSheet();
-
 
359
			
357
			$feuille_tpl = $classeur_tpl->getActiveSheet();
360
			// Détection de la dernière colonne pour connaitre la position d'ajout des champs étendus
358
			
361
			// Si un groupe est demandé
359
			$lettre_colonne_max = $feuille_tpl->getHighestColumn();
362
			$lettre_colonne_max = $feuille_tpl->getHighestColumn();
360
			$nb_colonne_max = PHPExcel_Cell::columnIndexFromString($lettre_colonne_max);		
363
			$nb_colonne_max = PHPExcel_Cell::columnIndexFromString($lettre_colonne_max);		
-
 
364
			$ligne = 1;
-
 
365
			$nb_colonne_en_cours = $nb_colonne_max;	
-
 
366
 
-
 
367
			// Obtention des descriptions de champs communs et spécifiques
-
 
368
			$descriptions = $this->obtenirDescriptions($tpl_dir.'modele_import_description.txt');
-
 
369
			if(!empty($_GET['groupe'])) {
Line -... Line 370...
-
 
370
				$descriptions = $this->obtenirDescriptions($tpl_dir.'modele_import_description_'.$_GET['groupe'].'.txt', $descriptions);
-
 
371
			}
-
 
372
			
-
 
373
			// Association de la description des champs commun
-
 
374
			for($i = 0; $i < $nb_colonne_max; $i++) {
-
 
375
				$lettre_colonne = PHPExcel_Cell::stringFromColumnIndex($i);
-
 
376
				$champ_obl = $feuille_tpl->getCell($lettre_colonne.$ligne)->getValue();
-
 
377
				
-
 
378
				if(!empty($descriptions[$champ_obl])) {
-
 
379
					$feuille_tpl->getComment($lettre_colonne.$ligne)->getText()->createTextRun($descriptions[$champ_obl]);
-
 
380
					$feuille_tpl->getComment($lettre_colonne.$ligne)->setWidth(400); 
361
			$ligne = 1;
381
				}
-
 
382
			}
362
			$nb_colonne_en_cours = $nb_colonne_max;			
383
						
363
			
384
			$nom_fichier = 'import';
364
			$nom_fichier = 'import';
385
			// Ajout des colonnes spécifiques si un groupe de champ est demandé
365
			if(!empty($_GET['groupe'])) {
386
			if(!empty($_GET['groupe'])) {
366
				$requete = "SELECT * FROM cel_catalogue_champs_etendus_liaison WHERE GROUPE = ".Cel::db()->proteger($_GET['groupe']);
387
				$requete = "SELECT * FROM cel_catalogue_champs_etendus_liaison WHERE groupe = ".Cel::db()->proteger($_GET['groupe']);
367
				$champs = Cel::db()->requeter($requete);
388
				$champs = Cel::db()->requeter($requete);
-
 
389
 
-
 
390
				foreach($champs as $champ) {	
368
				
391
					$lettre_colonne = PHPExcel_Cell::stringFromColumnIndex($nb_colonne_en_cours);
-
 
392
					// Les champs étendus sont préfixés par "ext:" pour ne pas être ignoré lors d'un import
-
 
393
					// l'import ignore les noms de colonnes qu'il ne connait pas
-
 
394
					$feuille_tpl->setCellValue($lettre_colonne.$ligne, 'ext:'.$champ['champ']);
-
 
395
					// Ajout de la description dans le commentaire si elle est présente
-
 
396
					if(!empty($descriptions[$champ['champ']])) { 
-
 
397
						$feuille_tpl->getComment($lettre_colonne.$ligne)->getText()->createTextRun($descriptions[$champ['champ']]);
369
				foreach($champs as $champ) {	
398
						$feuille_tpl->getComment($lettre_colonne.$ligne)->setWidth(400);
370
					$lettre_colonne = PHPExcel_Cell::stringFromColumnIndex($nb_colonne_en_cours);
399
					}
371
					$feuille_tpl->setCellValue($lettre_colonne.$ligne, 'ext:'.$champ['champ']);
400
					
372
					$nb_colonne_en_cours++;
401
					$nb_colonne_en_cours++;
373
				}		
402
				}		
-
 
403
				$nom_fichier .= '_'.$_GET['groupe'];
-
 
404
			}
374
				$nom_fichier .= '_'.$_GET['groupe'];
405
			
375
			}
406
			// Seul le format xlsx permet l'association de commentaires de colonnes dans PHPExcel
376
 
407
			// C'est triste mais bon mais c'est trop pratique pour qu'on s'en passe
377
			header('Content-type: application/vnd.ms-excel');	
408
			header('Content-type: application/vnd.ms-excel');	
Line 378... Line 409...
378
			header('Content-Disposition: attachment; filename="'.$nom_fichier.'.xls"');
409
			header('Content-Disposition: attachment; filename="'.$nom_fichier.'.xlsx"');
379
			$generateur = PHPExcel_IOFactory::createWriter($classeur_tpl, 'Excel5');
410
			$generateur = PHPExcel_IOFactory::createWriter($classeur_tpl, 'Excel2007');
380
			$generateur->save('php://output');
411
			$generateur->save('php://output');
Line -... Line 412...
-
 
412
			
-
 
413
			exit;
-
 
414
		}
-
 
415
	}
-
 
416
	
-
 
417
	private function obtenirDescriptions($fichier_description, $descriptions = array()) {	
-
 
418
		if(file_exists($fichier_description)) {
-
 
419
			$descs_str = file_get_contents($fichier_description);
-
 
420
			$desc_items = explode("\n", $descs_str);
-
 
421
			
-
 
422
			foreach($desc_items as $item) {
-
 
423
				$cle_valeur = explode("=", $item);
-
 
424
				$valeur_desc = trim($cle_valeur[1]);
-
 
425
				// Les clés des fichiers sont écrasées dans l'ordre de lecture ce qui permet 
-
 
426
				// d'avoir par exemple une description différente pour le champ station suivant le projet
-
 
427
				// les "<br />" sont remplacés par des sauts de lignes 
-
 
428
				$descriptions[trim($cle_valeur[0])] = str_replace('<br />', "\n", $valeur_desc);
-
 
429
			}
381
			
430
		}
382
			exit;
431
		
383
		}
432
		return $descriptions;
Line 384... Line 433...
384
	}
433
	}