diff --git a/admin/tool/generator/locallib.php b/admin/tool/generator/locallib.php index 70d544da120..117e1ace33e 100644 --- a/admin/tool/generator/locallib.php +++ b/admin/tool/generator/locallib.php @@ -583,7 +583,6 @@ class generator { $this->verbose("A $moduledata->name module was added to section $i (id $module->section) " ."of course $courseid."); - rebuild_course_cache($courseid); $module_instance = $DB->get_field('course_modules', 'instance', array('id' => $module->coursemodule)); $module_record = $DB->get_record($moduledata->name, array('id' => $module_instance)); diff --git a/course/dnduploadlib.php b/course/dnduploadlib.php index b749d467543..6fb00b02f89 100644 --- a/course/dnduploadlib.php +++ b/course/dnduploadlib.php @@ -612,14 +612,15 @@ class dndupload_ajax_processor { } $DB->set_field('course_modules', 'instance', $instanceid, array('id' => $this->cm->id)); + // Rebuild the course cache after update action + rebuild_course_cache($this->course->id, true); + $this->course->modinfo = null; // Otherwise we will just get the old version back again. $sectionid = course_add_cm_to_section($this->course, $this->cm->id, $this->section); set_coursemodule_visible($this->cm->id, true); - // Rebuild the course cache and retrieve the final info about this module. - rebuild_course_cache($this->course->id, true); - $this->course->modinfo = null; // Otherwise we will just get the old version back again. + // retrieve the final info about this module. $info = get_fast_modinfo($this->course); if (!isset($info->cms[$this->cm->id])) { // The course module has not been properly created in the course - undo everything. diff --git a/course/edit.php b/course/edit.php index 3147bad79ea..6a5aefbeadc 100644 --- a/course/edit.php +++ b/course/edit.php @@ -132,7 +132,6 @@ if ($editform->is_cancelled()) { // Save any changes to the files used in the editor update_course($data, $editoroptions); } - rebuild_course_cache($course->id); switch ($returnto) { case 'category': diff --git a/course/lib.php b/course/lib.php index 8d2a90e5ddd..33786e18d55 100644 --- a/course/lib.php +++ b/course/lib.php @@ -1268,7 +1268,7 @@ function set_section_visible($courseid, $sectionnumber, $visibility) { set_coursemodule_visible($moduleid, $visibility, true); } } - rebuild_course_cache($courseid); + rebuild_course_cache($courseid, true); // Determine which modules are visible for AJAX update if (!empty($modules)) { @@ -2687,7 +2687,9 @@ function add_course_module($mod) { $mod->added = time(); unset($mod->id); - return $DB->insert_record("course_modules", $mod); + $cmid = $DB->insert_record("course_modules", $mod); + rebuild_course_cache($mod->course, true); + return $cmid; } /** @@ -2774,12 +2776,22 @@ function course_add_cm_to_section($courseorid, $modid, $sectionnum, $beforemod = function set_coursemodule_groupmode($id, $groupmode) { global $DB; - return $DB->set_field("course_modules", "groupmode", $groupmode, array("id"=>$id)); + $cm = $DB->get_record('course_modules', array('id' => $id), 'id,course,groupmode', MUST_EXIST); + if ($cm->groupmode != $groupmode) { + $DB->set_field('course_modules', 'groupmode', $groupmode, array('id' => $cm->id)); + rebuild_course_cache($cm->course, true); + } + return ($cm->groupmode != $groupmode); } function set_coursemodule_idnumber($id, $idnumber) { global $DB; - return $DB->set_field("course_modules", "idnumber", $idnumber, array("id"=>$id)); + $cm = $DB->get_record('course_modules', array('id' => $id), 'id,course,idnumber', MUST_EXIST); + if ($cm->idnumber != $idnumber) { + $DB->set_field('course_modules', 'idnumber', $idnumber, array('id' => $cm->id)); + rebuild_course_cache($cm->course, true); + } + return ($cm->idnumber != $idnumber); } /** @@ -2823,10 +2835,13 @@ function set_coursemodule_visible($id, $visible, $prevstateoverrides=false) { $DB->set_field('course_modules', 'visibleold', $cm->visible, array('id'=>$id)); } else { // Get the previous saved visible states. - return $DB->set_field('course_modules', 'visible', $cm->visibleold, array('id'=>$id)); + $DB->set_field('course_modules', 'visible', $cm->visibleold, array('id'=>$id)); } + } else { + $DB->set_field("course_modules", "visible", $visible, array("id"=>$id)); } - return $DB->set_field("course_modules", "visible", $visible, array("id"=>$id)); + rebuild_course_cache($cm->course, true); + return true; } /** @@ -2867,7 +2882,9 @@ function delete_course_module($id) { 'criteriatype' => COMPLETION_CRITERIA_TYPE_ACTIVITY)); delete_context(CONTEXT_MODULE, $cm->id); - return $DB->delete_records('course_modules', array('id'=>$cm->id)); + $DB->delete_records('course_modules', array('id'=>$cm->id)); + rebuild_course_cache($cm->course, true); + return true; } function delete_mod_from_section($modid, $sectionid) { @@ -2880,7 +2897,9 @@ function delete_mod_from_section($modid, $sectionid) { if ($key = array_keys ($modarray, $modid)) { array_splice($modarray, $key[0], 1); $newsequence = implode(",", $modarray); - return $DB->set_field("course_sections", "sequence", $newsequence, array("id"=>$section->id)); + $DB->set_field("course_sections", "sequence", $newsequence, array("id"=>$section->id)); + rebuild_course_cache($section->course, true); + return true; } else { return false; } @@ -2902,7 +2921,7 @@ function move_section($course, $section, $move) { debugging('This function will be removed before 2.5 is released please use move_section_to', DEBUG_DEVELOPER); /// Moves a whole course section up and down within the course - global $USER, $DB; + global $USER; if (!$move) { return true; @@ -2915,10 +2934,6 @@ function move_section($course, $section, $move) { } $retval = move_section_to($course, $section, $sectiondest); - // If section moved, then rebuild course cache. - if ($retval) { - rebuild_course_cache($course->id, true); - } return $retval; } @@ -2977,6 +2992,7 @@ function move_section_to($course, $section, $destination) { } $transaction->allow_commit(); + rebuild_course_cache($course->id, true); return true; } @@ -3058,7 +3074,7 @@ function reorder_sections($sections, $origin_position, $target_position) { * All parameters are objects */ function moveto_module($mod, $section, $beforemod=NULL) { - global $DB, $OUTPUT; + global $OUTPUT; /// Remove original module from original section if (! delete_mod_from_section($mod->id, $mod->section)) { @@ -3326,8 +3342,6 @@ function course_format_name ($course,$max=100) { * @return bool whether the current user is allowed to add this type of module to this course. */ function course_allowed_module($course, $modname) { - global $DB; - if (is_numeric($modname)) { throw new coding_exception('Function course_allowed_module no longer supports numeric module ids. Please update your code to pass the module name.'); @@ -3852,6 +3866,8 @@ function update_course($data, $editoroptions = NULL) { // Update with the new data $DB->update_record('course', $data); + // make sure the modinfo cache is reset + rebuild_course_cache($data->id); $course = $DB->get_record('course', array('id'=>$data->id)); diff --git a/course/mod.php b/course/mod.php index b88eba0e978..b1ed6171d8b 100644 --- a/course/mod.php +++ b/course/mod.php @@ -188,8 +188,6 @@ if (!empty($add)) { "view.php?id=$cm->course", "$cm->modname $cm->instance", $cm->id); - rebuild_course_cache($course->id); - redirect($return); } @@ -230,8 +228,6 @@ if ((!empty($movetosection) or !empty($moveto)) and confirm_sesskey()) { unset($USER->activitycopyname); unset($USER->activitycopysectionreturn); - rebuild_course_cache($section->course); - redirect(course_get_url($course, $section->section, array('sr' => $sectionreturn))); } else if (!empty($indent) and confirm_sesskey()) { @@ -268,8 +264,6 @@ if ((!empty($movetosection) or !empty($moveto)) and confirm_sesskey()) { set_coursemodule_visible($cm->id, 0); - rebuild_course_cache($cm->course); - redirect(course_get_url($course, $cm->sectionnum, array('sr' => $sectionreturn))); } else if (!empty($show) and confirm_sesskey()) { @@ -287,7 +281,6 @@ if ((!empty($movetosection) or !empty($moveto)) and confirm_sesskey()) { if ($module->visible and ($section->visible or (SITEID == $cm->course))) { set_coursemodule_visible($cm->id, 1); - rebuild_course_cache($cm->course); } redirect(course_get_url($course, $section->section, array('sr' => $sectionreturn))); @@ -305,8 +298,6 @@ if ((!empty($movetosection) or !empty($moveto)) and confirm_sesskey()) { set_coursemodule_groupmode($cm->id, $groupmode); - rebuild_course_cache($cm->course); - redirect(course_get_url($course, $cm->sectionnum, array('sr' => $sectionreturn))); } else if (!empty($copy) and confirm_sesskey()) { // value = course module diff --git a/course/rest.php b/course/rest.php index 35f685a9399..12371f8a8ae 100644 --- a/course/rest.php +++ b/course/rest.php @@ -97,7 +97,6 @@ switch($requestmethod) { } break; } - rebuild_course_cache($course->id); break; case 'resource': @@ -117,6 +116,7 @@ switch($requestmethod) { $cm->indent = $value; if ($cm->indent >= 0) { $DB->update_record('course_modules', $cm); + rebuild_course_cache($cm->course); } break; @@ -159,6 +159,7 @@ switch($requestmethod) { if (!empty($module->name)) { $DB->update_record($cm->modname, $module); + rebuild_course_cache($cm->course); } else { $module->name = $cm->name; } @@ -169,7 +170,6 @@ switch($requestmethod) { echo json_encode(array('instancename' => format_string($module->name, true, $stringoptions))); break; } - rebuild_course_cache($course->id); break; case 'course': @@ -222,8 +222,6 @@ switch($requestmethod) { $eventdata->userid = $USER->id; events_trigger('mod_deleted', $eventdata); - rebuild_course_cache($course->id); - add_to_log($courseid, "course", "delete mod", "view.php?id=$courseid", "$cm->modname $cm->instance", $cm->id); diff --git a/course/view.php b/course/view.php index cc699125e3f..e428a26531a 100644 --- a/course/view.php +++ b/course/view.php @@ -179,8 +179,6 @@ if (!empty($move) and has_capability('moodle/course:movesections', $context) and confirm_sesskey()) { $destsection = $section + $move; if (move_section_to($course, $section, $destsection)) { - // Rebuild course cache, after moving section - rebuild_course_cache($course->id, true); if ($course->id == SITEID) { redirect($CFG->wwwroot . '/?redirect=0'); } else { diff --git a/lib/tests/conditionlib_test.php b/lib/tests/conditionlib_test.php index b9046b3952a..b4e7cee0dca 100644 --- a/lib/tests/conditionlib_test.php +++ b/lib/tests/conditionlib_test.php @@ -208,7 +208,9 @@ class conditionlib_testcase extends advanced_testcase { foreach($params as $name=>$value) { $settings->{$name}=$value; } - return $DB->insert_record('course_modules',$settings); + $cmid = $DB->insert_record('course_modules',$settings); + rebuild_course_cache($courseid, true); + return $cmid; } private function make_section($courseid, $cmids, $sectionnum=0, $params=array()) { @@ -220,7 +222,9 @@ class conditionlib_testcase extends advanced_testcase { foreach ($params as $name => $value) { $record->{$name} = $value; } - return $DB->insert_record('course_sections', $record); + $sectionid = $DB->insert_record('course_sections', $record); + rebuild_course_cache($courseid, true); + return $sectionid; } private function make_grouping($courseid, $name) { @@ -321,6 +325,7 @@ class conditionlib_testcase extends advanced_testcase { 'grademin' => 5.5 )); + rebuild_course_cache($courseid, true); // Okay sweet, now get modinfo $course = $DB->get_record('course', array('id' => $courseid)); $modinfo = get_fast_modinfo($course); @@ -476,8 +481,6 @@ class conditionlib_testcase extends advanced_testcase { // Need to reset modinfo after changing the options rebuild_course_cache($courseid); - $reset = 'reset'; - get_fast_modinfo($reset); $ci=new condition_info((object)array('id'=>$cmid),CONDITION_MISSING_EVERYTHING); $ci->add_completion_condition($oldid,COMPLETION_COMPLETE); @@ -626,8 +629,6 @@ class conditionlib_testcase extends advanced_testcase { // Completion: Reset modinfo after changing the options rebuild_course_cache($courseid); - $reset = 'reset'; - get_fast_modinfo($reset); // Completion: Add condition $ci = new condition_info_section((object)array('id' => $sectionid),