diff --git a/course/lib.php b/course/lib.php index 99cc6c2b05b..fa1fa20cd0e 100644 --- a/course/lib.php +++ b/course/lib.php @@ -3488,6 +3488,10 @@ function mod_duplicate_activity($course, $cm, $sr = null) { $section = $DB->get_record('course_sections', array('id' => $cm->section, 'course' => $cm->course)); moveto_module($newcm, $section, $cm); moveto_module($cm, $section, $newcm); + + // Trigger course module created event. We can trigger the event only if we know the newcmid. + $event = \core\event\course_module_created::create_from_cm($newcm); + $event->trigger(); } rebuild_course_cache($cm->course); diff --git a/course/modduplicate.php b/course/modduplicate.php index 72476713468..db51f62b4ff 100644 --- a/course/modduplicate.php +++ b/course/modduplicate.php @@ -120,6 +120,10 @@ if ($newcmid) { $newcm = get_coursemodule_from_id('', $newcmid, $course->id, true, MUST_EXIST); moveto_module($newcm, $section, $cm); moveto_module($cm, $section, $newcm); + + // Trigger course module created event. We can trigger the event only if we know the newcmid. + $event = \core\event\course_module_created::create_from_cm($newcm); + $event->trigger(); } $rc->destroy(); diff --git a/course/tests/courselib_test.php b/course/tests/courselib_test.php index 00e9ec92345..d5211291c46 100644 --- a/course/tests/courselib_test.php +++ b/course/tests/courselib_test.php @@ -1921,7 +1921,7 @@ class core_course_courselib_testcase extends advanced_testcase { * Tests for event related to course module creation. */ public function test_course_module_created_event() { - global $USER, $DB; + global $USER, $DB, $CFG; $this->resetAfterTest(); // Create an assign module. @@ -1929,9 +1929,8 @@ class core_course_courselib_testcase extends advanced_testcase { $modinfo = $this->create_specific_module_test('assign'); $events = $sink->get_events(); $event = array_pop($events); - $sink->close(); - $cm = $DB->get_record('course_modules', array('id' => $modinfo->coursemodule), '*', MUST_EXIST); + $cm = get_coursemodule_from_id('assign', $modinfo->coursemodule, 0, false, MUST_EXIST); $mod = $DB->get_record('assign', array('id' => $modinfo->instance), '*', MUST_EXIST); // Validate event data. @@ -1955,6 +1954,27 @@ class core_course_courselib_testcase extends advanced_testcase { $arr = array($cm->course, "course", "add mod", "../mod/assign/view.php?id=$cm->id", "assign $cm->instance"); $this->assertEventLegacyLogData($arr, $event); + // Let us see if duplicating an activity results in a nice course module created event. + $sink->clear(); + $course = get_course($mod->course); + + // Discard error logs. + $oldlog = ini_get('error_log'); + ini_set('error_log', "$CFG->dataroot/testlog.log"); + $newcmhtml = mod_duplicate_activity($course, $cm); + ini_set('error_log', $oldlog); + + $events = $sink->get_events(); + $event = array_pop($events); + $sink->close(); + + // Validate event data. + $this->assertInstanceOf('\core\event\course_module_created', $event); + $this->assertEquals($newcmhtml->cmid, $event->objectid); + $this->assertEquals($USER->id, $event->userid); + $this->assertEquals($course->id, $event->courseid); + $url = new moodle_url('/mod/assign/view.php', array('id' => $newcmhtml->cmid)); + $this->assertEquals($url, $event->get_url()); } /**