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; |
|
// 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); |
// 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(); |
} |