[PLUGINS] ~maj globale
[lhc/web/www.git] / www / plugins / formidable / formulaires / exporter_formulaire_reponses.php
1 <?php
2
3 // Sécurité
4 if (!defined('_ECRIRE_INC_VERSION')) {
5 return;
6 }
7
8 include_spip('inc/formidable');
9 include_spip('inc/config');
10
11 function formulaires_exporter_formulaire_reponses_charger($id_formulaire = 0) {
12 $contexte = array();
13 $contexte['id_formulaire'] = intval($id_formulaire);
14
15 return $contexte;
16 }
17
18 function formulaires_exporter_formulaire_reponses_verifier($id_formulaire = 0) {
19 $erreurs = array();
20
21 return $erreurs;
22 }
23
24 function 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 */
48 function 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($options['label_case'], sinon($options['label'], $nom));
74 }
75 }
76
77 // On passe la ligne des titres de colonnes dans un pipeline
78 $titres = pipeline(
79 'formidable_exporter_formulaire_reponses_titres',
80 array(
81 'args' => array('id_formulaire'=>$id_formulaire, 'formulaire'=>$formulaire),
82 'data' => $titres,
83 )
84 );
85 $reponses_completes[] = $titres;
86
87 // On parcourt chaque réponse
88 foreach ($reponses as $reponse) {
89 // Est-ce qu'il y a un auteur avec un nom
90 $nom_auteur = '';
91 if ($id_auteur = intval($reponse['id_auteur'])) {
92 $nom_auteur = sql_getfetsel('nom', 'spip_auteurs', 'id_auteur = ' . $id_auteur);
93 }
94 if (!$nom_auteur) {
95 $nom_auteur = '';
96 }
97
98 // Le début de la réponse avec les infos (date, auteur, etc)
99 $reponse_complete = array(
100 $reponse['date'],
101 $nom_auteur,
102 $reponse['ip']
103 );
104 if ($statut_reponses != 'publie') {
105 $reponse_complete[] = statut_texte_instituer('formulaires_reponse', $reponse['statut']);
106 }
107
108 // Ensuite tous les champs
109 foreach ($saisies as $nom => $saisie) {
110 if ($saisie['saisie'] != 'explication') {
111 $valeur = sql_getfetsel(
112 'valeur',
113 'spip_formulaires_reponses_champs',
114 'id_formulaires_reponse = ' . intval($reponse['id_formulaires_reponse']) . ' and nom = ' . sql_quote($nom)
115 );
116 if (is_array(unserialize($valeur))) {
117 $valeur = unserialize($valeur);
118 }
119 $reponse_complete[] = facteur_mail_html2text(
120 recuperer_fond(
121 'saisies-vues/_base',
122 array_merge(
123 array(
124 'valeur_uniquement' => 'oui',
125 'type_saisie' => $saisie['saisie'],
126 'valeur' => $valeur
127 ),
128 $saisie['options']
129 )
130 )
131 );
132 }
133 }
134
135 // On passe la ligne de réponse dans un pipeline
136 $reponse_complete = pipeline(
137 'formidable_exporter_formulaire_reponses_reponse',
138 array(
139 'args' => array('id_formulaire'=>$id_formulaire, 'formulaire'=>$formulaire, 'reponse'=>$reponse),
140 'data' => $reponse_complete,
141 )
142 );
143
144 // On ajoute la ligne à l'ensemble des réponses
145 $reponses_completes[] = $reponse_complete;
146 }
147
148 if ($reponses_completes and $exporter_csv = charger_fonction('exporter_csv', 'inc/', true)) {
149 $exporter_csv('reponses-formulaire-' . $formulaire['identifiant'], $reponses_completes, $delim);
150 exit();
151 }
152 } else {
153 return false;
154 }
155 }