From f8a3e28b161c73ebf69c7cf9f75b918d4ea9c67f Mon Sep 17 00:00:00 2001 From: Cameron Ball Date: Wed, 22 Mar 2017 18:12:07 +0800 Subject: [PATCH] MDL-58087 core_calendar: Don't process events not created by modules 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 | 4 ++++ .../local/event/factories/event_abstract_factory.php | 7 +++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/calendar/classes/local/event/core_container.php b/calendar/classes/local/event/core_container.php index cc484b9398a..39e62797615 100644 --- a/calendar/classes/local/event/core_container.php +++ b/calendar/classes/local/event/core_container.php @@ -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])) { diff --git a/calendar/classes/local/event/factories/event_abstract_factory.php b/calendar/classes/local/event/factories/event_abstract_factory.php index 1b3356e6984..477ca303ce2 100644 --- a/calendar/classes/local/event/factories/event_abstract_factory.php +++ b/calendar/classes/local/event/factories/event_abstract_factory.php @@ -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 ); }