From dce7ec41e996b1e3dc6e5d6ca65335acbb24466d Mon Sep 17 00:00:00 2001 From: Petr Skoda Date: Wed, 23 Apr 2014 11:26:52 +0800 Subject: [PATCH] MDL-45219 add course recent_activity_viewed event --- course/recent.php | 5 +- lang/en/moodle.php | 1 + lib/classes/event/recent_activity_viewed.php | 95 ++++++++++++++++++++ lib/tests/events_test.php | 25 ++++++ 4 files changed, 123 insertions(+), 3 deletions(-) create mode 100644 lib/classes/event/recent_activity_viewed.php diff --git a/course/recent.php b/course/recent.php index 11e3d5c1cfc..72bb761bad0 100644 --- a/course/recent.php +++ b/course/recent.php @@ -37,11 +37,10 @@ if (!$course = $DB->get_record('course', array('id'=>$id))) { } require_login($course); - -add_to_log($course->id, "course", "recent", "recent.php?id=$course->id", $course->id); - $context = context_course::instance($course->id); +\core\event\recent_activity_viewed::create(array('context' => $context))->trigger(); + $lastlogin = time() - COURSE_MAX_RECENT_PERIOD; if (!isguestuser() and !empty($USER->lastcourseaccess[$COURSE->id])) { if ($USER->lastcourseaccess[$COURSE->id] > $lastlogin) { diff --git a/lang/en/moodle.php b/lang/en/moodle.php index 40e83ca4b03..c6bd851e8b1 100644 --- a/lang/en/moodle.php +++ b/lang/en/moodle.php @@ -741,6 +741,7 @@ $string['eventcourseuserreportviewed'] = 'Course user report viewed'; $string['eventcourseviewed'] = 'Course viewed'; $string['eventemailfailed'] = 'Email failed to send'; $string['eventname'] = 'Event name'; +$string['eventrecentactivityviewed'] = 'Recent activity viewed'; $string['eventunknownlogged'] = 'Unknown event'; $string['eventusercreated'] = 'User created'; $string['eventuserdeleted'] = 'User deleted'; diff --git a/lib/classes/event/recent_activity_viewed.php b/lib/classes/event/recent_activity_viewed.php new file mode 100644 index 00000000000..9c88a93c6cc --- /dev/null +++ b/lib/classes/event/recent_activity_viewed.php @@ -0,0 +1,95 @@ +. + +/** + * Event for recent activity page. + * + * @package core + * @copyright 2014 Petr Skoda + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +namespace core\event; + +/** + * Event for recent activity page. + * + * @package core + * @since Moodle 2.7 + * @copyright 2014 Petr Skoda + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class recent_activity_viewed extends \core\event\base { + + /** + * Init method. + * + * @return void + */ + protected function init() { + $this->data['crud'] = 'r'; + $this->data['edulevel'] = self::LEVEL_OTHER; + } + + /** + * Return localised event name. + * + * @return string + */ + public static function get_name() { + return get_string('eventrecentactivityviewed', 'core'); + } + + /** + * Returns description of what happened. + * + * @return string + */ + public function get_description() { + return "The user with id " . $this->userid . " viewed recent activity report in course " . $this->courseid; + } + + /** + * Return the legacy event log data. + * + * @return array + */ + protected function get_legacy_logdata() { + return array($this->courseid, "course", "recent", "recent.php?id=$this->courseid", $this->courseid); + } + + /** + * Returns relevant URL. + * + * @return \moodle_url + */ + public function get_url() { + return new \moodle_url('/course/recent.php', array('id' => $this->courseid)); + } + + /** + * Custom validation. + * + * @throws \coding_exception + */ + protected function validate_data() { + parent::validate_data(); + + if ($this->contextlevel != CONTEXT_COURSE) { + throw new \coding_exception('recent_activity_viewed event expects only course contexts.'); + } + } +} + diff --git a/lib/tests/events_test.php b/lib/tests/events_test.php index a6a665e754c..ca0e178d9de 100644 --- a/lib/tests/events_test.php +++ b/lib/tests/events_test.php @@ -262,4 +262,29 @@ class core_events_testcase extends advanced_testcase { $this->assertInstanceOf('\core\event\course_viewed', $restored); $this->assertNull($restored->get_url()); } + + public function test_recent_capability_viewed() { + $this->resetAfterTest(); + + $this->setAdminUser(); + $course = $this->getDataGenerator()->create_course(); + $context = context_course::instance($course->id); + + $event = \core\event\recent_activity_viewed::create(array('context' => $context)); + + // Trigger and capture the event. + $sink = $this->redirectEvents(); + $event->trigger(); + $events = $sink->get_events(); + $event = reset($events); + + $this->assertInstanceOf('\core\event\recent_activity_viewed', $event); + $this->assertEquals($context, $event->get_context()); + $expected = array($course->id, "course", "recent", "recent.php?id=$course->id", $course->id); + $this->assertEventLegacyLogData($expected, $event); + $this->assertEventContextNotUsed($event); + $url = new moodle_url('/course/recent.php', array('id' => $course->id)); + $this->assertEquals($url, $event->get_url()); + $event->get_name(); + } }