[PLUGINS] ~maj globale
[lhc/web/www.git] / www / plugins / formidable / formulaires / exporter_formulaire_analyse.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_analyse_charger($id_formulaire = 0) {
12 $contexte = array();
13 $contexte['id_formulaire'] = intval($id_formulaire);
14 return $contexte;
15 }
16
17 function formulaires_exporter_formulaire_analyse_verifier($id_formulaire = 0) {
18 $erreurs = array();
19
20 return $erreurs;
21 }
22
23 function formulaires_exporter_formulaire_analyse_traiter($id_formulaire = 0) {
24 $retours = array();
25
26 if (_request('type_export') == 'csv') {
27 action_exporter_analyse_reponses($id_formulaire);
28 } else if (_request('type_export') == 'xls') {
29 action_exporter_analyse_reponses($id_formulaire, 'TAB');
30 }
31
32 return $retours;
33 }
34
35
36 /*
37 * Exporter les analyses d'un formulaire (anciennement action/exporter_analyse_reponses_dist)
38 * @param integer $id_formulaire
39 * @return unknown_type
40 */
41 function action_exporter_analyse_reponses($id_formulaire, $delim = ',') {
42 // on ne fait des choses seulements si le formulaire existe et qu'il a des enregistrements
43 $ok = false;
44 if ($id_formulaire > 0
45 and $formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = '.$id_formulaire)
46 and $reponses = sql_allfetsel('*', 'spip_formulaires_reponses', 'id_formulaire = '.$id_formulaire.' and statut = '.sql_quote('publie'))
47 ) {
48 include_spip('inc/saisies');
49 include_spip('classes/facteur');
50 include_spip('inc/filtres');
51 $reponses_completes = array();
52
53 $saisies = saisies_lister_par_nom(unserialize($formulaire['saisies']), false);
54
55 // exclure les champs non analysés
56 $traitement = unserialize($formulaire['traitements']);
57 foreach (explode('|', $traitement['enregistrement']['analyse_exclure_champs']) as $exclure) {
58 unset($saisies[$exclure]);
59 }
60 $res = sql_select(
61 array('nom, valeur'),
62 'spip_formulaires_reponses_champs AS FRC,
63 spip_formulaires_reponses AS FR,
64 spip_formulaires AS F',
65 "FRC.id_formulaires_reponse=FR.id_formulaires_reponse AND FR.statut='publie'
66 AND F.id_formulaire=FR.id_formulaire
67 AND F.id_formulaire=$id_formulaire"
68 );
69
70 $valeurs = array();
71 while ($r = sql_fetch($res)) {
72 $valeurs[$r['nom']][] = is_array(unserialize($r['valeur']))
73 ? unserialize($r['valeur'])
74 : $r['valeur'];
75 }
76
77 foreach ($saisies as $nom => $saisie) {
78 $valeur = sql_getfetsel(
79 'valeur',
80 'spip_formulaires_reponses_champs',
81 'id_formulaires_reponse = '.intval($reponse['id_formulaires_reponse']).' and nom = '.sql_quote($nom)
82 );
83 if (is_array(unserialize($valeur))) {
84 $valeur = unserialize($valeur);
85 }
86
87 $reponse_complete[] = formidable_analyser_saisie($saisie, $valeurs, 0, true);
88 }
89
90 $colonnes = array(_T('formidable:champs'), _T('formidable:sans_reponses'));
91 foreach ($reponse_complete as $reponses) {
92 foreach ($reponses as $key => $reponse) {
93 if ($key == 'header' || $key == 'sans_reponse') {
94 continue;
95 }
96 if (in_array($key, $colonnes) == false) {
97 array_push($colonnes, $key);
98 }
99 }
100 }
101
102 $csv = array();
103 foreach ($reponse_complete as $reponses) {
104 foreach ($colonnes as $colonne) {
105 $csv[$reponses['header']][$colonne] =
106 isset($reponses[$colonne])
107 ? $reponses[$colonne]
108 : '';
109 }
110 $csv[$reponses['header']][_T('formidable:champs')] = $reponses['header'];
111 $csv[$reponses['header']][_T('formidable:sans_reponses')]
112 = $reponses['formidable:sans_reponse'];
113 }
114
115 $cpt_ligne = 1;
116 $reponses_completes = array();
117 $reponses_completes[0] = $colonnes;
118 foreach ($csv as $ligne => $colonnes) {
119 $cpt_colonne = 0;
120 foreach ($colonnes as $colonne) {
121 $reponses_completes[$cpt_ligne][$cpt_colonne++] = $colonne;
122 }
123 $cpt_ligne++;
124 }
125
126 if ($reponses_completes and $exporter_csv = charger_fonction('exporter_csv', 'inc/', true)) {
127 $exporter_csv('analyses-formulaire-'.$formulaire['identifiant'], $reponses_completes, $delim);
128 exit();
129 }
130 }
131 }