]> git.mjollnir.org Git - moodle.git/commitdiff
Made it possble to give negative grades for single multichoice answers in a question...
authorkaipe <kaipe>
Thu, 20 Nov 2003 19:39:08 +0000 (19:39 +0000)
committerkaipe <kaipe>
Thu, 20 Nov 2003 19:39:08 +0000 (19:39 +0000)
mod/quiz/format/multianswer.php
mod/quiz/lib.php

index ee61c5dae85e4214a9c4f4d1a8706949446fdf62..558cc97874581a5d064bf369c585c1be6b295da0 100644 (file)
@@ -17,7 +17,7 @@
 // ANSWER_ALTERNATIVE regexes
 
 define("ANSWER_ALTERNATIVE_FRACTION_REGEX",
-       '=|%([0-9]+)%');
+       '=|%(-?[0-9]+)%');
 define("ANSWER_ALTERNATIVE_ANSWER_REGEX",
         '[^~#}]+');
 define("ANSWER_ALTERNATIVE_FEEDBACK_REGEX",
index 6d461f5736eba0b88e3740bdfb68a1ee87d6cf1d..3ed31cb2c7e2551bf007c7c8bb854fee56687755 100644 (file)
@@ -819,10 +819,10 @@ function quiz_print_question($number, $question, $grade, $quizid,
                 $inputname= " name=\"q{$realquestion->id}ma$multianswer->id\" ";
                 
                 if (!empty($response)
-                    && $responseitems = explode('-', array_shift($response), 2))
+                    && ereg('(.[^-]*)-(.+)', array_shift($response), $responseitems))
                 {
-                    $responsefractiongrade = (float)$responseitems[0];
-                    $actualresponse = $responseitems[1];
+                    $responsefractiongrade = (float)$responseitems[1];
+                    $actualresponse = $responseitems[2];
 
                     if (1.0 == $responsefractiongrade) {
                         $style = 'style="background-color:lime"';
@@ -1593,7 +1593,10 @@ function quiz_save_attempt($quiz, $questions, $result, $attemptnum) {
     return true;
 }
 
-function quiz_grade_attempt_question_result($question, $answers) {
+function quiz_grade_attempt_question_result($question,
+                                            $answers,
+                                            $gradecanbenegative= false)
+{
     $grade    = 0;   // default
     $correct  = array();
     $feedback = array();
@@ -1767,7 +1770,7 @@ function quiz_grade_attempt_question_result($question, $answers) {
                         $subquestion->qtype = $multianswer->answertype;
                         $subquestion->grade = $multianswer->norm;
                         $subresult = quiz_grade_attempt_question_result
-                                ($subquestion, $multianswer->subanswers);
+                                ($subquestion, $multianswer->subanswers, true);
                         break;
                     }
                 }
@@ -1797,7 +1800,9 @@ function quiz_grade_attempt_question_result($question, $answers) {
             return quiz_grade_attempt_question_result($realquestion, $answers);
     }
 
-    $result->grade = max(0.0, $grade);  // No negative grades
+    $result->grade =
+            $gradecanbenegative ? $grade            // Grade can be negative
+                                : max(0.0, $grade); // Grade must not be negative
     $result->correct = $correct;
     $result->feedback = $feedback;
     $result->response = $response;