MDL-59311 course: duplicate module rebuilds cache twice

slightly refactor duplicate_module() code so it does not rebuild course cache
twice and also we do not need to move module if it is already the last module in a section
This commit is contained in:
Marina Glancy
2017-07-27 08:17:07 +08:00
parent 0581a9be05
commit 2ecdf3527f
+13 -11
View File
@@ -3329,15 +3329,23 @@ function duplicate_module($course, $cm) {
}
}
$rc->destroy();
if (empty($CFG->keeptempdirectoriesonbackup)) {
fulldelete($backupbasepath);
}
// If we know the cmid of the new course module, let us move it
// right below the original one. otherwise it will stay at the
// end of the section.
if ($newcmid) {
$info = get_fast_modinfo($course);
$newcm = $info->get_cm($newcmid);
$section = $DB->get_record('course_sections', array('id' => $cm->section, 'course' => $cm->course));
moveto_module($newcm, $section, $cm);
moveto_module($cm, $section, $newcm);
$modarray = explode(",", trim($section->sequence));
$cmindex = array_search($cm->id, $modarray);
if ($cmindex !== false && $cmindex < count($modarray) - 1) {
$newcm = get_coursemodule_from_id($cm->modname, $newcmid, $cm->course);
moveto_module($newcm, $section, $modarray[$cmindex + 1]);
}
// Update calendar events with the duplicated module.
$refresheventsfunction = $newcm->modname . '_refresh_events';
@@ -3346,16 +3354,10 @@ function duplicate_module($course, $cm) {
}
// Trigger course module created event. We can trigger the event only if we know the newcmid.
$newcm = get_fast_modinfo($cm->course)->get_cm($newcmid);
$event = \core\event\course_module_created::create_from_cm($newcm);
$event->trigger();
}
rebuild_course_cache($cm->course);
$rc->destroy();
if (empty($CFG->keeptempdirectoriesonbackup)) {
fulldelete($backupbasepath);
}
return isset($newcm) ? $newcm : null;
}