source: spip-zone/_plugins_/formidable/trunk/formidable_fonctions.php @ 84737

Last change on this file since 84737 was 84737, checked in by cedric@…, 5 years ago

Les listes de reponses sont par defaut non signifiantes car n'affichant aucune autre information que la date de saisie et l'IP source.
On permet de configurer pour chaque formulaire une chaine qui sera utilisee pour afficher un resume de chaque reponse (les champs @input_1@.. etant remplaces par leur valeur).
Ceci rend les listes de reponse beaucoup plus utilisables.

File size: 4.0 KB
Line 
1<?php
2
3/**
4 * Chargement des fonctions pour les squelettes
5 *
6 * @package SPIP\Formidable\Fonctions
7**/
8
9include_spip('inc/formidable');
10include_spip('public/formidable_criteres');
11
12/**
13 * #VOIR_REPONSE{checkbox_2} dans une boucle (FORMULAIRES_REPONSES)
14 *
15 * @param Pile $p
16 * @return Pile
17 */
18function balise_VOIR_REPONSE_dist($p) {
19        $nom = interprete_argument_balise(1, $p);
20        if (!$type_retour = interprete_argument_balise(2, $p)) { $type_retour = 'null'; }
21        if (!$sans_reponse = interprete_argument_balise(3, $p)) { $sans_reponse = 'null'; }
22        $id_formulaires_reponse = champ_sql('id_formulaires_reponse', $p);
23        $id_formulaire = champ_sql('id_formulaire', $p);
24        $p->code = "calculer_voir_reponse($id_formulaires_reponse, $id_formulaire, $nom, $type_retour, $sans_reponse)";
25        return $p;
26}
27
28function calculer_voir_reponse($id_formulaires_reponse, $id_formulaire, $nom, $type_retour=null, $sans_reponse=null){
29        static $formulaires_saisies = array();
30        static $reponses_valeurs = array();
31        $tenter_unserialize = charger_fonction('tenter_unserialize', 'filtre/');
32       
33        // Si pas déjà présent, on cherche les saisies de ce formulaire
34        if (is_null($formulaires_saisies[$id_formulaire])) {
35                $formulaires_saisies[$id_formulaire] = unserialize(sql_getfetsel('saisies', 'spip_formulaires', 'id_formulaire = '.intval($id_formulaire)));
36        }
37        // Si pas déjà présent, on cherche les valeurs de cette réponse
38        if (is_null($reponses_valeurs[$id_formulaires_reponse])) {
39                if ($champs = sql_allfetsel('nom,valeur', 'spip_formulaires_reponses_champs', 'id_formulaires_reponse = '.intval($id_formulaires_reponse))) {
40                        foreach ($champs as $champ) {
41                                $reponses_valeurs[$id_formulaires_reponse][$champ['nom']] = $tenter_unserialize($champ['valeur']);
42                        }
43                }
44        }
45       
46        // Si on demande la valeur brute, on ne génère rien, on renvoie telle quelle
47        if ($type_retour == 'brut') {
48                return $reponses_valeurs[$id_formulaires_reponse][$nom];
49        }
50       
51        // Si on trouve bien la saisie demandée
52        if ($saisie = saisies_chercher($formulaires_saisies[$id_formulaire], $nom)) {
53                // On génère la vue de cette saisie avec la valeur trouvée précédemment
54                return recuperer_fond(
55                        'saisies-vues/_base',
56                        array_merge(
57                                array(
58                                        'type_saisie' => $saisie['saisie'],
59                                        'valeur' => $reponses_valeurs[$id_formulaires_reponse][$nom],
60                                        'valeur_uniquement' => ($type_retour == 'valeur_uniquement' ? 'oui' : 'non'),
61                                        'sans_reponse' => $sans_reponse,
62                                ),
63                                $saisie['options']
64                        )
65                );
66        }
67}
68
69/**
70 * Afficher le resume d'une reponse selon un modele qui contient des noms de champ "@input_1@ ..."
71 *
72 * @param int $id_formulaires_reponse
73 * @param int $id_formulaire
74 * @param string $resume_reponse
75 * @return string
76 */
77function affiche_resume_reponse($id_formulaires_reponse, $id_formulaire=null, $modele_resume=null){
78        static $modeles_resume = array();
79        static $reponses_valeurs = array();
80        $tenter_unserialize = charger_fonction('tenter_unserialize', 'filtre/');
81
82        if (is_null($id_formulaire)){
83                $id_formulaire = sql_getfetsel("id_formulaire","spip_formulaires_reponses","id_formulaires_reponse=".intval($id_formulaires_reponse));
84        }
85        if (is_null($modele_resume) AND !isset($modeles_resume[$id_formulaire])){
86                $modeles_resume[$id_formulaire] = sql_getfetsel("resume_reponse","spip_formulaires","id_formulaire=".intval($id_formulaire));
87        }
88        if (is_null($modele_resume))
89                $modele_resume = $modeles_resume[$id_formulaire];
90
91        if (!$modele_resume)
92                return "";
93
94        if (is_null($reponses_valeurs[$id_formulaires_reponse])) {
95                if ($champs = sql_allfetsel('nom,valeur', 'spip_formulaires_reponses_champs', 'id_formulaires_reponse = '.intval($id_formulaires_reponse))) {
96                        foreach ($champs as $champ) {
97                                $valeur = $tenter_unserialize($champ['valeur']);
98                                if (is_array($valeur)) {
99                                        $valeur = implode(", ",$valeur);
100                                }
101                                $reponses_valeurs[$id_formulaires_reponse]["@".$champ['nom']."@"] = $valeur;
102                        }
103                }
104        }
105
106        return str_replace(array_keys($reponses_valeurs[$id_formulaires_reponse]),array_values($reponses_valeurs[$id_formulaires_reponse]),$modele_resume);
107}
Note: See TracBrowser for help on using the repository browser.