]> git.mjollnir.org Git - moodle.git/commitdiff
Short-answer fixes:
authorkaipe <kaipe>
Thu, 1 Jan 2004 15:01:29 +0000 (15:01 +0000)
committerkaipe <kaipe>
Thu, 1 Jan 2004 15:01:29 +0000 (15:01 +0000)
As the wild card feature makes it possible for a response to match more than one answer alternative, I made sure that the alternative with the
highest grade would count.
I also fixed bug #945 for the short answer case.

mod/quiz/lib.php

index 39d4fedc1e9f7b344e5ca173bc86efeda370f97a..94b9435be923277cdcd0c0c0543e112f7cfbd7ac 100644 (file)
@@ -1613,31 +1613,32 @@ function quiz_grade_attempt_question_result($question,
                 $question->answer = "";
             }
             $response[0] = $question->answer;
-            $bestshortanswer = 0;
+            $feedback[0] = '';  // Default
             foreach ($answers as $answer) {  // There might be multiple right answers
 
                 $answer->answer = trim($answer->answer);  // Just in case
 
-                if ($answer->fraction > $bestshortanswer) {
-                    $correct[$answer->id] = $answer->answer;
-                    $bestshortanswer = $answer->fraction;
+                if ($answer->fraction >= 1.0) {
+                    $correct[] = $answer->answer;
                 }
                 if (!$answer->usecase) {       // Don't compare case
                     $answer->answer = strtolower($answer->answer);
                     $question->answer = strtolower($question->answer);
                 }
 
-                if ((strpos(' '.$answer->answer, '*'))) {
+                $potentialgrade = (float)$answer->fraction * $question->grade;
+
+                if ($potentialgrade >= $grade
+                        and (strpos(' '.$answer->answer, '*'))) {
                     $answer->answer = eregi_replace('\*','.*',$answer->answer);
                     if (eregi('^'.$answer->answer.'$', $question->answer)) {
                         $feedback[0] = $answer->feedback;
-                        $grade = (float)$answer->fraction * $question->grade;
-                    }
-                } else {
-                    if ($answer->answer == $question->answer) {
-                        $feedback[0] = $answer->feedback;
-                        $grade = (float)$answer->fraction * $question->grade;
+                        $grade = $potentialgrade;
                     }
+
+                } else if ($answer->answer == $question->answer) {
+                    $feedback[0] = $answer->feedback;
+                    $grade = $potentialgrade;
                 }
             }
             break;