diff --git a/badges/classes/observer.php b/badges/classes/observer.php index 39c2c4ceb03..a2859e417b9 100644 --- a/badges/classes/observer.php +++ b/badges/classes/observer.php @@ -40,8 +40,8 @@ class core_badges_observer { require_once($CFG->dirroot.'/lib/badgeslib.php'); $eventdata = $event->get_record_snapshot('course_modules_completion', $event->objectid); - $userid = $event->other['relateduserid']; - $mod = $eventdata->coursemoduleid; + $userid = $event->relateduserid; + $mod = $event->contextinstanceid; if ($eventdata->completionstate == COMPLETION_COMPLETE || $eventdata->completionstate == COMPLETION_COMPLETE_PASS diff --git a/cohort/lib.php b/cohort/lib.php index 51ac01c163f..66396393168 100644 --- a/cohort/lib.php +++ b/cohort/lib.php @@ -85,7 +85,6 @@ function cohort_update_cohort($cohort) { 'context' => context::instance_by_id($cohort->contextid), 'objectid' => $cohort->id, )); - $event->add_record_snapshot('cohort', $cohort); $event->trigger(); } diff --git a/group/externallib.php b/group/externallib.php index a316b51af6d..7836758abe2 100644 --- a/group/externallib.php +++ b/group/externallib.php @@ -312,7 +312,7 @@ class core_group_external extends external_api { foreach ($params['groupids'] as $groupid) { // validate params $groupid = validate_param($groupid, PARAM_INT); - if (!$group = groups_get_group($groupid, 'id, courseid', IGNORE_MISSING)) { + if (!$group = groups_get_group($groupid, '*', IGNORE_MISSING)) { // silently ignore attempts to delete nonexisting groups continue; } diff --git a/lib/accesslib.php b/lib/accesslib.php index 6680b41a16b..0e988b6c078 100644 --- a/lib/accesslib.php +++ b/lib/accesslib.php @@ -1744,6 +1744,7 @@ function role_assign($roleid, $userid, $contextid, $component = '', $itemid = 0, $ra->itemid = $itemid; $ra->timemodified = $timemodified; $ra->modifierid = empty($USER->id) ? 0 : $USER->id; + $ra->sortorder = 0; $ra->id = $DB->insert_record('role_assignments', $ra); diff --git a/lib/classes/event/assessable_submitted.php b/lib/classes/event/assessable_submitted.php index 66dc0b93e26..8b632e3b3a7 100644 --- a/lib/classes/event/assessable_submitted.php +++ b/lib/classes/event/assessable_submitted.php @@ -59,8 +59,8 @@ abstract class assessable_submitted extends \core\event\base { * @return void */ protected function validate_data() { - if (!$this->contextlevel === CONTEXT_MODULE) { - throw new \coding_exception('Content level must be CONTEXT_MODULE.'); + if ($this->contextlevel != CONTEXT_MODULE) { + throw new \coding_exception('Context passed must be module context.'); } } diff --git a/lib/classes/event/assessable_uploaded.php b/lib/classes/event/assessable_uploaded.php index 83a3361487f..b284f997955 100644 --- a/lib/classes/event/assessable_uploaded.php +++ b/lib/classes/event/assessable_uploaded.php @@ -66,8 +66,8 @@ abstract class assessable_uploaded extends \core\event\base { * @return void */ protected function validate_data() { - if (!$this->contextlevel === CONTEXT_MODULE) { - throw new \coding_exception('Content level must be CONTEXT_MODULE.'); + if ($this->contextlevel != CONTEXT_MODULE) { + throw new \coding_exception('Context passed must be module context.'); } else if (!isset($this->other['pathnamehashes']) || !is_array($this->other['pathnamehashes'])) { throw new \coding_exception('pathnamehashes must be set in $other and must be an array.'); } else if (!isset($this->other['content']) || !is_string($this->other['content'])) { diff --git a/lib/classes/event/base.php b/lib/classes/event/base.php index 38a999e53ea..8082ab96946 100644 --- a/lib/classes/event/base.php +++ b/lib/classes/event/base.php @@ -573,6 +573,13 @@ abstract class base implements \IteratorAggregate { if ($CFG->debugdeveloper) { if (!$DB->get_manager()->table_exists($tablename)) { debugging("Invalid table name '$tablename' specified, database table does not exist.", DEBUG_DEVELOPER); + } else { + $columns = $DB->get_columns($tablename); + $missingfields = array_diff(array_keys($columns), array_keys((array)$record)); + if (!empty($missingfields)) { + debugging("Fields list in snapshot record does not match fields list in '$tablename'. Record is missing fields: ". + join(', ', $missingfields), DEBUG_DEVELOPER); + } } } $this->recordsnapshots[$tablename][$record->id] = $record; @@ -595,7 +602,7 @@ abstract class base implements \IteratorAggregate { } if (isset($this->recordsnapshots[$tablename][$id])) { - return $this->recordsnapshots[$tablename][$id]; + return clone($this->recordsnapshots[$tablename][$id]); } $record = $DB->get_record($tablename, array('id'=>$id)); diff --git a/lib/classes/event/course_module_completion_updated.php b/lib/classes/event/course_module_completion_updated.php index 86fe91f0ca0..53897cbb559 100644 --- a/lib/classes/event/course_module_completion_updated.php +++ b/lib/classes/event/course_module_completion_updated.php @@ -81,4 +81,18 @@ class course_module_completion_updated extends base { return $this->get_record_snapshot('course_modules_completion', $this->objectid); } + /** + * Custom validation. + * + * @throws \coding_exception in case of a problem. + */ + protected function validate_data() { + // Make sure the context level is set to module. + if ($this->contextlevel !== CONTEXT_MODULE) { + throw new \coding_exception('Context passed must be module context.'); + } + if (!isset($this->relateduserid)) { + throw new \coding_exception('relateduserid must be set'); + } + } } diff --git a/lib/classes/event/course_module_instance_list_viewed.php b/lib/classes/event/course_module_instance_list_viewed.php index f83b5d73545..f33bde51889 100644 --- a/lib/classes/event/course_module_instance_list_viewed.php +++ b/lib/classes/event/course_module_instance_list_viewed.php @@ -105,8 +105,8 @@ abstract class course_module_instance_list_viewed extends base{ * @return void */ protected function validate_data() { - if ($this->contextlevel !== CONTEXT_COURSE) { - throw new \coding_exception('The context must be a course level context.'); + if ($this->contextlevel != CONTEXT_COURSE) { + throw new \coding_exception('Context passed must be course context.'); } } diff --git a/lib/classes/event/course_module_viewed.php b/lib/classes/event/course_module_viewed.php index b455b345bbc..a6461abf992 100644 --- a/lib/classes/event/course_module_viewed.php +++ b/lib/classes/event/course_module_viewed.php @@ -96,6 +96,10 @@ abstract class course_module_viewed extends base { if (empty($this->objectid) || empty($this->objecttable)) { throw new \coding_exception('course_module_viewed event must define objectid and object table.'); } + // Make sure the context level is set to module. + if ($this->contextlevel != CONTEXT_MODULE) { + throw new \coding_exception('Context passed must be module context.'); + } } } diff --git a/lib/completionlib.php b/lib/completionlib.php index b109afcbbde..96c3f6a975d 100644 --- a/lib/completionlib.php +++ b/lib/completionlib.php @@ -1042,9 +1042,8 @@ class completion_info { // Trigger an event for course module completion changed. $event = \core\event\course_module_completion_updated::create( array('objectid' => $data->id, - 'userid' => $USER->id, 'context' => $cmcontext, - 'courseid' => $coursecontext->instanceid, + 'relateduserid' => $data->userid, 'other' => array('relateduserid' => $data->userid) ) ); diff --git a/lib/tests/completionlib_test.php b/lib/tests/completionlib_test.php index 23d7770bc2d..5062e3b23ee 100644 --- a/lib/tests/completionlib_test.php +++ b/lib/tests/completionlib_test.php @@ -500,6 +500,7 @@ class core_completionlib_testcase extends advanced_testcase { $data->coursemoduleid = $cm->id; $data->completionstate = COMPLETION_COMPLETE; $data->timemodified = time(); + $data->viewed = COMPLETION_NOT_VIEWED; $c->internal_set_data($cm, $data); $d1 = $DB->get_field('course_modules_completion', 'id', array('coursemoduleid' => $cm->id)); @@ -518,6 +519,7 @@ class core_completionlib_testcase extends advanced_testcase { $d2->coursemoduleid = $cm2->id; $d2->completionstate = COMPLETION_COMPLETE; $d2->timemodified = time(); + $d2->viewed = COMPLETION_NOT_VIEWED; $c->internal_set_data($cm2, $d2); $this->assertFalse(isset($SESSION->completioncache)); @@ -533,6 +535,7 @@ class core_completionlib_testcase extends advanced_testcase { $d3->coursemoduleid = $cm3->id; $d3->completionstate = COMPLETION_COMPLETE; $d3->timemodified = time(); + $d3->viewed = COMPLETION_NOT_VIEWED; $DB->insert_record('course_modules_completion', $d3); $c->internal_set_data($cm, $data); } diff --git a/lib/tests/event_test.php b/lib/tests/event_test.php index 713fc14b649..0c3458e32fa 100644 --- a/lib/tests/event_test.php +++ b/lib/tests/event_test.php @@ -709,8 +709,9 @@ class core_event_testcase extends advanced_testcase { $event->add_record_snapshot('course', $course1); - $result = $event->get_record_snapshot('course', 1, $course1); - $this->assertSame($course1, $result); + $result = $event->get_record_snapshot('course', 1); + // Convert to arrays because record snapshot returns a clone of the object. + $this->assertSame((array)$course1, (array)$result); $user = $event->get_record_snapshot('user', 1); $this->assertEquals(1, $user->id); diff --git a/mod/book/index.php b/mod/book/index.php index 027f2355284..f58f358a65c 100644 --- a/mod/book/index.php +++ b/mod/book/index.php @@ -51,6 +51,7 @@ $params = array( 'context' => context_course::instance($course->id) ); $event = \mod_book\event\course_module_instance_list_viewed::create($params); +$event->add_record_snapshot('course', $course); $event->trigger(); // Get all the appropriate data diff --git a/mod/book/view.php b/mod/book/view.php index 0f3901df820..acb7f004a27 100644 --- a/mod/book/view.php +++ b/mod/book/view.php @@ -80,6 +80,8 @@ if ($chapterid == '0') { // Go to first chapter if no given. 'objectid' => $book->id ); $event = \mod_book\event\course_module_viewed::create($params); + $event->add_record_snapshot('course_modules', $cm); + $event->add_record_snapshot('course', $course); $event->add_record_snapshot('book', $book); $event->trigger(); diff --git a/mod/chat/index.php b/mod/chat/index.php index 35a43aa7d23..2e743aad06b 100644 --- a/mod/chat/index.php +++ b/mod/chat/index.php @@ -18,6 +18,7 @@ $params = array( 'context' => context_course::instance($id) ); $event = \mod_chat\event\course_module_instance_list_viewed::create($params); +$event->add_record_snapshot('course', $course); $event->trigger(); /// Get all required strings diff --git a/mod/choice/index.php b/mod/choice/index.php index 07e42340626..0fdff7f593a 100644 --- a/mod/choice/index.php +++ b/mod/choice/index.php @@ -16,6 +16,7 @@ $eventdata = array('context' => context_course::instance($id)); $event = \mod_choice\event\course_module_instance_list_viewed::create($eventdata); + $event->add_record_snapshot('course', $course); $event->trigger(); $strchoice = get_string("modulename", "choice"); diff --git a/mod/choice/view.php b/mod/choice/view.php index 27089f592e4..55e1086de0c 100644 --- a/mod/choice/view.php +++ b/mod/choice/view.php @@ -81,9 +81,10 @@ $eventdata = array(); $eventdata['objectid'] = $choice->id; $eventdata['context'] = $context; - $eventdata['courseid'] = $course->id; $event = \mod_choice\event\course_module_viewed::create($eventdata); + $event->add_record_snapshot('course_modules', $cm); + $event->add_record_snapshot('course', $course); $event->trigger(); /// Check to see if groups are being used in this choice diff --git a/mod/data/index.php b/mod/data/index.php index 1f7f11ef462..80eecf7224d 100644 --- a/mod/data/index.php +++ b/mod/data/index.php @@ -43,6 +43,7 @@ $params = array( 'context' => context_course::instance($course->id) ); $event = \mod_data\event\course_module_instance_list_viewed::create($params); +$event->add_record_snapshot('course', $course); $event->trigger(); $strname = get_string('name'); diff --git a/mod/data/view.php b/mod/data/view.php index 1454f902ec7..1d53a5b2ec2 100644 --- a/mod/data/view.php +++ b/mod/data/view.php @@ -260,6 +260,8 @@ 'objectid' => $data->id ); $event = \mod_data\event\course_module_viewed::create($params); + $event->add_record_snapshot('course_modules', $cm); + $event->add_record_snapshot('course', $course); $event->add_record_snapshot('data', $data); $event->trigger(); diff --git a/mod/feedback/classes/event/course_module_viewed.php b/mod/feedback/classes/event/course_module_viewed.php index 9e21da0549e..b822bca68c2 100644 --- a/mod/feedback/classes/event/course_module_viewed.php +++ b/mod/feedback/classes/event/course_module_viewed.php @@ -92,9 +92,6 @@ class course_module_viewed extends \core\event\course_module_viewed { if (!isset($this->other['anonymous'])) { throw new \coding_exception("Field other['anonymous'] cannot be empty"); } - if (!isset($this->other['cmid'])) { - throw new \coding_exception("Field other['cmid'] cannot be empty"); - } // Call parent validations. parent::validate_data(); diff --git a/mod/feedback/index.php b/mod/feedback/index.php index 90a2ba76479..44d84c5430a 100644 --- a/mod/feedback/index.php +++ b/mod/feedback/index.php @@ -42,6 +42,7 @@ $PAGE->set_pagelayout('incourse'); // Trigger instances list viewed event. $event = \mod_feedback\event\course_module_instance_list_viewed::create(array('context' => $context)); +$event->add_record_snapshot('course', $course); $event->trigger(); /// Print the page header diff --git a/mod/feedback/tests/events_test.php b/mod/feedback/tests/events_test.php index 4d887114b6e..6da1f61197d 100644 --- a/mod/feedback/tests/events_test.php +++ b/mod/feedback/tests/events_test.php @@ -176,39 +176,11 @@ class mod_feedback_events_testcase extends advanced_testcase { $context = context_module::instance($this->eventcm->id); - // Test not setting instanceid. - try { - \mod_feedback\event\response_deleted::create(array( - 'context' => $context, - 'objectid' => $this->eventfeedbackcompleted->id, - 'other' => array('cmid' => $this->eventcm->id, 'anonymous' => 2) - )); - $this->assertEventContextNotUsed($event); - $this->fail("Event validation should not allow \\mod_feedback\\event\\response_deleted to be triggered without - other['instanceid']"); - } catch (coding_exception $e) { - $this->assertContains("Field other['instanceid'] cannot be empty", $e->getMessage()); - } - - // Test not setting cmid. - try { - \mod_feedback\event\response_deleted::create(array( - 'context' => $context, - 'objectid' => $this->eventfeedbackcompleted->id, - 'other' => array('instanceid' => $this->eventfeedback->id, 'anonymous' => 2) - )); - $this->fail("Event validation should not allow \\mod_feedback\\event\\response_deleted to be triggered without - other['cmid']"); - } catch (coding_exception $e) { - $this->assertContains("Field other['cmid'] cannot be empty", $e->getMessage()); - } - - // Test not setting anonymous. + // Test not setting other['anonymous']. try { \mod_feedback\event\response_submitted::create(array( 'context' => $context, - 'objectid' => $this->eventfeedbackcompleted->id, - 'other' => array('cmid' => $this->eventcm->id, 'instanceid' => $this->eventfeedback->id) + 'objectid' => $this->eventfeedbackcompleted->id )); $this->fail("Event validation should not allow \\mod_feedback\\event\\response_deleted to be triggered without other['anonymous']"); @@ -252,8 +224,6 @@ class mod_feedback_events_testcase extends advanced_testcase { $this->assertEquals($USER->id, $event->userid); $this->assertEquals($USER->id, $event->relateduserid); $this->assertEquals('feedback_completed', $event->objecttable); - $this->assertEquals($this->eventcm->id, $event->other['cmid']); - $this->assertEquals($this->eventcm->instance, $event->other['instanceid']); $this->assertEquals(FEEDBACK_ANONYMOUS_YES, $event->other['anonymous']); $this->setUser($this->eventuser); $this->assertFalse($event->can_view()); diff --git a/mod/feedback/view.php b/mod/feedback/view.php index bb2a6c362a5..75f86b7035e 100644 --- a/mod/feedback/view.php +++ b/mod/feedback/view.php @@ -101,11 +101,9 @@ $event = \mod_feedback\event\course_module_viewed::create(array( 'objectid' => $feedback->id, 'context' => $context, 'other' => array( - 'cmid' => $cm->id, - 'instanceid' => $feedback->id, 'anonymous' => $feedback->anonymous - ) - )); + ) +)); $event->add_record_snapshot('course_modules', $cm); $event->add_record_snapshot('course', $course); $event->add_record_snapshot('feedback', $feedback); diff --git a/mod/folder/index.php b/mod/folder/index.php index e28c99ed178..bbe79f1379b 100644 --- a/mod/folder/index.php +++ b/mod/folder/index.php @@ -36,6 +36,7 @@ $params = array( 'context' => context_course::instance($course->id) ); $event = \mod_folder\event\course_module_instance_list_viewed::create($params); +$event->add_record_snapshot('course', $course); $event->trigger(); $strfolder = get_string('modulename', 'folder'); diff --git a/mod/folder/view.php b/mod/folder/view.php index a30cbf04668..afdbcfafc49 100644 --- a/mod/folder/view.php +++ b/mod/folder/view.php @@ -54,6 +54,8 @@ $params = array( 'objectid' => $folder->id ); $event = \mod_folder\event\course_module_viewed::create($params); +$event->add_record_snapshot('course_modules', $cm); +$event->add_record_snapshot('course', $course); $event->add_record_snapshot('folder', $folder); $event->trigger(); diff --git a/mod/forum/classes/event/forum_viewed.php b/mod/forum/classes/event/course_module_viewed.php similarity index 65% rename from mod/forum/classes/event/forum_viewed.php rename to mod/forum/classes/event/course_module_viewed.php index 2df082666d0..dbc5eddd2a5 100644 --- a/mod/forum/classes/event/forum_viewed.php +++ b/mod/forum/classes/event/course_module_viewed.php @@ -33,7 +33,7 @@ defined('MOODLE_INTERNAL') || die(); * @copyright 2014 Dan Poltawski * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -class forum_viewed extends \core\event\base { +class course_module_viewed extends \core\event\course_module_viewed { /** * Init method. @@ -46,31 +46,13 @@ class forum_viewed extends \core\event\base { $this->data['objecttable'] = 'forum'; } - /** - * Returns description of what happened. - * - * @return string - */ - public function get_description() { - return "The user {$this->userid} has viewed the forum {$this->objectid}"; - } - - /** - * Return localised event name. - * - * @return string - */ - public static function get_name() { - return get_string('eventforumviewed', 'mod_forum'); - } - /** * Get URL related to the action * * @return \moodle_url */ public function get_url() { - return new \moodle_url('/mod/forum/view.php', array('d' => $this->objectid)); + return new \moodle_url('/mod/forum/view.php', array('f' => $this->objectid)); } /** @@ -83,24 +65,5 @@ class forum_viewed extends \core\event\base { $this->objectid, $this->contextinstanceid); } - /** - * Custom validation. - * - * @throws \coding_exception - * @return void - */ - protected function validate_data() { - parent::validate_data(); - - if ($this->contextlevel != CONTEXT_MODULE) { - throw new \coding_exception('Context passed must be module context.'); - } - - if (!isset($this->objectid)) { - throw new \coding_exception('objectid must be set to the forumid.'); - } - - } - } diff --git a/mod/forum/index.php b/mod/forum/index.php index f3e849bb0f5..a7941fb8872 100644 --- a/mod/forum/index.php +++ b/mod/forum/index.php @@ -55,6 +55,7 @@ $params = array( 'context' => context_course::instance($course->id) ); $event = \mod_forum\event\course_module_instance_list_viewed::create($params); +$event->add_record_snapshot('course', $course); $event->trigger(); $strforums = get_string('forums', 'forum'); diff --git a/mod/forum/lang/en/forum.php b/mod/forum/lang/en/forum.php index dc1ab55a1c0..7c775c8d549 100644 --- a/mod/forum/lang/en/forum.php +++ b/mod/forum/lang/en/forum.php @@ -150,7 +150,6 @@ $string['eventdiscussionupdated'] = 'Discussion updated'; $string['eventdiscussiondeleted'] = 'Discussion deleted'; $string['eventdiscussionmoved'] = 'Discussion moved'; $string['eventdiscussionviewed'] = 'Discussion viewed'; -$string['eventforumviewed'] = 'Forum viewed'; $string['eventuserreportviewed'] = 'User report viewed'; $string['eventpostcreated'] = 'Post created'; $string['eventpostdeleted'] = 'Post deleted'; diff --git a/mod/forum/lib.php b/mod/forum/lib.php index 856ff598105..37bae10900c 100644 --- a/mod/forum/lib.php +++ b/mod/forum/lib.php @@ -4342,6 +4342,12 @@ function forum_add_new_post($post, $mform, &$message) { $post->mailed = FORUM_MAILED_PENDING; $post->userid = $USER->id; $post->attachment = ""; + if (!isset($post->totalscore)) { + $post->totalscore = 0; + } + if (!isset($post->mailnow)) { + $post->mailnow = 0; + } $post->id = $DB->insert_record("forum_posts", $post); $post->message = file_save_draft_area_files($post->itemid, $context->id, 'mod_forum', 'post', $post->id, @@ -4469,6 +4475,7 @@ function forum_add_discussion($discussion, $mform=null, $unused=null, $userid=nu $discussion->timemodified = $timenow; $discussion->usermodified = $post->userid; $discussion->userid = $userid; + $discussion->assessed = 0; $post->discussion = $DB->insert_record("forum_discussions", $discussion); diff --git a/mod/forum/post.php b/mod/forum/post.php index 868c51412cc..84223fc34ab 100644 --- a/mod/forum/post.php +++ b/mod/forum/post.php @@ -755,7 +755,6 @@ if ($fromform = $mform_post->get_data()) { } $event = \mod_forum\event\post_updated::create($params); - $event->add_record_snapshot('forum_posts', $fromform); $event->add_record_snapshot('forum_discussions', $discussion); $event->trigger(); diff --git a/mod/forum/tests/events_test.php b/mod/forum/tests/events_test.php index 105b42ac0fa..388373d2713 100644 --- a/mod/forum/tests/events_test.php +++ b/mod/forum/tests/events_test.php @@ -595,9 +595,9 @@ class mod_forum_events_testcase extends advanced_testcase { } /** - * Ensure forum_viewed event validates that the forumid is set. + * Ensure course_module_viewed event validates that the forumid is set. */ - public function test_forum_viewed_objectid_validation() { + public function test_course_module_viewed_objectid_validation() { $course = $this->getDataGenerator()->create_course(); $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); $context = context_module::instance($forum->cmid); @@ -606,14 +606,14 @@ class mod_forum_events_testcase extends advanced_testcase { 'context' => $context, ); - $this->setExpectedException('coding_exception', 'objectid must be set to the forumid.'); - \mod_forum\event\forum_viewed::create($params); + $this->setExpectedException('coding_exception', 'must define objectid'); + \mod_forum\event\course_module_viewed::create($params); } /** - * Ensure forum_viewed event validates that the contextlevel is correct. + * Ensure course_module_viewed event validates that the contextlevel is correct. */ - public function test_forum_viewed_context_validation() { + public function test_course_module_viewed_context_validation() { $course = $this->getDataGenerator()->create_course(); $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); @@ -623,13 +623,13 @@ class mod_forum_events_testcase extends advanced_testcase { ); $this->setExpectedException('coding_exception', 'Context passed must be module context.'); - \mod_forum\event\forum_viewed::create($params); + \mod_forum\event\course_module_viewed::create($params); } /** - * Test the forum_viewed event. + * Test the course_module_viewed event. */ - public function test_forum_viewed() { + public function test_course_module_viewed() { // Setup test data. $course = $this->getDataGenerator()->create_course(); $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); @@ -641,7 +641,7 @@ class mod_forum_events_testcase extends advanced_testcase { 'objectid' => $forum->id, ); - $event = \mod_forum\event\forum_viewed::create($params); + $event = \mod_forum\event\course_module_viewed::create($params); // Trigger and capture the event. $sink = $this->redirectEvents(); @@ -651,7 +651,7 @@ class mod_forum_events_testcase extends advanced_testcase { $event = reset($events); // Checking that the event contains the expected values. - $this->assertInstanceOf('\mod_forum\event\forum_viewed', $event); + $this->assertInstanceOf('\mod_forum\event\course_module_viewed', $event); $this->assertEquals($context, $event->get_context()); $expected = array($course->id, 'forum', 'view forum', "view.php?f={$forum->id}", $forum->id, $forum->cmid); $this->assertEventLegacyLogData($expected, $event); diff --git a/mod/forum/view.php b/mod/forum/view.php index 52dfbf3b074..9cd19aedbb6 100644 --- a/mod/forum/view.php +++ b/mod/forum/view.php @@ -133,7 +133,9 @@ 'context' => $context, 'objectid' => $forum->id ); - $event = \mod_forum\event\forum_viewed::create($params); + $event = \mod_forum\event\course_module_viewed::create($params); + $event->add_record_snapshot('course_modules', $cm); + $event->add_record_snapshot('course', $course); $event->add_record_snapshot('forum', $forum); $event->trigger(); diff --git a/mod/lesson/index.php b/mod/lesson/index.php index ad143e4c6e7..a6b05d172d7 100644 --- a/mod/lesson/index.php +++ b/mod/lesson/index.php @@ -43,6 +43,7 @@ $params = array( 'context' => context_course::instance($course->id) ); $event = \mod_lesson\event\course_module_instance_list_viewed::create($params); +$event->add_record_snapshot('course', $course); $event->trigger(); /// Get all required strings diff --git a/mod/lesson/view.php b/mod/lesson/view.php index 1e28ab6a7cb..0a008b9640b 100644 --- a/mod/lesson/view.php +++ b/mod/lesson/view.php @@ -287,9 +287,10 @@ if ($pageid != LESSON_EOL) { // Trigger module viewed event. $event = \mod_lesson\event\course_module_viewed::create(array( 'objectid' => $lesson->id, - 'context' => $context, - 'courseid' => $course->id + 'context' => $context )); + $event->add_record_snapshot('course_modules', $cm); + $event->add_record_snapshot('course', $course); $event->trigger(); // This is where several messages (usually warnings) are displayed diff --git a/mod/lti/index.php b/mod/lti/index.php index 9e931f0b437..eab02809fa9 100644 --- a/mod/lti/index.php +++ b/mod/lti/index.php @@ -59,6 +59,7 @@ $params = array( 'context' => context_course::instance($course->id) ); $event = \mod_lti\event\course_module_instance_list_viewed::create($params); +$event->add_record_snapshot('course', $course); $event->trigger(); $PAGE->set_url('/mod/lti/index.php', array('id' => $course->id)); diff --git a/mod/lti/view.php b/mod/lti/view.php index d61632eaa61..e31adc7f052 100644 --- a/mod/lti/view.php +++ b/mod/lti/view.php @@ -100,6 +100,8 @@ $params = array( 'objectid' => $lti->id ); $event = \mod_lti\event\course_module_viewed::create($params); +$event->add_record_snapshot('course_modules', $cm); +$event->add_record_snapshot('course', $course); $event->add_record_snapshot('lti', $lti); $event->trigger(); diff --git a/mod/page/index.php b/mod/page/index.php index 08906b87eda..53138b2b945 100644 --- a/mod/page/index.php +++ b/mod/page/index.php @@ -34,6 +34,7 @@ $PAGE->set_pagelayout('incourse'); // Trigger instances list viewed event. $event = \mod_page\event\course_module_instance_list_viewed::create(array('context' => context_course::instance($course->id))); +$event->add_record_snapshot('course', $course); $event->trigger(); $strpage = get_string('modulename', 'page'); diff --git a/mod/quiz/locallib.php b/mod/quiz/locallib.php index 72098e717ce..dc894b5e98b 100644 --- a/mod/quiz/locallib.php +++ b/mod/quiz/locallib.php @@ -124,6 +124,8 @@ function quiz_create_attempt(quiz $quizobj, $attemptnumber, $lastattempt, $timen $attempt->timefinish = 0; $attempt->timemodified = $timenow; $attempt->state = quiz_attempt::IN_PROGRESS; + $attempt->currentpage = 0; + $attempt->sumgrades = null; // If this is a preview, mark it as such. if ($ispreview) { diff --git a/mod/resource/index.php b/mod/resource/index.php index c2dc84ad770..91a58880373 100644 --- a/mod/resource/index.php +++ b/mod/resource/index.php @@ -36,6 +36,7 @@ $params = array( 'context' => context_course::instance($course->id) ); $event = \mod_resource\event\course_module_instance_list_viewed::create($params); +$event->add_record_snapshot('course', $course); $event->trigger(); $strresource = get_string('modulename', 'resource'); diff --git a/mod/resource/view.php b/mod/resource/view.php index e2e3eedc064..59ad58cc9fe 100644 --- a/mod/resource/view.php +++ b/mod/resource/view.php @@ -57,6 +57,8 @@ $params = array( 'objectid' => $resource->id ); $event = \mod_resource\event\course_module_viewed::create($params); +$event->add_record_snapshot('course_modules', $cm); +$event->add_record_snapshot('course', $course); $event->add_record_snapshot('resource', $resource); $event->trigger(); diff --git a/mod/scorm/index.php b/mod/scorm/index.php index 9cacc1c487b..95a65d7b858 100644 --- a/mod/scorm/index.php +++ b/mod/scorm/index.php @@ -34,6 +34,7 @@ $PAGE->set_pagelayout('incourse'); // Trigger instances list viewed event. $event = \mod_scorm\event\course_module_instance_list_viewed::create(array('context' => context_course::instance($course->id))); +$event->add_record_snapshot('course', $course); $event->trigger(); $strscorm = get_string("modulename", "scorm"); diff --git a/mod/scorm/view.php b/mod/scorm/view.php index 8f8d5be7669..abfd994a917 100644 --- a/mod/scorm/view.php +++ b/mod/scorm/view.php @@ -118,6 +118,7 @@ $event = \mod_scorm\event\course_module_viewed::create(array( 'objectid' => $scorm->id, 'context' => $contextmodule, )); +$event->add_record_snapshot('course', $course); $event->add_record_snapshot('scorm', $scorm); $event->add_record_snapshot('course_modules', $cm); $event->trigger(); diff --git a/mod/url/index.php b/mod/url/index.php index 9a105fb2fd0..6cbdb276430 100644 --- a/mod/url/index.php +++ b/mod/url/index.php @@ -36,6 +36,7 @@ $params = array( 'context' => context_course::instance($course->id) ); $event = \mod_url\event\course_module_instance_list_viewed::create($params); +$event->add_record_snapshot('course', $course); $event->trigger(); $strurl = get_string('modulename', 'url'); diff --git a/mod/url/view.php b/mod/url/view.php index 1c2d138a7a6..a4600f4281f 100644 --- a/mod/url/view.php +++ b/mod/url/view.php @@ -48,10 +48,11 @@ require_capability('mod/url:view', $context); $params = array( 'context' => $context, - 'objectid' => $url->id, - 'courseid' => $course->id + 'objectid' => $url->id ); $event = \mod_url\event\course_module_viewed::create($params); +$event->add_record_snapshot('course_modules', $cm); +$event->add_record_snapshot('course', $course); $event->add_record_snapshot('url', $url); $event->trigger(); diff --git a/mod/wiki/index.php b/mod/wiki/index.php index 2cb33feee38..8654658777f 100644 --- a/mod/wiki/index.php +++ b/mod/wiki/index.php @@ -46,6 +46,7 @@ $PAGE->set_pagelayout('incourse'); $context = context_course::instance($course->id); $event = \mod_wiki\event\course_module_instance_list_viewed::create(array('context' => $context)); +$event->add_record_snapshot('course', $course); $event->trigger(); /// Get all required stringswiki diff --git a/mod/wiki/view.php b/mod/wiki/view.php index f9894846abf..e2051e181b8 100644 --- a/mod/wiki/view.php +++ b/mod/wiki/view.php @@ -296,7 +296,6 @@ if($pageid) { ) ); $event->add_record_snapshot('wiki_pages', $page); - $event->trigger(); } else if($id) { $event = \mod_wiki\event\course_module_viewed::create( array( @@ -304,8 +303,6 @@ if($pageid) { 'objectid' => $wiki->id ) ); - $event->add_record_snapshot('wiki', $wiki); - $event->trigger(); } else if($wid && $title) { $event = \mod_wiki\event\page_viewed::create( array( @@ -320,9 +317,11 @@ if($pageid) { ) ); $event->add_record_snapshot('wiki_pages', $page); - $event->add_record_snapshot('wiki', $wiki); - $event->trigger(); } +$event->add_record_snapshot('course_modules', $cm); +$event->add_record_snapshot('course', $course); +$event->add_record_snapshot('wiki', $wiki); +$event->trigger(); $wikipage->print_header(); $wikipage->print_content(); diff --git a/mod/workshop/classes/event/instances_list_viewed.php b/mod/workshop/classes/event/course_module_instance_list_viewed.php similarity index 54% rename from mod/workshop/classes/event/instances_list_viewed.php rename to mod/workshop/classes/event/course_module_instance_list_viewed.php index d4a25579b41..6dfd9465237 100644 --- a/mod/workshop/classes/event/instances_list_viewed.php +++ b/mod/workshop/classes/event/course_module_instance_list_viewed.php @@ -34,42 +34,5 @@ defined('MOODLE_INTERNAL') || die(); * @copyright 2013 Adrian Greeve * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -class instances_list_viewed extends \core\event\course_module_instance_list_viewed { - - /** - * Returns description of what happened. - * - * @return string - */ - public function get_description() { - return 'User ' . $this->userid . ' viewed the list of workshop activities in the course ' . $this->courseid . '.'; - } - - /** - * Return the legacy event log data. - * - * @return array|null - */ - protected function get_legacy_logdata() { - return array($this->courseid, 'workshop', 'view all', 'index.php?id=' . $this->courseid, ''); - } - - /** - * Return localised event name. - * - * @return string - */ - public static function get_name() { - return get_string('eventinstanceslistviewed', 'mod_workshop'); - } - - /** - * Get URL related to the action - * - * @return \moodle_url - */ - public function get_url() { - return new \moodle_url('/mod/workshop/index.php', array('id' => $this->courseid)); - } - +class course_module_instance_list_viewed extends \core\event\course_module_instance_list_viewed { } diff --git a/mod/workshop/index.php b/mod/workshop/index.php index a11bf7b8ebd..02c513bba25 100644 --- a/mod/workshop/index.php +++ b/mod/workshop/index.php @@ -43,7 +43,8 @@ $PAGE->navbar->add(get_string('modulenameplural', 'workshop')); echo $OUTPUT->header(); $params = array('context' => context_course::instance($course->id)); -$event = \mod_workshop\event\instances_list_viewed::create($params); +$event = \mod_workshop\event\course_module_instance_list_viewed::create($params); +$event->add_record_snapshot('course', $course); $event->trigger(); /// Get all the appropriate data diff --git a/mod/workshop/lang/en/workshop.php b/mod/workshop/lang/en/workshop.php index 52f4ba83171..c3dbf7cf20e 100644 --- a/mod/workshop/lang/en/workshop.php +++ b/mod/workshop/lang/en/workshop.php @@ -108,7 +108,6 @@ $string['eventassessmentevaluationsreset'] = 'Assessment evaluations reset'; $string['eventassessableuploaded'] = 'Assessable uploaded'; $string['eventassessmentevaluated'] = 'Assessment evaluated'; $string['eventassessmentreevaluated'] = 'Assessment re-evaluated'; -$string['eventinstanceslistviewed'] = 'Workshop instance list viewed'; $string['eventsubmissionassessed'] = 'Submission assessed'; $string['eventsubmissionassessmentsreset'] = 'Submission assessments cleared'; $string['eventsubmissioncreated'] = 'Submission created'; diff --git a/mod/workshop/submission.php b/mod/workshop/submission.php index 999be07dd74..abf0cb5ebcd 100644 --- a/mod/workshop/submission.php +++ b/mod/workshop/submission.php @@ -232,7 +232,7 @@ if ($edit) { // store the updated values or re-save the new submission (re-saving needed because URLs are now rewritten) $DB->update_record('workshop_submissions', $formdata); $event = \mod_workshop\event\submission_updated::create($params); - $event->add_record_snapshot('workshop_submissions', $formdata); + $event->add_record_snapshot('workshop', $workshop); $event->trigger(); // send submitted content for plagiarism detection diff --git a/mod/workshop/tests/events_test.php b/mod/workshop/tests/events_test.php index 42f6491271d..db0384936dc 100644 --- a/mod/workshop/tests/events_test.php +++ b/mod/workshop/tests/events_test.php @@ -193,7 +193,7 @@ class mod_workshop_events_testcase extends advanced_testcase { $context = context_course::instance($this->course->id); - $event = \mod_workshop\event\instances_list_viewed::create(array('context' => $context)); + $event = \mod_workshop\event\course_module_instance_list_viewed::create(array('context' => $context)); // Trigger and capture the event. $sink = $this->redirectEvents(); diff --git a/mod/workshop/view.php b/mod/workshop/view.php index 6b1b5b2a7f0..de989f25b83 100644 --- a/mod/workshop/view.php +++ b/mod/workshop/view.php @@ -61,7 +61,6 @@ $completion->set_module_viewed($cm); $eventdata = array(); $eventdata['objectid'] = $workshop->id; $eventdata['context'] = $workshop->context; -$eventdata['courseid'] = $course->id; $PAGE->set_url($workshop->view_url()); $event = \mod_workshop\event\course_module_viewed::create($eventdata);