| Line 331... |
Line 331... |
| 331 |
restore_error_handler();
|
331 |
restore_error_handler();
|
| Line 332... |
Line 332... |
| 332 |
|
332 |
|
| 333 |
// le cast en string des nombres permet d'unifier le parsing du retour
|
333 |
// le cast en string des nombres permet d'unifier le parsing du retour
|
| 334 |
// car il n'est destiné qu'à être affiché
|
334 |
// car il n'est destiné qu'à être affiché
|
| 335 |
$retour = array(
|
335 |
$retour = array(
|
| 336 |
'import_obs_ajoutees' => (string)$obs_ajouts,
|
336 |
'import_obs_ajoutees' => (string)$obs_ajouts,
|
| 337 |
'import_images_ajoutees' => (string)$nb_images_ajoutees,
|
337 |
'import_images_ajoutees' => (string)$nb_images_ajoutees,
|
| 338 |
'import_mots_cles_ajoutes' => (string)$nb_mots_cle_ajoutes,
|
338 |
'import_mots_cles_ajoutes' => (string)$nb_mots_cle_ajoutes,
|
| 339 |
'import_colonnes_non_traitees' => implode(', ', $filtre->exclues)
|
339 |
'import_colonnes_non_traitees' => implode(', ', $filtre->exclues)
|
| 340 |
);
|
340 |
);
|
| 341 |
// Ajout d'éventuelles erreurs
|
341 |
// Ajout d'éventuelles erreurs
|
| 342 |
if ($this->bilan) {
|
342 |
if ($this->bilan) {
|
| 343 |
$retour += array('import_erreurs' => implode("\n", $this->bilan) . "\n");
|
343 |
$retour += array('import_erreurs' => implode("\n", $this->bilan) . "\n");
|
| 344 |
}
|
344 |
}
|
| 345 |
// Dans le cas où le client ne sait pas lire le retour d'upload
|
345 |
// Dans le cas où le client ne sait pas lire le retour d'upload
|
| 346 |
// on stocke les stats en session pour les appeler plus tard
|
346 |
// on stocke les stats en session pour les appeler plus tard
|
| 347 |
// car ceci peut poser notamment problème pour les requêtes CORS
|
347 |
// car ceci peut poser notamment problème pour les requêtes CORS
|
| Line 350... |
Line 350... |
| 350 |
// les lire directement après l'upload
|
350 |
// les lire directement après l'upload
|
| 351 |
$this->envoyerJson($retour);
|
351 |
$this->envoyerJson($retour);
|
| 352 |
die();
|
352 |
die();
|
| 353 |
}
|
353 |
}
|
| Line 354... |
Line 354... |
| 354 |
|
354 |
|
| 355 |
public function getElement($uid) {
|
355 |
public function getElement($uid) {
|
| Line 356... |
Line 356... |
| 356 |
if($uid[0] == "template") {
|
356 |
if($uid[0] == "template") {
|
| 357 |
|
357 |
|
| Line 358... |
Line 358... |
| 358 |
$tpl_dir = dirname(__FILE__).DIRECTORY_SEPARATOR.'squelettes'.DIRECTORY_SEPARATOR;
|
358 |
$tpl_dir = dirname(__FILE__).DIRECTORY_SEPARATOR.'squelettes'.DIRECTORY_SEPARATOR;
|
| 359 |
$tpl = $tpl_dir.'modele_import.xls';
|
359 |
$tpl = $tpl_dir.'modele_import.xls';
|
| 360 |
|
360 |
|
| Line 361... |
Line 361... |
| 361 |
$lecteur = PHPExcel_IOFactory::createReaderForFile($tpl);
|
361 |
$lecteur = PHPExcel_IOFactory::createReaderForFile($tpl);
|
| 362 |
$classeur_tpl = $lecteur->load($tpl);
|
362 |
$classeur_tpl = $lecteur->load($tpl);
|
| 363 |
$feuille_tpl = $classeur_tpl->getActiveSheet();
|
363 |
$feuille_tpl = $classeur_tpl->getActiveSheet();
|
| 364 |
|
364 |
|
| 365 |
// Détection de la dernière colonne pour connaitre la position d'ajout des champs étendus
|
365 |
// Détection de la dernière colonne pour connaitre la position d'ajout des champs étendus
|
| 366 |
// Si un groupe est demandé
|
366 |
// Si un groupe est demandé
|
| Line 367... |
Line 367... |
| 367 |
$lettre_colonne_max = $feuille_tpl->getHighestColumn();
|
367 |
$lettre_colonne_max = $feuille_tpl->getHighestColumn();
|
| 368 |
$nb_colonne_max = PHPExcel_Cell::columnIndexFromString($lettre_colonne_max);
|
368 |
$nb_colonne_max = PHPExcel_Cell::columnIndexFromString($lettre_colonne_max);
|
| Line 379... |
Line 379... |
| 379 |
for($i = 0; $i < $nb_colonne_max; $i++) {
|
379 |
for($i = 0; $i < $nb_colonne_max; $i++) {
|
| 380 |
$lettre_colonne = PHPExcel_Cell::stringFromColumnIndex($i);
|
380 |
$lettre_colonne = PHPExcel_Cell::stringFromColumnIndex($i);
|
| 381 |
$champ_obl = $feuille_tpl->getCell($lettre_colonne.$ligne)->getValue();
|
381 |
$champ_obl = $feuille_tpl->getCell($lettre_colonne.$ligne)->getValue();
|
| Line 382... |
Line 382... |
| 382 |
|
382 |
|
| 383 |
if(!empty($descriptions[$champ_obl])) {
|
383 |
if(!empty($descriptions[$champ_obl])) {
|
| 384 |
$feuille_tpl->getComment($lettre_colonne.$ligne)->getText()->createTextRun($descriptions[$champ_obl]);
|
384 |
$feuille_tpl->getComment($lettre_colonne.$ligne)->getText()->createTextRun($descriptions[$champ_obl]);
|
| 385 |
$feuille_tpl->getComment($lettre_colonne.$ligne)->setWidth(400);
|
385 |
$feuille_tpl->getComment($lettre_colonne.$ligne)->setWidth(400);
|
| 386 |
}
|
386 |
}
|
| Line 387... |
Line 387... |
| 387 |
}
|
387 |
}
|
| Line 393... |
Line 393... |
| 393 |
$champs = Cel::db()->requeter($requete);
|
393 |
$champs = Cel::db()->requeter($requete);
|
| Line 394... |
Line 394... |
| 394 |
|
394 |
|
| 395 |
foreach($champs as $champ) {
|
395 |
foreach($champs as $champ) {
|
| 396 |
$lettre_colonne = PHPExcel_Cell::stringFromColumnIndex($nb_colonne_en_cours);
|
396 |
$lettre_colonne = PHPExcel_Cell::stringFromColumnIndex($nb_colonne_en_cours);
|
| 397 |
// Les champs étendus sont préfixés par "ext:" pour ne pas être ignoré lors d'un import
|
397 |
// Les champs étendus sont préfixés par "ext:" pour ne pas être ignoré lors d'un import
|
| 398 |
// l'import ignore les noms de colonnes qu'il ne connait pas
|
398 |
// l'import ignore les noms de colonnes qu'il ne connait pas
|
| 399 |
$feuille_tpl->setCellValue($lettre_colonne.$ligne, 'ext:'.$champ['champ']);
|
399 |
$feuille_tpl->setCellValue($lettre_colonne.$ligne, 'ext:'.$champ['champ']);
|
| 400 |
// Ajout de la description dans le commentaire si elle est présente
|
400 |
// Ajout de la description dans le commentaire si elle est présente
|
| 401 |
if(!empty($descriptions[$champ['champ']])) {
|
401 |
if(!empty($descriptions[$champ['champ']])) {
|
| 402 |
$feuille_tpl->getComment($lettre_colonne.$ligne)->getText()->createTextRun($descriptions[$champ['champ']]);
|
402 |
$feuille_tpl->getComment($lettre_colonne.$ligne)->getText()->createTextRun($descriptions[$champ['champ']]);
|
| 403 |
$feuille_tpl->getComment($lettre_colonne.$ligne)->setWidth(400);
|
403 |
$feuille_tpl->getComment($lettre_colonne.$ligne)->setWidth(400);
|
| Line 404... |
Line 404... |
| 404 |
}
|
404 |
}
|
| 405 |
|
405 |
|
| 406 |
$nb_colonne_en_cours++;
|
406 |
$nb_colonne_en_cours++;
|
| 407 |
}
|
407 |
}
|
| Line 408... |
Line 408... |
| 408 |
$nom_fichier .= '_'.$_GET['groupe'];
|
408 |
$nom_fichier .= '_'.$_GET['groupe'];
|
| 409 |
}
|
409 |
}
|
| 410 |
|
410 |
|
| 411 |
// Seul le format xlsx permet l'association de commentaires de colonnes dans PHPExcel
|
411 |
// Seul le format xlsx permet l'association de commentaires de colonnes dans PHPExcel
|
| 412 |
// C'est triste mais bon mais c'est trop pratique pour qu'on s'en passe
|
412 |
// C'est triste mais bon mais c'est trop pratique pour qu'on s'en passe
|
| 413 |
header('Content-type: application/vnd.ms-excel');
|
413 |
header('Content-type: application/vnd.ms-excel');
|
| Line 414... |
Line 414... |
| 414 |
header('Content-Disposition: attachment; filename="'.$nom_fichier.'.xlsx"');
|
414 |
header('Content-Disposition: attachment; filename="'.$nom_fichier.'.xlsx"');
|
| 415 |
$generateur = PHPExcel_IOFactory::createWriter($classeur_tpl, 'Excel2007');
|
415 |
$generateur = PHPExcel_IOFactory::createWriter($classeur_tpl, 'Excel2007');
|
| 416 |
$generateur->save('php://output');
|
416 |
$generateur->save('php://output');
|
| Line 435... |
Line 435... |
| 435 |
}
|
435 |
}
|
| Line 436... |
Line 436... |
| 436 |
|
436 |
|
| 437 |
return $descriptions;
|
437 |
return $descriptions;
|
| Line 438... |
Line 438... |
| 438 |
}
|
438 |
}
|
| 439 |
|
439 |
|
| 440 |
public function getRessource() {
|
440 |
public function getRessource() {
|
| 441 |
return self::getStatsDernierUpload();
|
441 |
return self::getStatsDernierUpload();
|
| 442 |
}
|
442 |
}
|
| 443 |
|
443 |
|
| 444 |
static function getStatsDernierUpload() {
|
444 |
static function getStatsDernierUpload() {
|
| 445 |
// renvoi des statistiques du dernier envoi de fichier
|
445 |
// renvoi des statistiques du dernier envoi de fichier
|
| 446 |
$stats = !empty($_SESSION['upload_stats']) ? $_SESSION['upload_stats'] : null;
|
446 |
$stats = !empty($_SESSION['upload_stats']) ? $_SESSION['upload_stats'] : null;
|
| 447 |
header("Content-Type: application/json; charset=utf-8");
|
447 |
header("Content-Type: application/json; charset=utf-8");
|
| 448 |
echo json_encode($stats);
|
448 |
echo json_encode($stats);
|
| Line 449... |
Line 449... |
| 449 |
die();
|
449 |
die();
|
| 450 |
}
|
450 |
}
|
| 451 |
|
451 |
|
| Line 1129... |
Line 1129... |
| 1129 |
// XXX: insère t'on des valeurs vides ?
|
1129 |
// XXX: insère t'on des valeurs vides ?
|
| 1130 |
$valeur = $champ;
|
1130 |
$valeur = $champ;
|
| 1131 |
$cle = $label;
|
1131 |
$cle = $label;
|
| Line 1132... |
Line 1132... |
| 1132 |
|
1132 |
|
| 1133 |
if (!empty($cle) && !empty($valeur)) {
|
1133 |
if (!empty($cle) && !empty($valeur)) {
|
| 1134 |
$champ_etendu_a_inserer = new ChampEtendu();
|
1134 |
$champ_etendu_a_inserer = new ObsEtendue();
|
| 1135 |
$champ_etendu_a_inserer->id = $id_obs;
|
1135 |
$champ_etendu_a_inserer->id = $id_obs;
|
| 1136 |
$champ_etendu_a_inserer->cle = $cle;
|
1136 |
$champ_etendu_a_inserer->cle = $cle;
|
| Line 1137... |
Line 1137... |
| 1137 |
$champ_etendu_a_inserer->valeur = $valeur;
|
1137 |
$champ_etendu_a_inserer->valeur = $valeur;
|