From 0477e526e49087dc14db83eb097065c229ee20c9 Mon Sep 17 00:00:00 2001 From: cescobedo Date: Tue, 5 Nov 2019 22:46:22 +0100 Subject: [PATCH] MDL-66404 core_h5p: Add new h5p_deleted event --- h5p/classes/event/h5p_deleted.php | 97 +++++++++++++++++++++++++++++++ h5p/tests/event_h5p_deleted.php | 88 ++++++++++++++++++++++++++++ lang/en/h5p.php | 1 + 3 files changed, 186 insertions(+) create mode 100644 h5p/classes/event/h5p_deleted.php create mode 100644 h5p/tests/event_h5p_deleted.php diff --git a/h5p/classes/event/h5p_deleted.php b/h5p/classes/event/h5p_deleted.php new file mode 100644 index 00000000000..a3fe4fad18d --- /dev/null +++ b/h5p/classes/event/h5p_deleted.php @@ -0,0 +1,97 @@ +. + +/** + * H5P deleted event class. + * + * @package core + * @since Moodle 3.8 + * @copyright 2019 Carlos Escobedo + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace core_h5p\event; +defined('MOODLE_INTERNAL') || die(); + +/** + * H5P viewed event class. + * + * @package core_h5p + * @since Moodle 3.8 + * @copyright 2019 Carlos Escobedo + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class h5p_deleted extends \core\event\base { + + /** + * Initialise event parameters. + */ + protected function init() { + $this->data['objecttable'] = 'h5p'; + $this->data['crud'] = 'd'; + $this->data['edulevel'] = self::LEVEL_PARTICIPATING; + } + + /** + * Returns localised event name. + * + * @return string + */ + public static function get_name() { + return get_string('eventh5pdeleted', 'h5p'); + } + + /** + * Returns non-localised event description with id's for admin use only. + * + * @return string + */ + public function get_description() { + return "The user with id '$this->userid' deleted the H5P with id '$this->objectid'."; + } + + /** + * Custom validations. + * + * @throws \coding_exception + * @return void + */ + protected function validate_data() { + parent::validate_data(); + if (!isset($this->objectid)) { + throw new \coding_exception('The \'objectid\' must be set.'); + } + } + + /** + * Returns relevant URL. + * + * @return \moodle_url + */ + public function get_url() { + // There is no url since the previous event already has the url where the h5p content has been displayed. + return null; + } + + /** + * Return the legacy event name. + * + * @return string + */ + public static function get_legacy_eventname() { + return 'core_h5p_deleted'; + } +} \ No newline at end of file diff --git a/h5p/tests/event_h5p_deleted.php b/h5p/tests/event_h5p_deleted.php new file mode 100644 index 00000000000..5159b7e762f --- /dev/null +++ b/h5p/tests/event_h5p_deleted.php @@ -0,0 +1,88 @@ +. + +/** + * Tests for h5p deleted event. + * + * @package core_h5p + * @category test + * @copyright 2019 Carlos Escobedo + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @since Moodle 3.8 + */ + +defined('MOODLE_INTERNAL') || die(); + +use core_h5p\autoloader; + +/** + * Tests for h5p deleted event. + * + * @package core_h5p + * @category test + * @copyright 2019 Carlos Escobedo + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @since Moodle 3.8 + */ +class core_h5p_event_h5p_deleted_testcase extends advanced_testcase { + + /** + * Setup test. + */ + protected function setUp() { + parent::setUp(); + autoloader::register(); + } + + /** + * test_event_h5p_deleted description + * @runInSeparateProcess + */ + public function test_event_h5p_deleted() { + $this->resetAfterTest(true); + + $user = $this->getDataGenerator()->create_user(); + $course = $this->getDataGenerator()->create_course(); + $page = $this->getDataGenerator()->create_module('page', array('course' => $course->id)); + $pagecontext = \context_module::instance($page->cmid); + + // Dummy H5P id for testing proposal. We don't need a real h5p. + $dummyh5pid = 111; + $now = time(); + // Event parameters for testing. + $params = [ + 'objectid' => $dummyh5pid, + 'userid' => $user->id, + 'context' => $pagecontext, + 'other' => [ + 'time' => $now + ] + ]; + // Prepare redirect Events. + $sink = $this->redirectEvents(); + // Test the event H5P deleted. + $event = \core_h5p\event\h5p_deleted::create($params); + $event->trigger(); + $result = $sink->get_events(); + $event = reset($result); + $sink->close(); + // Check the event info. + $this->assertEquals($dummyh5pid, $event->objectid); + $this->assertEquals($user->id, $event->userid); + $this->assertEquals($pagecontext->id, $event->contextid); + $this->assertEquals($now, $event->other['time']); + } +} diff --git a/lang/en/h5p.php b/lang/en/h5p.php index 2fcf32fbdee..99a1390c8bb 100644 --- a/lang/en/h5p.php +++ b/lang/en/h5p.php @@ -72,6 +72,7 @@ $string['editor'] = 'Editor'; $string['embed'] = 'Embed'; $string['embedtitle'] = 'View the embed code for this content.'; $string['eventh5pviewed'] = 'H5P viewed'; +$string['eventh5pdeleted'] = 'H5P deleted'; $string['fileExceedsMaxSize'] = 'One of the files inside the package exceeds the maximum file size allowed. ({$a->%file} {$a->%used} > {$a->%max})'; $string['fullscreen'] = 'Fullscreen'; $string['gpl'] = 'General Public License v3';