source: spip-zone/_plugins_/_stable_/forms/forms_et_tables_1_9_1/forms_fonctions.php @ 7813

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

"reparer le mail de confirmation, et decodage des multiple dans #LESVALEURS qui ne marchait pas"

File size: 5.2 KB
Line 
1<?php
2
3/*
4 * forms
5 * Gestion de formulaires editables dynamiques
6 *
7 * Auteurs :
8 * Antoine Pitrou
9 * Cedric Morin
10 * Renato
11 * © 2005,2006 - Distribue sous licence GNU/GPL
12 *
13 */
14
15        if ($GLOBALS['spip_version_code']<1.92)
16                include_spip('inc/forms_compat_191');
17        include_spip('forms_filtres');
18        function forms_calcule_les_valeurs($type, $id_donnee, $champ, $id_form, $separateur=" "){
19                $lesvaleurs = array();
20                $res = spip_query("SELECT valeur FROM spip_forms_donnees_champs WHERE id_donnee="._q($id_donnee)." AND champ="._q($champ));
21                while ($row = spip_fetch_array($res)){
22                        $lesvaleurs[] = forms_calcule_valeur_en_clair($type, $id_donnee, $champ, $row['valeur'], $id_form);
23                }
24                return implode($separateur,$lesvaleurs);
25        }
26
27        function forms_calcule_valeur_en_clair($type, $id_donnee, $champ, $valeur, $id_form){
28                static $type_champ=array();
29                // s'assurer que l'on est bien sur une boucle forms, sinon retourner $valeur
30                $ok = $id_donnee && $champ;
31                $ok = $ok && in_array($type, array('forms_donnees_champs','forms_champs'));
32                // on recupere la valeur du champ si pas deja la
33                if ($ok && !$valeur){
34                        $res = spip_query("SELECT valeur FROM spip_forms_donnees_champs WHERE id_donnee="._q($id_donnee)." AND champ="._q($champ));
35                        if ($row = spip_fetch_array($res))
36                                $valeur = $row['valeur'];
37                        else
38                                $ok = false;
39                }
40                // on recupere le type du champ si pas deja fait (une seule requete par table et par champ)
41                if ($ok && !isset($type_champ[$id_form][$champ])){
42                        $res = spip_query("SELECT type FROM spip_forms_champs WHERE id_form="._q($id_form)." AND champ="._q($champ));
43                        if ($row = spip_fetch_array($res))
44                                $type_champ[$id_form][$champ] = $row['type'];
45                        else 
46                                $ok = false;
47                }
48                if ($ok) {
49                        $t = $type_champ[$id_form][$champ];
50                        if ($t == 'select' OR $t == 'multiple'){
51                                $res = spip_query("SELECT titre FROM spip_forms_champs_choix WHERE id_form="._q($id_form)." AND champ="._q($champ)." AND choix="._q($valeur));
52                                if ($row = spip_fetch_array($res)){
53                                        $valeur = typo($row['titre']);
54                                }
55                        }
56                        elseif ($t == 'mot'){
57                                $res = spip_query("SELECT titre FROM spip_mots WHERE id_mot="._q($valeur));
58                                if ($row = spip_fetch_array($res)){
59                                        $valeur = typo($row['titre']);
60                                }
61                        }
62                        /*else  $valeur = typo($valeur);*/
63                }
64                return $valeur;
65        }
66               
67        //
68        // Afficher le diagramme de resultats d'un sondage
69        //
70
71        function Forms_afficher_reponses_sondage($id_form) {
72                $r = '';
73                $id_form = intval($id_form);
74       
75                $result = spip_query("SELECT * FROM spip_forms WHERE id_form="._q($id_form));
76                if (!$row = spip_fetch_array($result)) return '';
77                $type_form = $row['type_form'];
78       
79                $r .= "<div class='spip_sondage'>\n";
80               
81                $res2 = spip_query("SELECT * FROM spip_forms_champs AS champs
82                WHERE id_form="._q($id_form)." AND type IN ('select','multiple','mot') ORDER BY cle");
83                while ($row2 = spip_fetch_array($res2)) {
84                        // On recompte le nombre total de reponses reelles
85                        // car les champs ne sont pas forcement obligatoires
86                        $row3=spip_fetch_array(spip_query("SELECT COUNT(DISTINCT c.id_donnee) AS num ".
87                                "FROM spip_forms_donnees AS r LEFT JOIN spip_forms_donnees_champs AS c USING (id_donnee) ".
88                                "WHERE r.id_form=$id_form AND r.confirmation='valide' AND r.statut='publie' AND c.champ="._q($row2['champ'])));
89                        if (!$row3 OR !($total_reponses=$row3['num']))
90                                continue;
91       
92                        // Construire la liste des valeurs autorisees pour le champ
93                        $liste = array();
94                        if ($row2['type'] != 'mot'){
95                                $res3 = spip_query("SELECT * FROM spip_forms_champs_choix WHERE champ="._q($row2['champ']));
96                                while ($row3=spip_fetch_array($res3))
97                                        $liste[$row3['choix']] = $row3['titre'];
98                        }
99                        else {
100                                $id_groupe = intval($row2['extra_info']);
101                                $res3 = spip_query("SELECT id_mot, titre FROM spip_mots WHERE id_groupe=$id_groupe ORDER BY titre");
102                                while ($row3 = spip_fetch_array($res3))
103                                        $liste[$row3['id_mot']] = $row3['titre'];
104                        }
105       
106                        // Nombre de reponses pour chaque valeur autorisee
107                        $query = "SELECT c.valeur, COUNT(*) AS num ".
108                                "FROM spip_forms_donnees AS r LEFT JOIN spip_forms_donnees_champs AS c USING (id_donnee) ".
109                                "WHERE r.id_form=$id_form AND r.confirmation='valide' AND r.statut='publie' ".
110                                "AND c.champ="._q($row2['champ'])." GROUP BY c.valeur";
111                        $result = spip_query($query);
112                        $chiffres = array();
113                        // Stocker pour regurgiter dans l'ordre
114                        while ($row = spip_fetch_array($result)) {
115                                $chiffres[$row['valeur']] = $row['num'];
116                        }
117                       
118                        // Afficher les resultats
119                        $r .= "<strong>".propre($row2['nom'])." :</strong><br />\n";
120                        $r .= "<div class='sondage_table'>";
121                        foreach ($liste as $valeur => $nom) {
122                                $r .= "<div class='sondage_ligne'>";
123                                $n = $chiffres[$valeur];
124                                $taux = floor($n * 100.0 / $total_reponses);
125                                $r .= "<div class='ligne_nom'>".typo($nom)." </div>";
126                                $r .= "<div style='width: 60%;'><div class='ligne_barre' style='width: $taux%;'></div></div>";
127                                $r .= "<div class='ligne_chiffres'>$n ($taux&nbsp;%)</div>";
128                                $r .= "</div>\n";
129                        }
130                        $r .= "</div>\n";
131                        $r .= "<br />\n";
132                }
133       
134                $query = "SELECT COUNT(*) AS num FROM spip_forms_donnees ".
135                        "WHERE id_form=$id_form AND confirmation='valide' AND r.statut='publie'";
136                $result = spip_query($query);
137                list($num) = spip_fetch_array($result,SPIP_NUM);
138                $r .= "<strong>"._T("forms:total_votes")." : $num</strong>";
139       
140                $r .= "</div>\n";
141               
142                return $r;
143        }
144
145?>
Note: See TracBrowser for help on using the repository browser.