From c4cea8cb5dfbb4a583b3b5f621c75e27f67a587e Mon Sep 17 00:00:00 2001 From: Mark Nelson Date: Mon, 30 Dec 2013 16:47:57 -0800 Subject: [PATCH] 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); + } }