Changeset 64913 in spip-zone


Ignore:
Timestamp:
Aug 17, 2012, 3:47:20 AM (9 years ago)
Author:
patfr@…
Message:

Travail sur les formulaires CVT.


Report de [64877] adapté à SPIP 3.0
+ Reports de [64912] (retrait des globales QCM/QRM et Trous)
+ Amélioration des traitements de #TEXTE/jeux grâce à l'utilisation préférentielle d'une nouvelle balise raccourci : #TEXTE_JEU. Grâce à cette balise, le traitement pre_propre (pré-décodage des jeux) qui doit agir sur le texte brut du jeu est effectué au plus tôt, avant le reste des traitements repris de la balise #TEXTE. Les arguments de cette balise sont ajoutes à la config interne du jeu (dans une boucle (JEUX), #TEXTE_JEU{key1, value1, key2, value2,...} ajoute au jeu la section suivante : [config]id_jeu=#ID_JEU, key1=value1, key2=value2, etc.)

L'idée est donc d'obtenir la correction des jeux en AJAX, grâce à l'API CVT de SPIP.
Ce système n'est pas pleinement utilisé car l'enregistrement des scores en base se fait au moment du calcul de la correction du jeu, bien avant l'action 'Traiter'.
L'action 'Vérifier' est aujourd'hui toujours validée, car les jeux ne gèrent pas (encore?) de champ bloquant.
TODO : Le reset d'un jeu n'est pas encore ajaxé.

Voici donc les 3 façons pour gérer/afficher un jeu :

  • les jeux inline entre balises <jeux/> et sans score
  • les jeux créés en base (avec score), appelés grâce au modèle <jeuXX>
  • les jeux créés en base (avec score), corrigés en AJAX grâce au raccourci <formulaire|jeu|XX>
Location:
_plugins_/jeux/trunk
Files:
2 added
12 edited
1 moved

Legend:

Unmodified
Added
Removed
  • _plugins_/jeux/trunk/_REGLES_DE_COMMIT.txt

    r54479 r64913  
    77cette branche.
    88
    9 A. Observer le planning de travail. Pour le modifier, proposez-nous vos idées !
     9A. Observer le planning de travail.
     10===================================
     11        Pour le modifier, proposez-nous vos idées !
    1012
    1113       Planning de modification, sans ordre :
    1214         
    13           1. Prévoir Plusieurs jeux dans une page (en cours...)
     15          1. Prévoir Plusieurs jeux dans une page (a priori OK)
    1416          2. Meilleures CSS
    15           3. AJAX/jQuery
    16           4. Traductions et ajouts de langues
     17          3. AJAX/jQuery/CVT (en cours)
     18          4. Traductions (OK avec Salvatore et SPIP v3)
    1719          5. Statistiques des performances et des timings
    1820          6. Sauvegarde des jeux en cours (utilisateurs identifiés)
     
    2325         
    2426B. Obligation de commenter les commits
     27======================================
    2528
    2629        Si vous envoyez des modifications, il faut toujours les commenter
     
    2932               
    3033C.  Modification du code
     34========================
    3135
    3236    Cette version peut évoluer. Si vous avez envie de vous
     
    5660 
    5761 
    58 D. Clarté du code.
     62D. Clarté du code
     63=================
    5964
    6065        Il n'y a actuellement pas de règles précises d'écriture correcte du
  • _plugins_/jeux/trunk/base/jeux_tables.php

    r64783 r64913  
    7878        if (!isset($table_des_traitements['TITRE_PRIVE']))
    7979                $table_des_traitements['TITRE_PRIVE'] = $table_des_traitements['TITRE'];
     80        if (!isset($table_des_traitements['TEXTE_JEU']))
     81                $table_des_traitements['TEXTE_JEU'] = $table_des_traitements['TEXTE'];
    8082    return $tables;
    8183}
  • _plugins_/jeux/trunk/formulaires/editer_jeu.php

    r64153 r64913  
    11<?php
    2 /**
    3  * Plugin Spip-jeus
    4  * (c) 2012 Maïeul Rouquette d&#039;après Artego
    5  * Licence GNU/GPL
    6  */
     2#---------------------------------------------------#
     3#  Plugin  : Jeux                                   #
     4#  Auteur  : Patrice Vanneufville, 2006             #
     5#  Gestion des scores : Maieul Rouquette, 2007      #
     6#  Portage SPIP3 : Maieul Rouquette d'apres Artego  #
     7#  Contact : patrice¡.!vanneufville¡@!laposte¡.!net #
     8#  Licence : GNU/GPL (c) 2012                       #
     9#--------------------------------------------------------------------------#
     10#  Documentation : http://www.spip-contrib.net/Des-jeux-dans-vos-articles  #
     11#--------------------------------------------------------------------------#
    712
    813if (!defined('_ECRIRE_INC_VERSION')) return;
  • _plugins_/jeux/trunk/formulaires/jeux_gerer_resultats.php

    r64093 r64913  
    2828}
    2929
    30 function formulaires_jeux_gerer_resultats_charger($param=array(),$return=''){
     30function formulaires_jeux_gerer_resultats_charger_dist($param=array(),$return=''){
    3131    if (!autoriser('gerer','resultats')){
    3232        return false;   
     
    3535    return $param;
    3636}
    37 function formulaires_jeux_gerer_resultats_verifier($param=array(),$return=''){
     37function formulaires_jeux_gerer_resultats_verifier_dist($param=array(),$return=''){
    3838    $erreurs = array();
    3939    if (!_request('confirmer') and _request('faire')){
     
    4242    return $erreurs;
    4343}
    44 function formulaires_jeux_gerer_resultats_traiter($param=array(),$return=''){
     44function formulaires_jeux_gerer_resultats_traiter_dist($param=array(),$return=''){
    4545    $faire = _request('faire');
    4646    $id_auteur  =   $param['id_auteur'];
  • _plugins_/jeux/trunk/jeux/mots_croises.php

    r64132 r64913  
    9393                    // s'il s'agit d'un noir
    9494                    if ($cellule == "*") {
    95                                         $noires = $jeux_couleurs[jeux_config('fondnoir')];
    96                                         $noires = "rgb($noires[0], $noires[1], $noires[2])";
    97                                 $grille .= "\t\t<td$classnoir style=\"background-color:$noires; color:$noires;\">*</td>\n";
    98                                 }
    99                                 else if ($solution)
    100                                         $grille .= "\t\t<td$class>$cellule</td>\n" ;
    101                                 else {
    102                                         $name = 'GR'.$indexJeux.'x'.$colonne.'x'.$ligne;
    103                                         $valeur = _request($name);
    104                                         $grille .= "\t\t<td$class><label for=\"$name\">"
    105                                                 . _T('jeux:ligne_n', array('n'=>$entete_ligne)).';'
    106                                                 . _T('jeux:colonne_n', array('n'=>$entete_colonne)).'</label>'
    107                                                 . '<input type="text" maxlength="1" '
    108                                                 . ((isset($valeur) and $valeur!='')? 'value="'.$valeur:'')
    109                                                 .'" name="'.$name.'" id="'.$name.'" />'
    110                                                 . "</td>\n" ;
    111                                 }
     95                                $noires = $jeux_couleurs[jeux_config('fondnoir')];
     96                                $noires = "rgb($noires[0], $noires[1], $noires[2])";
     97                                $grille .= "\t\t<td$classnoir style=\"background-color:$noires; color:$noires;\">*</td>\n";
     98                        }
     99                        else if ($solution)
     100                                $grille .= "\t\t<td$class>$cellule</td>\n" ;
     101                        else {
     102                                list($id, $name) = jeux_idname($indexJeux, $colonne, 'C', $ligne, 'L');
     103                                $value = jeux_form_reponse($indexJeux, $colonne, 'C', $ligne, 'L');
     104                                $value = strlen($value)?' value="'.$value.'"':'';
     105                                $grille .= "\t\t<td$class><label for=\"$name\">"
     106                                        . _T('jeux:ligne_n', array('n'=>$entete_ligne)).';'
     107                                        . _T('jeux:colonne_n', array('n'=>$entete_colonne)).'</label>'
     108                                        . "<input type='text' maxlength='1'$value name='$name' id='$id' /></td>\n" ;
     109                        }
    112110                } // foreach
    113111                                                   
     
    118116        $grille.="</table>\n";
    119117       
    120         if (!$solution) $grille .=
    121                 (jeux_config('solution')?"<p><input id=\"affiche_solution_$indexJeux\" name=\"affiche_solution_{$indexJeux}[]\" type=\"checkbox\" class=\"jeux_cocher\" value=\"1\" /><label for=\"affiche_solution_$indexJeux\" >"._T('jeux:afficher_solution')."</label></p>\n":'')
    122                 .'<p><input type="submit" value="'._T('jeux:verifier')."\" name=\"bouton_envoi_$indexJeux\" /></p>"
     118        if (!$solution) {
     119                list($id, $name) = jeux_idname($indexJeux, 'SOL');
     120                $grille .=
     121                (jeux_config('solution')?"<p><input id='$id' name='$name' type='checkbox' class='jeux_cocher' value='1' /><label for='$id' >"._T('jeux:afficher_solution')."</label></p>\n":'')
     122                .'<p><input type="submit" value="'._T('jeux:verifier')."\" name='submit' /></p>"
    123123                .($form?jeux_form_fin():'');
     124        }
    124125
    125126        return $grille;
     
    141142            //compare les valeurs du tableau PHP avec les variables POST
    142143                        if ($cellule!='*') {
    143                                 $input = trim(_request('GR'.$indexJeux.'x'.($colonne+1).'x'.($ligne+1)));
     144                                $input = jeux_form_reponse($indexJeux, $colonne+1, 'C', $ligne+1, 'L');
    144145                                $total++; // nombre de case total
    145146                    if ($input=='') $vides++;
     
    153154// renvoie le nombre d'erreurs et de cases vides
    154155function calcul_erreurs_grille($solution, $indexJeux) {
    155         if (_request("bouton_envoi_$indexJeux") == '') return '';
    156         else {
    157           list($nbr_erreurs, $nbr_vides,$total) = comparaison_grille($solution, $indexJeux);
    158           // on insere le resultat dans la base de donnee
    159           if ($_POST['id_jeu']){
     156        if (!jeux_form_correction($indexJeux)) return '';
     157        list($nbr_erreurs, $nbr_vides,$total) = comparaison_grille($solution, $indexJeux);
     158        $id_jeu = _request('id_jeu');
     159        // on insere le resultat dans la base de donnee
     160        if ($id_jeu){
    160161                include_spip('base/jeux_ajouter_resultat');
    161                 jeux_ajouter_resultat($_POST['id_jeu'], $total-$nbr_erreurs-$nbr_vides, $total, "erreurs=$nbr_erreurs, vides=$nbr_vides");
    162           }
    163 
    164           // on retourne ce qu'on affiche
    165           return '<div class="jeux_erreur">'
     162                jeux_ajouter_resultat($id_jeu, $total-$nbr_erreurs-$nbr_vides, $total, "erreurs=$nbr_erreurs, vides=$nbr_vides");
     163        }
     164
     165        // on retourne ce qu'on affiche
     166        return '<div class="jeux_erreur">'
    166167                . (($nbr_erreurs==0)?_T('jeux:aucune_erreur'):(
    167168                 ($nbr_erreurs==1)?_T('jeux:une_erreur'):_T("jeux:n_erreurs", array('n'=>$nbr_erreurs))
     
    171172                ))
    172173                . '</div><br />';
    173         }
    174174}
    175175
     
    232232          elseif ($valeur==_JEUX_TEXTE) $html .= $tableau[$i+1];
    233233        }
    234         $affiche_solution = _request('affiche_solution_'.$indexJeux);
    235234        return  '<div class="mots_croises">'
    236235                        . calcul_erreurs_grille($solution, $indexJeux)
     
    238237                        . affichage_definitions($horizontal, $vertical)
    239238        // solution
    240                         . (($affiche_solution[0] == 1)? affichage_grille_mc($solution, $indexJeux, $form, true) : '')
     239                        . (jeux_form_reponse($indexJeux, 'SOL') ? affichage_grille_mc($solution, $indexJeux, $form, true) : '')
    241240                        . '</div><br class="jeux_nettoyeur"/>';
    242241}
  • _plugins_/jeux/trunk/jeux/qcm.php

    r64754 r64913  
    6262*/
    6363
    64 
    6564// configuration par defaut : jeu_{mon_jeu}_init()
    6665function jeux_qcm_init() {
     
    7978
    8079// cette fonction remplit le tableau $qcms sur la question $indexQCM
    81 function qcm_analyse_le_qcm($qcm, $indexQCM, $isQRM) {
    82   global $qcms;
     80function qcm_analyse_le_qcm(&$qcms, $qcm, $indexQCM, $isQRM) {
    8381  $qcms[$indexQCM]['qrm'] = $isQRM;
    8482  $qcms['qrm'] |= $isQRM;
    8583  $lignes = preg_split('/[\r\n]+/', $qcm);
    86   foreach ($lignes as $ligne) {
     84  foreach($lignes as $ligne) {
    8785        $li = trim($ligne);
    8886    switch($li[0]){
     
    9492      case 'P' :                // extraire une proposition
    9593                // Pour les precisions de la proposition...
    96                 list($reponse, $precision)=explode("|", $li, 2);
     94                list($reponse, $precision) = explode("|", $li, 2);
    9795                // extraire le numero de la proposition et son contenu
    9896                preg_match(',^P(\d*)(.*)$,', $reponse, $regs); 
     
    153151}
    154152
    155 function qcm_un_trou($nomVarSelect, $indexQCM) {
    156   global $qcms;
    157   if (($sizeInput = intval(jeux_config('trou')))==0)
    158         foreach($qcms[$indexQCM]['propositions'] as $mot) $sizeInput = max($sizeInput, strlen($mot));
    159   $temp = $_POST[$nomVarSelect] = trim($_POST[$nomVarSelect]);
    160   $prop = jeux_minuscules($temp);
    161   return " &nbsp; &nbsp; &nbsp;<input name=\"$nomVarSelect\" class=\"jeux_input qcm_input\" size=\"$sizeInput\" type=\"text\" /> ";
    162 }
    163 
    164 function qcm_affiche_la_question($indexJeux, $indexQCM, $corriger, $gestionPoints) {
    165   global $qcms, $qcm_score, $qcm_score_detaille;
     153function qcm_affiche_la_question(&$qcms, $indexJeux, $indexQCM, $gestionPoints) {
    166154  $indexQCM_1 = $indexQCM + 1;
    167155  if (!$qcms[$indexQCM]['nbpropositions'] || !$qcms[$indexQCM]['maxScore'])
    168         return "<div class=\"jeux_question\">".definir_puce()._T('jeux:erreur_syntaxe').'</div>';
     156        return '<div class="jeux_question">'.definir_puce()._T('jeux:erreur_syntaxe').'</div>';
    169157
    170158  // Initialisation du code a retourner
    171   $nomVarSelect = "var{$indexJeux}_Q{$indexQCM}";
     159  list($idInput, $nameInput) = jeux_idname($indexJeux, $indexQCM, 'Q');
    172160  $question = trim(str_replace('&nbsp;', ' ', $qcms[$indexQCM]['question']));
    173161  $trou = $qcms[$indexQCM]['nbpropositions']==1;
     
    181169  } else $pointsQ = 1;
    182170
    183   $codeHTML = "<div class=\"qcm_element \"><div class=\"jeux_question\">".definir_puce().$question.'</div>';
    184   if (!$corriger){
    185         // affichage sans correction :
    186         $codeHTML.="\n<div class=\"qcm_proposition\">";
     171  $codeHTML = "<div class='qcm_element'><div class='jeux_question'>".definir_puce().$question.'</div>';
     172  if (!jeux_form_correction($indexJeux)){
     173        // affichage du jeu sans correction
     174        $codeHTML .= "\n<div class='qcm_proposition'>";
    187175
    188176        if ($trou) {
    189                 $codeHTML.=qcm_un_trou($nomVarSelect, $indexQCM);
     177                if (($sizeInput = intval(jeux_config('trou')))==0)
     178                        foreach($qcms[$indexQCM]['propositions'] as $mot) $sizeInput = max($sizeInput, strlen($mot));
     179                $prop = jeux_minuscules($temp);
     180                $codeHTML .= " &nbsp; &nbsp; &nbsp;<input name='$nameInput' id='$idInput' class='jeux_input qcm_input' size='$sizeInput' type='text' /> ";
    190181        } elseif ($qrm) {
     182                // cases a cocher
    191183                foreach($qcms[$indexQCM]['propositions'] as $i=>$valeur)
    192                         $codeHTML.='<input type="checkbox" class="jeux_cocher qcm_cocher" name="'.$nomVarSelect
    193                                 . '[]" value="'.$i.'" id="'.$nomVarSelect.$i.'" /><label for="'.$nomVarSelect.$i.'">&nbsp;'
    194                                 . $valeur.'</label>'
    195                                 . ($i % $nbcol?' &nbsp; ':'<br />');
     184                        $codeHTML .= "<input type='checkbox' class='jeux_cocher qcm_cocher' name='{$nameInput}[]' value='$i' id='{$idInput}-$i' /><label for='{$idInput}-$i'>&nbsp;"    . $valeur.'</label>' . ($i % $nbcol?' &nbsp; ':'<br />');
    196185        // S'il y a trop de choix, utiliser une liste a la place des boutons radio
    197186        } elseif ($qcms[$indexQCM]['nbpropositions']>jeux_config('max_radios')) {
    198                 $codeHTML.='<select name="'.$nomVarSelect.'" class="qcm_select"><option value="">'._T('jeux:votre_choix').'</option>';
    199                 foreach($qcms[$indexQCM]['propositions'] as $i=>$valeur) $codeHTML.="<option value=\"$i\">$valeur</option>";
    200                 $codeHTML.='</select>';
     187                $codeHTML .= "<select name='$nameInput' id='$idInput' class='qcm_select'><option value=''>"._T('jeux:votre_choix').'</option>';
     188                foreach($qcms[$indexQCM]['propositions'] as $i=>$valeur) $codeHTML.="<option value='$i'>$valeur</option>";
     189                $codeHTML .= '</select>';
    201190        } else {
     191                // boutons radio
    202192                foreach($qcms[$indexQCM]['propositions'] as $i=>$valeur)
    203                         $codeHTML.='<input type="radio" class="jeux_radio qcm_radio" name="'.$nomVarSelect
    204                                 . '" value="'.$i.'" id="'.$nomVarSelect.$i.'" /><label for="'.$nomVarSelect.$i.'">&nbsp;'
    205                                 . $valeur.'</label>'
    206                                 . ($i % $nbcol?' &nbsp; ':'<br />');
     193                        $codeHTML .= "<input type='radio' class='jeux_radio qcm_radio' name='$nameInput' value='$i' id='{$idInput}-$i' /><label for='{$idInput}-$i'>&nbsp;$valeur</label>" . ($i % $nbcol?' &nbsp; ':'<br />');
    207194        }
    208         $codeHTML.="</div><br /></div>";
    209 
    210     }   // fin du cas sans correction
    211 
    212   // Sinon afficher la correction
    213   else {
    214          $reponse = $_POST[$nomVarSelect];
    215          if (!is_array($reponse)) $reponse=trim($reponse);
     195        $codeHTML .= '</div><br /></div>';
     196
     197  }     else {
     198         // affichage du jeu avec correction
     199         $reponse = jeux_form_reponse($indexJeux, $indexQCM, 'Q');
    216200         $bonneReponse = false; $qrm_score = 0;
    217          if ($reponse) {
     201         if($reponse) {
    218202                // chaque question est-elle corrigee ?
    219203                $affiche_correction = jeux_config('corrections');
     
    227211                }
    228212
    229                 $intro=$trou?_T('jeux:votre_reponse'):_T('jeux:votre_choix');
    230 
    231                 // question a reponse simple
     213                $intro = $trou?_T('jeux:votre_reponse'):_T('jeux:votre_choix');
     214
    232215                if (!$qrm) {
     216                        // ici : une question a reponse simple
    233217                        // la reponse donnee & precision des points eventuels de la mauvaise reponse...
    234                         $codeHTML.='<div class="qcm_reponse">'
    235                                  .($pointsR===$pointsQ?$intro:qcm_les_points($intro, $pointsR, !$affiche_correction))
    236                                  .($trou?$reponse:$qcms[$indexQCM]['propositions'][$reponse])
    237                                  .'</div>';
     218                        $codeHTML .= '<div class="qcm_reponse">'
     219                                 . ($pointsR===$pointsQ?$intro:qcm_les_points($intro, $pointsR, !$affiche_correction))
     220                                 . ($trou?$reponse:$qcms[$indexQCM]['propositions'][$reponse])
     221                                 . '</div>';
    238222
    239223                        // bonne reponse
     
    242226
    243227                        // si ce n'est pas un trou, donner les points de la reponse quoiqu'il arrive
    244                         if (!$trou || $bonneReponse) $qcm_score += $pointsR;
     228                        if (!$trou || $bonneReponse) $qcms['score_du_qcm'] += $pointsR;
    245229                        // renseigner le resultat detaille
    246                         $qcm_score_detaille[] = $trou?"T$indexQCM_1:$reponse:".($bonneReponse?$pointsR:'0')
     230                        $qcms['score_detaille'][] = $trou?"T$indexQCM_1:$reponse:".($bonneReponse?$pointsR:'0')
    247231                                :"Q$indexQCM_1:R$reponse:$pointsR";
    248232
     
    255239                                if (strlen($prec)) $codeHTML.="<div class=\"qcm_precision\">$prec</div>";
    256240                        }
    257 
    258                 // question a reponses multiples
    259241                } else foreach($reponse as $r) {
     242                        // ici : une question a reponses multiples
    260243                        // la reponse donnee & precision des points de la mauvaise reponse...
    261244                        $codeHTML.='<div class="qcm_reponse">'
     
    268251       
    269252                        // donner les points de la reponse quoiqu'il arrive
    270                         $qcm_score += $qcms[$indexQCM]['points'][$r];
    271                         $qcm_score_detaille[] = "Q$indexQCM_1:R$r:".intval($qcms[$indexQCM]['points'][$r]);
     253                        $qcms['score_du_qcm'] += $qcms[$indexQCM]['points'][$r];
     254                        $qcms['score_detaille'][] = "Q$indexQCM_1:R$r:".intval($qcms[$indexQCM]['points'][$r]);
    272255                        $qrm_score += $qcms[$indexQCM]['points'][$r];
    273256                               
     
    280263                                if (strlen($prec)) $codeHTML.="<div class=\"qcm_precision\">$prec</div>";
    281264                        }
    282                 }
     265                } // foreach($reponse)
    283266
    284267        // pas de reponse postee...
    285268        } else {
    286269                $codeHTML.='<div class="qcm_correction_null">'._T('jeux:reponseNulle').'</div>';
    287                 $qcm_score_detaille[] = "Q$indexQCM_1:R?:0";
     270                $qcms['score_detaille'][] = "Q$indexQCM_1:R?:0";
    288271        }
    289272
     
    325308}
    326309
    327 function qcm_inserer_les_qcm(&$chaine, $indexJeux, $gestionPoints) {
    328   global $qcms;
     310function qcm_inserer_les_qcm(&$qcms, $indexJeux, &$chaine, $gestionPoints) {
    329311  if (preg_match(',<ATTENTE_QCM>(\d+)</ATTENTE_QCM>,', $chaine, $regs)) {
    330312        $indexQCM = intval($regs[1]);
    331313        list($texteAvant, $texteApres) = explode($regs[0], $chaine, 2);
    332314        $chaine = $texteAvant.jeux_rem('QCM-DEBUT', $indexQCM)
    333                 . qcm_affiche_la_question($indexJeux, $indexQCM, isset($_POST["var_correction_".$indexJeux]), $gestionPoints)
     315                . qcm_affiche_la_question($qcms, $indexJeux, $indexQCM, $gestionPoints)
    334316                . jeux_rem('QCM-FIN', $indexQCM)
    335                 . qcm_inserer_les_qcm($texteApres, $indexJeux, $gestionPoints);
     317                . qcm_inserer_les_qcm($qcms, $indexJeux, $texteApres, $gestionPoints);
    336318  }
    337319  return $chaine;
     
    341323function jeux_qcm($texte, $indexJeux, $form=true) {
    342324  // initialisation 
    343   global $qcms, $qcm_score, $qcm_score_detaille;
    344 
    345   $qcms = array(); $indexQCM = $qcm_score = 0;
    346   $qcm_score_detaille = array();
    347   $qcms['pointsTrouves'] = $qcms['nbQuestions'] = $qcms['totalScore'] = $qcms['totalPropositions'] = 0;
     325  $qcms_[$indexJeux] = array(
     326        'pointsTrouves' =>0, 'nbQuestions' =>0,
     327        'totalScore' => 0, 'totalPropositions' => 0,
     328        'score_du_qcm' => 0, 'score_detaille' => array()
     329  );
     330  $qcms = &$qcms_[$indexJeux];
     331  $indexQCM = 0;
    348332  $titre = $horizontal = $vertical = $solution = $html = $categ_score = false;
    349333  $id_jeu = _request('id_jeu');
    350334
    351   // parcourir tous les #SEPARATEURS
     335  // parcourir tous les #SEPARATEURS, remplir $tableau et mettre a jour $indexJeux si ajax
    352336  $tableau = jeux_split_texte('qcm', $texte);
    353337  foreach($tableau as $i => $valeur) if ($i & 1) {
     
    357341                $html .= "<ATTENTE_QCM>$indexQCM</ATTENTE_QCM>";
    358342                // analyser le QCM
    359                 qcm_analyse_le_qcm($tableau[$i+1], $indexQCM, $valeur==_JEUX_QRM);
     343                qcm_analyse_le_qcm($qcms, $tableau[$i+1], $indexQCM, $valeur==_JEUX_QRM);
    360344            $qcms['totalPropositions'] +=  count($qcms[$indexQCM]['propositions']);
    361345        $qcms['totalScore'] +=  $qcms[$indexQCM]['maxScore'];
     
    370354
    371355  // reinserer les qcms mis en forme
    372   $texte = qcm_inserer_les_qcm($html, $indexJeux, $gestionPoints);
     356  $texte = qcm_inserer_les_qcm($qcms, $indexJeux, $html, $gestionPoints);
    373357
    374358  // calcul des extremes
    375359  $tete = '<div class="jeux_cadre qcm">'.($titre?'<div class="jeux_titre qcm_titre">'.$titre.'<hr /></div>':'');
    376360  $pied = '';
    377   if (!isset($_POST["var_correction_".$indexJeux])) {
     361  if (jeux_form_correction($indexJeux)) {
     362        // mode correction
     363        $pied = jeux_afficher_score($qcms['score_du_qcm'], $qcms['totalScore'], $id_jeu, join(', ', $qcms['score_detaille']), $categ_score);
     364        if($form) $pied .= jeux_bouton(jeux_config('bouton_refaire'), $id_jeu, $indexJeux);
     365  } else {
     366        // mode formulaire
    378367        if($form) {
    379                 $pied = '<br />'.jeux_bouton(jeux_config('bouton_corriger'), $id_jeu).jeux_form_fin();
     368                $pied = '<br />' . jeux_bouton(jeux_config('bouton_corriger'), $id_jeu) . jeux_form_fin();
    380369                $tete .= jeux_form_debut('qcm', $indexJeux, '', 'post', self());
    381370        }
    382   } else {
    383         $pied = jeux_afficher_score($qcm_score, $qcms['totalScore'], $id_jeu, join(', ', $qcm_score_detaille), $categ_score);
    384         if($form) $pied .= jeux_bouton(jeux_config('bouton_refaire'), $id_jeu, $indexJeux);
    385371  }
    386372  // ajout du javascript s'il faut afficher une par une
    387   if (jeux_config('une_par_une'))
    388         $js = '<script type="text/javascript">qcm_affichage_une_par_une();</script>';
    389   else
    390         $js = '';
    391 
    392   unset($qcms, $qcm_score, $qcm_score_detaille);
     373  $js = jeux_config('une_par_une')?'<script type="text/javascript">qcm_affichage_une_par_une();</script>':'';
     374
     375  unset($qcms_[$indexJeux]);
    393376  return $tete.$texte.$pied.'</div>'.$js;
    394377}
  • _plugins_/jeux/trunk/jeux/sudoku.php

    r64132 r64913  
    7979                                $grille .= "\t\t<td$class>$cellule</td>\n" ;
    8080                        else {
    81                                 $name = 'GR'.$indexJeux.'x'.$colonne.'x'.$ligne;
     81                                list($id, $name) = jeux_idname($indexJeux, $colonne, 'C', $ligne, 'L');
     82                                $value = jeux_form_reponse($indexJeux, $colonne, 'C', $ligne, 'L');
     83                                $value = strlen($value)?' value="'.$value.'"':'';
    8284                                $grille .= "\t\t<td$class><label for=\"$name\">"
    8385                                        ._T('jeux:ligne_n',Array('n'=>$ligne)).';'
    8486                                        ._T('jeux:colonne_n',Array('n'=>$colonne)).'</label>'
    85                                         . '<input type="text" maxlength="1" '
    86                                         . ((isset($_POST[$name]) and $_POST[$name]!='')? 'value="'.$_POST[$name]:'')
    87                                         .'" name="'.$name.'" id="'.$name.'" />'
    88                                         . "</td>\n" ;
     87                                        . "<input type='text' maxlength='1'$value name='$name' id='$id' /></td>\n" ;
    8988                        }
    9089                } // foreach
     
    9594        $grille.="</table>\n";
    9695       
    97         if (!$solution) $grille .=
     96        if (!$solution){
     97                list($id, $name) = jeux_idname($indexJeux, 'SOL');
     98                $grille .=
    9899                (jeux_config('regle')?'<div class="jeux_regle">'.definir_puce()._T('sudoku:regle',Array('hauteur'=>$li,'largeur'=>$lj, 'max'=>$largeur)).'</div>' : '')
    99                 .(jeux_config('solution')?"<p><input id=\"affiche_solution_$indexJeux\" name=\"affiche_solution_{$indexJeux}[]\" type=\"checkbox\" class=\"jeux_cocher\" value=\"1\" /><label for=\"affiche_solution_$indexJeux\" >"._T('jeux:afficher_solution')."</label></p>\n":'')
    100                 .'<p><input type="submit" value="'._T('jeux:verifier_validite')."\" name=\"bouton_envoi_$indexJeux\" /></p>"
     100                .(jeux_config('solution')?"<p><input id='$id' name='$name' type='checkbox' class='jeux_cocher' value='1' /><label for='$id' >"
     101                        ._T('jeux:afficher_solution')."</label></p>\n":'')
     102                .'<p><input type="submit" value="'._T('jeux:verifier_validite')."\" name='submit' /></p>"
    101103                .($form?jeux_form_fin():'');
     104        }
    102105
    103106        return $grille;
     
    156159    foreach($tableau_sudoku as $ligne => $contenu_ligne) {
    157160        foreach ($contenu_ligne as $colonne => $cellule) {
    158                         $input = trim(_request('GR'.$indexJeux.'x'.($colonne+1).'x'.($ligne+1)));
     161                        $input = jeux_form_reponse($indexJeux, $colonne+1, 'C', $ligne+1, 'L');
    159162                        if ($input=='' && $cellule=='-') $vides++;
    160163                        if ($input!='' && $cellule=='-') $tableau_sudoku[$ligne][$colonne] = $input;
     
    166169// renvoie la validite et le nombre de cases vides
    167170function calcul_erreurs_sudoku($tableau_sudoku, $solution, $indexJeux) {
    168         if (_request("bouton_envoi_$indexJeux") == '') return '';
    169         else {
    170           list($valide, $nbr_vides) = sudoku_validite($tableau_sudoku, $solution, $indexJeux);
    171           return '<div class="jeux_erreur">'
     171        if (!jeux_form_correction($indexJeux)) return '';
     172        list($valide, $nbr_vides) = sudoku_validite($tableau_sudoku, $solution, $indexJeux);
     173        return '<div class="jeux_erreur">'
    172174                . _T('jeux:grille_'.($valide?'':'in').'valide')
    173175                . (($nbr_vides==0)?(($nbr_erreurs==0)?'. '._T('jeux:bravo'):''):(
     
    175177                ))
    176178                . '</div><br />';
    177         }
    178179}
    179180
     
    197198          elseif ($valeur==_JEUX_TEXTE) $html .= $tableau[$i+1];
    198199        }
    199        
    200200        return  ($titre?"<div class=\"jeux_titre sudoku_titre\">$titre</div>":'')
    201201                        . calcul_erreurs_sudoku($sudoku, $solution, $indexJeux)
    202202                        . affichage_sudoku($sudoku, $indexJeux, $form)
    203203        // solution
    204                         . (($_POST['affiche_solution_'.$indexJeux][0] == 1)? affichage_sudoku($solution, $indexJeux, $form, true) : '');
     204                        . (jeux_form_reponse($indexJeux, 'SOL') ? affichage_sudoku($solution, $indexJeux, $form, true) : '');
    205205}
    206206?>
  • _plugins_/jeux/trunk/jeux/trous.php

    r64132 r64913  
    7777}
    7878
    79 function trous_inserer_le_trou($indexJeux, $indexTrou, $size, $corriger) {
    80         global $propositionsTROUS, $scoreTROUS, $score_detailTROUS;
     79function trous_inserer_le_trou(&$trous, $indexJeux, $indexTrou, $size) {
    8180        // Initialisation du code a retourner
    82         $nomVarSelect = "var{$indexJeux}_T{$indexTrou}";
    83         $mots = $propositionsTROUS[$indexTrou];
    84         $prop = trim($_POST[$nomVarSelect]);
    85         $oups = $disab = $color = '';
     81        $mots = $trous['propositions'][$indexTrou];
     82        $prop = $oups = $disab = $color = '';
    8683        // en cas de correction
    87         if($corriger) {
     84        if(jeux_form_correction($indexJeux)) {
     85                $prop = jeux_form_reponse($indexJeux, $indexTrou, 'T');
    8886                $ok = strlen($prop) && jeux_in_liste($prop, $mots);
    89                 if($ok) ++$scoreTROUS;
     87                if($ok) ++$trous['score'];
    9088                if(jeux_config('couleurs')) $color = $ok?' juste':' faux';
    9189                if(!$ok && jeux_config('solution')) {
     
    10098//$solution = ' <span class="juste">('.trous_liste_reponses($mots).')</span> ';
    10199                // on renseigne le resultat detaille
    102                 $score_detailTROUS[] = 'T'.($indexTrou+1).":$prop:".($ok?'1':'0');
     100                $trous['score_detaille'][] = 'T'.($indexTrou+1).":$prop:".($ok?'1':'0');
    103101                $disab = " disabled='disabled'";
    104102        }
    105         $codeHTML = "<input name='$nomVarSelect' class='jeux_input trous$color' size='$size' type='text'$disab' value=\"$prop\" />";
    106 //      if($corriger) $codeHTML .= '(T'.($indexTrou+1).":$prop/".$GLOBALS['meta']['charset']."[".join('|',$mots)."]:".($ok?'1':'0').'pt)';
     103        list($idInput, $nameInput) = jeux_idname($indexJeux, $indexTrou, 'T');
     104        $codeHTML = "<input id='sidInput' name='$nameInput' class='jeux_input trous$color' size='$size' type='text'$disab' value=\"$prop\" />";
     105//      if(jeux_form_correction($indexJeux)) $codeHTML .= '(T'.($indexTrou+1).":$prop/".$GLOBALS['meta']['charset']."[".join('|',$mots)."]:".($ok?'1':'0').'pt)';
    107106        return $oups . $codeHTML;
    108107}
    109108
    110 function trous_inserer_les_trous($chaine, $indexJeux) {
    111         global $propositionsTROUS;
     109function trous_inserer_les_trous(&$trous, $chaine, $indexJeux) {
    112110        if (preg_match(',<ATTENTE_TROU>([0-9]+)</ATTENTE_TROU>,', $chaine, $regs)) {
    113111        $indexTROU = intval($regs[1]);
    114112        list($texteAvant, $texteApres) = explode($regs[0], $chaine, 2);
    115         $texteApres = trous_inserer_les_trous($texteApres, $indexJeux);
     113        $texteApres = trous_inserer_les_trous($trous, $texteApres, $indexJeux);
    116114        if (($sizeInput = intval(jeux_config('taille')))==0)
    117                 foreach($propositionsTROUS as $trou) foreach($trou as $mot) $sizeInput = max($sizeInput, strlen($mot));
     115                foreach($trous['propositions'] as $trou) foreach($trou as $mot) $sizeInput = max($sizeInput, strlen($mot));
    118116        $chaine = $texteAvant.jeux_rem('TROU-DEBUT', $indexTROU, '', 'span')
    119                 . trous_inserer_le_trou($indexJeux, $indexTROU, $sizeInput, isset($_POST["var_correction_".$indexJeux]))
     117                . trous_inserer_le_trou($trous, $indexJeux, $indexTROU, $sizeInput)
    120118                . jeux_rem('TROU-FIN', $indexTROU, '', 'span')
    121119                . $texteApres;
     
    126124// renvoyer l'ensemble des solutions dans le desordre...
    127125// si plusieurs solutions sont possibles, seule la premiere est retenue
    128 function trous_afficher_indices($indexJeux) {
    129         global $propositionsTROUS;
    130         foreach ($propositionsTROUS as $prop)
     126function trous_afficher_indices(&$trous) {
     127        foreach ($trous['propositions'] as $prop)
    131128                $indices[] = preg_match(',(.*)/M$,', $prop[0], $reg)?$reg[1]:$prop[0];
    132129        shuffle($indices);
     
    146143// traitement du jeu : jeu_{mon_jeu}()
    147144function jeux_trous($texte, $indexJeux, $form=true) {
    148         global $propositionsTROUS, $scoreTROUS, $score_detailTROUS;
    149         $titre = $html = false;
    150         $indexTrou = $scoreTROUS = 0;
    151         $score_detailTROUS = array();
    152        
     145        $trous_[$indexJeux] = array(
     146                'propositions'=> array(),
     147                'score' => 0, 'score_detaille' => array()
     148        );
     149        $trous = &$trous_[$indexJeux];
     150        $titre = $html = false; $indexTrou = 0;
    153151        // parcourir tous les #SEPARATEURS
    154152        $tableau = jeux_split_texte('trous', $texte);
     
    160158                // remplacement des trous par : <ATTENTE_TROU>ii</ATTENTE_TROU>
    161159                $html .= "<ATTENTE_TROU>$indexTrou</ATTENTE_TROU>";
    162                 $propositionsTROUS[$indexTrou] = jeux_liste_mots($tableau[$i+1]);
     160                $trous['propositions'][$indexTrou] = jeux_liste_mots($tableau[$i+1]);
    163161                $indexTrou++;
    164162          }
    165163        }
    166164        // reinserer les trous mis en forme
    167         $texte = trous_inserer_les_trous($html, $indexJeux);
    168         // correction ?
    169         $correction = isset($_POST["var_correction_".$indexJeux]);
    170         if($correction) sort($score_detailTROUS);
     165        $texte = trous_inserer_les_trous($trous, $html, $indexJeux);
     166        // mode correction ?
     167        $correction = jeux_form_correction($indexJeux);
     168        if($correction) sort($trous['score_detaille']);
    171169        $id_jeu = _request('id_jeu');
    172170        // recuperation du fond 'jeux/trous.html'
     
    175173                array('id_jeu' => $id_jeu, 'titre' => $titre,
    176174                        'texte' => $texte, 'correction' => $correction,
    177                         'indices' => jeux_config('indices')?trous_afficher_indices($indexJeux):'',
    178                         'fond_score' => !$correction?''
    179                                 :jeux_afficher_score($scoreTROUS, $indexTrou, $id_jeu, join(', ', $score_detailTROUS), $categ_score),
     175                        'indices' => jeux_config('indices')?trous_afficher_indices($trous):'',
     176                        'fond_score' => $correction?
     177                                jeux_afficher_score($trous['score'], $indexTrou, $id_jeu, join(', ', $trous['score_detaille']), $categ_score):'',
    180178                )
    181179        );
     
    190188                $fond
    191189        );
    192         // nettoyage
    193         unset($propositionsTROUS, $scoreTROUS, $score_detailTROUS);
    194190        return $fond;
    195191}
  • _plugins_/jeux/trunk/jeux_fonctions.php

    r64783 r64913  
    11<?php
     2#ini_set('display_errors','1'); error_reporting(E_ALL ^ (E_NOTICE | E_WARNING));
    23if (!defined("_ECRIRE_INC_VERSION")) return;
    34#---------------------------------------------------#
     
    1213
    1314include_spip('base/jeux_tables');
    14 
    15 
     15include_spip('jeux_utils');
     16// tableau de parametres exploitables par les plugins
     17global $jeux_config;
    1618
    1719// filtre retournant un lien cliquable si $nb!=0, sinon un simple tiret
     
    4143
    4244// ajoute l'id_jeu du jeu a sa config interne et traite le jeu grace a propre()
    43 // ce filtre doit agir sur #CONTENU*
    44 function traite_contenu_jeu($texte, $id_jeu) {
    45         return propre(str_replace(_JEUX_FIN, "[config]id_jeu=$id_jeu"._JEUX_FIN, $texte));
     45// ce filtre doit agir sur #TEXTE* sans balises <jeux/>
     46// dans le cas d'un formulaire CVT, il faut egalement $jeuCVT='oui' et $indexJeux
     47function traite_contenu_jeu($texte, $id_jeu, $jeuCVT='non', $indexJeux=0) {
     48        return propre(str_replace(_JEUX_FIN, "[config]jeu_cvt=$jeuCVT\nindex_jeux=$indexJeux\nid_jeu=$id_jeu"._JEUX_FIN, $texte));
     49}
     50
     51// complete la config d'un jeu brut non encore decode
     52function ajoute_config_jeu($texte, $config=array()) {
     53        // separateurs inutiles ici, le texte est celui d'un seul jeu
     54        $texte = str_replace(array(_JEUX_DEBUT, _JEUX_FIN), '', $texte);
     55        if(!is_array($config)) return $texte . "\n[config]" . $config;
     56        array_walk($config, create_function('&$v,&$k','$v = trim($k)."=".trim($v);'));
     57        return $texte . "[config]" . join("\n", $config);
     58}
     59
     60// fonction de traitement appelant directement une fonction de pipeline
     61function jeux_traitement_pre_propre($texte, $texte_brut=false) {
     62        include_spip('jeux_pipelines');
     63        return jeux_pre_propre($texte, $texte_brut);
    4664}
    4765
     
    6785}
    6886
    69 // interpretation du jeu, equivalent a : #CONTENU*|traite_contenu_jeu{#ID_JEU}
    70 function balise_CONTENU_PROPRE_dist($p) {
    71         $id = champ_sql('id_jeu', $p);
    72         $texte = champ_sql('contenu', $p);
    73         $p->code = "traite_contenu_jeu($texte, $id)";
     87// interpretation du texte d'un jeu present en base apres avoir complete sa config interne
     88// utilisation : #TEXTE_JEU{key1, value1, key2, value2,...}
     89// qui creera avant l'interpretation du jeu une nouvelle section [config]key1=value1, key2=value2, etc.
     90// parametre necessaire aux jeux en base : id_jeu
     91// parametre necessaires aux jeux affiches en CVT : jeu_cvt='oui' et index_jeux
     92function balise_TEXTE_JEU_dist($p) {
     93        $id_jeu = champ_sql('id_jeu', $p);
     94        $texte = champ_sql('texte', $p);
     95        $args = ''; $n = 1;
     96        while($k = interprete_argument_balise($n++, $p))
     97                if($v = interprete_argument_balise($n++, $p)) $args .= " . \"\\n\" . $k . '=' . $v";
     98        // ajout des parametres trouves en argument a la config interne du jeu
     99        // puis lancement du decodage du jeu, c'est mieux de le faire au plus tot.
     100        $p->code = "jeux_traitement_pre_propre(ajoute_config_jeu($texte, 'id_jeu = ' . intval($id_jeu)$args), true)";
     101        // le traitement de la balise #TEXTE_JEU fera le reste.
    74102        return $p;
    75103}
     104
    76105
    77106// traduction longue du type de resultat
  • _plugins_/jeux/trunk/jeux_pipelines.php

    r64783 r64913  
    11<?php
     2#ini_set('display_errors','1'); error_reporting(E_ALL ^ (E_NOTICE | E_WARNING));
    23if (!defined("_ECRIRE_INC_VERSION")) return;
    34#---------------------------------------------------#
     
    1415// tableau de parametres exploitables par les plugins
    1516global $jeux_config;
     17// debut d'indexage des jeux presents sur la page
     18global $debut_index_jeux;
    1619
    1720// fonction pre-traitement, pipeline pre_propre
    18 // insersion de quelques balises de reconnaissance
    19 function jeux_pre_propre($texte) {
     21// insertion de quelques balises de reconnaissance
     22// $texte_brut est vrai si le texte est issu d'un jeu en base : le traitement en est simplifie.
     23function jeux_pre_propre($texte, $texte_brut=false) {
     24       
     25        // commencer par isoler le jeu
     26        if(!strlen($texte)) return '';
     27        if($texte_brut)
     28                // texte brut d'un jeu en base
     29                $texteAvant = $texteApres = '';
     30        else {
     31                // contenu d'un article normal
     32                if(strpos($texte, _JEUX_DEBUT)===false || strpos($texte, _JEUX_FIN)===false) return $texte;
     33                // isoler le jeu...
     34                list($texteAvant, $suite) = explode(_JEUX_DEBUT, $texte, 2);
     35                list($texte, $texteApres) = explode(_JEUX_FIN, $suite, 2);
     36        }
     37
    2038        // s'il n'est pas present dans un formulaire envoye,
    2139        // l'identifiant du jeu est choisi au hasard...
    2240        // ca peut servir en cas d'affichage de plusieurs articles par page.
    2341        // en passant tous les jeux en ajax, ce ne sera plus la peine.
     42        // cet identifiant pourrait etre remplace par l'id_jeu d'un jeu present en base
     43        global $debut_index_jeux;
     44        if(!isset($debut_index_jeux))
     45                $debut_index_jeux = _request('debut_index_jeux')?_request('debut_index_jeux'):rand(10000, 99999);
     46
     47        // creer un index d'affichage, servant a differencier plusieurs jeux sur une page en l'absence d'AJAX
    2448        static $indexJeux = null;
    25         if(!isset($GLOBALS['debut_index_jeux']))
    26                 $GLOBALS['debut_index_jeux'] = isset($_POST['debut_index_jeux'])?$_POST['debut_index_jeux']:rand(10000, 99999);
    27 
    28         if (strpos($texte, _JEUX_DEBUT)===false || strpos($texte, _JEUX_FIN)===false) return $texte;
    2949        if(isset($indexJeux)) ++$indexJeux;
    30                 else $indexJeux = $GLOBALS['debut_index_jeux'];
    31 
    32         // isoler le jeu...
    33         list($texteAvant, $suite) = explode(_JEUX_DEBUT, $texte, 2);
    34         list($texte, $texteApres) = explode(_JEUX_FIN, $suite, 2);
     50                else $indexJeux = $debut_index_jeux;
     51        // en cas de formulaire CVT ajax, le jeu est toujours unique et son $indexJeux est deja connu
     52        $indexJeuxReel = (_request('var_ajax')=='form' && _request('jeu_cvt')=='oui' && _request('index_jeux'))
     53                ?_request('index_jeux'):$indexJeux;
    3554
    3655        // ...decoder le texte obtenu en fonction des signatures et inclure le jeu
    3756        $liste = jeux_liste_les_jeux($texte);
    38         jeux_decode_les_jeux($texte, $indexJeux);
     57        jeux_decode_les_jeux($texte, $indexJeuxReel);
    3958        // calcul des fichiers necessaires pour le header
    4059        if(count($liste)) {
     
    4968
    5069        return $texteAvant . $header
    51                 .jeux_rem('PLUGIN-DEBUT', $indexJeux, join('/', $liste))
    52                 ."<div id=\"JEU$indexJeux\" class=\"jeux_global\">$texte</div>"
    53 #               ."<div id=\"JEU$indexJeux\" class=\"jeux_global ajax\">$texte</div>"
    54                 .jeux_rem('PLUGIN-FIN', $indexJeux).jeux_pre_propre($texteApres);
     70                . jeux_rem('PLUGIN-DEBUT', $indexJeuxReel, join('/', $liste))
     71                . "<div id='JEU$indexJeuxReel' class='jeux_global'>$texte</div>"
     72#               . "<div id='JEU$indexJeuxReel' class='jeux_global ajax'>$texte</div>"
     73                . jeux_rem('PLUGIN-FIN', $indexJeuxReel)
     74                . jeux_pre_propre($texteApres);
    5575}
    5676
  • _plugins_/jeux/trunk/jeux_utils.php

    r64172 r64913  
    1212
    1313include_spip('jeux_config');
    14 
    15 
    1614
    1715// 4 fonctions pour traiter la valeur du parametre de configuration place apres le separateur [config]
     
    7977        foreach ($tableau as $i=>$valeur) if (($valeur=trim($valeur))!='') $tableau[$i] = "<li>$valeur</li>\n";
    8078        $texte = implode('', $tableau);
    81         return "<ol>$texte</ol>"; 
     79        return "<ol>$texte</ol>";
    8280}
    8381
    8482// retourne un tableau de mots ou d'expressions a partir d'un texte
    8583function jeux_liste_mots($texte) {
    86         $texte = filtrer_entites(trim(echappe_retour($texte)));
     84        // corrections typo eventuelles
     85        $texte = str_replace(array('&#8217;','&laquo;&nbsp;','&nbsp;&raquo;','&laquo; ',' &raquo;'), array("'",'"','"','"','"'), echappe_retour($texte));
     86        $texte = filtrer_entites(trim($texte));
    8787        $split = explode('"', $texte);
    8888        $c = count($split);
     
    137137        elseif($id_jeu){
    138138                // mode 'jeu simple'
    139                 // ici, #CONTENU* est passe par le filtre |traite_contenu_jeu{#ID_JEU}
     139                // ici, le jeu est decode et possede un id_jeu ; les scores peuvent passer en base.
    140140                include_spip('base/jeux_ajouter_resultat');
    141141                jeux_ajouter_resultat($id_jeu, $score, $total, $resultat_long);
     
    186186}
    187187
    188 // decode les jeux, si le module jeux/lejeu.php est present
     188// decode les jeux si les modules jeux/lejeu.php sont presents
    189189// retourne la liste des jeux trouves et inclut la bibliotheque si $indexJeux existe
    190190function jeux_decode_les_jeux(&$texte, $indexJeux=NULL) {
     
    321321}
    322322
    323 // pour obtenir un bloc depliable
     323// renvoie un bloc depliable
    324324function jeux_block_depliable($texte, $block) {
    325325 if (!strlen($texte)) return '';
     
    327327}
    328328
     329// renvoie le couple array(id, name) pour construire un input
     330// les index doivent etre positifs
     331function jeux_idname($indexJeux, $index=-1, $prefixe='', $index2=-1, $prefixe2='') {
     332        $indexJeux = 'reponses' . $indexJeux;
     333        if($index<0) return array($indexJeux, $indexJeux);
     334        if($index2<0) return array($indexJeux.'-'.$prefixe.$index, $indexJeux.'['.$prefixe.$index.']');
     335        return array($indexJeux.'-'.$prefixe.$index.'-'.$prefixe2.$index2, $indexJeux.'['.$prefixe.$index.']['.$prefixe2.$index2.']');
     336}
     337
     338// renvoie la reponse trimee du formulaire (NULL si n'existe pas)
     339function jeux_form_reponse($indexJeux, $index=-1, $prefixe='', $index2=-1, $prefixe2='') {
     340        $reponse = _request('reponses'.$indexJeux);
     341        if($index>=0 && is_array($reponse)) $reponse = isset($reponse[$prefixe.$index])?$reponse[$prefixe.$index]:NULL;
     342        if($index2>=0 && is_array($reponse)) $reponse = isset($reponse[$prefixe2.$index2])?$reponse[$prefixe2.$index2]:NULL;
     343        if(is_string($reponse) && strlen($reponse)) $reponse = trim($reponse);
     344        return $reponse;
     345}
     346
     347// indique si on doit corriger ou non
     348function jeux_form_correction($indexJeux) {
     349        return intval(_request('correction'.$indexJeux))?true:false;
     350}
     351
    329352// deux fonctions qui encadrent un jeu dans un formulaire
    330353function jeux_form_debut($name, $indexJeux, $class="", $method="post", $action="") {
     354        $id_jeu = intval(jeux_config('id_jeu'));
     355        $cvt = jeux_config('jeu_cvt')?'oui':'non';
     356        $hidden = "<div><input type='hidden' name='id_jeu' value='$id_jeu' />\n"
     357                ."<input type='hidden' name='debut_index_jeux' value='$GLOBALS[debut_index_jeux]' />\n"
     358                ."<input type='hidden' name='index_jeux' value='$indexJeux' />\n"
     359                ."<input type='hidden' name='correction$indexJeux' value='1' /></div>\n";
     360        if(jeux_config('jeu_cvt')) return $hidden;
    331361        if (strlen($name)) $name=" id='$name$indexJeux'";
    332362        if (strlen($class)) $class=" class='$class'";
    333363        if (strlen($method)) $method=" method='$method'";
    334364        /*if (strlen($action))*/ $action=" action='$action#JEU$indexJeux'";
    335         $id_jeu = intval(jeux_config('id_jeu'));
    336         return "\n<form".$name.$class.$method.$action." >\n"
    337                 ."<div><input type='hidden' name='id_jeu' value='$id_jeu' />\n"
    338                 ."<input type='hidden' name='debut_index_jeux' value='{$GLOBALS['debut_index_jeux']}' />\n"
    339                 ."<input type='hidden' name='index_jeux' value='$indexJeux' />\n"
    340                 ."<input type='hidden' name='var_correction_$indexJeux' value='1' /></div>\n";
     365        return "\n<form".$name.$class.$method.$action." >\n".$hidden;
    341366}
    342367function jeux_form_fin() {
    343         return "\n</form>\n";
     368        return jeux_config('jeu_cvt')?'':"\n</form>\n";
    344369}
    345370
  • _plugins_/jeux/trunk/modeles/jeu.html

    r63697 r64913  
    11[(#REM) Modele qui peut enregistrer les scores ]
    2 <BOUCLE_jeu(JEUX){id_jeu=#ENV{id}}{statut ?}>[(#VAL{<jeux>}|concat{#TEXTE*}|concat{"</jeux>"}|traite_contenu_jeu{#ID_JEU})]</BOUCLE_jeu>
     2<BOUCLE_jeu(JEUX){id_jeu=#ENV{id}}{statut ?}>#TEXTE_JEU</BOUCLE_jeu>
Note: See TracChangeset for help on using the changeset viewer.