From 03ea10e6d3a42f3cff32d5065ffdb0b05b29fd52 Mon Sep 17 00:00:00 2001 From: Mark Nelson Date: Mon, 30 Dec 2013 16:03:21 -0800 Subject: [PATCH 1/4] MDL-40912 coursecat: replaced 'add' add_to_log call with an event --- lang/en/moodle.php | 1 + lib/classes/event/course_category_created.php | 66 +++++++++++++++++++ lib/coursecatlib.php | 7 +- lib/tests/events_test.php | 55 ++++++++++++++++ 4 files changed, 128 insertions(+), 1 deletion(-) create mode 100644 lib/classes/event/course_category_created.php create mode 100644 lib/tests/events_test.php diff --git a/lang/en/moodle.php b/lang/en/moodle.php index da2502e370e..64f891f5eff 100644 --- a/lang/en/moodle.php +++ b/lang/en/moodle.php @@ -715,6 +715,7 @@ $string['errorwhenconfirming'] = 'You are not confirmed yet because an error occ $string['eventcommentcreated'] = 'Comment created'; $string['eventcommentdeleted'] = 'Comment deleted'; $string['eventcommentsviewed'] = 'Comments viewed'; +$string['eventcoursecategorycreated'] = 'Category created'; $string['eventcoursecategorydeleted'] = 'Category deleted'; $string['eventcoursecontentdeleted'] = 'Course content deleted'; $string['eventcoursecreated'] = 'Course created'; diff --git a/lib/classes/event/course_category_created.php b/lib/classes/event/course_category_created.php new file mode 100644 index 00000000000..33a4ea1a970 --- /dev/null +++ b/lib/classes/event/course_category_created.php @@ -0,0 +1,66 @@ +. + +namespace core\event; + +defined('MOODLE_INTERNAL') || die(); + +/** + * Course category created event. + * + * @package core + * @copyright 2014 Mark Nelson + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class course_category_created extends base { + + /** + * Initialise the event data. + */ + protected function init() { + $this->data['objecttable'] = 'course_categories'; + $this->data['crud'] = 'c'; + $this->data['level'] = self::LEVEL_OTHER; + } + + /** + * Returns localised general event name. + * + * @return string + */ + public static function get_name() { + return get_string('eventcoursecategorycreated'); + } + + /** + * Returns non-localised description of what happened. + * + * @return string + */ + public function get_description() { + return 'The course category with the id ' . $this->objectid . ' was created by the user with the id ' . + $this->userid; + } + + /** + * Return legacy data for add_to_log(). + * + * @return array + */ + protected function get_legacy_logdata() { + return array(SITEID, 'category', 'add', 'editcategory.php?id=' . $this->objectid, $this->objectid); + } +} diff --git a/lib/coursecatlib.php b/lib/coursecatlib.php index 078659a0b93..27a1dcc3e72 100644 --- a/lib/coursecatlib.php +++ b/lib/coursecatlib.php @@ -427,7 +427,12 @@ class coursecat implements renderable, cacheable_object, IteratorAggregate { $DB->update_record('course_categories', $updatedata); } - add_to_log(SITEID, "category", 'add', "editcategory.php?id=$newcategory->id", $newcategory->id); + $event = \core\event\course_category_created::create(array( + 'objectid' => $newcategory->id, + 'context' => $categorycontext + )); + $event->trigger(); + cache_helper::purge_by_event('changesincoursecat'); return self::get($newcategory->id, MUST_EXIST, true); diff --git a/lib/tests/events_test.php b/lib/tests/events_test.php new file mode 100644 index 00000000000..39fb1738395 --- /dev/null +++ b/lib/tests/events_test.php @@ -0,0 +1,55 @@ +. + +/** + * Events tests. + * + * @package core + * @category test + * @copyright 2014 Mark Nelson + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +class core_events_testcase extends advanced_testcase { + + /** + * Test set up. + * + * This is executed before running any test in this file. + */ + public function setUp() { + $this->resetAfterTest(); + } + + /** + * Test the course category created event. + */ + public function test_course_category_created() { + // Trigger and capture the event. + $sink = $this->redirectEvents(); + $category = $this->getDataGenerator()->create_category(); + $events = $sink->get_events(); + $event = reset($events); + + // Check that the event data is valid. + $this->assertInstanceOf('\core\event\course_category_created', $event); + $this->assertEquals(context_coursecat::instance($category->id), $event->get_context()); + $expected = array(SITEID, 'category', 'add', 'editcategory.php?id=' . $category->id, $category->id); + $this->assertEventLegacyLogData($expected, $event); + } +} From c4cea8cb5dfbb4a583b3b5f621c75e27f67a587e Mon Sep 17 00:00:00 2001 From: Mark Nelson Date: Mon, 30 Dec 2013 16:47:57 -0800 Subject: [PATCH 2/4] MDL-40912 coursecat: replaced 'update' add_to_log call with an event --- lang/en/moodle.php | 1 + lib/classes/event/course_category_updated.php | 66 +++++++++++++++++++ lib/coursecatlib.php | 10 ++- lib/tests/events_test.php | 24 +++++++ 4 files changed, 99 insertions(+), 2 deletions(-) create mode 100644 lib/classes/event/course_category_updated.php diff --git a/lang/en/moodle.php b/lang/en/moodle.php index 64f891f5eff..618f0740252 100644 --- a/lang/en/moodle.php +++ b/lang/en/moodle.php @@ -717,6 +717,7 @@ $string['eventcommentdeleted'] = 'Comment deleted'; $string['eventcommentsviewed'] = 'Comments viewed'; $string['eventcoursecategorycreated'] = 'Category created'; $string['eventcoursecategorydeleted'] = 'Category deleted'; +$string['eventcoursecategoryupdated'] = 'Category updated'; $string['eventcoursecontentdeleted'] = 'Course content deleted'; $string['eventcoursecreated'] = 'Course created'; $string['eventcoursedeleted'] = 'Course deleted'; diff --git a/lib/classes/event/course_category_updated.php b/lib/classes/event/course_category_updated.php new file mode 100644 index 00000000000..ff843ce53cc --- /dev/null +++ b/lib/classes/event/course_category_updated.php @@ -0,0 +1,66 @@ +. + +namespace core\event; + +defined('MOODLE_INTERNAL') || die(); + +/** + * Course category updated event. + * + * @package core + * @copyright 2014 Mark Nelson + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class course_category_updated extends base { + + /** + * Initialise the event data. + */ + protected function init() { + $this->data['objecttable'] = 'course_categories'; + $this->data['crud'] = 'u'; + $this->data['level'] = self::LEVEL_OTHER; + } + + /** + * Returns localised general event name. + * + * @return string + */ + public static function get_name() { + return get_string('eventcoursecategoryupdated'); + } + + /** + * Returns non-localised description of what happened. + * + * @return string + */ + public function get_description() { + return 'The course category with the id ' . $this->objectid . ' was updated by the user with the id ' . + $this->userid; + } + + /** + * Return legacy data for add_to_log(). + * + * @return array + */ + protected function get_legacy_logdata() { + return array(SITEID, 'category', 'update', 'editcategory.php?id=' . $this->objectid, $this->objectid); + } +} diff --git a/lib/coursecatlib.php b/lib/coursecatlib.php index 27a1dcc3e72..0e4d49ced64 100644 --- a/lib/coursecatlib.php +++ b/lib/coursecatlib.php @@ -521,13 +521,19 @@ class coursecat implements renderable, cacheable_object, IteratorAggregate { $newcategory->timemodified = time(); + $categorycontext = $this->get_context(); if ($editoroptions) { - $categorycontext = $this->get_context(); $newcategory = file_postupdate_standard_editor($newcategory, 'description', $editoroptions, $categorycontext, 'coursecat', 'description', 0); } $DB->update_record('course_categories', $newcategory); - add_to_log(SITEID, "category", 'update', "editcategory.php?id=$this->id", $this->id); + + $event = \core\event\course_category_updated::create(array( + 'objectid' => $newcategory->id, + 'context' => $categorycontext + )); + $event->trigger(); + fix_course_sortorder(); // Purge cache even if fix_course_sortorder() did not do it. cache_helper::purge_by_event('changesincoursecat'); diff --git a/lib/tests/events_test.php b/lib/tests/events_test.php index 39fb1738395..9f2187e63ac 100644 --- a/lib/tests/events_test.php +++ b/lib/tests/events_test.php @@ -52,4 +52,28 @@ class core_events_testcase extends advanced_testcase { $expected = array(SITEID, 'category', 'add', 'editcategory.php?id=' . $category->id, $category->id); $this->assertEventLegacyLogData($expected, $event); } + + /** + * Test the course category updated event. + */ + public function test_course_category_updated() { + // Create a category. + $category = $this->getDataGenerator()->create_category(); + + // Create some data we are going to use to update this category. + $data = new stdClass(); + $data->name = 'Category name change'; + + // Trigger and capture the event. + $sink = $this->redirectEvents(); + $category->update($data); + $events = $sink->get_events(); + $event = reset($events); + + // Check that the event data is valid. + $this->assertInstanceOf('\core\event\course_category_updated', $event); + $this->assertEquals(context_coursecat::instance($category->id), $event->get_context()); + $expected = array(SITEID, 'category', 'update', 'editcategory.php?id=' . $category->id, $category->id); + $this->assertEventLegacyLogData($expected, $event); + } } From d86c7206aa47a53a04aecca0a98774094ad9f503 Mon Sep 17 00:00:00 2001 From: Mark Nelson Date: Mon, 30 Dec 2013 18:04:40 -0800 Subject: [PATCH 3/4] MDL-40912 coursecat: replaced 'move' add_to_log calls with an event --- lib/classes/event/course_category_updated.php | 16 +++++++ lib/coursecatlib.php | 26 ++++++++++-- lib/tests/events_test.php | 42 ++++++++++++++++++- 3 files changed, 80 insertions(+), 4 deletions(-) diff --git a/lib/classes/event/course_category_updated.php b/lib/classes/event/course_category_updated.php index ff843ce53cc..978c9e43dfc 100644 --- a/lib/classes/event/course_category_updated.php +++ b/lib/classes/event/course_category_updated.php @@ -27,6 +27,9 @@ defined('MOODLE_INTERNAL') || die(); */ class course_category_updated extends base { + /** @var array The legacy log data. */ + private $legacylogdata; + /** * Initialise the event data. */ @@ -55,12 +58,25 @@ class course_category_updated extends base { $this->userid; } + /** + * Set the legacy data used for add_to_log(). + * + * @param array $logdata + */ + public function set_legacy_logdata($logdata) { + $this->legacylogdata = $logdata; + } + /** * Return legacy data for add_to_log(). * * @return array */ protected function get_legacy_logdata() { + if (!empty($this->legacylogdata)) { + return $this->legacylogdata; + } + return array(SITEID, 'category', 'update', 'editcategory.php?id=' . $this->objectid, $this->objectid); } } diff --git a/lib/coursecatlib.php b/lib/coursecatlib.php index 0e4d49ced64..5cbf71cb27a 100644 --- a/lib/coursecatlib.php +++ b/lib/coursecatlib.php @@ -1752,7 +1752,13 @@ class coursecat implements renderable, cacheable_object, IteratorAggregate { foreach ($children as $childcat) { $childcat->change_parent_raw($newparentcat); // Log action. - add_to_log(SITEID, "category", "move", "editcategory.php?id=$childcat->id", $childcat->id); + $event = \core\event\course_category_updated::create(array( + 'objectid' => $childcat->id, + 'context' => $childcat->get_context() + )); + $event->set_legacy_logdata(array(SITEID, 'category', 'move', 'editcategory.php?id=' . $childcat->id, + $childcat->id)); + $event->trigger(); } fix_course_sortorder(); } @@ -1920,7 +1926,13 @@ class coursecat implements renderable, cacheable_object, IteratorAggregate { fix_course_sortorder(); cache_helper::purge_by_event('changesincoursecat'); $this->restore(); - add_to_log(SITEID, "category", "move", "editcategory.php?id=$this->id", $this->id); + + $event = \core\event\course_category_updated::create(array( + 'objectid' => $this->id, + 'context' => $this->get_context() + )); + $event->set_legacy_logdata(array(SITEID, 'category', 'move', 'editcategory.php?id=' . $this->id, $this->id)); + $event->trigger(); } } @@ -2541,7 +2553,15 @@ class coursecat implements renderable, cacheable_object, IteratorAggregate { $DB->set_field('course_categories', 'sortorder', $swapcategory->sortorder, array('id' => $this->id)); $DB->set_field('course_categories', 'sortorder', $this->sortorder, array('id' => $swapcategory->id)); $this->sortorder = $swapcategory->sortorder; - add_to_log(SITEID, "category", "move", "management.php?categoryid={$this->id}", $this->id); + + $event = \core\event\course_category_updated::create(array( + 'objectid' => $this->id, + 'context' => $this->get_context() + )); + $event->set_legacy_logdata(array(SITEID, 'category', 'move', 'management.php?categoryid=' . $this->id, + $this->id)); + $event->trigger(); + // Finally reorder courses. fix_course_sortorder(); cache_helper::purge_by_event('changesincoursecat'); diff --git a/lib/tests/events_test.php b/lib/tests/events_test.php index 9f2187e63ac..6130bc829e1 100644 --- a/lib/tests/events_test.php +++ b/lib/tests/events_test.php @@ -64,7 +64,7 @@ class core_events_testcase extends advanced_testcase { $data = new stdClass(); $data->name = 'Category name change'; - // Trigger and capture the event. + // Trigger and capture the event for updating a category. $sink = $this->redirectEvents(); $category->update($data); $events = $sink->get_events(); @@ -75,5 +75,45 @@ class core_events_testcase extends advanced_testcase { $this->assertEquals(context_coursecat::instance($category->id), $event->get_context()); $expected = array(SITEID, 'category', 'update', 'editcategory.php?id=' . $category->id, $category->id); $this->assertEventLegacyLogData($expected, $event); + + // Create another category and a child category. + $category2 = $this->getDataGenerator()->create_category(); + $childcat = $this->getDataGenerator()->create_category(array('parent' => $category2->id)); + + // Trigger and capture the event for changing the parent of a category. + $sink = $this->redirectEvents(); + $childcat->change_parent($category); + $events = $sink->get_events(); + $event = reset($events); + + // Check that the event data is valid. + $this->assertInstanceOf('\core\event\course_category_updated', $event); + $this->assertEquals(context_coursecat::instance($childcat->id), $event->get_context()); + $expected = array(SITEID, 'category', 'move', 'editcategory.php?id=' . $childcat->id, $childcat->id); + $this->assertEventLegacyLogData($expected, $event); + + // Trigger and capture the event for changing the sortorder of a category. + $sink = $this->redirectEvents(); + $category2->change_sortorder_by_one(true); + $events = $sink->get_events(); + $event = reset($events); + + // Check that the event data is valid. + $this->assertInstanceOf('\core\event\course_category_updated', $event); + $this->assertEquals(context_coursecat::instance($category2->id), $event->get_context()); + $expected = array(SITEID, 'category', 'move', 'management.php?categoryid=' . $category2->id, $category2->id); + $this->assertEventLegacyLogData($expected, $event); + + // Trigger and capture the event for deleting a category and moving it's children to another. + $sink = $this->redirectEvents(); + $category->delete_move($category->id); + $events = $sink->get_events(); + $event = reset($events); + + // Check that the event data is valid. + $this->assertInstanceOf('\core\event\course_category_updated', $event); + $this->assertEquals(context_coursecat::instance($childcat->id), $event->get_context()); + $expected = array(SITEID, 'category', 'move', 'editcategory.php?id=' . $childcat->id, $childcat->id); + $this->assertEventLegacyLogData($expected, $event); } } From 001f09548d384195883e94c0b667891ce07253d3 Mon Sep 17 00:00:00 2001 From: Mark Nelson Date: Tue, 31 Dec 2013 14:53:34 -0800 Subject: [PATCH 4/4] MDL-40912 coursecat: replaced 'hide' and 'show' add_to_log calls with an event --- lib/coursecatlib.php | 16 ++++++++++++++-- lib/tests/events_test.php | 24 ++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/lib/coursecatlib.php b/lib/coursecatlib.php index 5cbf71cb27a..d4e30dcb023 100644 --- a/lib/coursecatlib.php +++ b/lib/coursecatlib.php @@ -1998,7 +1998,13 @@ class coursecat implements renderable, cacheable_object, IteratorAggregate { public function hide() { if ($this->hide_raw(0)) { cache_helper::purge_by_event('changesincoursecat'); - add_to_log(SITEID, "category", "hide", "editcategory.php?id=$this->id", $this->id); + + $event = \core\event\course_category_updated::create(array( + 'objectid' => $this->id, + 'context' => $this->get_context() + )); + $event->set_legacy_logdata(array(SITEID, 'category', 'hide', 'editcategory.php?id=' . $this->id, $this->id)); + $event->trigger(); } } @@ -2051,7 +2057,13 @@ class coursecat implements renderable, cacheable_object, IteratorAggregate { public function show() { if ($this->show_raw()) { cache_helper::purge_by_event('changesincoursecat'); - add_to_log(SITEID, "category", "show", "editcategory.php?id=$this->id", $this->id); + + $event = \core\event\course_category_updated::create(array( + 'objectid' => $this->id, + 'context' => $this->get_context() + )); + $event->set_legacy_logdata(array(SITEID, 'category', 'show', 'editcategory.php?id=' . $this->id, $this->id)); + $event->trigger(); } } diff --git a/lib/tests/events_test.php b/lib/tests/events_test.php index 6130bc829e1..ee5797cb64d 100644 --- a/lib/tests/events_test.php +++ b/lib/tests/events_test.php @@ -115,5 +115,29 @@ class core_events_testcase extends advanced_testcase { $this->assertEquals(context_coursecat::instance($childcat->id), $event->get_context()); $expected = array(SITEID, 'category', 'move', 'editcategory.php?id=' . $childcat->id, $childcat->id); $this->assertEventLegacyLogData($expected, $event); + + // Trigger and capture the event for hiding a category. + $sink = $this->redirectEvents(); + $category2->hide(); + $events = $sink->get_events(); + $event = reset($events); + + // Check that the event data is valid. + $this->assertInstanceOf('\core\event\course_category_updated', $event); + $this->assertEquals(context_coursecat::instance($category2->id), $event->get_context()); + $expected = array(SITEID, 'category', 'hide', 'editcategory.php?id=' . $category2->id, $category2->id); + $this->assertEventLegacyLogData($expected, $event); + + // Trigger and capture the event for unhiding a category. + $sink = $this->redirectEvents(); + $category2->show(); + $events = $sink->get_events(); + $event = reset($events); + + // Check that the event data is valid. + $this->assertInstanceOf('\core\event\course_category_updated', $event); + $this->assertEquals(context_coursecat::instance($category2->id), $event->get_context()); + $expected = array(SITEID, 'category', 'show', 'editcategory.php?id=' . $category2->id, $category2->id); + $this->assertEventLegacyLogData($expected, $event); } }