MDL-36417 course: Toggling section visibility update module visibility
This commit is contained in:
+35
-19
@@ -1272,7 +1272,16 @@ function set_section_visible($courseid, $sectionnumber, $visibility) {
|
||||
if (!empty($section->sequence)) {
|
||||
$modules = explode(",", $section->sequence);
|
||||
foreach ($modules as $moduleid) {
|
||||
set_coursemodule_visible($moduleid, $visibility, true);
|
||||
if ($cm = $DB->get_record('course_modules', array('id' => $moduleid), 'visible, visibleold')) {
|
||||
if ($visibility) {
|
||||
// As we unhide the section, we use the previously saved visibility stored in visibleold.
|
||||
set_coursemodule_visible($moduleid, $cm->visibleold);
|
||||
} else {
|
||||
// We hide the section, so we hide the module but we store the original state in visibleold.
|
||||
set_coursemodule_visible($moduleid, 0);
|
||||
$DB->set_field('course_modules', 'visibleold', $cm->visible, array('id' => $moduleid));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
rebuild_course_cache($courseid, true);
|
||||
@@ -2806,16 +2815,26 @@ function set_coursemodule_idnumber($id, $idnumber) {
|
||||
}
|
||||
|
||||
/**
|
||||
* $prevstateoverrides = true will set the visibility of the course module
|
||||
* to what is defined in visibleold. This enables us to remember the current
|
||||
* visibility when making a whole section hidden, so that when we toggle
|
||||
* that section back to visible, we are able to return the visibility of
|
||||
* the course module back to what it was originally.
|
||||
*/
|
||||
function set_coursemodule_visible($id, $visible, $prevstateoverrides=false) {
|
||||
* Set the visibility of a module and inherent properties.
|
||||
*
|
||||
* From 2.4 the parameter $prevstateoverrides has been removed, the logic it triggered
|
||||
* has been moved to {@link set_section_visible()} which was the only place from which
|
||||
* the parameter was used.
|
||||
*
|
||||
* @param int $id of the module
|
||||
* @param int $visible state of the module
|
||||
* @return bool false when the module was not found, true otherwise
|
||||
*/
|
||||
function set_coursemodule_visible($id, $visible) {
|
||||
global $DB, $CFG;
|
||||
require_once($CFG->libdir.'/gradelib.php');
|
||||
|
||||
// Trigger developer's attention when using the previously removed argument.
|
||||
if (func_num_args() > 2) {
|
||||
debugging('Wrong number of arguments passed to set_coursemodule_visible(), $prevstateoverrides
|
||||
has been removed.', DEBUG_DEVELOPER);
|
||||
}
|
||||
|
||||
if (!$cm = $DB->get_record('course_modules', array('id'=>$id))) {
|
||||
return false;
|
||||
}
|
||||
@@ -2840,17 +2859,14 @@ function set_coursemodule_visible($id, $visible, $prevstateoverrides=false) {
|
||||
}
|
||||
}
|
||||
|
||||
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));
|
||||
} else {
|
||||
// Get the previous saved visible states.
|
||||
$DB->set_field('course_modules', 'visible', $cm->visibleold, array('id'=>$id));
|
||||
}
|
||||
} else {
|
||||
$DB->set_field("course_modules", "visible", $visible, array("id"=>$id));
|
||||
}
|
||||
// Updating visible and visibleold to keep them in sync. Only changing a section visibility will
|
||||
// affect visibleold to allow for an original visibility restore. See set_section_visible().
|
||||
$cminfo = new stdClass();
|
||||
$cminfo->id = $id;
|
||||
$cminfo->visible = $visible;
|
||||
$cminfo->visibleold = $visible;
|
||||
$DB->update_record('course_modules', $cminfo);
|
||||
|
||||
rebuild_course_cache($cm->course, true);
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user