diff --git a/course/lib.php b/course/lib.php index 54dfc74f8fd..60a8d72868d 100644 --- a/course/lib.php +++ b/course/lib.php @@ -3144,13 +3144,16 @@ function moveto_module($mod, $section, $beforemod=NULL) { /// Update module itself if necessary - if ($mod->section != $section->id) { - $mod->section = $section->id; - $DB->update_record("course_modules", $mod); - // if moving to a hidden section then hide module - if (!$section->visible) { - set_coursemodule_visible($mod->id, 0); - } + // If moving to a hidden section then hide module. + if (!$section->visible && $mod->visible) { + // Set this in the object because it is sent as a response to ajax calls. + set_coursemodule_visible($mod->id, 0, true); + $mod->visible = 0; + } + if ($section->visible && !$mod->visible) { + set_coursemodule_visible($mod->id, 1, true); + // Set this in the object because it is sent as a response to ajax calls. + $mod->visible = $mod->visibleold; } /// Add the module into the new section diff --git a/course/modedit.php b/course/modedit.php index 7aa8667a588..00cc3181800 100644 --- a/course/modedit.php +++ b/course/modedit.php @@ -481,6 +481,7 @@ if ($mform->is_cancelled()) { // make sure visibility is set correctly (in particular in calendar) // note: allow them to set it even without moodle/course:activityvisibility set_coursemodule_visible($fromform->coursemodule, $fromform->visible); + $DB->set_field('course_modules', 'visibleold', 1, array('id' => $fromform->coursemodule)); if (isset($fromform->cmidnumber)) { //label // set cm idnumber - uniqueness is already verified by form validation diff --git a/course/rest.php b/course/rest.php index a7b55c9d913..11b58aa8cba 100644 --- a/course/rest.php +++ b/course/rest.php @@ -138,6 +138,7 @@ switch($requestmethod) { } moveto_module($cm, $section, $beforemod); + echo json_encode(array('visible' => $cm->visible)); break; case 'gettitle': require_capability('moodle/course:manageactivities', $modcontext); diff --git a/course/yui/dragdrop/dragdrop.js b/course/yui/dragdrop/dragdrop.js index bd35bd9a6e7..e741d9c67e4 100644 --- a/course/yui/dragdrop/dragdrop.js +++ b/course/yui/dragdrop/dragdrop.js @@ -385,6 +385,9 @@ YUI.add('moodle-course-dragdrop', function(Y) { spinner.show(); }, success: function(tid, response) { + var responsetext = Y.JSON.parse(response.responseText); + var params = {element: dragnode, visible: responsetext.visible}; + M.course.coursebase.invoke_function('set_visibility_resource_ui', params); this.unlock_drag_handle(drag, CSS.EDITINGMOVE); window.setTimeout(function(e) { spinner.hide(); diff --git a/course/yui/toolboxes/toolboxes.js b/course/yui/toolboxes/toolboxes.js index 2486fba1443..1f877327513 100644 --- a/course/yui/toolboxes/toolboxes.js +++ b/course/yui/toolboxes/toolboxes.js @@ -600,6 +600,26 @@ YUI.add('moodle-course-toolboxes', function(Y) { } }, this); listenevents.push(thisevent); + }, + /** + * Set the visibility of the current resource (identified by the element) + * to match the hidden parameter (this is not a toggle). + * Only changes the visibility in the browser (no ajax update). + * @param args An object with 'element' being the A node containing the resource + * and 'visible' being the state that the visiblity should be set to. + * @return void + */ + set_visibility_resource_ui: function(args) { + var element = args.element; + var shouldbevisible = args.visible; + var buttonnode = element.one(CSS.SHOW); + var visible = (buttonnode === null); + if (visible) { + buttonnode = element.one(CSS.HIDE); + } + if (visible != shouldbevisible) { + this.toggle_hide_resource_ui(buttonnode); + } } }, { NAME : 'course-resource-toolbox',