MDL-58087 core_calendar: Don't process events not created by modules
authorCameron Ball <cameron@moodle.com>
Wed, 22 Mar 2017 10:12:07 +0000 (18:12 +0800)
committerDan Poltawski <dan@moodle.com>
Tue, 4 Apr 2017 10:01:40 +0000 (11:01 +0100)
Our API infrastructure currently only deals with events created
by course modules. Site, user, etc events can't be dealt with.

Part of MDL-55611 epic.

calendar/classes/local/event/core_container.php
calendar/classes/local/event/factories/event_abstract_factory.php

index cc484b9..39e6279 100644 (file)
@@ -117,6 +117,10 @@ class core_container {
                 $getcallback('action'),
                 $getcallback('visibility'),
                 function ($dbrow) {
+                    if (empty($dbrow->modulename)) {
+                        return false;
+                    }
+
                     $instances = get_fast_modinfo($dbrow->courseid)->instances;
 
                     if (!isset($instances[$dbrow->modulename]) || !isset($instances[$dbrow->modulename][$dbrow->instance])) {
index 1b3356e..477ca30 100644 (file)
@@ -127,7 +127,7 @@ abstract class event_abstract_factory implements event_factory_interface {
         $module = null;
         $subscription = null;
 
-        if ($dbrow->courseid == 0) {
+        if ($dbrow->courseid == 0 && !empty($dbrow->modulename)) {
             $cm = get_coursemodule_from_instance($dbrow->modulename, $dbrow->instance);
             $dbrow->courseid = get_course($cm->course)->id;
         }
@@ -149,15 +149,14 @@ abstract class event_abstract_factory implements event_factory_interface {
             });
         }
 
-        if ($dbrow->instance && $dbrow->modulename) {
-            $modulename = $dbrow->modulename;
+        if ($dbrow->instance && !empty($dbrow->modulename)) {
             $module = new module_std_proxy(
                 $dbrow->modulename,
                 $dbrow->instance,
                 function($modulename, $instance) {
                     return \core_calendar\api::get_module_cached(
                         $this->modulecachereference,
-                        $modulename,
+                        $dbrow->modulename,
                         $instance
                     );
                 }