diff --git a/blog/locallib.php b/blog/locallib.php index a5080526ac8f0..70380609063a6 100644 --- a/blog/locallib.php +++ b/blog/locallib.php @@ -239,7 +239,6 @@ public function process_attachment($form) { /** * Inserts this entry in the database. Access control checks must be done by calling code. * TODO Set the publishstate correctly - * @param mform $form Used for attachments * @return void */ public function add() { @@ -259,11 +258,17 @@ public function add() { if (!empty($CFG->useblogassociations)) { $this->add_associations(); - add_to_log(SITEID, 'blog', 'add', 'index.php?userid='.$this->userid.'&entryid='.$this->id, $this->subject); } tag_set('post', $this->id, $this->tags); - events_trigger('blog_entry_added', $this); + + // Trigger an event for the new entry. + $event = \core\event\blog_entry_created::create(array('objectid' => $this->id, + 'userid' => $this->userid, + 'other' => array ("subject" => $this->subject) + )); + $event->set_custom_data($this); + $event->trigger(); } /** diff --git a/blog/tests/bloglib_test.php b/blog/tests/bloglib_test.php index 394d66d1cabce..6ed06586cf5d7 100644 --- a/blog/tests/bloglib_test.php +++ b/blog/tests/bloglib_test.php @@ -150,4 +150,33 @@ public function test_blog_get_headers_case_10() { $blog_headers = blog_get_headers($this->courseid); $this->assertNotEquals($blog_headers['heading'], ''); } + + /** + * Test various blog related events. + */ + public function test_blog_entry_events() { + global $USER; + + $this->setAdminUser(); + $this->resetAfterTest(); + + // Create a blog entry. + $blog = new blog_entry(); + $blog->summary = "This is summary of blog"; + $blog->subject = "Subject of blog"; + $states = blog_entry::get_applicable_publish_states(); + $blog->publishstate = reset($states); + $sink = $this->redirectEvents(); + $blog->add(); + $events = $sink->get_events(); + $event = reset($events); + $sitecontext = context_system::instance(); + + // Validate event data. + $this->assertInstanceOf('\core\event\blog_entry_created', $event); + $this->assertEquals($sitecontext->id, $event->contextid); + $this->assertEquals($blog->id, $event->objectid); + $this->assertEquals($USER->id, $event->userid); + $this->assertEquals("post", $event->objecttable); + } } diff --git a/lang/en/blog.php b/lang/en/blog.php index c8d31392f7159..5f10488ae7bfb 100644 --- a/lang/en/blog.php +++ b/lang/en/blog.php @@ -87,6 +87,8 @@ $string['entrysaved'] = 'Your entry has been saved'; $string['entrytitle'] = 'Entry title'; $string['entryupdated'] = 'Blog entry updated'; +$string['evententryadded'] = 'Blog entry added'; +$string['evententryaddeddesc'] = 'Blog entry "{$a->subject}" was created by user with id {$a->userid}'; $string['externalblogcrontime'] = 'External blog cron schedule'; $string['externalblogdeleteconfirm'] = 'Unregister this external blog?'; $string['externalblogdeleted'] = 'External blog unregistered'; diff --git a/lib/classes/event/blog_entry_created.php b/lib/classes/event/blog_entry_created.php new file mode 100644 index 0000000000000..a78161e29d54e --- /dev/null +++ b/lib/classes/event/blog_entry_created.php @@ -0,0 +1,116 @@ +. + +namespace core\event; + +/** + * Event for when a new blog entry is added.. + * + * @package core_blog + * @copyright 2013 Ankit Agarwal + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +/** + * Class blog_entry_created + * + * Class for event to be triggered when a blog entry is created. + * + * @package core_blog + * @copyright 2013 Ankit Agarwal + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class blog_entry_created extends \core\event\base { + + /** @var \blog_entry A reference to the active blog_entry object. */ + protected $customobject; + + /** + * Set basic properties for the event. + */ + protected function init() { + $this->context = \context_system::instance(); + $this->data['objecttable'] = 'post'; + $this->data['crud'] = 'c'; + // TODO: MDL-37658 set level. + $this->data['level'] = 50; + } + + /** + * Set custom data of the event. + * + * @param \blog_entry $data A reference to the active blog_entry object. + */ + public function set_custom_data($data) { + $this->customobject = $data; + } + + /** + * Returns localised general event name. + * + * @return \lang_string + */ + public static function get_name() { + return new \lang_string("evententryadded", "core_blog"); + } + + /** + * Returns localised description of what happened. + * + * @return \lang_string + */ + public function get_description() { + $a = new \stdClass(); + $a->subject = $this->other['subject']; + $a->userid = $this->userid; + return new \lang_string("evententryaddeddesc", "core_blog", $a); + } + + /** + * Returns relevant URL. + * @return \moodle_url + */ + public function get_url() { + return new \moodle_url('/blog/index.php', array('entryid' => $this->objectid, 'userid' => $this->userid)); + } + + /** + * Does this event replace legacy event? + * + * @return string legacy event name + */ + public static function get_legacy_eventname() { + return 'blog_entry_added'; + } + + /** + * Legacy event data if get_legacy_eventname() is not empty. + * + * @return \blog_entry + */ + protected function get_legacy_eventdata() { + return $this->customobject; + } + + /** + * replace add_to_log() statement. + * + * @return array of parameters to be passed to legacy add_to_log() function. + */ + protected function get_legacy_logdata() { + return array (SITEID, 'blog', 'add', 'index.php?userid='.$this->userid.'&entryid='.$this->objectid, $this->customobject->subject); + } +}