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