Le problème c'est que la note ne prend pas en considération les points négatifs....et faussent donc mon résultat final....Mais on peut récupérer la somme des points qui eux représentent le vrai score de l'apprenant au QCM.Il y a effectivement un problème avec ce type de questions C2I....
1) Moodle calcule correctement la note 'brute' de chaque question éventuellement négative et stocke cette information telle quelle en BD dans la table mdl_questions_states
2) Malheureusement en calculant la note finale, comme la somme des
notes individuelles aux questions, il ignore les notes négatives ... puisque par hypothèse Moodle ne supporte pas les notes <0 ( le type de question C2I était une tentative pour l'en convaincre mais ...)
3) la fonction coupable est celle-ci, definie dans lib/questionlib.php, utilisé lors du calcul de la note finale comme la somme des notes brutes + les eventuelles pénalités
/**
* Applies the penalty from the previous graded responses to the raw grade
* for the current responses
*
* The grade for the question in the current state is computed by subtracting the
* penalty accumulated over the previous graded responses at the question from the
* raw grade. If the timestamp is more than 1 minute beyond the end of the attempt
* the grade is set to zero. The ->grade field of the state object is modified to
* reflect the new grade but is never allowed to decrease.
* @param object $question The question for which the penalty is to be applied.
* @param object $state The state for which the grade is to be set from the
* raw grade and the cumulative penalty from the last
* graded state. The ->grade field is updated by applying
* the penalty scheme determined in $cmoptions to the ->raw_grade and
* ->last_graded->penalty fields.
* @param object $cmoptions The options set by the course module.
* The ->penaltyscheme field determines whether penalties
* for incorrect earlier responses are subtracted.
*/
function question_apply_penalty_and_timelimit(&$question, &$state, $attempt, $cmoptions) {
a la fin de cette fonction on a le code suivant :
// Ensure that the grade does not go down
$state->grade = max($state->grade, $state->last_graded->grade);
}
ce qui a pour effet de ramener à 0 toute note brute négative juste avant l'addition... (au moins la 1ere fois puisqu'alors $state->last_graded->grade est 0 ! ) et c'est ce que stocke Moodle dans la table mdl_quiz_attempts
J'ai pu corriger cela sur mon instance de test avec la modif suivante
// Ensure that the grade does not go down
// pose probleme avec c2iquestion remet tout a 0 si <0
if ($question->qtype !='c2iquestion')
$state->grade = max($state->grade, $state->last_graded->grade);
}
il vous faudra alors 'renoter' le test pour voir enfin apparaitre les notes négatives 'par question' et une somme qui peut être aussi négative ... voir copie d'écran...
en toute rigueur on devrait alors réajuster à 0 la note finale si <0 ...
Curieusement (et heureusement), la note qui apparait dans le carnet de notes reste à 0 ....
Il ne semble au final que je devrais retirer ce type de question C2I qui semble pas mal perturber le fonctionnement et oblige à des patches dans le 'core' de Moodle, ce que je n'aime vraiment pas ...
Désole.