mod-lesson MDL-25632 Fixed bug whereby excess answers were being created when creatin...
authorSam Hemelryk <sam@moodle.com>
Tue, 14 Dec 2010 08:33:39 +0000 (16:33 +0800)
committerSam Hemelryk <sam@moodle.com>
Wed, 15 Dec 2010 05:12:33 +0000 (13:12 +0800)
mod/lesson/locallib.php
mod/lesson/pagetypes/matching.php

index a9123ac..7959433 100644 (file)
@@ -2135,13 +2135,17 @@ abstract class lesson_page extends lesson_base {
                 $this->answers[$i]->pageid = $this->id;
                 $this->answers[$i]->timecreated = $this->timecreated;
             }
-            if (!empty($properties->answer_editor[$i])) {
+
+            if (!empty($properties->answer_editor[$i]) && is_array($properties->answer_editor[$i])) {
                 $this->answers[$i]->answer = $properties->answer_editor[$i]['text'];
                 $this->answers[$i]->answerformat = $properties->answer_editor[$i]['format'];
-                if (isset($properties->response_editor[$i])) {
-                    $this->answers[$i]->response = $properties->response_editor[$i]['text'];
-                    $this->answers[$i]->responseformat = $properties->response_editor[$i]['format'];
-                }
+            }
+            if (!empty($properties->response_editor[$i]) && is_array($properties->response_editor[$i])) {
+                $this->answers[$i]->response = $properties->response_editor[$i]['text'];
+                $this->answers[$i]->responseformat = $properties->response_editor[$i]['format'];
+            }
+
+            if (!empty($this->answers[$i]->answer)) {
                 if (isset($properties->jumpto[$i])) {
                     $this->answers[$i]->jumpto = $properties->jumpto[$i];
                 }
@@ -2154,8 +2158,9 @@ abstract class lesson_page extends lesson_base {
                     $DB->update_record("lesson_answers", $this->answers[$i]->properties());
                 }
 
-            } else {
-                break;
+            } else if (isset($this->answers[$i]->id)) {
+                $DB->delete_records('lesson_answers', array('id'=>$this->answers[$i]->id));
+                unset($this->answers[$i]);
             }
         }
         return true;
@@ -2223,13 +2228,17 @@ abstract class lesson_page extends lesson_base {
 
         for ($i = 0; $i < $this->lesson->maxanswers; $i++) {
             $answer = clone($newanswer);
-            if (!empty($properties->answer_editor[$i])) {
+
+            if (!empty($properties->answer_editor[$i]) && is_array($properties->answer_editor[$i])) {
                 $answer->answer = $properties->answer_editor[$i]['text'];
                 $answer->answerformat = $properties->answer_editor[$i]['format'];
-                if (isset($properties->response_editor[$i])) {
-                    $answer->response = $properties->response_editor[$i]['text'];
-                    $answer->responseformat = $properties->response_editor[$i]['format'];
-                }
+            }
+            if (!empty($properties->response_editor[$i]) && is_array($properties->response_editor[$i])) {
+                $answer->response = $properties->response_editor[$i]['text'];
+                $answer->responseformat = $properties->response_editor[$i]['format'];
+            }
+
+            if (!empty($answer->answer)) {
                 if (isset($properties->jumpto[$i])) {
                     $answer->jumpto = $properties->jumpto[$i];
                 }
index 1d491b8..94d9886 100644 (file)
@@ -105,13 +105,16 @@ class lesson_page_type_matching extends lesson_page {
         $this->lesson->maxanswers = $this->lesson->maxanswers + 2;
         for ($i = 0; $i < $this->lesson->maxanswers; $i++) {
             $answer = clone($newanswer);
-            if (!empty($properties->answer_editor[$i])) {
+            if (!empty($properties->answer_editor[$i]) && is_array($properties->answer_editor[$i])) {
                 $answer->answer = $properties->answer_editor[$i]['text'];
                 $answer->answerformat = $properties->answer_editor[$i]['format'];
-                if (isset($properties->response_editor[$i])) {
-                    $answer->response = $properties->response_editor[$i]['text'];
-                    $answer->responseformat = $properties->response_editor[$i]['format'];
-                }
+            }
+            if (!empty($properties->response_editor[$i]) && is_array($properties->response_editor[$i])) {
+                $answer->response = $properties->response_editor[$i]['text'];
+                $answer->responseformat = $properties->response_editor[$i]['format'];
+            }
+
+            if (!empty($answer->answer)) {
                 if (isset($properties->jumpto[$i])) {
                     $answer->jumpto = $properties->jumpto[$i];
                 }
@@ -276,6 +279,14 @@ class lesson_page_type_matching extends lesson_page {
         }
         return $table;
     }
+    /**
+     * Updates the page and its answers
+     *
+     * @global moodle_database $DB
+     * @global moodle_page $PAGE
+     * @param stdClass $properties
+     * @return bool
+     */
     public function update($properties) {
         global $DB, $PAGE;
         $answers  = $this->get_answers();
@@ -293,13 +304,17 @@ class lesson_page_type_matching extends lesson_page {
                 $this->answers[$i]->pageid = $this->id;
                 $this->answers[$i]->timecreated = $this->timecreated;
             }
-            if (!empty($properties->answer_editor[$i])) {
+
+            if (!empty($properties->answer_editor[$i]) && is_array($properties->answer_editor[$i])) {
                 $this->answers[$i]->answer = $properties->answer_editor[$i]['text'];
                 $this->answers[$i]->answerformat = $properties->answer_editor[$i]['format'];
-                if (isset($properties->response_editor[$i])) {
-                    $this->answers[$i]->response = $properties->response_editor[$i]['text'];
-                    $this->answers[$i]->responseformat = $properties->response_editor[$i]['format'];
-                }
+            }
+            if (!empty($properties->response_editor[$i]) && is_array($properties->response_editor[$i])) {
+                $this->answers[$i]->response = $properties->response_editor[$i]['text'];
+                $this->answers[$i]->responseformat = $properties->response_editor[$i]['format'];
+            }
+
+            if (!empty($this->answers[$i]->answer)) {
                 if (isset($properties->jumpto[$i])) {
                     $this->answers[$i]->jumpto = $properties->jumpto[$i];
                 }
@@ -319,8 +334,9 @@ class lesson_page_type_matching extends lesson_page {
                     $DB->update_record("lesson_answers", $this->answers[$i]->properties());
                 }
 
-            } else {
-                break;
+            } else if (isset($this->answers[$i]->id)) {
+                $DB->delete_records('lesson_answers', array('id'=>$this->answers[$i]->id));
+                unset($this->answers[$i]);
             }
         }
         return true;
@@ -383,7 +399,11 @@ class lesson_page_type_matching extends lesson_page {
                 $data = "<select disabled=\"disabled\"><option selected=\"selected\">".strip_tags(format_string($answer->answer))."</option></select>";
                 if ($useranswer != NULL) {
                     $userresponse = explode(",", $useranswer->useranswer);
-                    $data .= "<select disabled=\"disabled\"><option selected=\"selected\">".strip_tags(format_string($answers[$userresponse[$i]]->response))."</option></select>";
+                    $data .= "<select disabled=\"disabled\"><option selected=\"selected\">";
+                    if (array_key_exists($i, $userresponse)) {
+                        $data .= strip_tags(format_string($answers[$userresponse[$i]]->response));
+                    }
+                    $data .= "</option></select>";
                 } else {
                     $data .= "<select disabled=\"disabled\"><option selected=\"selected\">".strip_tags(format_string($answer->response))."</option></select>";
                 }