Skip to content

Commit

Permalink
MDL-55910 events: backport MDL-45753 dashboard events
Browse files Browse the repository at this point in the history
  • Loading branch information
sbourget authored and LukeCarrier committed Sep 9, 2016
1 parent 2ab8015 commit e8924af
Show file tree
Hide file tree
Showing 7 changed files with 360 additions and 0 deletions.
3 changes: 3 additions & 0 deletions lang/en/moodle.php
Expand Up @@ -742,6 +742,9 @@
$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';
Expand Down
69 changes: 69 additions & 0 deletions lib/classes/event/dashboard_reset.php
@@ -0,0 +1,69 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.

/**
* 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');
}

}
68 changes: 68 additions & 0 deletions lib/classes/event/dashboard_viewed.php
@@ -0,0 +1,68 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.

/**
* 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');
}

}
76 changes: 76 additions & 0 deletions lib/classes/event/dashboards_reset.php
@@ -0,0 +1,76 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.

/**
* 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');
}
}
5 changes: 5 additions & 0 deletions my/index.php
Expand Up @@ -166,3 +166,8 @@
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();
10 changes: 10 additions & 0 deletions my/lib.php
Expand Up @@ -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;
}

Expand Down Expand Up @@ -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 {
Expand Down
129 changes: 129 additions & 0 deletions my/tests/events_test.php
@@ -0,0 +1,129 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.

/**
* 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();
}
}

0 comments on commit e8924af

Please sign in to comment.