Browse Source

Quelques warnings en moins

QRM : possibilité d'afficher une précision lors de la correction.
Exemple :
R1 R2|précision si la réponse est juste|précision si la réponse est fause
Ou :
R1 R2|précision si le nombre de réponses est correct (juste ou fausses peu importe)
master v3.5.6
patrice4 1 year ago
parent
commit
47ff88780c
  1. 78
      jeux/qcm.php
  2. 4
      jeux/relier.php
  3. 5
      lang/jeux_fr.php
  4. 2
      paquet.xml
  5. 18
      styles/qcm.css

78
jeux/qcm.php

@ -127,36 +127,48 @@ function qcm_analyse_le_qcm(&$qcms, $qcm, $indexQCM, $isQRM) {
}
break;
case 'R' : // recuperer le numero et les points de la bonne reponse
// Pour les precisions de la reponse...
list($li, $precisionJuste, $precisionFausse) = array_pad(explode('|', $li, 3), 3, '');
// total des points des bonnes reponses
$qcms[$indexQCM]['maxScore'] = 0;
$qcms[$indexQCM]['maxScore'] = $points = 0;
// parcours des bonnes reponses
$t = preg_split(',\s+R,', ' '.$li);
for ($i=1;$i<count($t);$i++) if (preg_match(',^(\d+),', $t[$i], $regs)) {
for ($i=1; $i<count($t); $i++) if (preg_match(',^(\d+),', $t[$i], $regs)) {
$indexBonneReponse = intval($regs[1]);
$qcms[$indexQCM]['bonnesreponses'][$indexBonneReponse]=1;
// au cas ou les points ne sont pas specifies pour la bonne reponse
if ($qcms[$indexQCM]['points'][$indexBonneReponse]===false) $qcms[$indexQCM]['points'][$indexBonneReponse] = 1;
if (isset($qcms[$indexQCM]['points'])) {
if ($qcms[$indexQCM]['points'][$indexBonneReponse]===false)
$qcms[$indexQCM]['points'][$indexBonneReponse] = 1;
$points = $qcms[$indexQCM]['points'][$indexBonneReponse];
}
// reponse unique : recherche du plus grand score attribue aux bonnes reponses
// reponses multiples : addition de tous les scores attribues aux bonnes reponses
$p = $qcms[$indexQCM]['points'][$indexBonneReponse];
if (!$isQRM) $qcms[$indexQCM]['maxScore'] = max($qcms[$indexQCM]['maxScore'], $p);
elseif($p>0) $qcms[$indexQCM]['maxScore'] += $p;
if (!$isQRM)
$qcms[$indexQCM]['maxScore'] = max($qcms[$indexQCM]['maxScore'], $points);
elseif ($points > 0)
$qcms[$indexQCM]['maxScore'] += $points;
}
// les reponses fausses deviennent negatives dans le cas de reponses multiples
if ($isQRM)
if ($isQRM && isset($qcms[$indexQCM]['points']))
foreach($qcms[$indexQCM]['points'] as $p=>$v)
if ($v===false) $qcms[$indexQCM]['points'][$p] = -1;
// les precisions (reponse juste/fausse) eventuelles...
if($precisionFausse) {
$qcms[$indexQCM]['precisionsReponse'] = array(trim($precisionJuste), trim($precisionFausse));
} else if($precisionJuste)
$qcms[$indexQCM]['precisionsReponse'] = trim($precisionJuste);
break;
default : break;
}
} // foreach($lignes)
} // function qcm_analyse_le_qcm()
function qcm_les_points($phrase, $points, $veto=false) {
function qcm_les_points($phrase, $points, $veto = false) {
if (!jeux_config('points') || $veto || $points===false) return $phrase;
$pointsHTML = '<span class="jeux_points"> ('.$points. _T('jeux:point'.(abs($points)>1?'s':'')).')</span>';
if (preg_match(',((?:\xc2\xa0| )?: *)$,', $phrase, $regs))
$phrase = substr_replace($phrase, $pointsHTML, strlen($phrase)-strlen($regs[1]), 0);
$phrase = substr_replace($phrase, $pointsHTML, strlen($phrase) - strlen($regs[1]), 0);
else $phrase .= $pointsHTML;
return $phrase;
}
@ -180,7 +192,7 @@ function qcm_affiche_la_question(&$qcms, $indexJeux, $indexQCM, $gestionPoints)
// affichage des points dans la question
if ($gestionPoints) {
$pointsQ = $qcms[$indexQCM]['maxScore'];
$question = qcm_les_points($question, $pointsQ);
$question = qcm_les_points($question, $pointsQ);
} else $pointsQ = 1;
$codeHTML = "<div class='qcm_element'><div class='jeux_question'>".definir_puce().$question.'</div>';
@ -216,7 +228,8 @@ function qcm_affiche_la_question(&$qcms, $indexJeux, $indexQCM, $gestionPoints)
} else {
// affichage du jeu avec correction
$reponse = jeux_form_reponse($indexJeux, $indexQCM, 'Q');
$bonneReponse = false; $qrm_score = 0;
$bonneReponse = $estCeIncomplet = false;
$nbReponsesJustes = $qrm_score = 0;
if($reponse) {
// chaque question est-elle corrigee ?
$affiche_correction = jeux_config('corrections');
@ -264,7 +277,7 @@ function qcm_affiche_la_question(&$qcms, $indexJeux, $indexQCM, $gestionPoints)
if ($affichage) $codeHTML.="<div class=\"qcm_precision\">$prec</div>";
}
} else foreach($reponse as $r) {
// ici : une question a reponses multiples
// ici : un qrm (question a reponses multiples)
// la reponse donnee & precision des points de la mauvaise reponse...
$codeHTML.='<div class="qcm_reponse">'
.qcm_les_points($intro, $qcms[$indexQCM]['points'][$r], !$affiche_correction)
@ -272,7 +285,8 @@ function qcm_affiche_la_question(&$qcms, $indexJeux, $indexQCM, $gestionPoints)
.'</div>';
// bonne reponse
$bonneReponse = $qcms[$indexQCM]['bonnesreponses'][$r]==1;
$bonneReponse = isset($qcms[$indexQCM]['bonnesreponses'][$r]) && $qcms[$indexQCM]['bonnesreponses'][$r] == 1;
if($bonneReponse) $nbReponsesJustes++;
// donner les points de la reponse quoiqu'il arrive
$qcms['score_du_qcm'] += $qcms[$indexQCM]['points'][$r];
@ -285,9 +299,26 @@ function qcm_affiche_la_question(&$qcms, $indexJeux, $indexQCM, $gestionPoints)
._T('jeux:reponse'.($bonneReponse?'Juste':'Fausse')).'</span></div>';
// les precisions eventuelles
$prec = $qcms[$indexQCM]['precisions'][$r];
if (strlen($prec)) $codeHTML.="<div class=\"qcm_precision\">$prec</div>";
if (strlen($prec)) $codeHTML .= "<div class=\"qcm_precision\">$prec</div>";
}
} // foreach($reponse)
// manque-t-il des reponses dans le cas du qrm ?
$estCeIncomplet = is_array($reponse) && count($reponse) > 1
&& count($reponse) != count($qcms[$indexQCM]['bonnesreponses']);
if($estCeIncomplet)
$codeHTML .= '<div class="qcm_reponse qcm_reponse_finale"><span class="qcm_correction_incomplet">'
._T('jeux:reponseIncomplete').'</span></div>';
elseif(isset($qcms[$indexQCM]['precisionsReponse'])) {
// ici on affiche les precisions eventuelles
$toutEstBon = $nbReponsesJustes == count($reponse);
if(count($reponse)>1)
$codeHTML .= '<div class="qcm_reponse qcm_reponse_finale"><span class="qcm_correction_finale_'.($toutEstBon?'correcte':'incorrecte').'">'
._T('jeux:vos_choix_'.($toutEstBon?'OK':'KO')).'</span></div>';
$prec = &$qcms[$indexQCM]['precisionsReponse'];
if(is_array($prec))
$prec = $toutEstBon ? $prec[0] : $prec[1];
if(strlen($prec)) $codeHTML .= "<div class=\"qcm_precision\">$prec</div>";
}
// fin de l'affichage de la reponse
} else {
@ -298,6 +329,7 @@ function qcm_affiche_la_question(&$qcms, $indexJeux, $indexQCM, $gestionPoints)
// afficher les bonnes reponses si la configuration l'autorise
if (jeux_config('solution')) {
$precisionReponse = '';
if (!$qrm && !$bonneReponse) {
// s'occuper d'abord des qcm et des trous
$codeHTML .= '<div class="qcm_reponse">'._T('jeux:bonneReponse').'&nbsp;';
@ -308,24 +340,29 @@ function qcm_affiche_la_question(&$qcms, $indexJeux, $indexQCM, $gestionPoints)
foreach($qcms[$indexQCM]['bonnesreponses'] as $i=>$val) if ($qcms[$indexQCM]['bonnesreponses'][$i]==1) {
$prec = $qcms[$indexQCM]['precisions'][$i];
$temp[] = $qcms[$indexQCM]['propositions'][$i]
. (strlen($prec)?"<div class=\"qcm_precision\">$prec</div>":'<br />');
. (strlen($prec) ? "<div class=\"qcm_precision\">$prec</div>" : '<br />');
}
$codeHTML .= implode(' '._T('jeux:ou').' ', jeux_filtre_preg($temp));
}
$codeHTML.='</div>';
} elseif($qrm && $qrm_score<>$qcms[$indexQCM]['maxScore']) {
} elseif($qrm && $qrm_score <> $qcms[$indexQCM]['maxScore']) {
// s'occuper ensuite des qrm
$temp = array();
foreach($qcms[$indexQCM]['bonnesreponses'] as $i=>$val) {
if (!is_array($reponse) || !in_array($i, $reponse)) {
$prec = $qcms[$indexQCM]['precisions'][$i];
$temp[] = '<div class="qcm_reponse">&nbsp;&#8226;&nbsp;'
. qcm_les_points($qcms[$indexQCM]['propositions'][$i], $qcms[$indexQCM]['points'][$i]).'</div>'
. (strlen($prec)?"<div class=\"qcm_precision\">$prec</div>":'<br />');
. qcm_les_points($qcms[$indexQCM]['propositions'][$i], $qcms[$indexQCM]['points'][$i]) . '</div>'
. (strlen($prec) ? "<div class=\"qcm_precision\">$prec</div>" : '<br />');
}
}
if (count($temp)) $codeHTML.='<div class="qcm_reponse"><span class="qcm_correction_juste">'._T('jeux:correction').'</span></div>'.implode($temp);
if (count($temp))
$codeHTML .= '<div class="qcm_reponse"><span class="qcm_correction_juste">'
. _T('jeux:correction') . '</span></div>'
. implode($temp);
}
// reponseIncomplete
} // jeux_config('solution')
$codeHTML.='<br /></div>';
@ -371,7 +408,8 @@ function jeux_qcm($texte, $indexJeux, $form=true) {
$html .= "<ATTENTE_QCM>$indexQCM</ATTENTE_QCM>";
// analyser le QCM
qcm_analyse_le_qcm($qcms, $tableau[$i+1], $indexQCM, $valeur==_JEUX_QRM);
$qcms['totalPropositions'] += count($qcms[$indexQCM]['propositions']);
if(isset($qcms[$indexQCM]['propositions']))
$qcms['totalPropositions'] += count($qcms[$indexQCM]['propositions']);
$qcms['totalScore'] += $qcms[$indexQCM]['maxScore'];
$indexQCM++;
}

4
jeux/relier.php

@ -176,13 +176,13 @@ function jeux_relier($texte, $indexJeux, $form = true) {
foreach($gauche as $i => &$val) {
$val = array(
'index' => $i + 1,
'data' => "<div data-nbL=\"$i\">" . relier_safe($val) . "</div>",
'data' => "<div data-left=\"$i\">" . relier_safe($val) . "</div>",
);
}
foreach($droite as $i => &$val) {
$val = array(
'index' => $i + 1,
'data' => "<div data-nbR=\"$i\">" . relier_safe($val) . "</div>",
'data' => "<div data-right=\"$i\">" . relier_safe($val) . "</div>",
);
}

5
lang/jeux_fr.php

@ -79,6 +79,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'rejouer' => 'Rejouer',
'reponse' => 'Réponse',
'reponseFausse' => 'La réponse est fausse',
'reponseIncomplete' => 'Il manque des réponses à cette question',
'reponseJuste' => 'La réponse est juste',
'reponseNulle' => 'Vous n’avez pas répondu',
'resultat' => 'Résultat',
@ -128,5 +129,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'voir_jeu' => 'Voir le jeu',
'voir_resultats' => 'Voir les résultats',
'votre_choix' => 'Votre choix : ',
'vos_choix_OK' => 'Vos choix sont corrects',
'vos_choix_KO' => 'Vos choix sont incorrects',
'votre_choix_OK' => 'Votre choix est correct',
'votre_choix_KO' => 'Votre choix est incorrect',
'votre_reponse' => 'Votre réponse : '
);

2
paquet.xml

@ -1,7 +1,7 @@
<paquet
prefix="jeux"
categorie="divers"
version="3.5.5"
version="3.5.6"
etat="stable"
compatibilite="[3.0.0;4.0.*]"
logo="prive/themes/spip/images/jeux-48.png"

18
styles/qcm.css

@ -43,19 +43,29 @@
.qcm_correction_faux{
background-color: red;
color: #FFEADE;
font-weight: bold;
padding-right: 0.5em;
padding-left: 0.5em;
font-weight:normal;
font-weight: normal;
}
.qcm_correction_juste{
background-color: green;
color: #FFEADE;
font-weight: bold;
padding-right: 0.5em;
padding-left: 0.5em;
font-weight:normal;
font-weight: normal;
}
.qcm_correction_incomplet{
background-color: orange;
color: #FFEADE;
padding-right: 0.5em;
padding-left: 0.5em;
font-weight: normal;
}
.qcm_reponse_finale {
margin-top: 0.5em;
}
.qcm_correction_null{

Loading…
Cancel
Save