function inc_exporter_csv_dist($titre, $resource, $delim=',', $entetes = null,$envoyer = true){ $filename = preg_replace(',[^-_\w]+,', '_', translitteration(textebrut(typo($titre)))); if ($delim == 'TAB') $delim = "\t"; if (!in_array($delim,array(',',';',"\t"))) $delim = ","; $charset = $GLOBALS['meta']['charset']; $importer_charset = null; if ($delim == ',') $extension = 'csv'; else { $extension = 'xls'; # Excel n'accepte pas l'utf-8 ni les entites html... on transcode tout ce qu'on peut $importer_charset = $charset = 'iso-8859-1'; } $filename = "$filename.$extension"; if ($entetes AND is_array($entetes) AND count($entetes)) $output = exporter_csv_ligne($entetes,$delim,$importer_charset); // on passe par un fichier temporaire qui permet de ne pas saturer la memoire // avec les gros exports $fichier = sous_repertoire(_DIR_CACHE,"export") . $filename; $fp = fopen($fichier, 'w'); $length = fwrite($fp, $output); while ($row=is_array($resource)?array_shift($resource):sql_fetch($resource)){ $output = exporter_csv_ligne($row,$delim,$importer_charset); $length += fwrite($fp, $output); } fclose($fp); if ($envoyer) { Header("Content-Type: text/comma-separated-values; charset=$charset"); Header("Content-Disposition: attachment; filename=$filename"); //non supporte //Header("Content-Type: text/plain; charset=$charset"); Header("Content-Length: $length"); ob_clean(); flush(); readfile($fichier); } return $fichier; }
/** * Traitement de l'export des donnees auteurs. * * @param string $criteres de selection des auteurs * * @return array $retour nbre auteurs exportes et message de confirmation d'action. */ function exec_adhauteurs_export() { // Preparation affichage des choix type d'export $criteres_tot = _request('criteres'); $criteres = explode('|', $criteres_tot, 7); // Preparation de l'export des criteres (mise en forme dans le fichier out) // -- saison -- if (intval($criteres[2])) { $lib_criteres = sql_getfetsel('titre', 'spip_adhsaisons', array('id_saison=' . intval($criteres[2]))); $export_crit[0] = array('Saison', $lib_criteres); } else { $export_crit[0] = array('Saison', 'active'); } // -- technique -- if (intval($criteres[3])) { $adhwhere = array("type = 'niveau_Technique'"); $adhwhere = array_merge($adhwhere, array("id_mot = " . intval($criteres[3]))); $lib_criteres = sql_getfetsel('titre', 'spip_mots', $adhwhere); $export_crit[1] = array('Techbase', $lib_criteres); } else { $export_crit[1] = array('Techbase', '<<Tous>>'); } // -- encadrement -- if (intval($criteres[4])) { $adhwhere = array("type='Niveau_Encadrement'"); $adhwhere = array_merge($adhwhere, array("id_mot = " . intval($criteres[4]))); $lib_criteres = sql_getfetsel('titre', 'spip_mots', $adhwhere); $export_crit[2] = array('Encadrant', $lib_criteres); } else { $export_crit[2] = array('Encadrant', '<<Tous>>'); } // -- niveau -- if (intval($criteres[5])) { $lib_criteres = sql_getfetsel('titre', 'spip_adhnivs', array('id_niveau =' . intval($criteres[5]))); $export_crit[3] = array('Niveau', $criteres[6], $lib_criteres); } else { $export_crit[3] = array('Niveau', '<<Tous>>'); } $export_crit[4] = array('Champ', $criteres[0], $criteres[1]); /*$debug1= "DEBUG adhclub JR : exec/adhauteurs_export - exec_adhauteurs_export - Pt05 - "; adhclub_log("$debug1.", true); adhclub_log("criteres tot= $criteres_tot.", true); adhclub_log("criteres 0= $criteres[0].", true); adhclub_log("criteres 1= $criteres[1].", true); adhclub_log("criteres 2= $criteres[2].", true); adhclub_log("criteres 3= $criteres[3].", true); adhclub_log("criteres 4= $criteres[4].", true); adhclub_log("criteres 5= $criteres[5].", true); adhclub_log("criteres 6= $criteres[6].", true); adhclub_log("criteres 7= $criteres[7].", true); adhclub_log("FIN $debug1.", true); */ $retour = _request('retour'); $delim = _request('delim'); if ($delim == 'TAB') { $delim = "\t"; } if (!$retour) { $retour = generer_url_ecrire('adh_adherents'); } $titre = _T("adhclub:exporter_user_nb", array('nb_auteurs' => $nb_auteurs)); if (!$delim) { $icone = _DIR_PLUGIN_ADHCLUB . "img_pack/adh_export-24.png"; // // Affichage de la page // $commencer_page = charger_fonction('commencer_page', 'inc'); pipeline('exec_init', array('args' => $_GET, 'data' => '')); echo $commencer_page($titre, "adhclub"); echo debut_gauche('', true); $raccourcis = recuperer_fond("prive/inclure/adh_menu_tous", $contexte); echo bloc_des_raccourcis($raccourcis); echo pipeline('affiche_gauche', array('args' => array('exec' => 'adhauteurs_export', 'sql_adh_auteurs' => $sql_adh_auteurs), 'data' => '')); echo creer_colonne_droite("", true); echo pipeline('affiche_droite', array('args' => array('exec' => 'adhauteurs_export', 'sql_adh_auteurs' => $sql_adh_auteurs), 'data' => '')); echo debut_droite("", true); $milieu = ''; $milieu .= "<div class='entete-formulaire'>"; // Icones retour if ($retour) { $milieu .= icone_verticale(_T('icone_retour'), $retour, $icone, "rien.gif", $GLOBALS['spip_lang_left']); } $milieu .= gros_titre($titre, '', false); $milieu .= "</div>"; $milieu .= "<div class='formulaire_spip'>"; $action = generer_url_ecrire("adhauteurs_export", "criteres={$criteres_tot}&retour={$retour}"); $milieu .= "\n<form action='{$action}' method='post' class='formulaire_editer'><div>" . form_hidden($action); $milieu .= "<ul><li><label for='delim'>" . _T("adhclub:export_format") . "</label>"; $milieu .= "<select name='delim' id='delim'>\n"; $milieu .= "<option value=','>" . _T("adhclub:export_classique") . "</option>\n"; $milieu .= "<option value=';'>" . _T("adhclub:export_excel") . "</option>\n"; $milieu .= "<option value='TAB'>" . _T("adhclub:export_tabulation") . "</option>\n"; $milieu .= "</select></li></ul>"; $milieu .= "<p class='boutons'><input type='submit' class='submit' name='ok' value='" . _T('bouton_download') . "' /></p>\n"; $milieu .= "</div></form>"; $milieu .= "</div>"; echo pipeline('affiche_milieu', array('args' => array('exec' => 'adhauteurs_export', 'criteres' => $criteres_tot, 'retour' => $retour), 'data' => $milieu)); echo fin_gauche(), fin_page(); exit; } // Debut de l'export des donnees // Recuperation de la requete des adherents suivant filtrage (array de la forme SELECT..) $sql_adh_auteurs = adh_recherche($criteres[0], $criteres[1], 'spip_auteurs', $criteres[2], $criteres[3], $criteres[4], $criteres[5], $criteres[6], true); if ($sql_adh_auteurs) { // JR 20/03/2013 - Definir les colonnes a extraire pour $adh_select $adhselect_l = array("au.id_auteur", "au.nom_famille", "au.prenom", "au.sexe", "au.naissance", "au.fonction as licence", "au.mobile", "au.telephone", "au.email", "au.certiflimite as date_certif", "au.certifaspirine as allergie_aspirine", "au.certifqualif as certif_restreint"); $adhfrom_l = array("spip_auteurs au"); $adhwhere_l = array("au.id_auteur IN(" . $sql_adh_auteurs . ")"); // -- Si la saison est explicite, // on recherche les données Cotisations et Assurances associees a chaque auteur if (intval($criteres[2])) { $adhselect_l = array_merge($adhselect_l, array("co_l.id_coti", "co_l.titre as cotisation", "co_l.mnt_cotis", "as_l.id_assur", "as_l.titre as assurance", "as_l.mnt_assur")); $adhfrom_l = array_merge($adhfrom_l, array("spip_adhcotis co_l", "spip_adhcotis_liens ca_l", "spip_adhassurs as_l", "spip_adhassurs_liens aa_l")); $adhwhere_l = array_merge($adhwhere_l, array("au.id_auteur=ca_l.id_objet", "ca_l.objet='auteur'", "ca_l.id_coti=co_l.id_coti", "co_l.id_saison=" . intval($criteres[2]), "co_l.complement='non'", "au.id_auteur=aa_l.id_objet", "aa_l.objet='auteur'", "aa_l.id_assur=as_l.id_assur", "as_l.id_saison=" . intval($criteres[2]))); } /*$debug1= "DEBUG adhclub JR : exec/adhauteurs_export - Pt25 - "; adhclub_log("$debug1.", true); $debug2 = sql_get_select($adhselect_l, $adhfrom_l, sql_in('au.id_auteur', $sql_adh_auteurs)); adhclub_log("debug2=$debug2.", true); adhclub_log("adhwhere_l=$adhwhere_l.", true); $debug3 = sql_get_select($adhselect_l, $adhfrom_l, $adhwhere_l); adhclub_log("debug3=$debug3.", true); adhclub_log("FIN $debug1.", true); */ if ($export_auteurs = sql_allfetsel($adhselect_l, $adhfrom_l, $adhwhere_l)) { foreach ($export_auteurs as $ligne) { $list_entete = array(); $list_valeur = array(); foreach ($ligne as $k => $v) { /*$debug1= "DEBUG adhclub JR : exec/adhauteurs_export - Pt35 - "; adhclub_log("$debug1.", true); adhclub_log("k= $k , v= $v.", true); adhclub_log("FIN $debug1.", true);*/ $list_entete = array_merge($list_entete, array($k)); $list_valeur = array_merge($list_valeur, array($v)); } // Ecriture de l'entete des colonnes. if ($nb_auteurs == 0) { // JR-2013/08/01-Mise en forme des criteres en tete du fichier exporte. // JR-25/03/2015-Utilisation des F(spip_bonux) existantes. $output = exporter_csv_ligne(array('CRITERES'), $delim); $output .= exporter_csv_ligne(array('-_-_-_-', '-_-_-_-_-_-_-_-_-_-_-_-'), $delim); $output .= exporter_csv_ligne($export_crit[0], $delim); $output .= exporter_csv_ligne($export_crit[1], $delim); $output .= exporter_csv_ligne($export_crit[2], $delim); $output .= exporter_csv_ligne($export_crit[3], $delim); $output .= exporter_csv_ligne($export_crit[4], $delim); $output .= exporter_csv_ligne(array('-_-_-_-', '-_-_-_-_-_-_-_-_-_-_-_-'), $delim); // JR-20130801-Entetes de colonnes. $output .= exporter_csv_ligne($list_entete, $delim); } // Ecriture des lignes de donnees. $output .= exporter_csv_ligne($list_valeur, $delim); ++$nb_auteurs; } $charset = $GLOBALS['meta']['charset']; $file_csv = "export_auteurs_" . date('Ymd_His'); // @todo-JR-25/03/2015-Utilisation des F(spip_bonux) existantes. Attention remplissage criteres. //$filename = inc_exporter_csv($file_csv, ' ', $delim); $filename = preg_replace(',[^-_\\w]+,', '_', translitteration(textebrut(typo($file_csv)))); // Excel ? if ($delim == ',') { $extension = 'csv'; } else { // Extension 'csv' si delim = ';' (et pas forcément 'xls' !) if ($delim == ';') { $extension = 'csv'; } else { $extension = 'xls'; } } # Excel n'accepte pas l'utf-8 ni les entites html... on fait quoi? include_spip('inc/charsets'); $output = unicode2charset(charset2unicode($output), 'iso-8859-1'); $charset = 'iso-8859-1'; } Header("Content-Type: text/comma-separated-values; charset={$charset}"); Header("Content-Disposition: attachment; filename={$filename}.{$extension}"); //Header("Content-Type: text/plain; charset=$charset"); Header("Content-Length: " . strlen($output)); echo $output; exit; //*/ } else { include_spip('inc/minipres'); echo minipres(); } }