Changeset 65601 in spip-zone


Ignore:
Timestamp:
Sep 6, 2012, 11:35:43 AM (7 years ago)
Author:
marcimat@…
Message:

On décore d'un graphisme les analyses des réponses de formulaire en mettant des barres de progression et des pourcentages. Le code provient du module de sondage qu'on va intégrer directement dans formidable en créant un nouveau type de retour.

Location:
_plugins_/formidable/trunk
Files:
3 added
13 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/formidable/trunk/base/formidable_tables.php

    r65580 r65601  
    1212/**
    1313 * Déclarer les interfaces des tables de formidable pour le compilateur
    14  *
     14 * 
    1515 * @pipeline declarer_tables_interfaces
     16 *
    1617 * @param array $interfaces
    1718 *     Déclarations d'interface pour le compilateur
    1819 * @return array
    1920 *     Déclarations d'interface pour le compilateur
    20  */
     21**/
    2122function formidable_declarer_tables_interfaces($interfaces) {
    2223        // 'spip_' dans l'index de $tables_principales
     
    4344 * @return array
    4445 *     Description complétée des tables
    45  */
     46**/
    4647function formidable_declarer_tables_principales($tables_principales){
    47         //-- Table formulaires -----------------------------------------------------
     48        // Table formulaires
    4849        $formulaires = array(
    4950                "id_formulaire" => "bigint(21) NOT NULL",
     
    7071                )
    7172        );
    72        
    73         //-- Table formulaires_reponses --------------------------------------------
     73
     74
     75        // Table formulaires_reponses
    7476        $formulaires_reponses = array(
    7577                "id_formulaires_reponse" => "bigint(21) NOT NULL",
     
    9799                )
    98100        );
    99        
    100         //-- Table formulaires_reponses_champs -------------------------------------
     101
     102
     103        // Table formulaires_reponses_champs
    101104        $formulaires_reponses_champs = array(
    102105                "id_formulaires_reponse" => "bigint(21) NOT NULL default 0",
     
    125128 * @return array
    126129 *     Description complétée des tables
    127  */
     130**/
    128131function formidable_declarer_tables_auxiliaires($tables_auxiliaires){
    129132        $formulaires_liens = array(
     
    146149}
    147150
     151
    148152/**
    149153 * Déclarer les champs inclus dans la recherche
     
    155159 *     Liste ddes tables complétée
    156160**/
    157 function formidable_rechercher_liste_des_champs($tables){
     161function formidable_rechercher_liste_des_champs($tables) {
    158162        $tables['formulaire']['titre'] = 5;
    159163        $tables['formulaire']['descriptif'] = 3;
  • _plugins_/formidable/trunk/formidable_autorisations.php

    r65580 r65601  
    11<?php
     2
     3/**
     4 * Déclaration des autorisations
     5 *
     6 * @package SPIP\Formidable\Autorisations
     7**/
    28
    39// Sécurité
    410if (!defined("_ECRIRE_INC_VERSION")) return;
    511
    6 // Juste pour l'appel du pipeline
     12/**
     13 * Fonction d'appel pour le pipeline
     14 * @pipeline autoriser
     15 */
    716function formidable_autoriser(){}
    817
    9 // Seuls les admins peuvent éditer les formulaires
    10 function autoriser_formulaire_editer_dist($faire, $type, $id, $qui, $options){
     18/**
     19 * Autorisation d'éditer un formulaire formidable
     20 *
     21 * Seuls les admins peuvent éditer les formulaires
     22 *
     23 * @param  string $faire Action demandée
     24 * @param  string $type  Type d'objet sur lequel appliquer l'action
     25 * @param  int    $id    Identifiant de l'objet
     26 * @param  array  $qui   Description de l'auteur demandant l'autorisation
     27 * @param  array  $opt   Options de cette autorisation
     28 * @return bool          true s'il a le droit, false sinon
     29**/
     30function autoriser_formulaire_editer_dist($faire, $type, $id, $qui, $opt){
    1131        if (isset($qui['statut']) and $qui['statut'] <= '0minirezo' and !$qui['restreint']) return true;
    1232        else return false;
    1333}
    1434
    15 // Admins et rédacteurs peuvent voir les formulaires existants
    16 function autoriser_formulaires_bouton_dist($faire, $type, $id, $qui, $options){
     35/**
     36 * Autorisation de voir la liste des formulaires formidable
     37 *
     38 *  Admins et rédacteurs peuvent voir les formulaires existants
     39 *
     40 * @param  string $faire Action demandée
     41 * @param  string $type  Type d'objet sur lequel appliquer l'action
     42 * @param  int    $id    Identifiant de l'objet
     43 * @param  array  $qui   Description de l'auteur demandant l'autorisation
     44 * @param  array  $opt   Options de cette autorisation
     45 * @return bool          true s'il a le droit, false sinon
     46**/
     47function autoriser_formulaires_menu_dist($faire, $type, $id, $qui, $opt){
    1748        if (isset($qui['statut']) and $qui['statut'] <= '1comite') return true;
    1849        else return false;
    1950}
    20 function autoriser_formulaires21_bouton_dist($faire, $type, $id, $qui, $options){
    21         return autoriser('bouton', 'formulaires', $id, $qui, $options);
    22 }
    2351
    24 // On peut répondre à un formulaire si :
    25 // - c'est un formulaire classique
    26 // - on enregistre et que multiple = oui
    27 // - on enregistre et que multiple = non et que la personne n'a pas répondu encore
    28 // - on enregistre et que multiple = non et que modifiable = oui
    29 function autoriser_formulaire_repondre_dist($faire, $type, $id, $qui, $options){
     52
     53
     54/**
     55 * Autorisation de répondre à un formidable formidable
     56 *
     57 * On peut répondre à un formulaire si :
     58 * - c'est un formulaire classique
     59 * - on enregistre et que multiple = oui
     60 * - on enregistre et que multiple = non et que la personne n'a pas répondu encore
     61 * - on enregistre et que multiple = non et que modifiable = oui
     62 *
     63 * @param  string $faire Action demandée
     64 * @param  string $type  Type d'objet sur lequel appliquer l'action
     65 * @param  int    $id    Identifiant de l'objet
     66 * @param  array  $qui   Description de l'auteur demandant l'autorisation
     67 * @param  array  $opt   Options de cette autorisation
     68 * @return bool          true s'il a le droit, false sinon
     69**/
     70function autoriser_formulaire_repondre_dist($faire, $type, $id, $qui, $opt){
    3071        // On regarde si il y a déjà le formulaire dans les options
    3172        if (isset($options['formulaire']))
     
    62103}
    63104
    64 // On peut modérer une réponse si on est admin
    65 function autoriser_formulaires_reponse_instituer_dist($faire, $type, $id, $qui, $options){
     105
     106/**
     107 * Autorisation d'instituer une réponse
     108 *
     109 * On peut modérer une réponse si on est admin
     110 *
     111 * @param  string $faire Action demandée
     112 * @param  string $type  Type d'objet sur lequel appliquer l'action
     113 * @param  int    $id    Identifiant de l'objet
     114 * @param  array  $qui   Description de l'auteur demandant l'autorisation
     115 * @param  array  $opt   Options de cette autorisation
     116 * @return bool          true s'il a le droit, false sinon
     117**/
     118function autoriser_formulaires_reponse_instituer_dist($faire, $type, $id, $qui, $opt){
    66119        if (isset($qui['statut']) and $qui['statut'] <= '0minirezo' and !$qui['restreint']) return true;
    67120        else return false;
    68121}
    69122
    70 // Au moins rédacteur pour voir les résultats
    71 function autoriser_formulaires_reponse_voir_dist($faire, $type, $id, $qui, $options){
     123/**
     124 * Autorisation de voir les réponses d'un formulaire formidable
     125 *
     126 * Au moins rédacteur pour voir les résultats
     127 *
     128 * @param  string $faire Action demandée
     129 * @param  string $type  Type d'objet sur lequel appliquer l'action
     130 * @param  int    $id    Identifiant de l'objet
     131 * @param  array  $qui   Description de l'auteur demandant l'autorisation
     132 * @param  array  $opt   Options de cette autorisation
     133 * @return bool          true s'il a le droit, false sinon
     134**/
     135function autoriser_formulaires_reponse_voir_dist($faire, $type, $id, $qui, $opt){
    72136        if (isset($qui['statut']) and $qui['statut'] <= '1comite') return true;
    73137        else return false;
    74138}
    75139
    76 // Il faut pouvoir éditer un formulaire pour pouvoir en supprimer des réponses
    77 function autoriser_formulaires_reponse_supprimer_dist($faire, $type, $id, $qui, $options){
     140/**
     141 * Autorisation de supprimer une réponse d'un formulaire formidable
     142 *
     143 * Il faut pouvoir éditer un formulaire pour pouvoir en supprimer des réponses
     144 *
     145 * @param  string $faire Action demandée
     146 * @param  string $type  Type d'objet sur lequel appliquer l'action
     147 * @param  int    $id    Identifiant de l'objet
     148 * @param  array  $qui   Description de l'auteur demandant l'autorisation
     149 * @param  array  $opt   Options de cette autorisation
     150 * @return bool          true s'il a le droit, false sinon
     151**/
     152function autoriser_formulaires_reponse_supprimer_dist($faire, $type, $id, $qui, $opt){
    78153        // On récupère l'id du formulaire
    79154        if ($id_formulaire = intval(sql_getfetsel('id_formulaire', 'spip_formulaires_reponses', $id)))
  • _plugins_/formidable/trunk/formulaires/formidable.php

    r65570 r65601  
    11<?php
     2
     3/**
     4 * Gestion de l'affichage et traitement d'un formulaire Formidable
     5 *
     6 * @package SPIP\Formidable\Formulaires
     7**/
    28
    39// Sécurité
     
    1016
    1117/**
    12  * Formulaire CVT de Formidable.
     18 * Chargement du formulaire CVT de Formidable.
     19 *
    1320 * Genere le formulaire dont l'identifiant (numerique ou texte est indique)
    1421 *
    15  * @param mixed $id_formulaire identifiant numerique ou textuel
    16  * @param array $valeurs valeurs par defauts passes au contexte du formulaire
    17  *        exemple : array('hidden_1' => 3) pour que champ identifie "@hidden_1@" soit prerempli
    18  * @param int $id_formulaires_reponse identifiant d'une reponse
    19  *        pour forcer la reedition de cette reponse specifique
    20  *
    21  * @return array $contexte : le contexte envoye au squelette HTML du formulaire.
     22 * @param int|string $id_formulaire
     23 *     Identifiant numerique ou textuel du formulaire formidable
     24 * @param array $valeurs
     25 *     Valeurs par défauts passées au contexte du formulaire
     26 *     Exemple : array('hidden_1' => 3) pour que champ identifie "@hidden_1@" soit prerempli
     27 * @param int|bool $id_formulaires_reponse
     28 *     Identifiant d'une réponse pour forcer la reedition de cette reponse spécifique
     29 *
     30 * @return array
     31 *     Contexte envoyé au squelette HTML du formulaire.
    2232**/
    2333function formulaires_formidable_charger($id_formulaire, $valeurs=array(), $id_formulaires_reponse=false){
    2434        $contexte = array();
    25        
     35
    2636        // On peut donner soit un id soit un identifiant
    2737        if (intval($id_formulaire) > 0)
     
    117127
    118128
     129/**
     130 * Vérification du formulaire CVT de Formidable.
     131 *
     132 * Pour chaque champ posté, effectue les vérifications demandées par
     133 * les saisies et retourne éventuellement les erreurs de saisie.
     134 *
     135 * @param int|string $id_formulaire
     136 *     Identifiant numerique ou textuel du formulaire formidable
     137 * @param array $valeurs
     138 *     Valeurs par défauts passées au contexte du formulaire
     139 *     Exemple : array('hidden_1' => 3) pour que champ identifie "@hidden_1@" soit prerempli
     140 * @param int|bool $id_formulaires_reponse
     141 *     Identifiant d'une réponse pour forcer la reedition de cette reponse spécifique
     142 *
     143 * @return array
     144 *     Tableau des erreurs
     145**/
    119146function formulaires_formidable_verifier($id_formulaire, $valeurs=array(), $id_formulaires_reponse=false){
    120147        $erreurs = array();
     
    139166
    140167
     168/**
     169 * Traitement du formulaire CVT de Formidable.
     170 *
     171 * Exécute les traitements qui sont indiqués dans la configuration des
     172 * traitements de ce formulaire formidable.
     173 *
     174 * Une fois fait, gère le retour après traitements des saisies en fonction
     175 * de ce qui a été configuré dans le formulaire, par exemple :
     176 * - faire réafficher le formulaire,
     177 * - faire afficher les saisies
     178 * - rediriger sur une autre page...
     179 *
     180 * @param int|string $id_formulaire
     181 *     Identifiant numerique ou textuel du formulaire formidable
     182 * @param array $valeurs
     183 *     Valeurs par défauts passées au contexte du formulaire
     184 *     Exemple : array('hidden_1' => 3) pour que champ identifie "@hidden_1@" soit prerempli
     185 * @param int|bool $id_formulaires_reponse
     186 *     Identifiant d'une réponse pour forcer la reedition de cette reponse spécifique
     187 *
     188 * @return array
     189 *     Tableau des erreurs
     190**/
    141191function formulaires_formidable_traiter($id_formulaire, $valeurs=array(), $id_formulaires_reponse=false){
    142192        $retours = array();
     
    151201       
    152202        // Si on a une redirection valide
    153         if (($formulaire['apres']== "redirige") AND ($formulaire['url_redirect']!="")){
    154                      refuser_traiter_formulaire_ajax();
    155                      // traiter les raccourcis artX, brX
    156          include_spip("inc/lien");
    157                      $url_redirect = typer_raccourci($formulaire['url_redirect']);
    158                      if (count($url_redirect)>2)
    159                         $url_redirect = $url_redirect[0].$url_redirect[2];
    160           else 
    161              $url_redirect = $formulaire['url_redirect'];      // URL classique
    162                      
    163          $retours['redirect'] = $url_redirect;
    164   }
    165        
     203        if (($formulaire['apres']== "redirige") AND ($formulaire['url_redirect']!="")) {
     204                refuser_traiter_formulaire_ajax();
     205                // traiter les raccourcis artX, brX
     206                include_spip("inc/lien");
     207                $url_redirect = typer_raccourci($formulaire['url_redirect']);
     208                if (count($url_redirect)>2) {
     209                        $url_redirect = $url_redirect[0].$url_redirect[2];
     210                } else {
     211                        $url_redirect = $formulaire['url_redirect'];      // URL classique
     212                }
     213
     214                $retours['redirect'] = $url_redirect;
     215        }
     216
    166217        // Si on a des traitements
    167         if (is_array($traitements) and !empty($traitements)){
     218        if (is_array($traitements) and !empty($traitements)) {
    168219                foreach($traitements as $type_traitement=>$options){
    169                         if ($appliquer_traitement = charger_fonction($type_traitement, 'traiter/', true))
     220                        if ($appliquer_traitement = charger_fonction($type_traitement, 'traiter/', true)) {
    170221                                $retours = $appliquer_traitement(
    171222                                        array(
     
    175226                                        $retours
    176227                                );
    177                 }
    178                
     228                        }
     229                }
     230
    179231                // Si on a personnalisé le message de retour, c'est lui qui est affiché uniquement
    180                 if ($formulaire['message_retour'])
     232                if ($formulaire['message_retour']) {
    181233                        $retours['message_ok'] = _T_ou_typo($formulaire['message_retour']);
     234                }
    182235        }
    183236        else{
    184                   $retours['message_ok'] = _T('formidable:retour_aucun_traitement');
    185         }
    186        
     237                $retours['message_ok'] = _T('formidable:retour_aucun_traitement');
     238        }
     239
    187240        return $retours;
    188241}
    189242
    190243
    191 
    192244/**
    193245 * Ajoute dans le contexte les elements
    194  * donnes par une reponse de formulaire indiquee
    195  *
    196  * @param array $contexte Contexte pour le squelette HTML du formulaire
    197  * @param int $id_formulaires_reponse Identifiant de reponse
    198  * @param bool &$ok La reponse existe bien ?
    199  * @return array $contexte Contexte complete des nouvelles informations
     246 * donnés par une reponse de formulaire indiquée
     247 *
     248 * @param array $contexte
     249 *     Contexte pour le squelette HTML du formulaire
     250 * @param int $id_formulaires_reponse
     251 *     Identifiant de réponse
     252 * @param bool $ok
     253 *     La reponse existe bien ?
     254 * @return array $contexte
     255 *     Contexte complète des nouvelles informations
    200256 *
    201257**/
  • _plugins_/formidable/trunk/inc/formidable.php

    r65547 r65601  
    209209}
    210210
     211
     212/**
     213 * Retourne un texte du nombre de réponses
     214 *
     215 * @param int $nb
     216 *     Nombre de réponses
     217 * @return string
     218 *     Texte indiquant le nombre de réponses
     219**/
     220function titre_nb_reponses($nb) {
     221        if (!$nb) return _T('formidable:reponse_aucune');
     222        if ($nb == 1) return _T('formidable:reponse_une');
     223        return _T('formidable:reponses_nb', array('nb' => $nb));
     224}
     225
    211226?>
  • _plugins_/formidable/trunk/lang/formidable_fr.php

    r65547 r65601  
    7777
    7878        // R
     79        'reponse_aucune' => 'Aucune réponse',
     80        'reponse_une' => '1 réponse',
     81        'reponses_nb' => '@nb@ réponses',
    7982        'reponse_intro' => '@auteur@ a répondu au formulaire @formulaire@',
    8083        'reponse_numero' => 'Réponse numéro :',
  • _plugins_/formidable/trunk/modeles/formulaire_analyse.html

    r65544 r65601  
    11<BOUCLE_formulaire(FORMULAIRES){id_formulaire}>
    2 
     2<div class='formidable_analyse'>
    33[(#REM) On fait un tableau qui contient toutes les réponses, classées par champ ]
    44#SET{valeurs,#ARRAY}
     5#SET{reponses_total,0}
    56<BOUCLE_reponses(FORMULAIRES_REPONSES){id_formulaire}>
    67<BOUCLE_champs(FORMULAIRES_REPONSES_CHAMPS){id_formulaires_reponse}>
     
    1011</BOUCLE_reponses>
    1112#SET{reponses_total,#TOTAL_BOUCLE}
     13<strong class='nombre_reponse'>
     14        [(#TOTAL_BOUCLE|singulier_ou_pluriel{formidable:reponse_une,formidable:reponses_nb})]
     15</strong>
    1216</B_reponses>
     17        <strong class='nombre_reponse'><:formidable:reponse_aucune:></strong>
     18<//B_reponses>
    1319
    1420<BOUCLE_saisies(POUR){tableau #SAISIES|unserialize|saisies_lister_par_nom}>
     
    1824</BOUCLE_saisies>
    1925
     26</div><!-- formidable_analyse -->
     27<script type='text/javascript'>
     28(function($){
     29$(document).ready(function(){
     30        /* Récupérer tous les tableaux d'analyse non décorés */
     31        $('.formidable_analyse table:not(.stat_done)').each(function() {
     32                $(this).addClass('stat_done');
     33                /* Le tableau contient le nombre total d'élément. On parcours chaque valeur */
     34                $nbtotal = $(this).data('nombre');
     35                $(this).find('td.stat').each(function(){
     36                        $val = $(this).html();
     37                        /* Certaines valeurs sont a ignorer (les moyennes) */
     38                        $ignore = $(this).is('.ignore');
     39                        if (!$ignore) {
     40                                /* Calcul du pourcentage */
     41                                $taux = Math.round($val/$nbtotal*100);
     42                                /* On affiche le nombre de réponses */
     43                                $reponses = $(this).attr('title');
     44                                if (!parseInt($val) || ($reponses === undefined)) {
     45                                        $reponses = '';
     46                                } else {
     47                                        $reponses = "<small> - " + $reponses + "</small>";
     48                                }
     49                                $text = "\
     50                                <div class='[(#CONFIG{formidable/analyse_classe}) ]progress-bar'>\
     51                                        <span></span><strong>" + $taux + "%" + $reponses + "</strong>\
     52                                </div>";
     53                                $(this).html($text).find('span').width($taux + '%');
     54                        }
     55                });
     56        });
     57});
     58})(jQuery);
     59</script>
     60<style type='text/css'>
     61<INCLURE{fond=css/formidable_analyse.css} />
     62</style>
    2063</BOUCLE_formulaire>
  • _plugins_/formidable/trunk/paquet.xml

    r65580 r65601  
    22        prefix="formidable"
    33        categorie="communication"
    4         version="1.1.2"
     4        version="1.1.3"
    55        etat="dev"
    66        compatibilite="[3.0.0-dev;3.0.99]"
  • _plugins_/formidable/trunk/saisies-analyses/_base.html

    r65570 r65601  
    1717                <tr class="tr_liste row_odd vide">
    1818                        <td class="choix"><:formidable:analyse_sans_reponse:></td>
    19                         <td class="stat">[(#GET{vide}|count)]</td>
     19                        <td class="stat"[ title="(#GET{vide}|count|titre_nb_reponses|attribut_html)"]>[(#GET{vide}|count)]</td>
    2020                </tr>
    2121                <tr class="tr_liste row_even plein">
    2222                        <td class="choix"><:formidable:analyse_avec_reponse:></td>
    23                         <td class="stat">[(#GET{plein}|count)]</td>
     23                        <td class="stat"[ title="(#GET{plein}|count|titre_nb_reponses|attribut_html)"]>[(#GET{plein}|count)]</td>
    2424                </tr>
    2525                <tr class="tr_liste row_odd moyenne">
    2626                        <td class="choix"><:formidable:analyse_longueur_moyenne:></td>
    27                         <td class="stat">#GET{moyenne}</td>
     27                        <td class="stat ignore">#GET{moyenne}</td>
    2828                </tr>
    2929        ]
  • _plugins_/formidable/trunk/saisies-analyses/case.html

    r36646 r65601  
    1212<tr class="tr_liste">
    1313        <td class="choix"><:item_oui:></td>
    14         <td class="stat">#GET{oui}</td>
     14        <td class="stat"[ title="(#GET{oui}|titre_nb_reponses|attribut_html)"]>#GET{oui}</td>
    1515</tr>
    1616<tr class="tr_liste">
    1717        <td class="choix"><:item_non:></td>
    18         <td class="stat">#GET{non}</td>
     18        <td class="stat"[ title="(#GET{non}|titre_nb_reponses|attribut_html)"]>#GET{non}</td>
    1919</tr>
    2020
     
    2323<tr class="tr_liste">
    2424        <td class="choix"><:saisies:vue_sans_reponse:></td>
    25         <td class="stat">#GET{diff}</td>
     25        <td class="stat"[ title="(#GET{diff}|titre_nb_reponses|attribut_html)"]>#GET{diff}</td>
    2626</tr>
    2727]
  • _plugins_/formidable/trunk/saisies-analyses/checkbox.html

    r36638 r65601  
    1111
    1212<BOUCLE_datas(POUR){tableau #GET{datas}}>
     13[(#SET{nb,[(#GET{stats}|table_valeur{choix-#CLE}|sinon{0})]})]
    1314<tr class="tr_liste">
    1415        <td class="choix">#VALEUR</td>
    15         <td class="stat">[(#GET{stats}|table_valeur{choix-#CLE}|sinon{0})]</td>
     16        <td class="stat"[ title="(#GET{nb}|titre_nb_reponses|attribut_html)"]>#GET{nb}</td>
    1617</tr>
    1718</BOUCLE_datas>
     
    2122<tr class="tr_liste">
    2223        <td class="choix"><:saisies:vue_sans_reponse:></td>
    23         <td class="stat">#GET{diff}</td>
     24        <td class="stat"[ title="(#GET{diff}|titre_nb_reponses|attribut_html)"]>#GET{diff}</td>
    2425</tr>
    2526]
  • _plugins_/formidable/trunk/saisies-analyses/destinataires.html

    r36612 r65601  
    1010<tr class="tr_liste">
    1111        <td class="choix"><a href="#INFO_URL{auteur, #GET{id_auteur}}">#INFO_TITRE{auteur, #GET{id_auteur}}</a></td>
    12         <td class="stat">#VALEUR</td>
     12        <td class="stat"[ title="(#VALEUR|titre_nb_reponses|attribut_html)"]>#VALEUR</td>
    1313</tr>
    1414</BOUCLE_stats>
  • _plugins_/formidable/trunk/saisies-analyses/oui_non.html

    r36646 r65601  
    1212<tr class="tr_liste">
    1313        <td class="choix"><:item_oui:></td>
    14         <td class="stat">#GET{oui}</td>
     14        <td class="stat"[ title="(#GET{oui}|titre_nb_reponses|attribut_html)"]>#GET{oui}</td>
    1515</tr>
    1616<tr class="tr_liste">
    1717        <td class="choix"><:item_non:></td>
    18         <td class="stat">#GET{non}</td>
     18        <td class="stat"[ title="(#GET{non}|titre_nb_reponses|attribut_html)"]>#GET{non}</td>
    1919</tr>
    2020
     
    2323<tr class="tr_liste">
    2424        <td class="choix"><:saisies:vue_sans_reponse:></td>
    25         <td class="stat">#GET{diff}</td>
     25        <td class="stat"[ title="(#GET{diff}|titre_nb_reponses|attribut_html)"]>#GET{diff}</td>
    2626</tr>
    2727]
  • _plugins_/formidable/trunk/saisies-analyses/radio.html

    r36638 r65601  
    1111
    1212<BOUCLE_datas(POUR){tableau #GET{datas}}>
     13[(#SET{nb,[(#GET{stats}|table_valeur{choix-#CLE}|sinon{0})]})]
    1314<tr class="tr_liste">
    1415        <td class="choix">#VALEUR</td>
    15         <td class="stat">[(#GET{stats}|table_valeur{choix-#CLE}|sinon{0})]</td>
     16        <td class="stat"[ title="(#GET{nb}|titre_nb_reponses|attribut_html)"]>#GET{nb}</td>
    1617</tr>
    1718</BOUCLE_datas>
     
    2122<tr class="tr_liste">
    2223        <td class="choix"><:saisies:vue_sans_reponse:></td>
    23         <td class="stat">#GET{diff}</td>
     24        <td class="stat"[ title="(#GET{diff}|titre_nb_reponses|attribut_html)"]>#GET{diff}</td>
    2425</tr>
    2526]
Note: See TracChangeset for help on using the changeset viewer.