source: spip-zone/_plugins_/formidable/branches/v3_dev/formulaires/exporter_formulaire_reponses.php @ 101439

Last change on this file since 101439 was 101439, checked in by maieul@…, 3 years ago

exporter les fichiers lorsqu'on exporte les réponses des fichiers

File size: 5.7 KB
Line 
1<?php
2
3// Sécurité
4if (!defined('_ECRIRE_INC_VERSION')) {
5        return;
6}
7
8include_spip('inc/formidable');
9include_spip('inc/config');
10
11function formulaires_exporter_formulaire_reponses_charger($id_formulaire = 0) {
12        $contexte                  = array();
13        $contexte['id_formulaire'] = intval($id_formulaire);
14
15        return $contexte;
16}
17
18function formulaires_exporter_formulaire_reponses_verifier($id_formulaire = 0) {
19        $erreurs = array();
20
21        return $erreurs;
22}
23
24function formulaires_exporter_formulaire_reponses_traiter($id_formulaire = 0) {
25        $retours = array();
26        $statut_reponses  = _request('statut_reponses');
27
28        if (_request('type_export') == 'csv') {
29                $ok = exporter_formulaires_reponses($id_formulaire, ',', $statut_reponses);
30        } elseif (_request('type_export') == 'xls') {
31                $ok = exporter_formulaires_reponses($id_formulaire, 'TAB', $statut_reponses);
32        }
33
34        if (!$ok) {
35                $retours['editable']       = 1;
36                $retours['message_erreur'] = _T('formidable:info_aucune_reponse');
37        }
38
39        return $retours;
40}
41
42
43/*
44 * Exporter toutes les réponses d'un formulaire (anciennement action/exporter_formulaire_reponses)
45 * @param integer $id_formulaire
46 * @return unknown_type
47 */
48function exporter_formulaires_reponses($id_formulaire, $delim = ',', $statut_reponses = 'publie') {
49        include_spip('inc/puce_statut');
50        // on ne fait des choses seulements si le formulaire existe et qu'il a des enregistrements
51        if ($id_formulaire > 0
52                and $formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = ' . $id_formulaire)
53                and $reponses = sql_allfetsel('*', 'spip_formulaires_reponses', 'id_formulaire = ' . $id_formulaire . ($statut_reponses == 'publie' ? ' and statut = "publie"' : ''))
54        ) {
55                include_spip('inc/saisies');
56                include_spip('facteur_fonctions');
57                include_spip('inc/filtres');
58                $reponses_completes = array();
59
60                // La première ligne des titres
61                $titres  = array(
62                        _T('formidable:id_formulaires_reponse'), 
63                        _T('public:date'),
64                        _T('formidable:reponses_auteur'),
65                        _T('formidable:reponses_ip')
66                );
67                if ($statut_reponses != 'publie') {
68                        $titres[] = _T('formidable:reponse_statut');
69                }
70                $saisies = saisies_lister_par_nom(unserialize($formulaire['saisies']), false);
71                foreach ($saisies as $nom => $saisie) {
72                        if ($saisie['saisie'] != 'explication') {    // on exporte tous les champs sauf explications
73                                $options  = $saisie['options'];
74                                $titres[] = sinon(
75                                        isset($options['label_case']) ? $options['label_case']:'', 
76                                        sinon(isset($options['label']) ? $options['label']:'', 
77                                                $nom
78                                        ));
79                        }
80                }
81               
82                // On passe la ligne des titres de colonnes dans un pipeline
83                $titres = pipeline(
84                        'formidable_exporter_formulaire_reponses_titres',
85                        array(
86                                'args' => array('id_formulaire'=>$id_formulaire, 'formulaire'=>$formulaire),
87                                'data' => $titres,
88                        )
89                );
90                $reponses_completes[] = $titres;
91
92                // On parcourt chaque réponse
93                foreach ($reponses as $reponse) {
94                        // Est-ce qu'il y a un auteur avec un nom
95                        $nom_auteur = '';
96                        if ($id_auteur = intval($reponse['id_auteur'])) {
97                                $nom_auteur = sql_getfetsel('nom', 'spip_auteurs', 'id_auteur = ' . $id_auteur);
98                        }
99                        if (!$nom_auteur) {
100                                $nom_auteur = '';
101                        }
102
103                        // Le début de la réponse avec les infos (date, auteur, etc)
104                        $reponse_complete = array(
105                                $reponse['id_formulaires_reponse'], 
106                                $reponse['date'],
107                                $nom_auteur,
108                                $reponse['ip']
109                        );
110                        if ($statut_reponses != 'publie') {
111                                $reponse_complete[] = statut_texte_instituer('formulaires_reponse', $reponse['statut']);
112                        }
113                        $saisies_fichiers = False;
114                        // Ensuite tous les champs
115                        foreach ($saisies as $nom => $saisie) {
116                                if ($saisie['saisie'] == 'fichiers') {//tester s'il y a des saisies parmi les fichiers
117                                        $saisies_fichiers = True;
118                                }       
119                                if ($saisie['saisie'] != 'explication') {
120                                        $valeur = sql_getfetsel(
121                                                'valeur',
122                                                'spip_formulaires_reponses_champs',
123                                                'id_formulaires_reponse = ' . intval($reponse['id_formulaires_reponse']) . ' and nom = ' . sql_quote($nom)
124                                        );
125                                        $tenter_unserialize = charger_fonction('tenter_unserialize', 'filtre/');
126                                        $valeur = $tenter_unserialize($valeur);
127                                        $reponse_complete[] = facteur_mail_html2text(
128                                                recuperer_fond(
129                                                        'saisies-vues/_base',
130                                                        array_merge(
131                                                                array(
132                                                                        'valeur_uniquement' => 'oui',
133                                                                        'type_saisie'       => $saisie['saisie'],
134                                                                        'valeur'            => $valeur
135                                                                ),
136                                                                $saisie['options']
137                                                        )
138                                                )
139                                        );
140                                }
141                        }
142                       
143                        // On passe la ligne de réponse dans un pipeline
144                        $reponse_complete = pipeline(
145                                'formidable_exporter_formulaire_reponses_reponse',
146                                array(
147                                        'args' => array('id_formulaire'=>$id_formulaire, 'formulaire'=>$formulaire, 'reponse'=>$reponse),
148                                        'data' => $reponse_complete,
149                                )
150                        );
151
152                        // On ajoute la ligne à l'ensemble des réponses
153                        $reponses_completes[] = $reponse_complete;
154                }
155                if (!$saisies_fichiers) {// si pas de saisie fichiers, on envoie directement le csv
156                        if ($reponses_completes and $exporter_csv = charger_fonction('exporter_csv', 'inc/', true)) {
157                                $exporter_csv('reponses-formulaire-' . $formulaire['identifiant'], $reponses_completes, $delim);
158                                exit();
159                        }
160                }       else {
161                        if ($reponses_completes and $exporter_csv = charger_fonction('exporter_csv', 'inc/', true)) {
162                                $fichier_csv = $exporter_csv('reponses-formulaire-' . $formulaire['identifiant'], $reponses_completes, $delim, null, False);
163                                $fichier_zip = sous_repertoire(_DIR_CACHE, 'export').'reponses-formulaire-' . $formulaire['identifiant'].'.zip';
164                                include_spip('inc/formidable_fichiers');
165                                $fichier_zip = formidable_zipper_reponses_formulaire($formulaire['id_formulaire'], $fichier_zip, $fichier_csv);
166                                if (!$fichier_zip) {// si erreur lors du zippage
167                                        return false;
168                                } else {
169                                        formidable_retourner_fichier($fichier_zip, basename($fichier_zip));     
170                                }
171                        }
172                }
173        } else {
174                return false;
175        }
176}
Note: See TracBrowser for help on using the repository browser.