Browse Source

Prendre en compte la nouvelle signature de la fonction avec un tableau d'option, avec support de l'ancienne syntaxe

Testé avec Formidable sur SPIP 3.2 et 4.1
master
nicod_ 2 months ago
parent
commit
7b7e50c791
  1. 57
      inc/exporter_csv.php

57
inc/exporter_csv.php

@ -32,28 +32,49 @@ use Box\Spout\Common\Entity\Style\Color;
* @param string $titre
* titre utilise pour nommer le fichier
* @param array|resource $resource
* @param string $delim
* delimiteur
* @param array $entetes
* tableau d'en-tetes pour nommer les colonnes (genere la premiere ligne)
* @param bool $envoyer
* pour envoyer le fichier exporte (permet le telechargement)
* @param array $options
* string $delim : delimiteur
* array $entetes : tableau d'en-tetes pour nommer les colonnes (genere la premiere ligne)
* bool $envoyer : pour envoyer le fichier exporte (permet le telechargement)
* string $charset : charset de l'export si different de celui du site
* callable callback : fonction callback a appeler sur chaque ligne pour mettre en forme/completer les donnees
* @return string
*/
function inc_exporter_csv_dist($titre, $resource, $delim = ', ', $entetes = null, $envoyer = true) {
function inc_exporter_csv_dist($titre, $resource, $options = array()) {
// support ancienne syntaxe
// inc_exporter_csv_dist($titre, $resource, $delim = ', ', $entetes = null, $envoyer = true)
if (!is_array($options)) {
$args = func_get_args();
$options = [];
foreach ([2 => 'delim', 3 => 'entetes', 4 => 'envoyer'] as $k => $option) {
if (!empty($args[$k])) {
$options[$option] = $args[$k];
}
}
}
$default_options = [
'delim' => ', ',
'entetes' => null,
'envoyer' => true,
'charset' => null,
'callback' => null,
];
$options = array_merge($default_options, $options);
$filename = preg_replace(',[^-_\w]+,', '_', translitteration(textebrut(typo($titre))));
if ($delim == 'TAB') {
$delim = "\t";
if ($options['delim'] == 'TAB') {
$options['delim'] = "\t";
}
if (!in_array($delim, array(',', ';', "\t"))) {
$delim = ',';
if (!in_array($options['delim'], array(',', ';', "\t"))) {
$options['delim'] = ',';
}
$charset = $GLOBALS['meta']['charset'];
$folder = sous_repertoire(_DIR_CACHE, 'export');
if ($delim == ',') {
if ($options['delim'] == ',') {
$extension = 'csv';
$writer = WriterEntityFactory::createWriterFromFile("$folder$filename.$extension");
$writer->openToFile("$folder$filename.$extension");
@ -70,8 +91,8 @@ function inc_exporter_csv_dist($titre, $resource, $delim = ', ', $entetes = null
}
$filename = "$filename.$extension";
if ($entetes and is_array($entetes) and count($entetes)) {
$writer->addRow(WriterEntityFactory::createRowFromArray($entetes));
if ($options['entetes'] and is_array($options['entetes']) and count($options['entetes'])) {
$writer->addRow(WriterEntityFactory::createRowFromArray($options['entetes']));
}
// on passe par un fichier temporaire qui permet de ne pas saturer la memoire
@ -81,10 +102,10 @@ function inc_exporter_csv_dist($titre, $resource, $delim = ', ', $entetes = null
while ($row = is_array($resource) ? array_shift($resource) : sql_fetch($resource)) {
$writer->addRow(WriterEntityFactory::createRowFromArray($row));
}
$writer->close();
if ($envoyer) {
if ($options['envoyer']) {
header("Content-Type: text/comma-separated-values; charset=$charset");
header("Content-Disposition: attachment; filename=$filename");
//non supporte

Loading…
Cancel
Save