diff --git a/lang/en/question.php b/lang/en/question.php index b1f6385930c..63ef294cb82 100644 --- a/lang/en/question.php +++ b/lang/en/question.php @@ -137,6 +137,7 @@ $string['errorprocess'] = 'Error occurred during processing!'; $string['errorprocessingresponses'] = 'An error occurred while processing your responses ({$a}). Click continue to return to the page you were on and try again.'; $string['errorsavingcomment'] = 'Error saving the comment for question {$a->name} in the database.'; $string['errorupdatingattempt'] = 'Error updating attempt {$a->id} in the database.'; +$string['eventquestioncategorycreated'] = 'Question category created'; $string['exportcategory'] = 'Export category'; $string['exportcategory_help'] = 'This setting determines the category from which the exported questions will be taken. diff --git a/lib/classes/event/question_category_created.php b/lib/classes/event/question_category_created.php new file mode 100644 index 00000000000..a620065544c --- /dev/null +++ b/lib/classes/event/question_category_created.php @@ -0,0 +1,80 @@ +<?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/>. + +/** + * Question category created event class. + * + * @package core + * @since Moodle 2.7 + * @copyright 2014 Mark Nelson <markn@moodle.com> + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +namespace core\event; + +defined('MOODLE_INTERNAL') || die(); + +class question_category_created extends base { + + /** + * Init method. + */ + protected function init() { + $this->data['objecttable'] = 'question_categories'; + $this->data['crud'] = 'c'; + $this->data['edulevel'] = self::LEVEL_TEACHING; + } + + /** + * Returns localised general event name. + * + * @return string + */ + public static function get_name() { + return get_string('eventquestioncategorycreated', 'question'); + } + + /** + * Returns description of what happened. + * + * @return string + */ + public function get_description() { + return 'A question category with the id of ' . $this->objectid . ' was created by a user with the id ' . $this->userid; + } + + /** + * Returns relevant URL. + * + * @return \moodle_url + */ + public function get_url() { + if ($this->contextlevel == CONTEXT_MODULE) { + return new \moodle_url('/question/category.php', array('cmid' => $this->contextinstanceid)); + } else { + return new \moodle_url('/question/category.php', array('courseid' => $this->courseid)); + } + } + + /** + * Return the legacy event log data. + * + * @return array + */ + protected function get_legacy_logdata() { + return array($this->courseid, 'quiz', 'addcategory', 'view.php?id=' . $this->contextinstanceid, + $this->objectid, $this->contextinstanceid); + } +} diff --git a/mod/quiz/addrandom.php b/mod/quiz/addrandom.php index 96469587f44..4b12d214593 100644 --- a/mod/quiz/addrandom.php +++ b/mod/quiz/addrandom.php @@ -89,10 +89,8 @@ if ($data = $mform->get_data()) { list($parentid, $contextid) = explode(',', $data->parent); $categoryid = $qcobject->add_category($data->parent, $data->name, '', true); $includesubcategories = 0; - add_to_log($quiz->course, 'quiz', 'addcategory', - 'view.php?id=' . $cm->id, $categoryid, $cm->id); - $returnurl->param('cat', $categoryid . ',' . $contextid); + $returnurl->param('cat', $categoryid . ',' . $contextid); } else { throw new coding_exception( 'It seems a form was submitted without any button being pressed???'); diff --git a/question/category_class.php b/question/category_class.php index 39740fde6e7..cd331b828c0 100644 --- a/question/category_class.php +++ b/question/category_class.php @@ -404,6 +404,15 @@ class question_category_object { $cat->sortorder = 999; $cat->stamp = make_unique_id_code(); $categoryid = $DB->insert_record("question_categories", $cat); + + // Log the creation of this category. + $params = array( + 'objectid' => $categoryid, + 'contextid' => $contextid + ); + $event = \core\event\question_category_created::create($params); + $event->trigger(); + if ($return) { return $categoryid; } else { diff --git a/question/tests/events_test.php b/question/tests/events_test.php new file mode 100644 index 00000000000..357422e4e15 --- /dev/null +++ b/question/tests/events_test.php @@ -0,0 +1,76 @@ +<?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/>. + +/** + * Events tests. + * + * @package core_question + * @copyright 2014 Mark Nelson <markn@moodle.com> + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +global $CFG; + +require_once($CFG->dirroot . '/question/editlib.php'); +require_once($CFG->dirroot . '/question/category_class.php'); + +class core_question_events_testcase extends advanced_testcase { + + /** + * Tests set up. + */ + public function setUp() { + $this->resetAfterTest(); + } + + /** + * Test the question category created event. + */ + public function test_question_category_created() { + $this->setAdminUser(); + $course = $this->getDataGenerator()->create_course(); + $quiz = $this->getDataGenerator()->create_module('quiz', array('course' => $course->id)); + + $contexts = new question_edit_contexts(context_module::instance($quiz->cmid)); + + $defaultcategoryobj = question_make_default_categories(array($contexts->lowest())); + $defaultcategory = $defaultcategoryobj->id . ',' . $defaultcategoryobj->contextid; + + $qcobject = new question_category_object( + 1, + new moodle_url('/mod/quiz/edit.php', array('cmid' => $quiz->cmid)), + $contexts->having_one_edit_tab_cap('categories'), + $defaultcategoryobj->id, + $defaultcategory, + null, + $contexts->having_cap('moodle/question:add')); + + // Trigger and capture the event. + $sink = $this->redirectEvents(); + $categoryid = $qcobject->add_category($defaultcategory, 'newcategory', '', true); + $events = $sink->get_events(); + $event = reset($events); + + // Check that the event data is valid. + $this->assertInstanceOf('\core\event\question_category_created', $event); + $this->assertEquals(context_module::instance($quiz->cmid), $event->get_context()); + $expected = array($course->id, 'quiz', 'addcategory', 'view.php?id=' . $quiz->cmid , $categoryid, $quiz->cmid); + $this->assertEventLegacyLogData($expected, $event); + $this->assertEventContextNotUsed($event); + } +}