Changeset 64877 in spip-zone


Ignore:
Timestamp:
Aug 16, 2012, 4:48:16 AM (6 years ago)
Author:
patfr@…
Message:

Travail sur les formulaires CVT (SPIP 2.x)

L'idée est 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.

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, appelés grâce au modèle <jeuXX>, avec score
  • les jeux créés en base, appelés en AJAX grâce au raccourci <formulaire|jeu|XX>
Location:
_plugins_/jeux/branches/jeux2
Files:
3 added
9 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/jeux/branches/jeux2/jeux/mots_croises.php

    r37062 r64877  
    9292                    // s'il s'agit d'un noir
    9393                    if ($cellule == "*") {
    94                                         $noires = $jeux_couleurs[jeux_config('fondnoir')];
    95                                         $noires = "rgb($noires[0], $noires[1], $noires[2])";
    96                                 $grille .= "\t\t<td$classnoir style=\"background-color:$noires; color:$noires;\">*</td>\n";
    97                                 }
    98                                 else if ($solution)
    99                                         $grille .= "\t\t<td$class>$cellule</td>\n" ;
    100                                 else {
    101                                         $name = 'GR'.$indexJeux.'x'.$colonne.'x'.$ligne;
    102                                         $valeur = _request($name);
    103                                         $grille .= "\t\t<td$class><label for=\"$name\">"
    104                                                 . _T('jeux:ligne_n', array('n'=>$entete_ligne)).';'
    105                                                 . _T('jeux:colonne_n', array('n'=>$entete_colonne)).'</label>'
    106                                                 . '<input type="text" maxlength="1" '
    107                                                 . ((isset($valeur) and $valeur!='')? 'value="'.$valeur:'')
    108                                                 .'" name="'.$name.'" id="'.$name.'" />'
    109                                                 . "</td>\n" ;
    110                                 }
     94                                $noires = $jeux_couleurs[jeux_config('fondnoir')];
     95                                $noires = "rgb($noires[0], $noires[1], $noires[2])";
     96                                $grille .= "\t\t<td$classnoir style=\"background-color:$noires; color:$noires;\">*</td>\n";
     97                        }
     98                        else if ($solution)
     99                                $grille .= "\t\t<td$class>$cellule</td>\n" ;
     100                        else {
     101                                list($id, $name) = jeux_idname($indexJeux, $colonne, 'C', $ligne, 'L');
     102                                $value = jeux_form_reponse($indexJeux, $colonne, 'C', $ligne, 'L');
     103                                $value = strlen($value)?' value="'.$value.'"':'';
     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'$value name='$name' id='$id' /></td>\n" ;
     108                        }
    111109                } // foreach
    112110                                                   
     
    117115        $grille.="</table>\n";
    118116       
    119         if (!$solution) $grille .=
    120                 (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":'')
    121                 .'<p><input type="submit" value="'._T('jeux:verifier')."\" name=\"bouton_envoi_$indexJeux\" /></p>"
     117        if (!$solution) {
     118                list($id, $name) = jeux_idname($indexJeux, 'SOL');
     119                $grille .=
     120                (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":'')
     121                .'<p><input type="submit" value="'._T('jeux:verifier')."\" name='submit' /></p>"
    122122                .($form?jeux_form_fin():'');
     123        }
    123124
    124125        return $grille;
     
    140141            //compare les valeurs du tableau PHP avec les variables POST
    141142                        if ($cellule!='*') {
    142                                 $input = trim(_request('GR'.$indexJeux.'x'.($colonne+1).'x'.($ligne+1)));
     143                                $input = jeux_form_reponse($indexJeux, $colonne+1, 'C', $ligne+1, 'L');
    143144                                $total++; // nombre de case total
    144145                    if ($input=='') $vides++;
     
    152153// renvoie le nombre d'erreurs et de cases vides
    153154function calcul_erreurs_grille($solution, $indexJeux) {
    154         if (_request("bouton_envoi_$indexJeux") == '') return '';
    155         else {
    156           list($nbr_erreurs, $nbr_vides,$total) = comparaison_grille($solution, $indexJeux);
    157           // on insere le resultat dans la base de donnee
    158           if ($_POST['id_jeu']){
     155        if (!jeux_form_correction($indexJeux)) return '';
     156        list($nbr_erreurs, $nbr_vides,$total) = comparaison_grille($solution, $indexJeux);
     157        $id_jeu = _request('id_jeu');
     158        // on insere le resultat dans la base de donnee
     159        if ($id_jeu){
    159160                include_spip('base/jeux_ajouter_resultat');
    160                 jeux_ajouter_resultat($_POST['id_jeu'], $total-$nbr_erreurs-$nbr_vides, $total, "erreurs=$nbr_erreurs, vides=$nbr_vides");
    161           }
    162 
    163           // on retourne ce qu'on affiche
    164           return '<div class="jeux_erreur">'
     161                jeux_ajouter_resultat($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">'
    165166                . (($nbr_erreurs==0)?_T('jeux:aucune_erreur'):(
    166167                 ($nbr_erreurs==1)?_T('jeux:une_erreur'):_T("jeux:n_erreurs", array('n'=>$nbr_erreurs))
     
    170171                ))
    171172                . '</div><br />';
    172         }
    173173}
    174174
     
    231231          elseif ($valeur==_JEUX_TEXTE) $html .= $tableau[$i+1];
    232232        }
    233         $affiche_solution = _request('affiche_solution_'.$indexJeux);
    234233        return  '<div class="mots_croises">'
    235234                        . calcul_erreurs_grille($solution, $indexJeux)
     
    237236                        . affichage_definitions($horizontal, $vertical)
    238237        // solution
    239                         . (($affiche_solution[0] == 1)? affichage_grille_mc($solution, $indexJeux, $form, true) : '')
     238                        . (jeux_form_reponse($indexJeux, 'SOL') ? affichage_grille_mc($solution, $indexJeux, $form, true) : '')
    240239                        . '</div><br class="jeux_nettoyeur"/>';
    241240}
  • _plugins_/jeux/branches/jeux2/jeux/qcm.php

    r64727 r64877  
    6060        P.4 mercure venus terre mars jupiter saturne uranus neptune|saviez-vous que pluton n'est plus une planete ?
    6161
     62TODO : passer en objet pour eviter les globales
    6263*/
    63 
    6464
    6565// configuration par defaut : jeu_{mon_jeu}_init()
     
    153153}
    154154
    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) {
     155function qcm_affiche_la_question($indexJeux, $indexQCM, $gestionPoints) {
    165156  global $qcms, $qcm_score, $qcm_score_detaille;
    166157  $indexQCM_1 = $indexQCM + 1;
    167158  if (!$qcms[$indexQCM]['nbpropositions'] || !$qcms[$indexQCM]['maxScore'])
    168         return "<div class=\"jeux_question\">".definir_puce()._T('jeux:erreur_syntaxe').'</div>';
     159        return '<div class="jeux_question">'.definir_puce()._T('jeux:erreur_syntaxe').'</div>';
    169160
    170161  // Initialisation du code a retourner
    171   $nomVarSelect = "var{$indexJeux}_Q{$indexQCM}";
     162  list($idInput, $nameInput) = jeux_idname($indexJeux, $indexQCM, 'Q');
    172163  $question = trim(str_replace('&nbsp;', ' ', $qcms[$indexQCM]['question']));
    173164  $trou = $qcms[$indexQCM]['nbpropositions']==1;
     
    181172  } else $pointsQ = 1;
    182173
    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\">";
     174  $codeHTML = "<div class='qcm_element'><div class='jeux_question'>".definir_puce().$question.'</div>';
     175  if (!jeux_form_correction($indexJeux)){
     176        // affichage du jeu sans correction
     177        $codeHTML .= "\n<div class='qcm_proposition'>";
    187178
    188179        if ($trou) {
    189                 $codeHTML.=qcm_un_trou($nomVarSelect, $indexQCM);
     180                if (($sizeInput = intval(jeux_config('trou')))==0)
     181                        foreach($qcms[$indexQCM]['propositions'] as $mot) $sizeInput = max($sizeInput, strlen($mot));
     182                $prop = jeux_minuscules($temp);
     183                $codeHTML .= " &nbsp; &nbsp; &nbsp;<input name='$nameInput' id='$idInput' class='jeux_input qcm_input' size='$sizeInput' type='text' /> ";
    190184        } elseif ($qrm) {
     185                // cases a cocher
    191186                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 />');
     187                        $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 />');
    196188        // S'il y a trop de choix, utiliser une liste a la place des boutons radio
    197189        } 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>';
     190                $codeHTML .= "<select name='$nameInput' id='$idInput' class='qcm_select'><option value=''>"._T('jeux:votre_choix').'</option>';
     191                foreach($qcms[$indexQCM]['propositions'] as $i=>$valeur) $codeHTML.="<option value='$i'>$valeur</option>";
     192                $codeHTML .= '</select>';
    201193        } else {
     194                // boutons radio
    202195                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 />');
     196                        $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 />');
    207197        }
    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);
     198        $codeHTML .= '</div><br /></div>';
     199
     200  }     else {
     201         // affichage du jeu avec correction
     202         $reponse = jeux_form_reponse($indexJeux, $indexQCM, 'Q');
    216203         $bonneReponse = false; $qrm_score = 0;
    217          if ($reponse) {
     204         if($reponse) {
    218205                // chaque question est-elle corrigee ?
    219206                $affiche_correction = jeux_config('corrections');
     
    227214                }
    228215
    229                 $intro=$trou?_T('jeux:votre_reponse'):_T('jeux:votre_choix');
    230 
    231                 // question a reponse simple
     216                $intro = $trou?_T('jeux:votre_reponse'):_T('jeux:votre_choix');
     217
    232218                if (!$qrm) {
     219                        // ici : une question a reponse simple
    233220                        // 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>';
     221                        $codeHTML .= '<div class="qcm_reponse">'
     222                                 . ($pointsR===$pointsQ?$intro:qcm_les_points($intro, $pointsR, !$affiche_correction))
     223                                 . ($trou?$reponse:$qcms[$indexQCM]['propositions'][$reponse])
     224                                 . '</div>';
    238225
    239226                        // bonne reponse
     
    255242                                if (strlen($prec)) $codeHTML.="<div class=\"qcm_precision\">$prec</div>";
    256243                        }
    257 
    258                 // question a reponses multiples
    259244                } else foreach($reponse as $r) {
     245                        // ici : une question a reponses multiples
    260246                        // la reponse donnee & precision des points de la mauvaise reponse...
    261247                        $codeHTML.='<div class="qcm_reponse">'
     
    280266                                if (strlen($prec)) $codeHTML.="<div class=\"qcm_precision\">$prec</div>";
    281267                        }
    282                 }
     268                } // foreach($reponse)
    283269
    284270        // pas de reponse postee...
     
    331317        list($texteAvant, $texteApres) = explode($regs[0], $chaine, 2);
    332318        $chaine = $texteAvant.jeux_rem('QCM-DEBUT', $indexQCM)
    333                 . qcm_affiche_la_question($indexJeux, $indexQCM, isset($_POST["var_correction_".$indexJeux]), $gestionPoints)
     319                . qcm_affiche_la_question($indexJeux, $indexQCM, $gestionPoints)
    334320                . jeux_rem('QCM-FIN', $indexQCM)
    335321                . qcm_inserer_les_qcm($texteApres, $indexJeux, $gestionPoints);
     
    349335  $id_jeu = _request('id_jeu');
    350336
    351   // parcourir tous les #SEPARATEURS
     337  // parcourir tous les #SEPARATEURS, remplir $tableau et mettre a jour $indexJeux si ajax
    352338  $tableau = jeux_split_texte('qcm', $texte);
    353339  foreach($tableau as $i => $valeur) if ($i & 1) {
     
    375361  $tete = '<div class="jeux_cadre qcm">'.($titre?'<div class="jeux_titre qcm_titre">'.$titre.'<hr /></div>':'');
    376362  $pied = '';
    377   if (!isset($_POST["var_correction_".$indexJeux])) {
     363  if (jeux_form_correction($indexJeux)) {
     364        // mode correction
     365        $pied = jeux_afficher_score($qcm_score, $qcms['totalScore'], $id_jeu, join(', ', $qcm_score_detaille), $categ_score);
     366        if($form) $pied .= jeux_bouton(jeux_config('bouton_refaire'), $id_jeu, $indexJeux);
     367  } else {
     368        // mode formulaire
    378369        if($form) {
    379                 $pied = '<br />'.jeux_bouton(jeux_config('bouton_corriger'), $id_jeu).jeux_form_fin();
     370                $pied = '<br />' . jeux_bouton(jeux_config('bouton_corriger'), $id_jeu) . jeux_form_fin();
    380371                $tete .= jeux_form_debut('qcm', $indexJeux, '', 'post', self());
    381372        }
    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);
    385373  }
    386374  // ajout du javascript s'il faut afficher une par une
  • _plugins_/jeux/branches/jeux2/jeux/sudoku.php

    r35403 r64877  
    7878                                $grille .= "\t\t<td$class>$cellule</td>\n" ;
    7979                        else {
    80                                 $name = 'GR'.$indexJeux.'x'.$colonne.'x'.$ligne;
     80                                list($id, $name) = jeux_idname($indexJeux, $colonne, 'C', $ligne, 'L');
     81                                $value = jeux_form_reponse($indexJeux, $colonne, 'C', $ligne, 'L');
     82                                $value = strlen($value)?' value="'.$value.'"':'';
    8183                                $grille .= "\t\t<td$class><label for=\"$name\">"
    8284                                        ._T('jeux:ligne_n',Array('n'=>$ligne)).';'
    8385                                        ._T('jeux:colonne_n',Array('n'=>$colonne)).'</label>'
    84                                         . '<input type="text" maxlength="1" '
    85                                         . ((isset($_POST[$name]) and $_POST[$name]!='')? 'value="'.$_POST[$name]:'')
    86                                         .'" name="'.$name.'" id="'.$name.'" />'
    87                                         . "</td>\n" ;
     86                                        . "<input type='text' maxlength='1'$value name='$name' id='$id' /></td>\n" ;
    8887                        }
    8988                } // foreach
     
    9493        $grille.="</table>\n";
    9594       
    96         if (!$solution) $grille .=
     95        if (!$solution){
     96                list($id, $name) = jeux_idname($indexJeux, 'SOL');
     97                $grille .=
    9798                (jeux_config('regle')?'<div class="jeux_regle">'.definir_puce()._T('sudoku:regle',Array('hauteur'=>$li,'largeur'=>$lj, 'max'=>$largeur)).'</div>' : '')
    98                 .(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":'')
    99                 .'<p><input type="submit" value="'._T('jeux:verifier_validite')."\" name=\"bouton_envoi_$indexJeux\" /></p>"
     99                .(jeux_config('solution')?"<p><input id='$id' name='$name' type='checkbox' class='jeux_cocher' value='1' /><label for='$id' >"
     100                        ._T('jeux:afficher_solution')."</label></p>\n":'')
     101                .'<p><input type="submit" value="'._T('jeux:verifier_validite')."\" name='submit' /></p>"
    100102                .($form?jeux_form_fin():'');
     103        }
    101104
    102105        return $grille;
     
    155158    foreach($tableau_sudoku as $ligne => $contenu_ligne) {
    156159        foreach ($contenu_ligne as $colonne => $cellule) {
    157                         $input = trim(_request('GR'.$indexJeux.'x'.($colonne+1).'x'.($ligne+1)));
     160                        $input = jeux_form_reponse($indexJeux, $colonne+1, 'C', $ligne+1, 'L');
    158161                        if ($input=='' && $cellule=='-') $vides++;
    159162                        if ($input!='' && $cellule=='-') $tableau_sudoku[$ligne][$colonne] = $input;
     
    165168// renvoie la validite et le nombre de cases vides
    166169function calcul_erreurs_sudoku($tableau_sudoku, $solution, $indexJeux) {
    167         if (_request("bouton_envoi_$indexJeux") == '') return '';
    168         else {
    169           list($valide, $nbr_vides) = sudoku_validite($tableau_sudoku, $solution, $indexJeux);
    170           return '<div class="jeux_erreur">'
     170        if (!jeux_form_correction($indexJeux)) return '';
     171        list($valide, $nbr_vides) = sudoku_validite($tableau_sudoku, $solution, $indexJeux);
     172        return '<div class="jeux_erreur">'
    171173                . _T('jeux:grille_'.($valide?'':'in').'valide')
    172174                . (($nbr_vides==0)?(($nbr_erreurs==0)?'. '._T('jeux:bravo'):''):(
     
    174176                ))
    175177                . '</div><br />';
    176         }
    177178}
    178179
     
    196197          elseif ($valeur==_JEUX_TEXTE) $html .= $tableau[$i+1];
    197198        }
    198        
    199199        return  ($titre?"<div class=\"jeux_titre sudoku_titre\">$titre</div>":'')
    200200                        . calcul_erreurs_sudoku($sudoku, $solution, $indexJeux)
    201201                        . affichage_sudoku($sudoku, $indexJeux, $form)
    202202        // solution
    203                         . (($_POST['affiche_solution_'.$indexJeux][0] == 1)? affichage_sudoku($solution, $indexJeux, $form, true) : '');
     203                        . (jeux_form_reponse($indexJeux, 'SOL') ? affichage_sudoku($solution, $indexJeux, $form, true) : '');
    204204}
    205205?>
  • _plugins_/jeux/branches/jeux2/jeux/trous.php

    r48668 r64877  
    6363expression ne soit pas une expression reguliere
    6464
     65TODO : passer en objet pour eviter les globales
    6566*/
    6667
     
    7778}
    7879
    79 function trous_inserer_le_trou($indexJeux, $indexTrou, $size, $corriger) {
     80function trous_inserer_le_trou($indexJeux, $indexTrou, $size) {
    8081        global $propositionsTROUS, $scoreTROUS, $score_detailTROUS;
    8182        // Initialisation du code a retourner
    82         $nomVarSelect = "var{$indexJeux}_T{$indexTrou}";
    8383        $mots = $propositionsTROUS[$indexTrou];
    84         $prop = trim($_POST[$nomVarSelect]);
    85         $oups = $disab = $color = '';
     84        $prop = $oups = $disab = $color = '';
    8685        // en cas de correction
    87         if($corriger) {
     86        if(jeux_form_correction($indexJeux)) {
     87                $prop = jeux_form_reponse($indexJeux, $indexTrou, 'T');
    8888                $ok = strlen($prop) && jeux_in_liste($prop, $mots);
    8989                if($ok) ++$scoreTROUS;
     
    103103                $disab = " disabled='disabled'";
    104104        }
    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)';
     105        list($idInput, $nameInput) = jeux_idname($indexJeux, $indexTrou, 'T');
     106        $codeHTML = "<input id='sidInput' name='$nameInput' class='jeux_input trous$color' size='$size' type='text'$disab' value=\"$prop\" />";
     107//      if(jeux_form_correction($indexJeux)) $codeHTML .= '(T'.($indexTrou+1).":$prop/".$GLOBALS['meta']['charset']."[".join('|',$mots)."]:".($ok?'1':'0').'pt)';
    107108        return $oups . $codeHTML;
    108109}
     
    117118                foreach($propositionsTROUS as $trou) foreach($trou as $mot) $sizeInput = max($sizeInput, strlen($mot));
    118119        $chaine = $texteAvant.jeux_rem('TROU-DEBUT', $indexTROU, '', 'span')
    119                 . trous_inserer_le_trou($indexJeux, $indexTROU, $sizeInput, isset($_POST["var_correction_".$indexJeux]))
     120                . trous_inserer_le_trou($indexJeux, $indexTROU, $sizeInput)
    120121                . jeux_rem('TROU-FIN', $indexTROU, '', 'span')
    121122                . $texteApres;
     
    150151        $indexTrou = $scoreTROUS = 0;
    151152        $score_detailTROUS = array();
    152        
    153153        // parcourir tous les #SEPARATEURS
    154154        $tableau = jeux_split_texte('trous', $texte);
     
    166166        // reinserer les trous mis en forme
    167167        $texte = trous_inserer_les_trous($html, $indexJeux);
    168         // correction ?
    169         $correction = isset($_POST["var_correction_".$indexJeux]);
     168        // mode correction ?
     169        $correction = jeux_form_correction($indexJeux);
    170170        if($correction) sort($score_detailTROUS);
    171171        $id_jeu = _request('id_jeu');
     
    176176                        'texte' => $texte, 'correction' => $correction,
    177177                        '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),
     178                        'fond_score' => $correction?
     179                                jeux_afficher_score($scoreTROUS, $indexTrou, $id_jeu, join(', ', $score_detailTROUS), $categ_score):'',
    180180                )
    181181        );
  • _plugins_/jeux/branches/jeux2/jeux_fonctions.php

    r61781 r64877  
    4747// ajoute l'id_jeu du jeu a sa config interne et traite le jeu grace a propre()
    4848// ce filtre doit agir sur #CONTENU*
    49 function traite_contenu_jeu($texte, $id_jeu) {
    50         return propre(str_replace(_JEUX_FIN, "[config]id_jeu=$id_jeu"._JEUX_FIN, $texte));
     49// dans le cas d'un formulaire CVT, il faut egalement $cvt='oui' et $indexJeux
     50function traite_contenu_jeu($texte, $id_jeu, $jeu_cvt='non', $indexJeux=0) {
     51        return propre(str_replace(_JEUX_FIN, "[config]jeu_cvt=$jeu_cvt\nindex_jeux=$indexJeux\nid_jeu=$id_jeu"._JEUX_FIN, $texte));
    5152}
    5253
  • _plugins_/jeux/branches/jeux2/jeux_pipelines.php

    r53932 r64877  
    1111#--------------------------------------------------------------------------#
    1212
     13#ini_set('display_errors','1'); error_reporting(E_ALL ^ (E_NOTICE | E_WARNING));
    1314include_spip('jeux_utils');
    1415// tableau de parametres exploitables par les plugins
     
    1617
    1718// fonction pre-traitement, pipeline pre_propre
    18 // insersion de quelques balises de reconnaissance
    19 function jeux_pre_propre($texte) { 
     19// insertion de quelques balises de reconnaissance
     20function jeux_pre_propre($texte) {
    2021        // s'il n'est pas present dans un formulaire envoye,
    2122        // l'identifiant du jeu est choisi au hasard...
    2223        // ca peut servir en cas d'affichage de plusieurs articles par page.
    23         // en passant tous les jeux en ajax, ce ne sera plus la peine.
     24        // cet identifiant pourrait etre remplace par l'id_jeu d'un jeu present en base
    2425        static $indexJeux = null;
    2526        if(!isset($GLOBALS['debut_index_jeux']))
    26                 $GLOBALS['debut_index_jeux'] = isset($_POST['debut_index_jeux'])?$_POST['debut_index_jeux']:rand(10000, 99999);
     27                $GLOBALS['debut_index_jeux'] = _request('debut_index_jeux')?_request('debut_index_jeux'):rand(10000, 99999);
    2728
    2829        if (strpos($texte, _JEUX_DEBUT)===false || strpos($texte, _JEUX_FIN)===false) return $texte;
    2930        if(isset($indexJeux)) ++$indexJeux;
    3031                else $indexJeux = $GLOBALS['debut_index_jeux'];
     32        // en cas de formulaire CVT ajax, le jeu est toujours unique et son $indexJeux est deja connu
     33        $indexJeuxReel = (_request('var_ajax')=='form' && _request('jeu_cvt')=='oui' && _request('index_jeux'))?_request('index_jeux'):$indexJeux;
    3134
    3235        // isoler le jeu...
     
    3639        // ...decoder le texte obtenu en fonction des signatures et inclure le jeu
    3740        $liste = jeux_liste_les_jeux($texte);
    38         jeux_decode_les_jeux($texte, $indexJeux);
     41        jeux_decode_les_jeux($texte, $indexJeuxReel);
     42
    3943        // calcul des fichiers necessaires pour le header
    4044        if(count($liste)) {
     
    4953
    5054        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);
     55                . jeux_rem('PLUGIN-DEBUT', $indexJeuxReel, join('/', $liste))
     56                . "<div id=\"JEU$indexJeux\" class=\"jeux_global\">$texte</div>"
     57#               . "<div id=\"JEU$indexJeux\" class=\"jeux_global ajax\">$texte</div>"
     58                . jeux_rem('PLUGIN-FIN', $indexJeuxReel).jeux_pre_propre($texteApres);
    5559}
    5660
  • _plugins_/jeux/branches/jeux2/jeux_utils.php

    r55431 r64877  
    7676  }
    7777  return $tableau;
    78 } 
     78}
    7979
    8080// transforme un texte en listes html
     
    8888// retourne un tableau de mots ou d'expressions a partir d'un texte
    8989function jeux_liste_mots($texte) {
    90         $texte = filtrer_entites(trim(echappe_retour($texte)));
     90        // corrections typo eventuelles
     91        $texte = str_replace(array('&#8217;','&laquo;&nbsp;','&nbsp;&raquo;','&laquo; ',' &raquo;'), array("'",'"','"','"','"'), echappe_retour($texte));
     92        $texte = filtrer_entites(trim($texte));
    9193        $split = explode('"', $texte);
    9294        $c = count($split);
     
    190192}
    191193
    192 // decode les jeux, si le module jeux/lejeu.php est present
     194// decode les jeux si les modules jeux/lejeu.php sont presents
    193195// retourne la liste des jeux trouves et inclut la bibliotheque si $indexJeux existe
    194196function jeux_decode_les_jeux(&$texte, $indexJeux=NULL) {
     
    325327}
    326328
    327 // pour obtenir un bloc depliable
     329// renvoie un bloc depliable
    328330function jeux_block_depliable($texte, $block) {
    329331 if (!strlen($texte)) return '';
     
    331333}
    332334
     335// renvoie le couple array(id, name) pour construire un input
     336// les index doivent etre positifs
     337function jeux_idname($indexJeux, $index=-1, $prefixe='', $index2=-1, $prefixe2='') {
     338        $indexJeux = 'reponses' . $indexJeux;
     339        if($index<0) return array($indexJeux, $indexJeux);
     340        if($index2<0) return array($indexJeux.'-'.$prefixe.$index, $indexJeux.'['.$prefixe.$index.']');
     341        return array($indexJeux.'-'.$prefixe.$index.'-'.$prefixe2.$index2, $indexJeux.'['.$prefixe.$index.']['.$prefixe2.$index2.']');
     342}
     343
     344// renvoie la reponse trimee du formulaire (NULL si n'existe pas)
     345function jeux_form_reponse($indexJeux, $index=-1, $prefixe='', $index2=-1, $prefixe2='') {
     346        $reponse = _request('reponses'.$indexJeux);
     347        if($index>=0 && is_array($reponse)) $reponse = isset($reponse[$prefixe.$index])?$reponse[$prefixe.$index]:NULL;
     348        if($index2>=0 && is_array($reponse)) $reponse = isset($reponse[$prefixe2.$index2])?$reponse[$prefixe2.$index2]:NULL;
     349        if(is_string($reponse) && strlen($reponse)) $reponse = trim($reponse);
     350        return $reponse;
     351}
     352
     353// indique si on doit corriger ou non
     354function jeux_form_correction($indexJeux) {
     355        return intval(_request('correction'.$indexJeux))?true:false;
     356}
     357
    333358// deux fonctions qui encadrent un jeu dans un formulaire
    334359function jeux_form_debut($name, $indexJeux, $class="", $method="post", $action="") {
     360        $id_jeu = intval(jeux_config('id_jeu'));
     361        $cvt = jeux_config('jeu_cvt')?'oui':'non';
     362        $hidden = "<div><input type='hidden' name='id_jeu' value='$id_jeu' />\n"
     363                ."<input type='hidden' name='debut_index_jeux' value='$GLOBALS[debut_index_jeux]' />\n"
     364                ."<input type='hidden' name='index_jeux' value='$indexJeux' />\n"
     365                ."<input type='hidden' name='correction$indexJeux' value='1' /></div>\n";
     366        if(jeux_config('jeu_cvt')) return $hidden;
    335367        if (strlen($name)) $name=" id='$name$indexJeux'";
    336368        if (strlen($class)) $class=" class='$class'";
    337369        if (strlen($method)) $method=" method='$method'";
    338370        /*if (strlen($action))*/ $action=" action='$action#JEU$indexJeux'";
    339         $id_jeu = intval(jeux_config('id_jeu'));
    340         return "\n<form".$name.$class.$method.$action." >\n"
    341                 ."<div><input type='hidden' name='id_jeu' value='$id_jeu' />\n"
    342                 ."<input type='hidden' name='debut_index_jeux' value='{$GLOBALS['debut_index_jeux']}' />\n"
    343                 ."<input type='hidden' name='index_jeux' value='$indexJeux' />\n"
    344                 ."<input type='hidden' name='var_correction_$indexJeux' value='1' /></div>\n";
     371        return "\n<form".$name.$class.$method.$action." >\n".$hidden;
    345372}
    346373function jeux_form_fin() {
    347         return "\n</form>\n";
     374        return jeux_config('jeu_cvt')?'':"\n</form>\n";
    348375}
    349376
  • _plugins_/jeux/branches/jeux2/paquet.xml

    r64727 r64877  
    22        prefix="jeux"
    33        categorie="divers"
    4         version="2.4.2"
     4        version="2.5.0"
    55        etat="test"
    66        compatibilite="[3.0.0;3.0.99]"
  • _plugins_/jeux/branches/jeux2/plugin.xml

    r64727 r64877  
    33        <slogan>Des jeux avec SPIP !</slogan>
    44        <etat>test</etat>
    5         <version>2.4.2</version>
     5        <version>2.5.0</version>
    66        <icon>img/jeux-48.png</icon>
    77        <auteur>Patrice VANNEUFVILLE, Ma&#239;eul Rouquette</auteur>
Note: See TracChangeset for help on using the changeset viewer.