MDL-31306 question preview: disable 'Fill correct' for qtypes that can't
authorM Kassaei <m.kassaei@open.ac.uk>
Fri, 20 Jan 2012 11:59:14 +0000 (11:59 +0000)
committerSam Hemelryk <sam@moodle.com>
Tue, 24 Jan 2012 05:26:44 +0000 (13:26 +0800)
question/engine/questionattempt.php
question/engine/questionusage.php
question/preview.php
question/type/questionbase.php

index 6d4811e..f31ff3a 100644 (file)
@@ -987,11 +987,15 @@ class question_attempt {
 
     /**
      * Get a set of response data for this question attempt that would get the
-     * best possible mark.
-     * @return array name => value pairs that could be passed to {@link process_action()}.
+     * best possible mark. If it is not possible to compute a correct
+     * response, this method should return null.
+     * @return array|null name => value pairs that could be passed to {@link process_action()}.
      */
     public function get_correct_response() {
         $response = $this->question->get_correct_response();
+        if (is_null($response)) {
+            return null;
+        }
         $imvars = $this->behaviour->get_correct_response();
         foreach ($imvars as $name => $value) {
             $response['-' . $name] = $value;
index 6548bff..33aeb5f 100644 (file)
@@ -582,6 +582,7 @@ class question_usage_by_activity {
     /**
      * Get the correct response to a particular question. Passing the results of
      * this method to {@link process_action()} will probably result in full marks.
+     * If it is not possible to compute a correct response, this method should return null.
      * @param int $slot the number used to identify this question within this usage.
      * @return array that constitutes a correct response to this question.
      */
index a50f9cc..8b62e43 100644 (file)
@@ -211,7 +211,9 @@ $filldisabled = '';
 if ($quba->get_question_state($slot)->is_finished()) {
     $finishdisabled = ' disabled="disabled"';
     $filldisabled = ' disabled="disabled"';
-} else if (is_null($quba->get_correct_response($slot))) {
+}
+// If question type cannot give us a correct response, disable this button.
+if (is_null($quba->get_correct_response($slot))) {
     $filldisabled = ' disabled="disabled"';
 }
 if (!$previewid) {
index 062c9dd..f2d0a06 100644 (file)
@@ -262,9 +262,10 @@ abstract class question_definition {
     /**
      * What data would need to be submitted to get this question correct.
      * If there is more than one correct answer, this method should just
-     * return one possibility.
+     * return one possibility. If it is not possible to compute a correct
+     * response, this method should return null.
      *
-     * @return array parameter name => value.
+     * @return array|null parameter name => value.
      */
     public abstract function get_correct_response();