source: spip-zone/_plugins_/formidable_sondage/fsondage_pipelines.php @ 65572

Last change on this file since 65572 was 65572, checked in by marcimat@…, 8 years ago

Un plugin ajoutant une option de sondage au traitement enregistrant en base de données pour Formidable.

L'option activée, un graphique est affiché à la place du formulaire dès que quelqu'un a déjà voté ou que quelqu'un vient juste de voter.

Pas certain que ça marche pour tout, mais radio et checkbox ça a l'air ok.

File size: 5.1 KB
Line 
1<?php
2/**
3 * Plugin Formidable Sondage
4 * (c) 2012 Marcillaud Matthieu
5 * Licence GNU/GPL
6 */
7
8if (!defined('_ECRIRE_INC_VERSION')) return;
9
10
11/**
12 * Ajoute un graphique des réponses sur les formulaires
13 * de formidables qui sont des sondages et sont déjà répondu
14 *
15 * @pipeline formulaire_fond
16 * @param array $flux Données du pipeline
17 * @return array Données du pipeline
18**/
19function fsondage_formulaire_fond($flux) {
20        if ($flux['args']['form'] == 'formidable') {
21                $contexte = $flux['args']['contexte'];
22                // si le formulaire n'est pas editable, c'est que c'est possiblement
23                // un sondage a afficher !
24                if (!$contexte['editable'] and isset($contexte['_formidable'])) {
25                        $formulaire = $contexte['_formidable'];
26                        // il faut que l'on ne puisse pas répondre pour afficher le sondage au chargement
27                        if (!autoriser('repondre', 'formulaire', $formulaire['id_formulaire'], null, array('formulaire'=>$formulaire)))
28                        {
29                                $traitements = unserialize($formulaire['traitements']);
30                                if (is_array($traitements)
31                                  and isset($traitements['enregistrement'])
32                                  and isset($traitements['enregistrement']['sondage'])
33                                  and $traitements['enregistrement']['sondage'])
34                                {
35                                        // Nous sommes face à un sondage auquel on a déjà répondu !
36                                        // On remplace complètement l'affichage du formulaire
37                                        // par un affichage du résultat de sondage !
38                                        $id_formulaire = $formulaire['id_formulaire'];
39                                        $flux['data'] = recuperer_fond('modeles/fsondage', array(
40                                                'id_formulaire' => $id_formulaire,
41                                        ));
42                                }
43                        }
44                }
45        }
46        return $flux;
47}
48
49/**
50 * Complète les chargement des formulaires formidable et de configuration
51 * des traitements des formulaires formidable
52 *
53 * Ajoute la saisie indiquant que le formulaire est un sondage
54 * dans le formulaire des traitements d'un formulaire formidable
55 *
56 * Complète les infos de chargement du formulaire formidable
57 *
58 * @pipeline formulaire_charger
59 * @param array $flux Données du pipeline
60 * @return array Données du pipeline
61**/
62function fsondage_formulaire_charger($flux) {
63
64        // traitements des formulaires formidables
65        if ($flux['args']['form'] == 'editer_formulaire_traitements') {
66                // liste des saisies du formulaire
67                $saisies = $flux['data']['_configurer_traitements'];
68                #var_dump($saisies[3]['saisies']);
69                // saisie indiquant si c'est un sondage ou non
70                $saisie_sondage = array(
71                        'saisie' => 'oui_non',
72                        'options' => array(
73                                'nom' => 'traitements[enregistrement][sondage]',
74                                'label' => '<:fsondage:traiter_enregistrement_option_sondage_label:>',
75                                'explication' => '<:fsondage:traiter_enregistrement_option_sondage_explication:>',
76                                'defaut' => '',
77                                'inserer_fin' => "
78                                        <script type='text/javascript'>
79                                                (function(\$){
80                                                $(document).ready(function() {
81                                                        /* Obtenir la saisie de sondage */
82                                                        \$sondage = \$('.formulaire_editer_formulaire_traitements .editer_traitements_enregistrement_sondage');
83                                                        /* Si c'est un sondage, on ferme les autres options */
84                                                        if (\$sondage.find('#champ_traitements_enregistrement_sondage_oui').is(':checked')) {
85                                                                \$sondage.parent().find('li:not(.editer_traitements_enregistrement_sondage)').hide();
86                                                        }
87                                                        /* Si la valeur du sondage change, on ouvre ou ferme les autres options */
88                                                        \$sondage.change(function(){
89                                                                if (\$sondage.find('#champ_traitements_enregistrement_sondage_oui').is(':checked')) {
90                                                                        \$sondage.parent().find('li:not(.editer_traitements_enregistrement_sondage)').hide();
91                                                                } else {
92                                                                        \$sondage.parent().find('li:not(.editer_traitements_enregistrement_sondage)').show();
93                                                                }
94                                                        });
95                                                });
96                                                })(jQuery);
97                                        </script>
98                                ",
99                        )
100                );
101                // insertion de notre saisie
102                $lieu = saisies_chercher($saisies, 'traitements[enregistrement][multiple]', true);
103                #var_dump($lieu);
104                $saisies = saisies_inserer($saisies, $saisie_sondage, $lieu);
105                // on sauve nos modifications
106                $flux['data']['_configurer_traitements'] = $saisies;
107        }
108        return $flux;
109}
110
111
112/**
113 * Lorsqu'on demande un sondage dans le formulaire des traitements d'un
114 * formulaire formidable, on applique d'office des valeurs à certains
115 * champs que l'on a caché.
116 *
117 * @pipeline formulaire_charger
118 * @param array $flux Données du pipeline
119 * @return array Données du pipeline
120**/
121function fsondage_formulaire_verifier($flux) {
122        if ($flux['args']['form'] == 'editer_formulaire_traitements') {
123                $traitements_choisis = _request('traitements_choisis');
124                $traitements = _request('traitements');
125                // on verifie que le traitement 'enregistrement' est coché
126                if (is_array($traitements_choisis) and in_array('enregistrement', $traitements_choisis)) {
127                        // dans ce cas là, on regarde si 'sondage' est coché
128                        if (is_array($traitements)
129                          and is_array($traitements['enregistrement'])
130                          and $enr = &$traitements['enregistrement']
131                          and isset($enr['sondage'])
132                          and $enr['sondage']) {
133                                // si sondage est là, on met des valeurs obligatoires
134                                // sur les options d'enregistrement
135                                $enr = array_merge($enr, array(
136                                        'multiple' => '',
137                                        'modifiable' => '',
138                                        'identification' => 'cookie',
139                                        'moderation' => 'posteriori',
140                                ));
141                                set_request('traitements', $traitements);
142                        }
143                }
144        }
145        return $flux;
146}
147
148?>
Note: See TracBrowser for help on using the repository browser.