Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 2764 → Rev 2765

/trunk/jrest/services/ImportXLS.php
349,34 → 349,65
public function getElement($uid) {
if($uid[0] == "template") {
//$tpl = '/home/aurelien/web/cel_GWT2/jrest/modele_import.xls';
$tpl = dirname(__FILE__).DIRECTORY_SEPARATOR.'squelettes'.DIRECTORY_SEPARATOR.'modele_import.xls';
//echo $tpl;exit;
 
$tpl_dir = dirname(__FILE__).DIRECTORY_SEPARATOR.'squelettes'.DIRECTORY_SEPARATOR;
$tpl = $tpl_dir.'modele_import.xls';
 
$lecteur = PHPExcel_IOFactory::createReaderForFile($tpl);
$classeur_tpl = $lecteur->load($tpl);
$feuille_tpl = $classeur_tpl->getActiveSheet();
// Détection de la dernière colonne pour connaitre la position d'ajout des champs étendus
// Si un groupe est demandé
$lettre_colonne_max = $feuille_tpl->getHighestColumn();
$nb_colonne_max = PHPExcel_Cell::columnIndexFromString($lettre_colonne_max);
$ligne = 1;
$nb_colonne_en_cours = $nb_colonne_max;
$nb_colonne_en_cours = $nb_colonne_max;
 
// Obtention des descriptions de champs communs et spécifiques
$descriptions = $this->obtenirDescriptions($tpl_dir.'modele_import_description.txt');
if(!empty($_GET['groupe'])) {
$descriptions = $this->obtenirDescriptions($tpl_dir.'modele_import_description_'.$_GET['groupe'].'.txt', $descriptions);
}
// Association de la description des champs commun
for($i = 0; $i < $nb_colonne_max; $i++) {
$lettre_colonne = PHPExcel_Cell::stringFromColumnIndex($i);
$champ_obl = $feuille_tpl->getCell($lettre_colonne.$ligne)->getValue();
if(!empty($descriptions[$champ_obl])) {
$feuille_tpl->getComment($lettre_colonne.$ligne)->getText()->createTextRun($descriptions[$champ_obl]);
$feuille_tpl->getComment($lettre_colonne.$ligne)->setWidth(400);
}
}
$nom_fichier = 'import';
// Ajout des colonnes spécifiques si un groupe de champ est demandé
if(!empty($_GET['groupe'])) {
$requete = "SELECT * FROM cel_catalogue_champs_etendus_liaison WHERE GROUPE = ".Cel::db()->proteger($_GET['groupe']);
$requete = "SELECT * FROM cel_catalogue_champs_etendus_liaison WHERE groupe = ".Cel::db()->proteger($_GET['groupe']);
$champs = Cel::db()->requeter($requete);
 
foreach($champs as $champ) {
$lettre_colonne = PHPExcel_Cell::stringFromColumnIndex($nb_colonne_en_cours);
$lettre_colonne = PHPExcel_Cell::stringFromColumnIndex($nb_colonne_en_cours);
// Les champs étendus sont préfixés par "ext:" pour ne pas être ignoré lors d'un import
// l'import ignore les noms de colonnes qu'il ne connait pas
$feuille_tpl->setCellValue($lettre_colonne.$ligne, 'ext:'.$champ['champ']);
// Ajout de la description dans le commentaire si elle est présente
if(!empty($descriptions[$champ['champ']])) {
$feuille_tpl->getComment($lettre_colonne.$ligne)->getText()->createTextRun($descriptions[$champ['champ']]);
$feuille_tpl->getComment($lettre_colonne.$ligne)->setWidth(400);
}
$nb_colonne_en_cours++;
}
$nom_fichier .= '_'.$_GET['groupe'];
}
 
// Seul le format xlsx permet l'association de commentaires de colonnes dans PHPExcel
// C'est triste mais bon mais c'est trop pratique pour qu'on s'en passe
header('Content-type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename="'.$nom_fichier.'.xls"');
$generateur = PHPExcel_IOFactory::createWriter($classeur_tpl, 'Excel5');
header('Content-Disposition: attachment; filename="'.$nom_fichier.'.xlsx"');
$generateur = PHPExcel_IOFactory::createWriter($classeur_tpl, 'Excel2007');
$generateur->save('php://output');
exit;
383,6 → 414,24
}
}
private function obtenirDescriptions($fichier_description, $descriptions = array()) {
if(file_exists($fichier_description)) {
$descs_str = file_get_contents($fichier_description);
$desc_items = explode("\n", $descs_str);
foreach($desc_items as $item) {
$cle_valeur = explode("=", $item);
$valeur_desc = trim($cle_valeur[1]);
// Les clés des fichiers sont écrasées dans l'ordre de lecture ce qui permet
// d'avoir par exemple une description différente pour le champ station suivant le projet
// les "<br />" sont remplacés par des sauts de lignes
$descriptions[trim($cle_valeur[0])] = str_replace('<br />', "\n", $valeur_desc);
}
}
return $descriptions;
}
public function getRessource() {
return self::getStatsDernierUpload();
}