diff --git a/course/lib.php b/course/lib.php index a5dfd9ad2c8..5be71487656 100644 --- a/course/lib.php +++ b/course/lib.php @@ -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; }