Changeset 26784 in spip-zone


Ignore:
Timestamp:
Feb 21, 2009, 5:27:12 AM (10 years ago)
Author:
patfr@…
Message:
  • Passage du score d'un jeu en fonds surchargeable : fonds/jeu_score.html
  • Passage des exercices à trous en fonds surchargeable : jeux/trous.html
  • Séparateur [score] fonctionnel pour les QCM et les trous : voir "Commentaires de scores" sur http://www.spip-contrib.net/Des-jeux-dans-vos-articles
  • Nouvelle config par défaut pour les trous : solution=non
Location:
_plugins_/_stable_/jeux
Files:
2 added
6 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/_stable_/jeux/jeux.css.html

    r26503 r26784  
    6666}
    6767
     68.jeux_bouton_reset{
     69        text-align:right;
     70}
     71
    6872.jeux_input{
    6973 color:#3F5264;
     
    8185 padding:3px;
    8286 margin:0 auto;
     87}
     88
     89.jeux_commentaire_score {
     90 margin:1em auto 0.5em;
     91 text-align:left;
     92 font-size: 80%;
     93 width:90%;
     94 border: 1px dotted #3F5264;
     95 padding: .2em;
     96}
     97
     98.jeux_indices {
     99 text-align:center;
    83100}
    84101
  • _plugins_/_stable_/jeux/jeux/qcm.php

    r26517 r26784  
    1616
    1717separateurs obligatoires : [qcm], [qrm] ou [quiz]
    18 separateurs optionnels   : [titre], [texte], [config]
     18separateurs optionnels   : [titre], [texte], [config], [score]
    1919parametres de configurations par defaut :
    2020        trou=auto // taille du trou affiche en cas de proposition unique
     
    302302}
    303303
    304 function qcm_afficher_commentaire($categ, $score, $total) {
    305         if(!categ) return '';
    306         $categ = preg_split(',(^|\n|\r)\s*([0-9]+)(%|pt|pts)\s*:,', trim($categ), -1, PREG_SPLIT_DELIM_CAPTURE);
    307         for($i=2; $i<count($categ); $i+=4) {
    308                 $limite = $categ[$i+1]=='%'?$total*$categ[$i]/100:$categ[$i];
    309                 if($score<=$limite)
    310                         return '<br /><div class="qcm_precision">'.$categ[$i+2].'</div>';
    311         }
    312 }
    313 
    314304function qcm_inserer_les_qcm(&$chaine, $indexJeux, $gestionPoints) {
    315305  global $qcms;
     
    370360  if (!isset($_POST["var_correction_".$indexJeux])) {
    371361        $tete .= jeux_form_debut('qcm', $indexJeux);
    372         $pied = '<br /><div align="center"><input type="submit" value="'._T('jeux:corriger').'" class="jeux_bouton"></div>'.jeux_form_fin();
     362        $pied = '<br /><div style="text-align:center;"><input type="submit" value="'._T('jeux:corriger').'" class="jeux_bouton"></div>'.jeux_form_fin();
    373363  } else {
    374       $pied = jeux_afficher_score($qcm_score, $qcms['totalscore'], $_POST['id_jeu'], join(', ', $qcm_score_detaille))
    375                         . qcm_afficher_commentaire($categ_score, $qcm_score, $qcms['totalscore'])
     364      $pied = jeux_afficher_score($qcm_score, $qcms['totalscore'], $_POST['id_jeu'], join(', ', $qcm_score_detaille), $categ_score)
    376365                        . jeux_bouton_reinitialiser();
    377366  }
  • _plugins_/_stable_/jeux/jeux/trous.php

    r26554 r26784  
    1717
    1818separateurs obligatoires : [texte], [trou]
    19 separateurs optionnels   : [titre], [config]
     19separateurs optionnels   : [titre], [config], [score]
    2020parametres de configurations par defaut :
    2121        taille=auto     // taille des trous
    2222        indices=oui     // afficher les indices ?
    2323        couleurs=oui // appliquer des couleurs sur les corrections ?
     24        solution=non // donne la(les) bonne(s) reponse(s) lors de la correction
     25
    2426
    2527Exemple de syntaxe dans l'article :
     
    5658        par ex. : "la France/M" (ou : la+France/M)
    5759Pour une expression reguliere, utiliser les guillemets et
    58 les virgules pour separateur :
     60les virgules comme separateur :
    5961        par ex. : ",stylo(graphe)?,"
    6062A propos de la casse, voici des expressions equivalentes :
     
    7375        $mots = $propositionsTROUS[$indexTrou];
    7476        $prop = trim($_POST[$nomVarSelect]);
    75         $disab = $color = '';
     77        $oups = $disab = $color = '';
    7678        // en cas de correction
    7779        if($corriger) {
     
    7981                if($ok) ++$scoreTROUS;
    8082                if(jeux_config('couleurs')) $color = $ok?' juste':' faux';
     83                if(!$ok && jeux_config('solution')) {
     84                        if(!strlen($prop)) $prop = '&nbsp; &nbsp;';
     85                        $oups = "<span class='faux barre'>$prop</span>";
     86                        $prop = trous_liste_reponses($mots);
     87                        $size = strlen($prop);
     88                        $color = ' juste';
     89                }
     90//$solution = ' <span class="juste">('.trous_liste_reponses($mots).')</span> ';
    8191                // on renseigne le resultat detaille
    8292                $score_detailTROUS[] = 'T'.($indexTrou+1).":$prop:".($ok?'1':'0');
     
    8595        $codeHTML = "<input name='$nomVarSelect' class='jeux_input trous$color' size='$size' type='text'$disab' value=\"$prop\" />";
    8696//      if($corriger) $codeHTML .= '(T'.($indexTrou+1).":$prop/".$GLOBALS['meta']['charset']."[".join('|',$mots)."]:".($ok?'1':'0').'pt)';
    87         return $codeHTML;
     97        return $oups . $codeHTML;
    8898}
    8999
    90100function trous_inserer_les_trous($chaine, $indexJeux) {
    91   global $propositionsTROUS;
    92   if (ereg('<ATTENTE_TROU>([0-9]+)</ATTENTE_TROU>', $chaine, $eregResult)) {
     101        global $propositionsTROUS;
     102        if (ereg('<ATTENTE_TROU>([0-9]+)</ATTENTE_TROU>', $chaine, $eregResult)) {
    93103        $indexTROU = intval($eregResult[1]);
    94104        list($texteAvant, $texteApres) = explode($eregResult[0], $chaine, 2);
     
    100110                . jeux_rem('TROU-FIN', $indexTROU, '', 'span')
    101111                . $texteApres;
    102   }
    103   return $chaine;
     112        }
     113        return $chaine;
    104114}
    105115
    106 // afficher l'ensemble des solutions dans le desordre...
     116// renvoyer l'ensemble des solutions dans le desordre...
    107117// si plusieurs solutions sont possibles, seule la premiere est retenue
    108118function trous_afficher_indices($indexJeux) {
    109  global $propositionsTROUS;
    110  foreach ($propositionsTROUS as $prop)
    111         $indices[] = strpos($prop[0], '/M')===($len=strlen($prop[0])-2) ?substr($prop[0],0,$len):$prop[0];
    112  shuffle($indices);
    113  return '<br/>'.jeux_block_depliable(_T('jeux:indices'), '<center>'.charset2unicode(join(' -&nbsp;', $indices)).'</center>');
     119        global $propositionsTROUS;
     120        foreach ($propositionsTROUS as $prop)
     121                $indices[] = strpos($prop[0], '/M')===($len=strlen($prop[0])-2) ?substr($prop[0],0,$len):$prop[0];
     122        shuffle($indices);
     123        return '<div class="jeux_indices">'.charset2unicode(join(' -&nbsp;', $indices)).'</div>';
     124}
     125
     126// revoyer une liste de reponses possibles
     127function trous_liste_reponses($mots) {
     128        $reponses = array(); $etc = '';
     129        foreach ($mots as $mot) {
     130                if(substr($mot,0,1)===',') $etc = 'etc.';
     131                 else $reponses[] = strpos($mot, '/M')===($len=strlen($mot)-2) ?substr($mot,0,$len):$mot;
     132        }
     133        return join(' / ', $reponses) . $etc;
    114134}
    115135
    116136function jeux_trous($texte, $indexJeux) {
    117   global $propositionsTROUS, $scoreTROUS, $score_detailTROUS;
    118   $titre = $html = false;
    119   $indexTrou = $scoreTROUS = 0;
    120   $score_detailTROUS = array();
    121 
    122   // parcourir tous les #SEPARATEURS
    123   $tableau = jeux_split_texte('trous', $texte);
    124   // configuration par defaut
    125   jeux_config_init("
     137        global $propositionsTROUS, $scoreTROUS, $score_detailTROUS;
     138        $titre = $html = false;
     139        $indexTrou = $scoreTROUS = 0;
     140        $score_detailTROUS = array();
     141       
     142        // parcourir tous les #SEPARATEURS
     143        $tableau = jeux_split_texte('trous', $texte);
     144        // configuration par defaut
     145        jeux_config_init("
    126146        taille=auto     // taille des trous
    127147        indices=oui     // afficher les indices ?
    128148        couleurs=oui    // afficher les indices ?
     149        solution=non // donne la(les) bonne(s) réponse(s) lors de la correction
    129150  ", false);
    130151  foreach($tableau as $i => $valeur) if ($i & 1) {
    131152         if ($valeur==_JEUX_TITRE) $titre = $tableau[$i+1];
    132153          elseif ($valeur==_JEUX_TEXTE) $html .= $tableau[$i+1];
     154          elseif ($valeur==_JEUX_SCORE) $categ_score = $tableau[$i+1];
    133155          elseif ($valeur==_JEUX_TROU) {
    134156                // remplacement des trous par : <ATTENTE_TROU>ii</ATTENTE_TROU>
     
    137159                $indexTrou++;
    138160          }
    139   }
    140 
    141    // reinserer les trous mis en forme
    142   $texte = trous_inserer_les_trous($html, $indexJeux);
    143 
    144   $tete = '<div class="jeux_cadre">' . ($titre?'<div class="jeux_titre">'.$titre.'<hr /></div>':'');
    145   $pied = jeux_config('indices')?trous_afficher_indices($indexJeux):'';
    146 
    147   if (!isset($_POST["var_correction_".$indexJeux])) {
    148         $tete .= jeux_form_debut('trous', $indexJeux);
    149         $pied .= '<br /><div align="center"><input type="submit" value="'._T('jeux:corriger').'" class="jeux_bouton"></div>'.jeux_form_fin();
    150   } else {
    151       // On ajoute le score final
    152             sort($score_detailTROUS);
    153         $pied .= jeux_afficher_score($scoreTROUS, $indexTrou, $_POST['id_jeu'], join(', ', $score_detailTROUS))
    154                         . jeux_bouton_recommencer();
    155   }
    156  
    157   unset($propositionsTROUS, $scoreTROUS, $score_detailTROUS);
    158   return $tete.$texte.$pied.'</div>';
     161        }
     162        // reinserer les trous mis en forme
     163        $texte = trous_inserer_les_trous($html, $indexJeux);
     164        // correction ?
     165        $correction = isset($_POST["var_correction_".$indexJeux]);
     166        if($correction) sort($score_detailTROUS);
     167        // recuperation du fond 'jeux/trous.html'
     168        include_spip('public/assembler');
     169        $fond = recuperer_fond('jeux/trous',
     170                array('id_jeu' => $_POST['id_jeu'], 'titre' => $titre,
     171                        'texte' => $texte, 'correction' => $correction,
     172                        'indices' => jeux_config('indices')?trous_afficher_indices($indexJeux):'',
     173                        'fond_score' => !$correction?''
     174                                :jeux_afficher_score($scoreTROUS, $indexTrou, $_POST['id_jeu'], join(', ', $score_detailTROUS), $categ_score),
     175                )
     176        );
     177        // mise en place du formulaire
     178        $fond = str_replace(
     179                array('@@FORM_JEUX_DEBUT@@', '@@FORM_JEUX_FIN@@'),
     180                $correction?'':array(jeux_form_debut('trous', $indexJeux), jeux_form_fin()),
     181                $fond
     182        );
     183        // nettoyage
     184        unset($propositionsTROUS, $scoreTROUS, $score_detailTROUS);
     185        return $fond;
    159186}
    160187?>
  • _plugins_/_stable_/jeux/jeux_config.php

    r26427 r26784  
    6666        'textes' => array(_JEUX_TITRE, _JEUX_TEXTE, _JEUX_POESIE, _JEUX_CITATION, _JEUX_BLAGUE, _JEUX_AUTEUR, _JEUX_RECUEIL),
    6767        'devinettes' => array(_JEUX_TITRE, _JEUX_TEXTE, _JEUX_DEVINETTE, _JEUX_CHARADE, _JEUX_REPONSE, _JEUX_CONFIG),
    68         'trous' => array(_JEUX_TITRE, _JEUX_TEXTE, _JEUX_TROU, _JEUX_CONFIG),
     68        'trous' => array(_JEUX_TITRE, _JEUX_TEXTE, _JEUX_TROU, _JEUX_CONFIG, _JEUX_SCORE),
    6969        'pendu' => array(_JEUX_TITRE, _JEUX_TEXTE, _JEUX_PENDU, _JEUX_CONFIG),
    7070        'diag_echecs' => array(_JEUX_TITRE, _JEUX_TEXTE, _JEUX_DIAG_ECHECS, _JEUX_CONFIG),
  • _plugins_/_stable_/jeux/jeux_utils.php

    r26517 r26784  
    123123
    124124// retourne la boite de score
    125 function jeux_afficher_score($score, $total, $id_jeu=false, $resultat_long='') {
     125function jeux_afficher_score($score, $total, $id_jeu=false, $resultat_long='', $categories='') {
    126126        if ($id_jeu){
    127127                // ici, #CONTENU est passe par le filtre |ajoute_id_jeu{#ID_JEU}
     
    129129                jeux_ajouter_resultat($id_jeu, $score, $total, $resultat_long);
    130130        }
    131         return '<div class="jeux_score">'._T('jeux:score')
    132                                 . "&nbsp;$score&nbsp;/&nbsp;".$total.'<br />'
    133                                 . ($score==$total?_T('jeux:bravo'):'').'</div>';
     131        include_spip('public/assembler');
     132        return recuperer_fond('fonds/jeu_score',
     133                array('id_jeu'=>$id_jeu, 'score'=>$score, 'total'=>$total,
     134                        'resultat_long'=>$resultat_long,
     135                        'commentaire'=>jeux_commentaire_score($categories, $score, $total)
     136                )
     137        );
     138}
     139
     140function jeux_commentaire_score($categ, $score, $total) {
     141        if(!strlen(categ)) return '';
     142        $score = intval($score);
     143        $total = intval($total);
     144        $res = false;
     145        $categ = preg_split(',(^|\n|\r)\s*([0-9]+[.\,]?[0-9]*)(%|pt|pts)\s*:,', trim($categ), -1, PREG_SPLIT_DELIM_CAPTURE);
     146        for($i=2; $i<count($categ); $i+=4) {
     147                $mini = $categ[$i+1]=='%'?$total*$categ[$i]/100:$categ[$i];
     148                if($score > $total) $res=false;
     149                elseif($score >= $mini) $res = $i+2;
     150                else break;
     151        }
     152        return $res===false?'':$categ[$res];
    134153}
    135154
    136155// fonctions qui retournent des boutons
    137156function jeux_bouton_reinitialiser() {
    138         return '<div class="jeux_bouton_corriger" align="right">[ <a href="'
    139          . parametre_url(self(),'var_mode','recalcul').'">'._T('jeux:reinitialiser').'</a> ]</div>';
     157        return '<div class="jeux_bouton_reset">&#091; <a href="'
     158         . parametre_url(self(),'var_mode','recalcul').'">'._T('jeux:reinitialiser').'</a> &#093;</div>';
    140159}
    141160function jeux_bouton_recommencer() {
    142         return '<div class="jeux_bouton_corriger" align="right">[ <a href="'
    143          . parametre_url(self(),'var_mode','recalcul').'">'._T('jeux:recommencer').'</a> ]</div>';
     161        return '<div class="jeux_bouton_reset">&#091; <a href="'
     162         . parametre_url(self(),'var_mode','recalcul').'">'._T('jeux:recommencer').'</a> &#093;</div>';
    144163}
    145164
  • _plugins_/_stable_/jeux/plugin.xml

    r26495 r26784  
    22        <nom>Des jeux dans vos articles</nom>
    33        <etat>test</etat>
    4         <version>1.6</version>
     4        <version>1.7</version>
    55        <icon>img/jeux-48.png</icon>
    66        <auteur>Patrice VANNEUFVILLE
Note: See TracChangeset for help on using the changeset viewer.