From 545b77c8f20c0becee0ea396810a2fe278aacee6 Mon Sep 17 00:00:00 2001 From: Damyon Wiese Date: Wed, 9 Jan 2013 13:32:48 +0800 Subject: [PATCH] MDL-37430 Course - Make modules created in hidden sections visible when section is made visible. --- course/lib.php | 11 ++++++++++- course/modedit.php | 1 + course/rest.php | 1 + course/yui/dragdrop/dragdrop.js | 3 +++ course/yui/toolboxes/toolboxes.js | 20 ++++++++++++++++++++ 5 files changed, 35 insertions(+), 1 deletion(-) diff --git a/course/lib.php b/course/lib.php index a58b86ad3c9fa..0a9ce90b4dd9d 100644 --- a/course/lib.php +++ b/course/lib.php @@ -3137,7 +3137,7 @@ function reorder_sections($sections, $origin_position, $target_position) { * All parameters are objects */ function moveto_module($mod, $section, $beforemod=NULL) { - global $OUTPUT; + global $OUTPUT, $DB; /// Remove original module from original section if (! delete_mod_from_section($mod->id, $mod->section)) { @@ -3146,7 +3146,16 @@ function moveto_module($mod, $section, $beforemod=NULL) { // 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. + $mod->visible = 0; set_coursemodule_visible($mod->id, 0); + // Set visibleold to 1 so module will be visible when section is made visible. + $DB->set_field('course_modules', 'visibleold', 1, array('id' => $mod->id)); + } + if ($section->visible && !$mod->visible) { + set_coursemodule_visible($mod->id, $mod->visibleold); + // 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 56bf28a567d32..c08108abe4aaa 100644 --- a/course/modedit.php +++ b/course/modedit.php @@ -480,6 +480,7 @@ // 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 8056c57eb520d..62729038b58f3 100644 --- a/course/rest.php +++ b/course/rest.php @@ -134,6 +134,7 @@ } 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 96b8f1b377757..6872ece2d8232 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 57f0d2a61925c..fc5404833ce47 100644 --- a/course/yui/toolboxes/toolboxes.js +++ b/course/yui/toolboxes/toolboxes.js @@ -601,6 +601,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',