MDL-39488 Lesson Module: Fix for "Match question throws PHP error if one or more...
authorJoseph Rézeau <moodle@rezeau.org>
Fri, 3 May 2013 09:00:43 +0000 (11:00 +0200)
committerRossiani Wijaya <rwijaya@moodle.com>
Wed, 8 May 2013 05:49:30 +0000 (13:49 +0800)
Signed-off-by: Joseph Rézeau <moodle@rezeau.org>
mod/lesson/pagetypes/matching.php

index 09cdf47..b777257 100644 (file)
@@ -161,7 +161,15 @@ class lesson_page_type_matching extends lesson_page {
         }
 
         $response = $data->response;
-        if (!is_array($response)) {
+        $empty = 0;
+        foreach ($response as $resp) {
+            if ($resp != '') {
+                break;
+            } else {
+                $empty ++;
+            }
+        }
+        if ($empty == count($response)) {
             $result->noanswer = true;
             return $result;
         }
@@ -177,13 +185,13 @@ class lesson_page_type_matching extends lesson_page {
             }
             unset($answers[$key]);
         }
-        // get he users exact responses for record keeping
+        // get the user's exact responses for record keeping
         $hits = 0;
         $userresponse = array();
         foreach ($response as $id => $value) {
             $userresponse[] = $value;
-            // Make sure the user's answer is exist in question's answer
-            if (array_key_exists($id, $answers)) {
+            // Make sure the user's answer exists in question's answer
+            if (array_key_exists($id, $answers) && $value) {
                 $answer = $answers[$id];
                 $result->studentanswer .= '<br />'.format_text($answer->answer, $answer->answerformat, $formattextdefoptions).' = '.$answers[$value]->response;
                 if ($id == $value) {