From 14cdeb7ba94fd580a2da66e3a88e30d3a75183e8 Mon Sep 17 00:00:00 2001 From: Stephen Bourget Date: Wed, 18 Mar 2015 14:40:14 -0400 Subject: [PATCH] MDL-49470 Lesson: Add page moved event Conflicts: mod/lesson/version.php --- mod/lesson/classes/event/page_moved.php | 108 ++++++++++++++++++++++++ mod/lesson/lang/en/lesson.php | 1 + mod/lesson/locallib.php | 16 ++++ mod/lesson/tests/events_test.php | 28 ++++++ mod/lesson/version.php | 2 +- 5 files changed, 154 insertions(+), 1 deletion(-) create mode 100644 mod/lesson/classes/event/page_moved.php diff --git a/mod/lesson/classes/event/page_moved.php b/mod/lesson/classes/event/page_moved.php new file mode 100644 index 00000000000..482bef7c13f --- /dev/null +++ b/mod/lesson/classes/event/page_moved.php @@ -0,0 +1,108 @@ +. + +/** + * The mod_lesson page_moved event class. + * + * @package mod_lesson + * @copyright 2015 Stephen Bourget + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later. + */ + +namespace mod_lesson\event; + +defined('MOODLE_INTERNAL') || die(); + +/** + * The mod_lesson page_moved event class. + * + * @property-read array $other { + * Extra information about event. + * + * - string pagetype: the name of the pagetype as defined in the individual page class + * - int prevpageid: the id of the previous lesson page + * - int nextpageid: the id of the next lesson page + * } + * + * @package mod_lesson + * @since Moodle 2.9 + * @copyright 2015 Stephen Bourget + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later. + */ +class page_moved extends \core\event\base { + + /** + * Set basic properties for the event. + */ + protected function init() { + $this->data['objecttable'] = 'lesson_pages'; + $this->data['crud'] = 'u'; + $this->data['edulevel'] = self::LEVEL_TEACHING; + } + + /** + * Returns localised general event name. + * + * @return string + */ + public static function get_name() { + return get_string('eventpagemoved', 'mod_lesson'); + } + + /** + * Get URL related to the action. + * + * @return \moodle_url + */ + public function get_url() { + return new \moodle_url('/mod/lesson/view.php', array('id' => $this->contextinstanceid, 'pageid' => $this->objectid)); + } + + /** + * 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' has moved a ".$this->other['pagetype']." page with the ". + "id '$this->objectid' to the slot after the page with the id '".$this->other['prevpageid']. + "' and before the page with the id '".$this->other['nextpageid']. + "'in the lesson activity with course module id '$this->contextinstanceid'."; + } + + /** + * Custom validations. + * + * @throws \coding_exception when validation fails. + * @return void + */ + protected function validate_data() { + parent::validate_data(); + // Make sure this class is never used without proper object details. + if (!$this->contextlevel === CONTEXT_MODULE) { + throw new \coding_exception('Context level must be CONTEXT_MODULE.'); + } + if (!isset($this->other['pagetype'])) { + throw new \coding_exception('The \'pagetype\' value must be set in other.'); + } + if (!isset($this->other['prevpageid'])) { + throw new \coding_exception('The \'prevpageid\' value must be set in other.'); + } + if (!isset($this->other['nextpageid'])) { + throw new \coding_exception('The \'nextpageid\' value must be set in other.'); + } + } +} \ No newline at end of file diff --git a/mod/lesson/lang/en/lesson.php b/mod/lesson/lang/en/lesson.php index 8fc15a46cec..502f32af739 100644 --- a/mod/lesson/lang/en/lesson.php +++ b/mod/lesson/lang/en/lesson.php @@ -184,6 +184,7 @@ $string['eventhighscoresviewed'] = 'Highscores viewed'; $string['eventlessonended'] = 'Lesson ended'; $string['eventlessonstarted'] = 'Lesson started'; $string['eventpagecreated'] = 'Page created'; +$string['eventpagemoved'] = 'Page moved'; $string['eventpageupdated'] = 'Page updated'; $string['eventpagedeleted'] = 'Page deleted'; $string['eventquestionanswered'] = 'Question answered'; diff --git a/mod/lesson/locallib.php b/mod/lesson/locallib.php index 49f5652ae73..e390b529c22 100644 --- a/mod/lesson/locallib.php +++ b/mod/lesson/locallib.php @@ -2001,6 +2001,22 @@ abstract class lesson_page extends lesson_base { $obj->prevpageid = $prevpageid; $obj->nextpageid = $nextpageid; $DB->update_record('lesson_pages', $obj); + + $cm = get_coursemodule_from_instance('lesson', $this->lesson->id, $this->lesson->course); + $context = context_module::instance($cm->id); + + // Trigger an event: page moved. + $eventparams = array( + 'context' => $context, + 'objectid' => $this->properties->id, + 'other' => array( + 'pagetype' => $this->get_typestring(), + 'prevpageid' => $prevpageid, + 'nextpageid' => $nextpageid + ) + ); + $event = \mod_lesson\event\page_moved::create($eventparams); + $event->trigger(); } /** diff --git a/mod/lesson/tests/events_test.php b/mod/lesson/tests/events_test.php index 85d776eb3ef..1aae6006b6f 100644 --- a/mod/lesson/tests/events_test.php +++ b/mod/lesson/tests/events_test.php @@ -77,6 +77,34 @@ class mod_lesson_events_testcase extends advanced_testcase { $this->assertDebuggingNotCalled(); } + /** + * Test the page created event. + * + */ + public function test_page_moved() { + + // Set up a generator to create content. + $generator = $this->getDataGenerator()->get_plugin_generator('mod_lesson'); + $pagerecord1 = $generator->create_content($this->lesson); + $page1 = $this->lesson->load_page($pagerecord1->id); + $pagerecord2 = $generator->create_content($this->lesson); + $page2 = $this->lesson->load_page($pagerecord2->id); + $pagerecord3 = $generator->create_content($this->lesson); + $page3 = $this->lesson->load_page($pagerecord3->id); + // Trigger and capture the event. + $sink = $this->redirectEvents(); + $page3->move($pagerecord1->id, $pagerecord1->id); + // Get our event event. + $events = $sink->get_events(); + $event = reset($events); + + // Check that the event data is valid. + $this->assertInstanceOf('\mod_lesson\event\page_moved', $event); + $this->assertEquals($page3->id, $event->objectid); + $this->assertEventContextNotUsed($event); + $this->assertDebuggingNotCalled(); + } + /** * Test the page deleted event. * diff --git a/mod/lesson/version.php b/mod/lesson/version.php index c0876338487..d6a8b34e7f8 100644 --- a/mod/lesson/version.php +++ b/mod/lesson/version.php @@ -24,7 +24,7 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2015031500; // The current module version (Date: YYYYMMDDXX) +$plugin->version = 2015032400; // The current module version (Date: YYYYMMDDXX) $plugin->requires = 2014110400; // Requires this Moodle version $plugin->component = 'mod_lesson'; // Full name of the plugin (used for diagnostics) $plugin->cron = 0;