case 'resource': switch ($field) { case 'visible': require_capability('moodle/course:activityvisibility', $modcontext); set_coursemodule_visible($cm->id, $value); \core\event\course_module_updated::create_from_cm($cm, $modcontext)->trigger(); break; case 'duplicate': require_capability('moodle/course:manageactivities', $modcontext); require_capability('moodle/backup:backuptargetimport', $modcontext); require_capability('moodle/restore:restoretargetimport', $modcontext); if (!course_allowed_module($course, $cm->modname)) { throw new moodle_exception('No permission to create that activity'); } $sr = optional_param('sr', null, PARAM_INT); $result = mod_duplicate_activity($course, $cm, $sr); echo json_encode($result); break; case 'groupmode': require_capability('moodle/course:manageactivities', $modcontext); set_coursemodule_groupmode($cm->id, $value); \core\event\course_module_updated::create_from_cm($cm, $modcontext)->trigger(); break; case 'indent': require_capability('moodle/course:manageactivities', $modcontext); $cm->indent = $value; if ($cm->indent >= 0) { $DB->update_record('course_modules', $cm); rebuild_course_cache($cm->course); } break;
/** * Tests for event related to course module creation. */ public function test_course_module_created_event() { global $USER, $DB, $CFG; $this->resetAfterTest(); // Create an assign module. $sink = $this->redirectEvents(); $modinfo = $this->create_specific_module_test('assign'); $events = $sink->get_events(); $event = array_pop($events); $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. $this->assertInstanceOf('\\core\\event\\course_module_created', $event); $this->assertEquals($cm->id, $event->objectid); $this->assertEquals($USER->id, $event->userid); $this->assertEquals('course_modules', $event->objecttable); $url = new moodle_url('/mod/assign/view.php', array('id' => $cm->id)); $this->assertEquals($url, $event->get_url()); // Test legacy data. $this->assertSame('mod_created', $event->get_legacy_eventname()); $eventdata = new stdClass(); $eventdata->modulename = 'assign'; $eventdata->name = $mod->name; $eventdata->cmid = $cm->id; $eventdata->courseid = $cm->course; $eventdata->userid = $USER->id; $this->assertEventLegacyData($eventdata, $event); $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()); // Clear the time limit, otherwise PHPUnit complains. set_time_limit(0); }