]> _ Git - fluidbook-toolbox.git/commitdiff
wip #6184 @0:25
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Fri, 28 Jul 2023 16:11:07 +0000 (18:11 +0200)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Fri, 28 Jul 2023 16:11:07 +0000 (18:11 +0200)
resources/quizv2/js/quiz.score.js

index b06e28a89452bb16c9c47c361c699b8e6b1ae5b0..2120abe9596440d94258252e571f599e5a883874 100644 (file)
@@ -3,6 +3,7 @@ const $ = require("cash-dom");
 function QuizScore(quiz) {
     this.quiz = quiz;
     this.logQuestions = [];
+    // Le score global du quiz
     this.score = 0;
     this.questionStatus = [];
     this.answers = [];
@@ -19,7 +20,6 @@ QuizScore.prototype = {
         this.lastAnsweredQuestion = questionIndex;
         this.answers[questionIndex] = answers;
         this.updateScore();
-        return this.questionStatus
     },
 
     checkQuestion: function (questionIndex) {
@@ -32,10 +32,37 @@ QuizScore.prototype = {
             'count': count,
         };
 
-        let answersStatus=[];
+        let answersStatus = [];
+        let userAnswers = this.answers[questionIndex];
 
-        if (question.multiple) {
+        let $this = this;
+        if (question.type === 'multiple') {
+            // Le score de la question
             let min_score = this.getMinScore(question);
+            let this_score = 0;
+            $.each(question.answers, function (answerIndex, answer) {
+                let checkedByUser = userAnswers.indexOf(answerIndex) >= 0;
+                if (answer.correct === 1) {
+                    if (checkedByUser) {
+                        // C'est une bonne réponse et elle a été cochée par l'utilisateur
+                        this_score += answer.score;
+                        answersStatus[answerIndex] = 'ok';
+                    } else {
+                        // C'est une bonne réponse mais elle n'a pas été cochée par l'utilisateur
+                        answersStatus[answerIndex] = 'missed';
+                    }
+                } else {
+                    if (checkedByUser) {
+                        // C'est une mauvaise réponse et elle a été cochée par l'utilisateur
+                        this_score -= answer.score;
+                        answersStatus[answerIndex] = 'nok';
+                    } else {
+                        // C'est une bonne réponse et elle n'a pas été cochée par l'utilisateur
+                        answersStatus[answerIndex] = 'neutral';
+                    }
+                }
+            });
+
             ok = this_score >= min_score;
 
             log.answer = a;
@@ -47,7 +74,7 @@ QuizScore.prototype = {
             ok = null;
         }
 
-        this.questionStatus[questionIndex] = {'status':ok,'answers':answersStatus};
+        this.questionStatus[questionIndex] = {'status': ok, 'answers': answersStatus};
 
         if (ok && count) {
             this.score++;