From 48a5b81346e3ca8c1944449fbead68523e59baa4 Mon Sep 17 00:00:00 2001 From: Sam Chaffee Date: Thu, 29 Nov 2012 09:27:47 +0000 Subject: [PATCH] MDL-36881 Handle poorly behaved modname_get_types functions better The modname_get_types function is not always well implemented by third-party plugins and some return poor data. This in turn leads to incorrect module definitions, and can lead to problems in both the 'Add an activity...' dropdowns and the Activity chooser. This will also prevent display of plugins which legitimately can have subtypes but where no subtypes were found. Since such plugins cannot be used in this fashion in any case, this is also beneficial. Signed-off-by: Andrew Robert Nicols --- course/lib.php | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/course/lib.php b/course/lib.php index 37c05291e19..d6a3b0d41c1 100644 --- a/course/lib.php +++ b/course/lib.php @@ -1914,7 +1914,8 @@ function get_module_metadata($course, $modnames, $sectionreturn = null) { // NOTE: this is legacy stuff, module subtypes are very strongly discouraged!! $gettypesfunc = $modname.'_get_types'; if (function_exists($gettypesfunc)) { - if ($types = $gettypesfunc()) { + $types = $gettypesfunc(); + if (is_array($types) && count($types) > 0) { $group = new stdClass(); $group->name = $modname; $group->icon = $OUTPUT->pix_icon('icon', '', $modname, array('class' => 'icon')); @@ -1963,7 +1964,11 @@ function get_module_metadata($course, $modnames, $sectionreturn = null) { $module->archetype = plugin_supports('mod', $modname, FEATURE_MOD_ARCHETYPE, MOD_ARCHETYPE_OTHER); $modlist[$course->id][$modname] = $module; } - $return[$modname] = $modlist[$course->id][$modname]; + if (isset($modlist[$course->id][$modname])) { + $return[$modname] = $modlist[$course->id][$modname]; + } else { + debugging("Invalid module metadata configuration for {$modname}"); + } } return $return;