diff --git a/lang/en/moodle.php b/lang/en/moodle.php index 9d0ac3ce0ae..4937bcd23fd 100644 --- a/lang/en/moodle.php +++ b/lang/en/moodle.php @@ -742,6 +742,9 @@ $string['eventcoursesectionupdated'] = 'Course section updated'; $string['eventcoursemoduleinstancelistviewed'] = 'Course module instance list viewed'; $string['eventcourseuserreportviewed'] = 'Course user report viewed'; $string['eventcourseviewed'] = 'Course viewed'; +$string['eventdashboardreset'] = 'Dashboard reset'; +$string['eventdashboardsreset'] = 'Dashboards reset'; +$string['eventdashboardviewed'] = 'Dashboard viewed'; $string['eventemailfailed'] = 'Email failed to send'; $string['eventname'] = 'Event name'; $string['eventrecentactivityviewed'] = 'Recent activity viewed'; diff --git a/lib/classes/event/dashboard_reset.php b/lib/classes/event/dashboard_reset.php new file mode 100644 index 00000000000..76a10c246e9 --- /dev/null +++ b/lib/classes/event/dashboard_reset.php @@ -0,0 +1,69 @@ +. + +/** + * Dashboard reset event. + * + * @package core + * @copyright 2016 Stephen Bourget + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace core\event; +defined('MOODLE_INTERNAL') || die(); + +/** + * Dashboard reset event class. + * + * Class for event to be triggered when a dashboard is reset. + * + * @package core + * @since Moodle 3.2 + * @copyright 2016 Stephen Bourget + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class dashboard_reset extends base { + + /** + * Init method. + * + * @return void + */ + protected function init() { + $this->data['crud'] = 'u'; + $this->data['edulevel'] = self::LEVEL_OTHER; + + } + + /** + * Returns description of what happened. + * + * @return string + */ + public function get_description() { + return "The user with id '$this->userid' has reset their dashboard"; + } + + /** + * Return localised event name. + * + * @return string + */ + public static function get_name() { + return get_string('eventdashboardreset', 'core'); + } + +} diff --git a/lib/classes/event/dashboard_viewed.php b/lib/classes/event/dashboard_viewed.php new file mode 100644 index 00000000000..22c319973db --- /dev/null +++ b/lib/classes/event/dashboard_viewed.php @@ -0,0 +1,68 @@ +. + +/** + * Dashboard viewed event. + * + * @package core + * @copyright 2016 Stephen Bourget + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace core\event; +defined('MOODLE_INTERNAL') || die(); + +/** + * Dashboard viewed event class. + * + * Class for event to be triggered when a dashboard is viewed. + * + * @package core + * @since Moodle 3.2 + * @copyright 2016 Stephen Bourget + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class dashboard_viewed extends base { + + /** + * Init method. + * + * @return void + */ + protected function init() { + $this->data['crud'] = 'r'; + $this->data['edulevel'] = self::LEVEL_OTHER; + } + + /** + * Returns description of what happened. + * + * @return string + */ + public function get_description() { + return "The user with id '$this->userid' has viewed their dashboard"; + } + + /** + * Return localised event name. + * + * @return string + */ + public static function get_name() { + return get_string('eventdashboardviewed', 'core'); + } + +} diff --git a/lib/classes/event/dashboards_reset.php b/lib/classes/event/dashboards_reset.php new file mode 100644 index 00000000000..43b2c647ef6 --- /dev/null +++ b/lib/classes/event/dashboards_reset.php @@ -0,0 +1,76 @@ +. + +/** + * Dashboards reset event. + * + * @package core + * @copyright 2016 Stephen Bourget + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace core\event; +defined('MOODLE_INTERNAL') || die(); + +/** + * Dashboards reset event class. + * + * Class for event to be triggered when all user dashboards are reset. + * + * @package core + * @since Moodle 3.2 + * @copyright 2016 Stephen Bourget + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class dashboards_reset extends base { + + /** + * Init method. + * + * @return void + */ + protected function init() { + $this->data['crud'] = 'u'; + $this->data['edulevel'] = self::LEVEL_OTHER; + } + + /** + * Returns description of what happened. + * + * @return string + */ + public function get_description() { + return "The user with id '$this->userid' has reset all user dashboards"; + } + + /** + * Return localised event name. + * + * @return string + */ + public static function get_name() { + return get_string('eventdashboardsreset', 'core'); + } + + /** + * Get URL related to the action. + * + * @return \moodle_url|null + */ + public function get_url() { + return new \moodle_url('/my/indexsys.php'); + } +} diff --git a/my/index.php b/my/index.php index 8bad3d9a927..cd2b8cf1593 100644 --- a/my/index.php +++ b/my/index.php @@ -166,3 +166,8 @@ echo $OUTPUT->header(); echo $OUTPUT->custom_block_region('content'); echo $OUTPUT->footer(); + +// Trigger dashboard has been viewed event. +$eventparams = array('context' => $context); +$event = \core\event\dashboard_viewed::create($eventparams); +$event->trigger(); diff --git a/my/lib.php b/my/lib.php index 3192c3293f4..d458139a286 100644 --- a/my/lib.php +++ b/my/lib.php @@ -133,6 +133,11 @@ function my_reset_page($userid, $private=MY_PAGE_PRIVATE, $pagetype='my-index') if (!$systempage = $DB->get_record('my_pages', array('userid' => null, 'private' => $private))) { return false; // error } + + // Trigger dashboard has been reset event. + $eventparams = array('context' => context_user::instance($userid)); + $event = \core\event\dashboard_reset::create($eventparams); + $event->trigger(); return $systempage; } @@ -175,6 +180,11 @@ function my_reset_page_for_all_users($private = MY_PAGE_PRIVATE, $pagetype = 'my // We should be good to go now. $transaction->allow_commit(); + + // Trigger dashboard has been reset event. + $eventparams = array('context' => context_system::instance()); + $event = \core\event\dashboards_reset::create($eventparams); + $event->trigger(); } class my_syspage_block_manager extends block_manager { diff --git a/my/tests/events_test.php b/my/tests/events_test.php new file mode 100644 index 00000000000..f9b77e66bb2 --- /dev/null +++ b/my/tests/events_test.php @@ -0,0 +1,129 @@ +. + +/** + * Events tests. + * + * @package core + * @category test + * @copyright 2016 Stephen Bourget + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +global $CFG; +/** + * Unit tests for the dashboard events. + * + * @copyright 2016 Stephen Bourget + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class dashboard_events_testcase extends advanced_testcase { + + /** @var user cobject */ + protected $user; + + /** + * Setup often used objects for the following tests. + */ + protected function setup() { + global $USER; + + $this->resetAfterTest(); + + // The user we are going to test this on. + $this->setAdminUser(); + $this->user = $USER; + } + + /** + * Test the dashboard viewed event. + * + * There is no external API for viewing the dashboard, so the unit test will simply + * create and trigger the event and ensure data is returned as expected. + */ + public function test_dashboard_viewed() { + + $user = $this->user; + // Trigger an event: dashboard viewed. + $eventparams = array( + 'context' => $context = context_system::instance() + ); + + $event = \core\event\dashboard_viewed::create($eventparams); + // Trigger and capture the event. + $sink = $this->redirectEvents(); + $event->trigger(); + $events = $sink->get_events(); + $event = reset($events); + + // Check that the event data is valid. + $this->assertInstanceOf('\core\event\dashboard_viewed', $event); + $this->assertEquals($user->id, $event->userid); + $this->assertDebuggingNotCalled(); + } + + /** + * Test the dashboard reset event. + * + * We will reset the user dashboard to + * trigger the event and ensure data is returned as expected. + */ + public function test_dashboard_reset() { + global $CFG; + require_once($CFG->dirroot . '/my/lib.php'); + $user = $this->user; + $sink = $this->redirectEvents(); + + // Reset the dashboard. + my_reset_page($user->id); + + // Trigger and capture the event. + $events = $sink->get_events(); + $event = reset($events); + + // Check that the event data is valid. + $this->assertInstanceOf('\core\event\dashboard_reset', $event); + $this->assertEquals($user->id, $event->userid); + $this->assertDebuggingNotCalled(); + } + + /** + * Test the dashboards reset event. + * + * We will reset all user dashboards to + * trigger the event and ensure data is returned as expected. + */ + public function test_dashboards_reset() { + global $CFG, $USER; + require_once($CFG->dirroot . '/my/lib.php'); + + $sink = $this->redirectEvents(); + + // Reset all dashbaords. + my_reset_page_for_all_users(); + + // Trigger and capture the event. + $events = $sink->get_events(); + $event = reset($events); + + // Check that the event data is valid. + $this->assertInstanceOf('\core\event\dashboards_reset', $event); + $this->assertEquals($USER->id, $event->userid); + $this->assertDebuggingNotCalled(); + } +}