From 135dde74ed7c561c13e9d6e65d32ac3f8c544912 Mon Sep 17 00:00:00 2001 From: Rajesh Taneja Date: Thu, 8 Aug 2013 12:43:02 +0800 Subject: [PATCH] MDL-40042 Completion: added course_completion_updated event to remove related add_to_log --- course/completion.php | 10 ++- lang/en/completion.php | 1 + .../event/course_completion_updated.php | 82 +++++++++++++++++++ lib/tests/completionlib_test.php | 28 ++++++- 4 files changed, 118 insertions(+), 3 deletions(-) create mode 100644 lib/classes/event/course_completion_updated.php diff --git a/course/completion.php b/course/completion.php index 8c16a87f47d37..12e4859fd61ae 100644 --- a/course/completion.php +++ b/course/completion.php @@ -134,8 +134,14 @@ $aggregation->setMethod($data->role_aggregation); $aggregation->save(); - // Log changes. - add_to_log($course->id, 'course', 'completion updated', 'completion.php?id='.$course->id); + // Trigger an event for course module completion changed. + $event = \core\event\course_completion_updated::create( + array( + 'courseid' => $course->id, + 'context' => context_course::instance($course->id) + ) + ); + $event->trigger(); // Redirect to the course main page. $url = new moodle_url('/course/view.php', array('id' => $course->id)); diff --git a/lang/en/completion.php b/lang/en/completion.php index 5fdeed1b3b08f..56cae7725ffd3 100644 --- a/lang/en/completion.php +++ b/lang/en/completion.php @@ -124,6 +124,7 @@ $string['err_settingslocked'] = 'One or more students have already completed a criteria so the settings have been locked. Unlocking the completion criteria settings will delete any existing user data and may cause confusion.'; $string['err_system'] = 'An internal error occurred in the completion system. (System administrators can enable debugging information to see more detail.)'; $string['eventcoursecompleted'] = 'Course completed'; +$string['eventcoursecompletionupdated'] = 'Course completion updated'; $string['eventcoursemodulecompletionupdated'] = 'Course module completion updated'; $string['excelcsvdownload'] = 'Download in Excel-compatible format (.csv)'; $string['fraction'] = 'Fraction'; diff --git a/lib/classes/event/course_completion_updated.php b/lib/classes/event/course_completion_updated.php new file mode 100644 index 0000000000000..3da8eda028833 --- /dev/null +++ b/lib/classes/event/course_completion_updated.php @@ -0,0 +1,82 @@ +. + +/** + * Event when course module completion is updated. + * + * @package core + * @copyright 2013 Rajesh Taneja + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace core\event; + +defined('MOODLE_INTERNAL') || die(); + +/** + * Event when course module completion is updated. + * + * @package core + * @copyright 2013 Rajesh Taneja + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class course_completion_updated extends base { + + /** + * Initialise required event data properties. + */ + protected function init() { + $this->data['crud'] = 'u'; + // TODO: MDL-37658 set level. + $this->data['level'] = 50; + } + + /** + * Returns localised event name. + * + * @return string + */ + public static function get_name() { + return new get_string('eventcoursecompletionupdated', 'core_completion'); + } + + /** + * Returns non-localised event description with id's for admin use only. + * + * @return string + */ + public function get_description() { + return 'Course completion for course' . $this->courseid . ' is updated by user ' . $this->userid; + } + + /** + * Returns relevant URL. + * + * @return \moodle_url + */ + public function get_url() { + return new moodle_url('/course/completion.php', array('id' => $this->courseid)); + } + + /** + * Return legacy add_to_log() data. + * + * @return array of parameters to be passed to legacy add_to_log() function. + */ + protected function get_legacy_logdata() { + return array($this->courseid, 'course', 'completion updated', 'completion.php?id=' . $this->courseid); + } +} diff --git a/lib/tests/completionlib_test.php b/lib/tests/completionlib_test.php index 112b712f6fae7..9286a5f49c4f0 100644 --- a/lib/tests/completionlib_test.php +++ b/lib/tests/completionlib_test.php @@ -809,8 +809,34 @@ public function test_course_completed_event() { $data = $ccompletion->get_record_data(); $this->assertEventLegacyData($data, $event); } -} + /** + * Test course completed event. + */ + public function test_course_completion_updated_event() { + $this->setup_data(); + $coursecontext = context_course::instance($this->course->id); + $coursecompletionevent = \core\event\course_completion_updated::create( + array( + 'courseid' => $this->course->id, + 'context' => $coursecontext + ) + ); + + // Mark course as complete and get triggered event. + $sink = $this->redirectEvents(); + $coursecompletionevent->trigger(); + $events = $sink->get_events(); + $event = array_pop($events); + $sink->close(); + + $this->assertInstanceOf('\core\event\course_completion_updated', $event); + $this->assertEquals($this->course->id, $event->courseid); + $this->assertEquals($coursecontext, $event->get_context()); + $expectedlegacylog = array($this->course->id, 'course', 'completion updated', 'completion.php?id='.$this->course->id); + $this->assertEventLegacyLogData($expectedlegacylog, $event); + } +} class core_completionlib_fake_recordset implements Iterator { protected $closed;