MDL-20196 improved plugin_supports() for all plugin types

This commit is contained in:
skodak 2009-09-01 08:39:01 +00:00
parent a4397489c1
commit f5a08da4c5

View File

@ -6969,41 +6969,49 @@ function plugin_callback($type, $name, $feature, $action, $options = null, $defa
* @param string $feature Feature code (FEATURE_xx constant)
* @param mixed $default default value if feature support unknown
* @return mixed Feature result (false if not supported, null if feature is unknown,
* otherwise usually true but may have other feature-specific value)
* otherwise usually true but may have other feature-specific value such as array)
*/
function plugin_supports($type, $name, $feature, $default=null) {
global $CFG;
$name = clean_param($name, PARAM_SAFEDIR);
$name = clean_param($name, PARAM_SAFEDIR); //bit of extra security
if ($type === 'mod') {
// we need this special case because we support subplugins in modules,
// otherwise it would end up in infinite loop
if ($name === 'NEWMODULE') {
//somebody forgot to rename the module template
return false;
}
include_once("$CFG->dirroot/mod/$name/lib.php");
switch($type) {
case 'mod' :
$file = $CFG->dirroot.'/mod/'.$name.'/lib.php';
$function = $name.'_supports';
break;
default:
throw new Exception('Unsupported plugin type ('.$type.')');
} else {
if (!$dir = get_plugin_directory($type, $name)) {
throw new coding_exception("Unsupported plugin type or name ($type/$name)");
}
// Load library and look for function
if (file_exists($file)) {
require_once($file);
$libfile = $dir.'/lib.php';
if (file_exists($libfile)) {
include_once($libfile);
}
$function = $type.'_'.$name.'_supports';
}
if (function_exists($function)) {
// Function exists, so just return function result
$supports = $function($feature);
if (is_null($supports)) {
// plugin does not know - use default
return $default;
} else {
return $supports;
}
} else {
switch($feature) {
// If some features can also be checked in other ways
// for legacy support, this could be added here
default: return $default;
}
}
//plugin does not care, so use default
return $default;
}
/**