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 |
}
|