--- /dev/null
+<?php
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
+
+/**
+ * The mod_forum discussion created event.
+ *
+ * @package mod_forum
+ * @copyright 2014 Dan Poltawski <dan@moodle.com>
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+namespace mod_forum\event;
+
+defined('MOODLE_INTERNAL') || die();
+
+/**
+ * The mod_forum discussion created event.
+ *
+ * @property-read array $other Extra information about the event.
+ * -int forumid: The id of the forum the discussion is in
+ *
+ * @package mod_forum
+ * @copyright 2014 Dan Poltawski <dan@moodle.com>
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+class discussion_created extends \core\event\base {
+ /**
+ * Init method.
+ *
+ * @return void
+ */
+ protected function init() {
+ $this->data['crud'] = 'c';
+ $this->data['edulevel'] = self::LEVEL_PARTICIPATING;
+ $this->data['objecttable'] = 'forum_discussions';
+ }
+
+ /**
+ * Returns description of what happened.
+ *
+ * @return string
+ */
+ public function get_description() {
+ return "The user {$this->userid} has created a discussion in the forum {$this->other['forumid']}";
+ }
+
+ /**
+ * Return localised event name.
+ *
+ * @return string
+ */
+ public static function get_name() {
+ return get_string('eventdiscussioncreated', 'mod_forum');
+ }
+
+ /**
+ * Get URL related to the action
+ *
+ * @return \moodle_url
+ */
+ public function get_url() {
+ return new \moodle_url('/mod/forum/discuss.php', array('d' => $this->objectid));
+ }
+
+ /**
+ * Return the legacy event log data.
+ *
+ * @return array|null
+ */
+ protected function get_legacy_logdata() {
+
+ // The legacy log table expects a relative path to /mod/forum/.
+ $logurl = substr($this->get_url()->out_as_local_url(), strlen('/mod/forum/'));
+
+ return array($this->courseid, 'forum', 'add discussion', $logurl, $this->objectid, $this->contextinstanceid);
+ }
+
+ /**
+ * Custom validation.
+ *
+ * @throws \coding_exception
+ * @return void
+ */
+ protected function validate_data() {
+ parent::validate_data();
+ if (!isset($this->other['forumid'])) {
+ throw new \coding_exception('forumid must be set in $other.');
+ }
+
+ if ($this->contextlevel != CONTEXT_MODULE) {
+ throw new \coding_exception('Context passed must be module context.');
+ }
+
+ if (!isset($this->objectid)) {
+ throw new \coding_exception('objectid must be set to the discussionid.');
+ }
+ }
+}
--- /dev/null
+<?php
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
+
+/**
+ * The mod_forum discussion deleted event.
+ *
+ * @package mod_forum
+ * @copyright 2014 Dan Poltawski <dan@moodle.com>
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+namespace mod_forum\event;
+
+defined('MOODLE_INTERNAL') || die();
+
+/**
+ * The mod_forum discussion deleted event.
+ *
+ * @property-read array $other Extra information about the event.
+ * -int forumid: The id of the forum the discussion is in
+ *
+ * @package mod_forum
+ * @copyright 2014 Dan Poltawski <dan@moodle.com>
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+class discussion_deleted extends \core\event\base {
+
+ /**
+ * Init method.
+ *
+ * @return void
+ */
+ protected function init() {
+ $this->data['crud'] = 'd';
+ $this->data['edulevel'] = self::LEVEL_OTHER;
+ $this->data['objecttable'] = 'forum_discussions';
+ }
+
+ /**
+ * Returns description of what happened.
+ *
+ * @return string
+ */
+ public function get_description() {
+ return "The user {$this->userid} has deleted the forum discussion {$this->objectid} ".
+ "in forum {$this->other['forumid']}";
+ }
+
+ /**
+ * Return localised event name.
+ *
+ * @return string
+ */
+ public static function get_name() {
+ return get_string('eventdiscussiondeleted', 'mod_forum');
+ }
+
+ /**
+ * Get URL related to the action
+ *
+ * @return \moodle_url
+ */
+ public function get_url() {
+ return new \moodle_url('/mod/forum/view.php', array('id' => $this->contextinstanceid));
+ }
+
+ /**
+ * Return the legacy event log data.
+ *
+ * @return array|null
+ */
+ protected function get_legacy_logdata() {
+ return array($this->courseid, 'forum', 'delete discussion', 'view.php?id=' . $this->contextinstanceid,
+ $this->other['forumid'], $this->contextinstanceid);
+ }
+
+ /**
+ * Custom validation.
+ *
+ * @throws \coding_exception
+ * @return void
+ */
+ protected function validate_data() {
+ parent::validate_data();
+ if (!isset($this->other['forumid'])) {
+ throw new \coding_exception('forumid must be set in $other.');
+ }
+
+ if ($this->contextlevel != CONTEXT_MODULE) {
+ throw new \coding_exception('Context passed must be module context.');
+ }
+
+ if (!isset($this->objectid)) {
+ throw new \coding_exception('objectid must be set to the discussionid.');
+ }
+ }
+}
+
--- /dev/null
+<?php
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
+
+/**
+ * The mod_forum discussion moved event.
+ *
+ * @package mod_forum
+ * @copyright 2014 Dan Poltawski <dan@moodle.com>
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+namespace mod_forum\event;
+
+defined('MOODLE_INTERNAL') || die();
+
+/**
+ * The mod_forum discussion moved event.
+ *
+ * @property-read array $other Extra information about the event.
+ * - int fromforumid: The id of the forum the discussion is being moved from
+ * - int toforumid: The id of the forum the discussion is being moved to
+ *
+ * @package mod_forum
+ * @copyright 2014 Dan Poltawski <dan@moodle.com>
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+class discussion_moved extends \core\event\base {
+ /**
+ * Init method.
+ *
+ * @return void
+ */
+ protected function init() {
+ $this->data['crud'] = 'u';
+ $this->data['edulevel'] = self::LEVEL_OTHER;
+ $this->data['objecttable'] = 'forum_discussions';
+ }
+
+ /**
+ * Returns description of what happened.
+ *
+ * @return string
+ */
+ public function get_description() {
+ return "The user {$this->userid} has moved the forum discussion {$this->objectid} ".
+ "from forum {$this->other['fromforumid']} to forum {$this->other['toforumid']}";
+ }
+
+ /**
+ * Return localised event name.
+ *
+ * @return string
+ */
+ public static function get_name() {
+ return get_string('eventdiscussionmoved', 'mod_forum');
+ }
+
+ /**
+ * Get URL related to the action
+ *
+ * @return \moodle_url
+ */
+ public function get_url() {
+ return new \moodle_url('/mod/forum/discuss.php', array('d' => $this->objectid));
+ }
+
+ /**
+ * Return the legacy event log data.
+ *
+ * @return array|null
+ */
+ protected function get_legacy_logdata() {
+ return array($this->courseid, 'forum', 'move discussion', 'discuss.php?d=' . $this->objectid,
+ $this->objectid, $this->contextinstanceid);
+ }
+
+ /**
+ * Custom validation.
+ *
+ * @throws \coding_exception
+ * @return void
+ */
+ protected function validate_data() {
+ parent::validate_data();
+ if (!isset($this->other['fromforumid'])) {
+ throw new \coding_exception('fromforumid must be set in $other.');
+ }
+
+ if (!isset($this->other['toforumid'])) {
+ throw new \coding_exception('toforumid must be set in $other.');
+ }
+
+ if ($this->contextlevel != CONTEXT_MODULE) {
+ throw new \coding_exception('Context passed must be module context.');
+ }
+
+ if (!isset($this->objectid)) {
+ throw new \coding_exception('objectid must be set to the discussionid.');
+ }
+ }
+}
--- /dev/null
+<?php
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
+
+/**
+ * The mod_forum discussion viewed event.
+ *
+ * @package mod_forum
+ * @copyright 2014 Dan Poltawski <dan@moodle.com>
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+namespace mod_forum\event;
+
+defined('MOODLE_INTERNAL') || die();
+
+/**
+ * The mod_forum discussion viewed event.
+ *
+ * @package mod_forum
+ * @copyright 2014 Dan Poltawski <dan@moodle.com>
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+class discussion_viewed extends \core\event\base {
+
+ /**
+ * Init method.
+ *
+ * @return void
+ */
+ protected function init() {
+ $this->data['crud'] = 'r';
+ $this->data['edulevel'] = self::LEVEL_PARTICIPATING;
+ $this->data['objecttable'] = 'forum_discussions';
+ }
+
+ /**
+ * Returns description of what happened.
+ *
+ * @return string
+ */
+ public function get_description() {
+ return "The user {$this->userid} has viewed the forum discussion {$this->objectid}";
+ }
+
+ /**
+ * Return localised event name.
+ *
+ * @return string
+ */
+ public static function get_name() {
+ return get_string('eventdiscussionviewed', 'mod_forum');
+ }
+
+ /**
+ * Get URL related to the action
+ *
+ * @return \moodle_url
+ */
+ public function get_url() {
+ return new \moodle_url('/mod/forum/discuss.php', array('d' => $this->objectid));
+ }
+
+ /**
+ * Return the legacy event log data.
+ *
+ * @return array|null
+ */
+ protected function get_legacy_logdata() {
+ return array($this->courseid, 'forum', 'view discussion', 'discuss.php?d=' . $this->objectid,
+ $this->objectid, $this->contextinstanceid);
+ }
+
+ /**
+ * Custom validation.
+ *
+ * @throws \coding_exception
+ * @return void
+ */
+ protected function validate_data() {
+ parent::validate_data();
+
+ if ($this->contextlevel != CONTEXT_MODULE) {
+ throw new \coding_exception('Context passed must be module context.');
+ }
+
+ if (!isset($this->objectid)) {
+ throw new \coding_exception('objectid must be set to the discussionid.');
+ }
+ }
+
+}
+
print_error('cannotmovenotvisible', 'forum', $return);
}
- require_capability('mod/forum:startdiscussion', context_module::instance($cmto->id));
+ $destinationctx = context_module::instance($cmto->id);
+ require_capability('mod/forum:startdiscussion', $destinationctx);
if (!forum_move_attachments($discussion, $forum->id, $forumto->id)) {
echo $OUTPUT->notification("Errors occurred while moving attachment directories - check your file permissions");
}
$DB->set_field('forum_discussions', 'forum', $forumto->id, array('id' => $discussion->id));
$DB->set_field('forum_read', 'forumid', $forumto->id, array('discussionid' => $discussion->id));
- add_to_log($course->id, 'forum', 'move discussion', "discuss.php?d=$discussion->id", $discussion->id, $cmto->id);
+
+ $params = array(
+ 'context' => $destinationctx,
+ 'objectid' => $discussion->id,
+ 'other' => array(
+ 'fromforumid' => $forum->id,
+ 'toforumid' => $forumto->id,
+ )
+ );
+ $event = \mod_forum\event\discussion_moved::create($params);
+ $event->add_record_snapshot('forum_discussions', $discussion);
+ $event->add_record_snapshot('forum', $forum);
+ $event->add_record_snapshot('forum', $forumto);
+ $event->trigger();
// Delete the RSS files for the 2 forums to force regeneration of the feeds
require_once($CFG->dirroot.'/mod/forum/rsslib.php');
redirect($return.'&moved=-1&sesskey='.sesskey());
}
- add_to_log($course->id, 'forum', 'view discussion', "discuss.php?d=$discussion->id", $discussion->id, $cm->id);
+ $params = array(
+ 'context' => $modcontext,
+ 'objectid' => $discussion->id,
+ );
+ $event = \mod_forum\event\discussion_viewed::create($params);
+ $event->add_record_snapshot('forum_discussions', $discussion);
+ $event->add_record_snapshot('forum', $forum);
+ $event->trigger();
unset($SESSION->fromdiscussion);
$string['editedpostupdated'] = '{$a}\'s post was updated';
$string['editing'] = 'Editing';
$string['eventcoursesearched'] = 'Course searched';
+$string['eventdiscussioncreated'] = 'Discussion created';
+$string['eventdiscussiondeleted'] = 'Discussion deleted';
+$string['eventdiscussionmoved'] = 'Discussion moved';
+$string['eventdiscussionviewed'] = 'Discussion viewed';
$string['eventforumviewed'] = 'Forum viewed';
$string['eventuserreportviewed'] = 'User report viewed';
$string['emaildigestcompleteshort'] = 'Complete posts';
}
forum_delete_discussion($discussion, false, $course, $cm, $forum);
- add_to_log($discussion->course, "forum", "delete discussion",
- "view.php?id=$cm->id", "$forum->id", $cm->id);
+ $params = array(
+ 'objectid' => $discussion->id,
+ 'context' => $modcontext,
+ 'other' => array(
+ 'forumid' => $forum->id,
+ )
+ );
+
+ $event = \mod_forum\event\discussion_deleted::create($params);
+ $event->add_record_snapshot('forum_discussions', $discussion);
+ $event->trigger();
redirect("view.php?f=$discussion->forum");
$message = '';
if ($discussion->id = forum_add_discussion($discussion, $mform_post, $message)) {
- add_to_log($course->id, "forum", "add discussion",
- "discuss.php?d=$discussion->id", "$discussion->id", $cm->id);
+ $params = array(
+ 'context' => $modcontext,
+ 'objectid' => $discussion->id,
+ 'other' => array(
+ 'forumid' => $forum->id,
+ )
+ );
+ $event = \mod_forum\event\discussion_created::create($params);
+ $event->add_record_snapshot('forum_discussions', $discussion);
+ $event->trigger();
$timemessage = 2;
if (!empty($message)) { // if we're printing stuff about the file upload