MDL-45752 Course: Add additional events
authorStephen Bourget <steve.bourget@sau19.org>
Tue, 13 Sep 2016 23:23:59 +0000 (19:23 -0400)
committerStephen Bourget <steve.bourget@sau19.org>
Tue, 13 Sep 2016 23:23:59 +0000 (19:23 -0400)
course/index.php
course/info.php
course/search.php
course/tests/events_test.php [new file with mode: 0644]
lang/en/moodle.php
lib/classes/event/course_category_viewed.php [new file with mode: 0644]
lib/classes/event/course_information_viewed.php [new file with mode: 0644]
lib/classes/event/courses_searched.php [new file with mode: 0644]
version.php

index 3b16759..ce327ae 100644 (file)
@@ -60,4 +60,9 @@ echo $OUTPUT->header();
 echo $OUTPUT->skip_link_target();
 echo $content;
 
+// Trigger event, course category viewed.
+$eventparams = array('context' => $PAGE->context, 'objectid' => $categoryid);
+$event = \core\event\course_category_viewed::create($eventparams);
+$event->trigger();
+
 echo $OUTPUT->footer();
index 2491510..3eae743 100644 (file)
@@ -1,6 +1,25 @@
 <?php
-
-/// Displays external information about a course
+// 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/>.
+
+/**
+ * Displays external information about a course
+ * @package    core_course
+ * @copyright  1999 onwards Martin Dougiamas  http://dougiamas.com
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
 
     require_once("../config.php");
     require_once("lib.php");
 
     echo "<br />";
 
+    // Trigger event, course information viewed.
+    $eventparams = array('context' => $context, 'objectid' => $course->id);
+    $event = \core\event\course_information_viewed::create($eventparams);
+    $event->trigger();
+
     echo $OUTPUT->footer();
 
 
index 0107982..0aef7b5 100644 (file)
@@ -92,6 +92,11 @@ if (empty($searchcriteria)) {
         $searchform = $courserenderer->course_search_form($search, 'navbar');
     }
     $PAGE->set_button($searchform);
+
+    // Trigger event, courses searched.
+    $eventparams = array('context' => $PAGE->context, 'other' => array('query' => $search));
+    $event = \core\event\courses_searched::create($eventparams);
+    $event->trigger();
 }
 
 $PAGE->set_heading($site->fullname);
diff --git a/course/tests/events_test.php b/course/tests/events_test.php
new file mode 100644 (file)
index 0000000..0a30f7e
--- /dev/null
@@ -0,0 +1,139 @@
+<?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/>.
+
+/**
+ * This file contains the class that handles testing of course events.
+ *
+ * @package core
+ * @copyright  2016 Stephen Bourget
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+defined('MOODLE_INTERNAL') || die();
+
+/**
+ * This file contains the class that handles testing of course events.
+ *
+ * @package core_course
+ * @copyright  2016 Stephen Bourget
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+class core_course_events_testcase extends advanced_testcase {
+
+    /**
+     * Tests set up
+     */
+    protected function setUp() {
+        global $CFG;
+        require_once($CFG->dirroot . '/course/lib.php');
+        $this->resetAfterTest();
+    }
+
+    /**
+     * Test the course category viewed.
+     *
+     * There is no external API for viewing a category, so the unit test will simply
+     * create and trigger the event and ensure data is returned as expected.
+     */
+    public function test_course_category_viewed_event() {
+
+        // Create a category.
+        $category = $this->getDataGenerator()->create_category();
+
+        // Trigger an event: course category viewed.
+        $eventparams = array(
+            'objectid' => $category->id,
+            'context' => context_system::instance(),
+        );
+
+        $event = \core\event\course_category_viewed::create($eventparams);
+        // Trigger and capture the event.
+        $sink = $this->redirectEvents();
+        $event->trigger();
+        $events = $sink->get_events();
+        $event = reset($events);
+
+        // Check that the event data is valid.
+        $this->assertInstanceOf('\core\event\course_category_viewed', $event);
+        $this->assertEquals($category->id, $event->objectid);
+        $this->assertDebuggingNotCalled();
+        $sink->close();
+
+    }
+
+    /**
+     * Test the course information viewed.
+     *
+     * There is no external API for viewing course information so the unit test will simply
+     * create and trigger the event and ensure data is returned as expected.
+     */
+    public function test_course_information_viewed_event() {
+
+        // Create a course.
+        $data = new stdClass();
+        $course = $this->getDataGenerator()->create_course($data);
+
+        // Trigger an event: course category viewed.
+        $eventparams = array(
+            'objectid' => $course->id,
+            'context' => context_course::instance($course->id),
+        );
+
+        $event = \core\event\course_information_viewed::create($eventparams);
+        // Trigger and capture the event.
+        $sink = $this->redirectEvents();
+        $event->trigger();
+        $events = $sink->get_events();
+        $event = reset($events);
+
+        // Check that the event data is valid.
+        $this->assertInstanceOf('\core\event\course_information_viewed', $event);
+        $this->assertEquals($course->id, $event->objectid);
+        $this->assertDebuggingNotCalled();
+        $sink->close();
+
+    }
+
+    /**
+     * Test the courses searched.
+     *
+     * There is no external API for viewing course information so the unit test will simply
+     * create and trigger the event and ensure data is returned as expected.
+     */
+    public function test_courses_searched_event() {
+
+        // Trigger an event: courses searched.
+        $search = 'mysearch';
+        $eventparams = array(
+            'context' => context_system::instance(),
+            'other' => array('query' => $search)
+        );
+
+        $event = \core\event\courses_searched::create($eventparams);
+        // Trigger and capture the event.
+        $sink = $this->redirectEvents();
+        $event->trigger();
+        $events = $sink->get_events();
+        $event = reset($events);
+
+        // Check that the event data is valid.
+        $this->assertInstanceOf('\core\event\courses_searched', $event);
+        $this->assertEquals($search, $event->other['query']);
+        $this->assertDebuggingNotCalled();
+        $sink->close();
+
+    }
+}
index 1c8532f..5af5b2b 100644 (file)
@@ -727,13 +727,16 @@ $string['eventcommentsviewed'] = 'Comments viewed';
 $string['eventcoursecategorycreated'] = 'Category created';
 $string['eventcoursecategorydeleted'] = 'Category deleted';
 $string['eventcoursecategoryupdated'] = 'Category updated';
+$string['eventcoursecategoryviewed'] = 'Category viewed';
 $string['eventcoursecontentdeleted'] = 'Course content deleted';
 $string['eventcoursecreated'] = 'Course created';
 $string['eventcoursedeleted'] = 'Course deleted';
+$string['eventcourseinformationviewed'] = 'Course summary viewed';
 $string['eventcoursemodulecreated'] = 'Course module created';
 $string['eventcoursemoduledeleted'] = 'Course module deleted';
 $string['eventcoursemoduleupdated'] = 'Course module updated';
 $string['eventcoursemoduleviewed'] = 'Course module viewed';
+$string['eventcoursessearched'] = 'Courses searched';
 $string['eventcourseresetended'] = 'Course reset ended';
 $string['eventcourseresetstarted'] = 'Course reset started';
 $string['eventcourserestored'] = 'Course restored';
diff --git a/lib/classes/event/course_category_viewed.php b/lib/classes/event/course_category_viewed.php
new file mode 100644 (file)
index 0000000..e0f200e
--- /dev/null
@@ -0,0 +1,83 @@
+<?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/>.
+
+/**
+ * Course category viewed event.
+ *
+ * @package    core
+ * @copyright  2016 Stephen Bourget
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+namespace core\event;
+defined('MOODLE_INTERNAL') || die();
+
+/**
+ * Course category viewed event class.
+ *
+ * @package    core
+ * @since      Moodle 3.2
+ * @copyright  2016 Stephen Bourget
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+class course_category_viewed extends base {
+
+    /**
+     * Initialise the event data.
+     */
+    protected function init() {
+        $this->data['objecttable'] = 'course_categories';
+        $this->data['crud'] = 'r';
+        $this->data['edulevel'] = self::LEVEL_OTHER;
+    }
+
+    /**
+     * Returns localised general event name.
+     *
+     * @return string
+     */
+    public static function get_name() {
+        return get_string('eventcoursecategoryviewed');
+    }
+
+    /**
+     * Returns relevant URL.
+     *
+     * @return \moodle_url
+     */
+    public function get_url() {
+        return new \moodle_url('/course/index.php', array('categoryid' => $this->objectid));
+    }
+
+    /**
+     * Returns non-localised description of what happened.
+     *
+     * @return string
+     */
+    public function get_description() {
+        return "The user with id '$this->userid' viewed the course category with id '$this->objectid'.";
+    }
+
+    /**
+     * Used for maping events on restore
+     *
+     * @return bool
+     */
+    public static function get_objectid_mapping() {
+        // Categories are not backed up, so no need to map them on restore.
+        return array('db' => 'course_categories', 'restore' => base::NOT_MAPPED);
+    }
+}
diff --git a/lib/classes/event/course_information_viewed.php b/lib/classes/event/course_information_viewed.php
new file mode 100644 (file)
index 0000000..27d17a8
--- /dev/null
@@ -0,0 +1,94 @@
+<?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/>.
+
+/**
+ * Course information viewed event.
+ *
+ * @package    core
+ * @copyright  2016 Stephen Bourget
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+namespace core\event;
+defined('MOODLE_INTERNAL') || die();
+
+/**
+ * Course information viewed event class.
+ *
+ * Class for event to be triggered when a course information is viewed.
+ *
+ * @package    core
+ * @since      Moodle 3.2
+ * @copyright  2016 Stephen Bourget
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+class course_information_viewed extends base {
+
+    /**
+     * Init method.
+     *
+     * @return void
+     */
+    protected function init() {
+        $this->data['crud'] = 'r';
+        $this->data['edulevel'] = self::LEVEL_PARTICIPATING;
+        $this->data['objecttable'] = 'course';
+
+    }
+
+    /**
+     * Returns description of what happened.
+     *
+     * @return string
+     */
+    public function get_description() {
+
+        return "The user with id '$this->userid' viewed the course information for the course with id '$this->courseid'.";
+    }
+
+    /**
+     * Return localised event name.
+     *
+     * @return string
+     */
+    public static function get_name() {
+        return get_string('eventcourseinformationviewed', 'core');
+    }
+
+    /**
+     * Get URL related to the action.
+     *
+     * @return \moodle_url|null
+     */
+    public function get_url() {
+        return new \moodle_url('/course/info.php', array('id' => $this->objectid));
+    }
+
+    /**
+     * Custom validation.
+     *
+     * @throws \coding_exception
+     * @return void
+     */
+    protected function validate_data() {
+        parent::validate_data();
+
+        if ($this->contextlevel != CONTEXT_COURSE) {
+            throw new \coding_exception('Context level must be CONTEXT_COURSE.');
+        }
+    }
+
+}
diff --git a/lib/classes/event/courses_searched.php b/lib/classes/event/courses_searched.php
new file mode 100644 (file)
index 0000000..6c007fb
--- /dev/null
@@ -0,0 +1,107 @@
+<?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/>.
+
+/**
+ * Courses searched event.
+ *
+ * @package    core
+ * @copyright  2016 Stephen Bourget
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+namespace core\event;
+defined('MOODLE_INTERNAL') || die();
+
+/**
+ * Courses searched event class.
+ *
+ * Class for event to be triggered when a courses are searched (using course search).
+ *
+ * @property-read array $other {
+ *      Extra information about event.
+ *
+ *      - string query: search query performed.
+ * }
+ *
+ * @package    core
+ * @since      Moodle 3.2
+ * @copyright  2016 Stephen Bourget
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+class courses_searched extends base {
+
+    /**
+     * Init method.
+     *
+     * @return void
+     */
+    protected function init() {
+        $this->data['crud'] = 'r';
+        $this->data['edulevel'] = self::LEVEL_PARTICIPATING;
+    }
+
+    /**
+     * Returns description of what happened.
+     *
+     * @return string
+     */
+    public function get_description() {
+
+        return "The user with id '$this->userid' searched course information for the term '".$this->other['query']."'.";
+    }
+
+    /**
+     * Return localised event name.
+     *
+     * @return string
+     */
+    public static function get_name() {
+        return get_string('eventcoursessearched', 'core');
+    }
+
+    /**
+     * Get URL related to the action.
+     *
+     * @return \moodle_url|null
+     */
+    public function get_url() {
+        return new \moodle_url('/course/search.php', array('search' => $this->other['query']));
+    }
+
+    /**
+     * Custom validations.
+     *
+     * @throws \coding_exception
+     * @return void
+     */
+    protected function validate_data() {
+        parent::validate_data();
+
+        if (!isset($this->other['query'])) {
+            throw new \coding_exception('The \'query\' must be set in other.');
+        }
+    }
+
+    /**
+     * Used for maping events on restore
+     *
+     * @return bool
+     */
+    public static function get_other_mapping() {
+        // No mapping required.
+        return false;
+    }
+}
index c576e55..20ce7d4 100644 (file)
@@ -29,7 +29,7 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$version  = 2016090800.01;              // YYYYMMDD      = weekly release date of this DEV branch.
+$version  = 2016090800.02;              // YYYYMMDD      = weekly release date of this DEV branch.
                                         //         RR    = release increments - 00 in DEV branches.
                                         //           .XX = incremental changes.