MDL-36088 questions: Add new events
[moodle.git] / lib / classes / event / question_base.php
index 3690a4c..2f07b85 100644 (file)
@@ -18,7 +18,7 @@
  * Base class for question events.
  *
  * @package    core
- * @copyright  2016 Stephen Bourget
+ * @copyright  2019 Stephen Bourget
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
@@ -30,16 +30,17 @@ defined('MOODLE_INTERNAL') || die();
  * Base class for question events.
  *
  * @package    core
- * @since      Moodle 3.2
- * @copyright  2016 Stephen Bourget
+ * @since      Moodle 3.7
+ * @copyright  2019 Stephen Bourget
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
-class question_base extends base {
+abstract class question_base extends base {
 
     /**
      * Init method.
      */
     protected function init() {
+        $this->data['objecttable'] = 'question';
         $this->data['edulevel'] = self::LEVEL_TEACHING;
     }
 
@@ -52,12 +53,15 @@ class question_base extends base {
         if ($this->courseid) {
             $cat = $this->other['categoryid'] . ',' . $this->contextid;
             if ($this->contextlevel == CONTEXT_MODULE) {
-                return new \moodle_url('/question/edit.php', array('cmid' => $this->contextinstanceid, 'cat' => $cat, 'lastchanged' => $this->objectid));
+                return new \moodle_url('/question/edit.php',
+                        ['cmid' => $this->contextinstanceid, 'cat' => $cat, 'lastchanged' => $this->objectid]);
             }
-            return new \moodle_url('/question/edit.php', array('courseid' => $this->courseid, 'cat' => $cat, 'lastchanged' => $this->objectid));
+            return new \moodle_url('/question/edit.php',
+                    ['courseid' => $this->courseid, 'cat' => $cat, 'lastchanged' => $this->objectid]);
         }
         // Lets try viewing from the frontpage for contexts above course.
-        return new \moodle_url('/question/category.php', array('courseid' => SITEID, 'edit' => $this->other['categoryid'], 'lastchanged' => $this->objectid));
+        return new \moodle_url('/question/category.php',
+                ['courseid' => SITEID, 'edit' => $this->other['categoryid'], 'lastchanged' => $this->objectid]);
     }
 
     /**
@@ -80,7 +84,7 @@ class question_base extends base {
      * @return array
      */
     public static function get_objectid_mapping() {
-        return array('db' => 'question', 'restore' => 'question');
+        return ['db' => 'question', 'restore' => 'question'];
     }
 
     /**
@@ -90,9 +94,36 @@ class question_base extends base {
      */
     public static function get_other_mapping() {
 
-        $othermapped = array();
-        $othermapped['categoryid'] = array('db' => 'question_categories', 'restore' => 'question_categories');
+        $othermapped = [];
+        $othermapped['categoryid'] = ['db' => 'question_categories', 'restore' => 'question_categories'];
         return $othermapped;
     }
+
+    /**
+     * Create a event from question object
+     *
+     * @param object $question
+     * @param object|null $context
+     * @param array|null $other will override the categoryid pre-filled out on the first line.
+     * @return base
+     * @throws \coding_exception
+     */
+    public static function create_from_question_instance($question, $context = null, $other = null) {
+
+        $params = ['objectid' => $question->id, 'other' => ['categoryid' => $question->category]];
+
+        if (!empty($question->contextid)) {
+            $params['contextid'] = $question->contextid;
+        }
+
+        $params['context'] = $context;
+
+        if (!empty($other)) {
+            $params['other'] = $other;
+        }
+
+        $event = self::create($params);
+        return $event;
+    }
 }