diff --git a/completion/completion_completion.php b/completion/completion_completion.php index 18c78dceb8a..4e0a33c4436 100644 --- a/completion/completion_completion.php +++ b/completion/completion_completion.php @@ -161,17 +161,7 @@ class completion_completion extends data_object { // Save record. if ($result = $this->_save()) { $data = $this->get_record_data(); - $event = \core\event\course_completed::create( - array( - 'objectid' => $data->id, - 'userid' => $USER->id, - 'relateduserid' => $data->userid, - 'context' => context_course::instance($data->course), - 'courseid' => $data->course - ) - ); - $event->add_record_snapshot('course_completions', $data); - $event->trigger(); + \core\event\course_completed::create_from_completion($data)->trigger(); } return $result; diff --git a/course/tests/courselib_test.php b/course/tests/courselib_test.php index fac80f951d9..0ff62dd45ec 100644 --- a/course/tests/courselib_test.php +++ b/course/tests/courselib_test.php @@ -1813,7 +1813,7 @@ class core_course_courselib_testcase extends advanced_testcase { $this->assertEquals($course->id, $event->courseid); $this->assertEquals($coursecontext->id, $event->contextid); $this->assertEquals($section->section, $event->other['sectionnum']); - $expecteddesc = 'Course ' . $event->courseid . ' section ' . $event->other['sectionnum'] . ' updated by user ' . $event->userid; + $expecteddesc = "The user with the id '{$event->userid}' updated the section with the number '{$event->other['sectionnum']}' for the course with the id '{$event->courseid}'"; $this->assertEquals($expecteddesc, $event->get_description()); $url = new moodle_url('/course/editsection.php', array('id' => $event->objectid)); $this->assertEquals($url, $event->get_url()); diff --git a/lib/classes/event/course_completed.php b/lib/classes/event/course_completed.php index 32e129ef618..705251d6d0e 100644 --- a/lib/classes/event/course_completed.php +++ b/lib/classes/event/course_completed.php @@ -29,12 +29,37 @@ defined('MOODLE_INTERNAL') || die(); /** * Course completed event class. * + * @property-read int $relateduserid user who completed the course + * @property-read array $other { + * Extra information about event. + * + * - int relateduserid: deprecated since 2.7, please use property relateduserid + * } + * * @package core * @since Moodle 2.6 * @copyright 2013 Rajesh Taneja * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class course_completed extends base { + /** + * Create event from course_completion record. + * @param \stdClass $completion + * @return course_completed + */ + public static function create_from_completion(\stdClass $completion) { + $event = self::create( + array( + 'objectid' => $completion->id, + 'relateduserid' => $completion->userid, + 'context' => \context_course::instance($completion->course), + 'courseid' => $completion->course, + 'other' => array('relateduserid' => $completion->userid), // Deprecated since 2.7, please use property relateduserid. + ) + ); + $event->add_record_snapshot('course_completions', $completion); + return $event; + } /** * Initialise required event data properties. @@ -60,7 +85,7 @@ class course_completed extends base { * @return string */ public function get_description() { - return "The course with the id '$this->courseid' was completed by the user with the id '$this->userid'."; + return "The course with the id '$this->courseid' was completed for the user with the id '$this->relateduserid'."; } /** @@ -89,4 +114,16 @@ class course_completed extends base { protected function get_legacy_eventdata() { return $this->get_record_snapshot('course_completions', $this->objectid); } + + /** + * Custom validation. + * + * @throws \coding_exception + * @return void + */ + protected function validate_data() { + parent::validate_data(); + + // TODO: MDL-45319 add validation of relateduserid and other['relateduserid']. + } } diff --git a/mod/quiz/classes/event/attempt_becameoverdue.php b/mod/quiz/classes/event/attempt_becameoverdue.php index 50ee1154551..945107a8c3c 100644 --- a/mod/quiz/classes/event/attempt_becameoverdue.php +++ b/mod/quiz/classes/event/attempt_becameoverdue.php @@ -59,7 +59,7 @@ class attempt_becameoverdue extends \core\event\base { * @return string */ public function get_description() { - + return "Attempt with the id '$this->objectid' for the user with the id '$this->relateduserid' became overdue."; } /** diff --git a/mod/quiz/tests/events_test.php b/mod/quiz/tests/events_test.php index bad32a0205c..6c70949c2e7 100644 --- a/mod/quiz/tests/events_test.php +++ b/mod/quiz/tests/events_test.php @@ -138,6 +138,7 @@ class mod_quiz_events_testcase extends advanced_testcase { $this->assertEquals('quiz_attempts', $event->objecttable); $this->assertEquals($quizobj->get_context(), $event->get_context()); $this->assertEquals($attempt->userid, $event->relateduserid); + $this->assertNotEmpty($event->get_description()); // Submitterid should be the user, but as we are in PHP Unit, CLI_SCRIPT is set to true which sets null in submitterid. $this->assertEquals(null, $event->other['submitterid']); $this->assertEquals('quiz_attempt_overdue', $event->get_legacy_eventname()); diff --git a/mod/workshop/assessment.php b/mod/workshop/assessment.php index 7a33b104de3..a75b44e8c01 100644 --- a/mod/workshop/assessment.php +++ b/mod/workshop/assessment.php @@ -189,7 +189,7 @@ if (is_null($assessment->grade) and !$assessmenteditable) { if (count((array)$coredata) > 1 ) { $DB->update_record('workshop_assessments', $coredata); $params = array( - 'relateduserid' => $assessment->authorid, + 'relateduserid' => $submission->authorid, 'objectid' => $assessment->id, 'context' => $workshop->context, 'other' => array(