From bf2ae267ca9f7d893e2ac19eebd7a83ef243b0be Mon Sep 17 00:00:00 2001 From: Mark Nelson Date: Wed, 22 Jan 2014 17:32:39 -0800 Subject: [PATCH] MDL-40908 core_tag: created a 'tag_created' event --- lang/en/tag.php | 1 + lib/classes/event/tag_created.php | 82 +++++++++++++++++++++++++++++++ tag/lib.php | 11 +++++ tag/tests/events_test.php | 20 +++++++- 4 files changed, 113 insertions(+), 1 deletion(-) create mode 100644 lib/classes/event/tag_created.php diff --git a/lang/en/tag.php b/lang/en/tag.php index 7c62fafc1a9..ae644b1e057 100644 --- a/lang/en/tag.php +++ b/lang/en/tag.php @@ -38,6 +38,7 @@ $string['errordeleting'] = 'Error deleting tag with id {$a}, please report to yo $string['errortagfrontpage'] = 'Tagging the site main page is not allowed'; $string['errorupdatingrecord'] = 'Error updating tag record'; $string['eventitemtagged'] = 'Item tagged'; +$string['eventtagcreated'] = 'Tag created'; $string['eventtagdeleted'] = 'Tag deleted'; $string['eventtagflagged'] = 'Tag flagged'; $string['eventtagunflagged'] = 'Tag unflagged'; diff --git a/lib/classes/event/tag_created.php b/lib/classes/event/tag_created.php new file mode 100644 index 00000000000..9b6e9ac6ae2 --- /dev/null +++ b/lib/classes/event/tag_created.php @@ -0,0 +1,82 @@ +. + +/** + * Tag created event. + * + * @property-read array $other { + * Extra information about event. + * + * - string name: the name of the tag. + * - string rawname: the raw name of the tag. + * } + * + * @package core + * @copyright 2014 Mark Nelson + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace core\event; + +defined('MOODLE_INTERNAL') || die(); + +class tag_created extends base { + + /** + * Initialise the event data. + */ + protected function init() { + $this->data['objecttable'] = 'tag'; + $this->data['crud'] = 'c'; + $this->data['edulevel'] = self::LEVEL_OTHER; + } + + /** + * Returns localised general event name. + * + * @return string + */ + public static function get_name() { + return get_string('eventtagcreated', 'tag'); + } + + /** + * Returns non-localised description of what happened. + * + * @return string + */ + public function get_description() { + return 'The tag with the id ' . $this->objectid . ' was created by the user with the id ' . $this->userid; + } + + /** + * Custom validation. + * + * @throws \coding_exception + * @return void + */ + protected function validate_data() { + parent::validate_data(); + + if (!isset($this->other['name'])) { + throw new \coding_exception('The name must be set in $other.'); + } + + if (!isset($this->other['rawname'])) { + throw new \coding_exception('The rawname must be set in $other.'); + } + } +} diff --git a/tag/lib.php b/tag/lib.php index 8b61b7564f9..58cdbed224c 100644 --- a/tag/lib.php +++ b/tag/lib.php @@ -843,6 +843,17 @@ function tag_add($tags, $type="default") { $tag_object->name = $tag_name_lc; //var_dump($tag_object); $tags_ids[$tag_name_lc] = $DB->insert_record('tag', $tag_object); + + $event = \core\event\tag_created::create(array( + 'objectid' => $tags_ids[$tag_name_lc], + 'relateduserid' => $tag_object->userid, + 'context' => context_system::instance(), + 'other' => array( + 'name' => $tag_object->name, + 'rawname' => $tag_object->rawname + ) + )); + $event->trigger(); } } diff --git a/tag/tests/events_test.php b/tag/tests/events_test.php index d7f7ebccc56..cc4edccae88 100644 --- a/tag/tests/events_test.php +++ b/tag/tests/events_test.php @@ -108,7 +108,7 @@ class core_tag_events_testcase extends advanced_testcase { $sink = $this->redirectEvents(); tag_set('course', $course->id, array('A tag'), 'core', context_course::instance($course->id)->id); $events = $sink->get_events(); - $event = reset($events); + $event = $events[1]; // Check that the course was tagged and that the event data is valid. $this->assertEquals(1, $DB->count_records('tag_instance', array('component' => 'core'))); @@ -341,4 +341,22 @@ class core_tag_events_testcase extends advanced_testcase { $this->assertEquals(context_system::instance(), $event->get_context()); } } + + /** + * Test the tag created event. + */ + public function test_tag_created() { + global $DB; + + // Trigger and capture the event for creating a tag. + $sink = $this->redirectEvents(); + tag_add('A really awesome tag!'); + $events = $sink->get_events(); + $event = reset($events); + + // Check that the tag was created and the event data is valid. + $this->assertEquals(1, $DB->count_records('tag')); + $this->assertInstanceOf('\core\event\tag_created', $event); + $this->assertEquals(context_system::instance(), $event->get_context()); + } }