MDL-38703 course: moving a hidden course module unhides it
authorDan Poltawski <dan@moodle.com>
Tue, 26 Mar 2013 07:47:18 +0000 (15:47 +0800)
committerDan Poltawski <dan@moodle.com>
Tue, 26 Mar 2013 07:48:28 +0000 (15:48 +0800)
When moving to a non-hidden section because visibleold was not
being correctly set. visibleold should only be differnet from visible
when a CM is changed by section visibility

course/lib.php

index 0ac08a8..b17a534 100644 (file)
@@ -2916,16 +2916,23 @@ function set_coursemodule_visible($id, $visible, $prevstateoverrides=false) {
         }
     }
 
+    $cminfo = new stdClass();
+    $cminfo->id = $id;
+    $cminfo->visible = $visible;
+
     if ($prevstateoverrides) {
-        if ($visible == '0') {
-            // Remember the current visible state so we can toggle this back.
-            $DB->set_field('course_modules', 'visibleold', $cm->visible, array('id'=>$id));
+        // If we making whole section visiblility change..
+        if ($visible == 0) {
+            // Retain previous visibility state.
+            $cminfo->visibleold = $cm->visible;
         } else {
-            // Get the previous saved visible states.
-            return $DB->set_field('course_modules', 'visible', $cm->visibleold, array('id'=>$id));
+            // Restore previous visibility state.
+            $cminfo->visible = $cm->visibleold;
         }
+    } else {
+        $cminfo->visibleold = $visible;
     }
-    return $DB->set_field("course_modules", "visible", $visible, array("id"=>$id));
+    return $DB->update_record('course_modules', $cminfo);
 }
 
 /**