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

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

notice php en moins

File size: 4.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('public:date'),
63                        _T('formidable:reponses_auteur'),
64                        _T('formidable:reponses_ip')
65                );
66                if ($statut_reponses != 'publie') {
67                        $titres[] = _T('formidable:reponse_statut');
68                }
69                $saisies = saisies_lister_par_nom(unserialize($formulaire['saisies']), false);
70                foreach ($saisies as $nom => $saisie) {
71                        if ($saisie['saisie'] != 'explication') {    // on exporte tous les champs sauf explications
72                                $options  = $saisie['options'];
73                                $titres[] = sinon(
74                                        isset($options['label_case']) ? $options['label_case']:'', 
75                                        sinon(isset($options['label']) ? $options['label']:'', 
76                                                $nom
77                                        ));
78                        }
79                }
80               
81                // On passe la ligne des titres de colonnes dans un pipeline
82                $titres = pipeline(
83                        'formidable_exporter_formulaire_reponses_titres',
84                        array(
85                                'args' => array('id_formulaire'=>$id_formulaire, 'formulaire'=>$formulaire),
86                                'data' => $titres,
87                        )
88                );
89                $reponses_completes[] = $titres;
90
91                // On parcourt chaque réponse
92                foreach ($reponses as $reponse) {
93                        // Est-ce qu'il y a un auteur avec un nom
94                        $nom_auteur = '';
95                        if ($id_auteur = intval($reponse['id_auteur'])) {
96                                $nom_auteur = sql_getfetsel('nom', 'spip_auteurs', 'id_auteur = ' . $id_auteur);
97                        }
98                        if (!$nom_auteur) {
99                                $nom_auteur = '';
100                        }
101
102                        // Le début de la réponse avec les infos (date, auteur, etc)
103                        $reponse_complete = array(
104                                $reponse['date'],
105                                $nom_auteur,
106                                $reponse['ip']
107                        );
108                        if ($statut_reponses != 'publie') {
109                                $reponse_complete[] = statut_texte_instituer('formulaires_reponse', $reponse['statut']);
110                        }
111
112                        // Ensuite tous les champs
113                        foreach ($saisies as $nom => $saisie) {
114                                if ($saisie['saisie'] != 'explication') {
115                                        $valeur = sql_getfetsel(
116                                                'valeur',
117                                                'spip_formulaires_reponses_champs',
118                                                'id_formulaires_reponse = ' . intval($reponse['id_formulaires_reponse']) . ' and nom = ' . sql_quote($nom)
119                                        );
120                                        $tenter_unserialize = charger_fonction('tenter_unserialize', 'filtre/');
121                                        $valeur = $tenter_unserialize($valeur);
122                                        $reponse_complete[] = facteur_mail_html2text(
123                                                recuperer_fond(
124                                                        'saisies-vues/_base',
125                                                        array_merge(
126                                                                array(
127                                                                        'valeur_uniquement' => 'oui',
128                                                                        'type_saisie'       => $saisie['saisie'],
129                                                                        'valeur'            => $valeur
130                                                                ),
131                                                                $saisie['options']
132                                                        )
133                                                )
134                                        );
135                                }
136                        }
137                       
138                        // On passe la ligne de réponse dans un pipeline
139                        $reponse_complete = pipeline(
140                                'formidable_exporter_formulaire_reponses_reponse',
141                                array(
142                                        'args' => array('id_formulaire'=>$id_formulaire, 'formulaire'=>$formulaire, 'reponse'=>$reponse),
143                                        'data' => $reponse_complete,
144                                )
145                        );
146
147                        // On ajoute la ligne à l'ensemble des réponses
148                        $reponses_completes[] = $reponse_complete;
149                }
150
151                if ($reponses_completes and $exporter_csv = charger_fonction('exporter_csv', 'inc/', true)) {
152                        $exporter_csv('reponses-formulaire-' . $formulaire['identifiant'], $reponses_completes, $delim);
153                        exit();
154                }
155        } else {
156                return false;
157        }
158}
Note: See TracBrowser for help on using the repository browser.