Valider 7a54799e rédigé par cerdic's avatar cerdic
Parcourir les fichiers

Les fonctions importer_csv() et exporter_csv() changent de signature et...

Les fonctions importer_csv() et exporter_csv() changent de signature et prennent un tableau d'options extensible - l'ancienne signature reste supportee mais depreciee
parent 93f90031
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+33 −16
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -69,28 +69,45 @@ function exporter_csv_ligne($ligne, $delim = ',', $importer_charset = null) {
 * @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)
 * @return string
 */
function inc_exporter_csv_dist($titre, $resource, $delim = ', ', $entetes = null, $envoyer = true) {
function inc_exporter_csv_dist($titre, $resource, $options = []) {

	// support ancienne syntaxe
	// inc_exporter_csv_dist($titre, $resource, $delim = ', ', $entetes = null, $envoyer = true)
	if (is_string($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,
	];
	$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'];
	$importer_charset = null;
	if ($delim == ',') {
	if ($options['delim'] == ',') {
		$extension = 'csv';
	} else {
		$extension = 'xls';
@@ -100,8 +117,8 @@ function inc_exporter_csv_dist($titre, $resource, $delim = ', ', $entetes = null
	$filename = "$filename.$extension";

	$output = '';
	if ($entetes and is_array($entetes) and count($entetes)) {
		$output = exporter_csv_ligne($entetes, $delim, $importer_charset);
	if (!empty($options['entetes']) and is_array($options['entetes'])) {
		$output = exporter_csv_ligne($options['entetes'], $options['delim'], $importer_charset);
	}

	// on passe par un fichier temporaire qui permet de ne pas saturer la memoire
@@ -111,12 +128,12 @@ function inc_exporter_csv_dist($titre, $resource, $delim = ', ', $entetes = null
	$length = fwrite($fp, $output);

	while ($row = is_array($resource) ? array_shift($resource) : sql_fetch($resource)) {
		$output = exporter_csv_ligne($row, $delim, $importer_charset);
		$output = exporter_csv_ligne($row, $options['delim'], $importer_charset);
		$length += fwrite($fp, $output);
	}
	fclose($fp);

	if ($envoyer) {
	if ($options['envoyer']) {
		header("Content-Type: text/comma-separated-values; charset=$charset");
		header("Content-Disposition: attachment; filename=$filename");
		//non supporte
+38 −14
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -76,23 +76,46 @@ function importer_csv_nettoie_key($key) {
 * pour generer un tableau associatif
 *
 * @param string $file
 * @param bool $head
 * @param string $delim
 * @param string $enclos
 * @param int $len
 * @param string $charset_source
 *     Permet de définir un charset source du CSV, si différent de utf-8 ou iso-8859-1
 * @param array $options
 *   bool $head
 *   string $delim
 *   string $enclos
 *   int $len
 *   string $charset_source : Permet de définir un charset source du CSV, si différent de utf-8 ou iso-8859-1
 * @return false|array
 */
function inc_importer_csv_dist($file, $head = false, $delim = ',', $enclos = '"', $len = 10000, $charset_source = '') {
function inc_importer_csv_dist($file, $options = []) {

	// support ancienne syntaxe
	// inc_importer_csv_dist($file, $head = false, $delim = ',', $enclos = '"', $len = 10000, $charset_source = '')
	if (is_string($options)) {
		$args = func_get_args();
		$options = [];
		foreach ([1 => 'head', 2 => 'delim', 3 => 'enclos', 4 => 'len', 5 => 'charset_source'] as $k => $option) {
			if (!empty($args[$k])) {
				$options[$option] = $args[$k];
			}
		}
	}

	$default_options = [
		'head' => false,
		'delim' => ',',
		'enclos' => '"',
		'len' => 10000,
		'charset_source' => '',
	];
	$options = array_merge($default_options, $options);


	$return = false;
	if (@file_exists($file)
		and $handle = fopen($file, 'r')) {
		if ($charset_source) {
			importer_csv_importcharset('', $charset_source);
		if ($options['charset_source']) {
			importer_csv_importcharset('', $options['charset_source']);
		}
		if ($head) {
			$header = fgetcsv($handle, $len, $delim, $enclos);
		if ($options['head']) {
			$header = fgetcsv($handle, $options['len'], $options['delim'], $options['enclos']);
			if ($header) {
				$header = array_map('importer_csv_importcharset', $header);
				$header = array_map('importer_csv_nettoie_key', $header);
@@ -106,9 +129,10 @@ function inc_importer_csv_dist($file, $head = false, $delim = ',', $enclos = '"'
				}
			}
		}
		while (($data = fgetcsv($handle, $len, $delim, $enclos)) !== false) {

		while (($data = fgetcsv($handle, $options['len'], $options['delim'], $options['enclos'])) !== false) {
			$data = array_map('importer_csv_importcharset', $data);
			if ($head and isset($header)) {
			if ($options['head'] and isset($header)) {
				$row = array();
				foreach ($header as $key => $heading) {
					if ($header_type[$heading] == "array") {
@@ -127,7 +151,7 @@ function inc_importer_csv_dist($file, $head = false, $delim = ',', $enclos = '"'
				$return[] = $data;
			}
		}
		if ($charset_source) {
		if ($options['charset_source']) {
			importer_csv_importcharset('', true);
		}
	}