Changeset 111476 in spip-zone for _plugins_/formidable


Ignore:
Timestamp:
Sep 4, 2018, 7:51:07 PM (3 weeks ago)
Author:
marcimat@…
Message:

Suite de r111474 : Pouvoir exporter en spip-cli des formulaires formidables un peu gros.

On modifie pour que l’export de base, sépare la génération du fichier de l’envoi au navigateur.
Une commande SPIP-Cli prend en premier argument l’identifiant numérique ou textuel du formulaire. Une option pour le format csv ou xls.

`
spip formidable:exporter:formulaire super-petition
spip formidable:exporter:formulaire 2 --format=xls
`

Cette commande génère l’export (dans tmp/cache/export) au format csv ou xls, et zip s’il y a des fichiers dans les réponses.
On affiche, si réussite, le chemin physique généré, et également un lien de téléchargement qui peut être donné à une personne.
Cette personne doit être connectée à SPIP, avoir les droits de lecture pour ces réponses de formulaire.
Le lien d’action (un peu long) n’est valide que pour 1 contenu de fichier donné.

Note: le nommage de la commande pourrait évoluer si quelqu’un·e à mieux.

Location:
_plugins_/formidable/trunk
Files:
3 added
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/formidable/trunk/formulaires/exporter_formulaire_reponses.php

    r111474 r111476  
    3838        $verifier(_request('date_fin'), 'date', array('normaliser' => 'datetime'), $date_fin);
    3939
     40        $chemin = false;
     41        $content_type = '';
     42
    4043        if (_request('type_export') == 'csv') {
    41                 $ok = exporter_formulaires_reponses($id_formulaire, ',', $statut_reponses, $date_debut, $date_fin);
     44                $chemin = exporter_formulaires_reponses($id_formulaire, ',', $statut_reponses, $date_debut, $date_fin);
     45                if (pathinfo($chemin, PATHINFO_EXTENSION) === 'csv') {
     46                        $content_type = "text/comma-separated-values; charset=" . $GLOBALS['meta']['charset'];
     47                }
    4248        } elseif (_request('type_export') == 'xls') {
    43                 $ok = exporter_formulaires_reponses($id_formulaire, 'TAB', $statut_reponses, $date_debut, $date_fin);
    44         }
    45 
    46         if (!$ok) {
     49                $chemin = exporter_formulaires_reponses($id_formulaire, 'TAB', $statut_reponses, $date_debut, $date_fin);
     50                if (pathinfo($chemin, PATHINFO_EXTENSION) === 'xls') {
     51                        $content_type = "text/comma-separated-values; charset=iso-8859-1";
     52                }
     53        }
     54
     55        if ($chemin) {
     56                formidable_retourner_fichier($chemin, basename($chemin), $content_type);
     57        } else {
    4758                $retours['editable']       = 1;
    4859                $retours['message_erreur'] = _T('formidable:info_aucune_reponse');
     
    5263}
    5364
    54 /*
    55  * Exporter toutes les réponses d'un formulaire (anciennement action/exporter_formulaire_reponses)
     65
     66/**
     67 * Exporter toutes les réponses d'un formulaire dans un fichier
     68 *
    5669 * @param integer $id_formulaire
    57  * @return unknown_type
     70 * @param string $delim (Délimiteur ',' ou 'TAB')
     71 * @param string $statut_reponses
     72 * @param string $date_debut
     73 * @param string $date_fin
     74 *
     75 * @return string|false Chemin du fichier d’export CSV, XLS ou ZIP
    5876 */
    5977function exporter_formulaires_reponses($id_formulaire, $delim = ',', $statut_reponses = 'publie', $date_debut = '', $date_fin = '') {
     
    7391        }
    7492
     93        $fichier_csv = $exporter_csv('reponses-formulaire-' . $formulaire['identifiant'], $reponses_completes, $delim, null, false);
     94
    7595        // si pas de saisie fichiers, on envoie directement le csv
    7696        if (!count($saisies_fichiers)) {
    77                 $exporter_csv('reponses-formulaire-' . $formulaire['identifiant'], $reponses_completes, $delim);
    78                 exit;
    79         } else {
    80                 $fichier_csv = $exporter_csv('reponses-formulaire-' . $formulaire['identifiant'], $reponses_completes, $delim, null, false);
    81                 $fichier_zip = sous_repertoire(_DIR_CACHE, 'export') . 'reponses-formulaire-' . $formulaire['identifiant'] . '.zip';
    82                 include_spip('inc/formidable_fichiers');
    83                 $fichier_zip = formidable_zipper_reponses_formulaire($formulaire['id_formulaire'], $fichier_zip, $fichier_csv, $saisies_fichiers);
    84                 // si erreur lors du zippage
    85                 if (!$fichier_zip) {
    86                         return false;
    87                 } else {
    88                         formidable_retourner_fichier($fichier_zip, basename($fichier_zip));
    89                 }
    90         }
     97                return $fichier_csv;
     98        }
     99
     100        $fichier_zip = sous_repertoire(_DIR_CACHE, 'export') . 'reponses-formulaire-' . $formulaire['identifiant'] . '.zip';
     101        include_spip('inc/formidable_fichiers');
     102        return formidable_zipper_reponses_formulaire($formulaire['id_formulaire'], $fichier_zip, $fichier_csv, $saisies_fichiers);
    91103}
    92104
  • _plugins_/formidable/trunk/inc/formidable_fichiers.php

    r110552 r111476  
    260260 * Fournit à l'utilisateur·trice un fichier qui se trouve normalement dans un endroit inaccessible,
    261261 * par exemple dans config.
     262 *
    262263 * La fonction ne vérifie ni l'existence effective du fichier,
    263264 * ni le droit effectif de l'utilisateur.
    264265 * Ceci doit être fait dans l'action qui appelle cette fonction
     266 *
    265267 * @param string $chemin le chemin du fichier
    266268 * @param string $f le nom du fichier qui sera envoyé à l'utilisateur·trice.
    267  *
    268 **/
    269 function formidable_retourner_fichier($chemin, $f) {
    270         header('Content-Type: '.mime_content_type($chemin));
     269 * @param string $content_type Si Connu, sinon calculé
     270 *
     271**/
     272function formidable_retourner_fichier($chemin, $f, $content_type = '') {
     273        header('Content-Type: ' . ($content_type ?: mime_content_type($chemin)));
    271274        header("Content-Disposition: attachment; filename=\"$f\";");
    272275        header('Content-Transfer-Encoding: binary');
     
    446449        return $dossiers_effaces;
    447450}
     451
    448452/**
    449453 * Génerer un zip des réponses d'un formulaire
     454 *
    450455 * @param int $id_formulaire  (identifiant numérique)
    451  * @param str $chemin_du_zip chemin complet du zip
    452  * @param str $fichier_csv un fichier csv à ajouter, contenant les réponses
    453  * @return str|int chemin complet du zip ou 0 si erreur lors de la création
     456 * @param string $chemin_du_zip chemin complet du zip
     457 * @param string $fichier_csv un fichier csv à ajouter, contenant les réponses
     458 * @return string|int chemin complet du zip ou 0 si erreur lors de la création
    454459**/
    455460function formidable_zipper_reponses_formulaire($id_formulaire, $chemin_du_zip, $fichier_csv, $saisies_fichiers) {
  • _plugins_/formidable/trunk/paquet.xml

    r111273 r111476  
    22        prefix="formidable"
    33        categorie="communication"
    4         version="3.15.0"
     4        version="3.16.0"
    55        etat="stable"
    66        compatibilite="[3.0.0;3.2.*]"
Note: See TracChangeset for help on using the changeset viewer.