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); + } +}