[PLUGINS] ~maj globale
[lhc/web/www.git] / www / plugins / formidable / formulaires / exporter_formulaire_analyse.php
diff --git a/www/plugins/formidable/formulaires/exporter_formulaire_analyse.php b/www/plugins/formidable/formulaires/exporter_formulaire_analyse.php
new file mode 100644 (file)
index 0000000..b2146d9
--- /dev/null
@@ -0,0 +1,131 @@
+<?php
+
+// Sécurité
+if (!defined('_ECRIRE_INC_VERSION')) {
+       return;
+}
+
+include_spip('inc/formidable');
+include_spip('inc/config');
+
+function formulaires_exporter_formulaire_analyse_charger($id_formulaire = 0) {
+       $contexte = array();
+       $contexte['id_formulaire'] = intval($id_formulaire);
+       return $contexte;
+}
+
+function formulaires_exporter_formulaire_analyse_verifier($id_formulaire = 0) {
+       $erreurs = array();
+
+       return $erreurs;
+}
+
+function formulaires_exporter_formulaire_analyse_traiter($id_formulaire = 0) {
+       $retours = array();
+
+       if (_request('type_export') == 'csv') {
+               action_exporter_analyse_reponses($id_formulaire);
+       } else if (_request('type_export') == 'xls') {
+                       action_exporter_analyse_reponses($id_formulaire, 'TAB');
+       }
+
+       return $retours;
+}
+
+
+/*
+ * Exporter les analyses d'un formulaire (anciennement action/exporter_analyse_reponses_dist)
+ * @param integer $id_formulaire
+ * @return unknown_type
+ */
+function action_exporter_analyse_reponses($id_formulaire, $delim = ',') {
+       // on ne fait des choses seulements si le formulaire existe et qu'il a des enregistrements
+       $ok = false;
+       if ($id_formulaire > 0
+               and $formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = '.$id_formulaire)
+               and $reponses = sql_allfetsel('*', 'spip_formulaires_reponses', 'id_formulaire = '.$id_formulaire.' and statut = '.sql_quote('publie'))
+       ) {
+               include_spip('inc/saisies');
+               include_spip('classes/facteur');
+               include_spip('inc/filtres');
+               $reponses_completes = array();
+
+               $saisies = saisies_lister_par_nom(unserialize($formulaire['saisies']), false);
+
+               // exclure les champs non analysés
+               $traitement = unserialize($formulaire['traitements']);
+               foreach (explode('|', $traitement['enregistrement']['analyse_exclure_champs']) as $exclure) {
+                       unset($saisies[$exclure]);
+               }
+               $res = sql_select(
+                       array('nom, valeur'),
+                       'spip_formulaires_reponses_champs AS FRC,
+                       spip_formulaires_reponses AS FR,
+                       spip_formulaires AS F',
+                       "FRC.id_formulaires_reponse=FR.id_formulaires_reponse AND FR.statut='publie'
+                       AND F.id_formulaire=FR.id_formulaire
+                       AND F.id_formulaire=$id_formulaire"
+               );
+
+               $valeurs = array();
+               while ($r = sql_fetch($res)) {
+                       $valeurs[$r['nom']][] = is_array(unserialize($r['valeur']))
+                               ? unserialize($r['valeur'])
+                               : $r['valeur'];
+               }
+
+               foreach ($saisies as $nom => $saisie) {
+                       $valeur = sql_getfetsel(
+                               'valeur',
+                               'spip_formulaires_reponses_champs',
+                               'id_formulaires_reponse = '.intval($reponse['id_formulaires_reponse']).' and nom = '.sql_quote($nom)
+                       );
+                       if (is_array(unserialize($valeur))) {
+                               $valeur = unserialize($valeur);
+                       }
+
+                       $reponse_complete[] = formidable_analyser_saisie($saisie, $valeurs, 0, true);
+               }
+
+               $colonnes = array(_T('formidable:champs'), _T('formidable:sans_reponses'));
+               foreach ($reponse_complete as $reponses) {
+                       foreach ($reponses as $key => $reponse) {
+                               if ($key == 'header' || $key == 'sans_reponse') {
+                                       continue;
+                               }
+                               if (in_array($key, $colonnes) == false) {
+                                       array_push($colonnes, $key);
+                               }
+                       }
+               }
+
+               $csv = array();
+               foreach ($reponse_complete as $reponses) {
+                       foreach ($colonnes as $colonne) {
+                               $csv[$reponses['header']][$colonne] =
+                                       isset($reponses[$colonne])
+                                               ? $reponses[$colonne]
+                                               : '';
+                       }
+                       $csv[$reponses['header']][_T('formidable:champs')] = $reponses['header'];
+                       $csv[$reponses['header']][_T('formidable:sans_reponses')]
+                               = $reponses['formidable:sans_reponse'];
+               }
+
+               $cpt_ligne = 1;
+               $reponses_completes = array();
+               $reponses_completes[0] = $colonnes;
+               foreach ($csv as $ligne => $colonnes) {
+                       $cpt_colonne = 0;
+                       foreach ($colonnes as $colonne) {
+                               $reponses_completes[$cpt_ligne][$cpt_colonne++] = $colonne;
+                       }
+                       $cpt_ligne++;
+               }
+
+               if ($reponses_completes and $exporter_csv = charger_fonction('exporter_csv', 'inc/', true)) {
+                       $exporter_csv('analyses-formulaire-'.$formulaire['identifiant'], $reponses_completes, $delim);
+                       exit();
+               }
+       }
+}