'SloodleModuleChat', 'distributor'=>'SloodleModuleDistributor', ...}
global $SLOODLE_MODULE_CLASS;
$SLOODLE_MODULE_CLASS = array();
// Go through each declared class
$allclasses = get_declared_classes();
foreach ($allclasses as $c) {
// Is this class a subclass of the Sloodle Module type?
if (strcasecmp(get_parent_class($c), 'SloodleModule') == 0) {
// Fetch the type name
$curtype = call_user_func(array($c, 'get_type'));
if (!empty($curtype)) {
// Add it to our array with its type
$SLOODLE_MODULE_CLASS[$curtype] = $c;
}
}
}
/*
Static method to return a list of available module types => module names.
Avoids having to use the global variable elsewhere.
*/
function sloodle_available_modules() {
global $SLOODLE_MODULE_CLASS;
return $SLOODLE_MODULE_CLASS;
}
/**
* Constructs a appropriate Sloodle module object based on the named type.
* @param string $type The type of module to construct - typically a short name, such as 'chat' or 'blog'
* @param SloodleSession &$_session The {@link SloodleSession} object to pass to the module on construction, or just null
* @param mixed $id The identifier of the module instance to load from the database (or null if there is no module data)
* @return SloodleModule|bool Returns the cosntructed module object, or false if it fails
*/
function sloodle_load_module($type, &$_session, $id = null)
{
global $SLOODLE_MODULE_CLASS;
// Abort if the type is not recognised
if (!array_key_exists($type, $SLOODLE_MODULE_CLASS)) {
sloodle_debug("Module load failed - type \"$type\" not recognised.
");
return false;
}
// Construct the object, based on the class name in our array
$module = new $SLOODLE_MODULE_CLASS[$type]($_session);
// Load the data from the database, if necessary
if ($id != null) {
if ($module->load((int)$id)) return $module;
sloodle_debug("Failed to load module data from database with ID $id.
");
return false;
}
// Everything seems OK
return $module;
}
/**
* Constructs and loads an appropriate SLOODLE module object, based on the 'sloodle' record (that is, the instance or instance ID).
* The appropriate type is detected from the instance data.
* The object is provided with a dummy SloodleSession object.
* @param int|object $instance Either an integer instance ID, or a record from the 'sloodle' table.
* @return SloodleModule|bool Returns the constructed module object, or false if it fails.
*/
function sloodle_quick_load_module_from_instance($instance)
{
// Get an instance record if necessary
if (is_numeric($instance)) {
$instance = sloodle_get_record('sloodle', 'id', (int)$instance);
if ($instance === false) return false;
}
// Attempt to get the course module ID
$cm = get_coursemodule_from_instance('sloodle', $instance->id);
if ($cm === false) return false;
// Attempt to load the module
$dummysession = new SloodleSession(false);
return sloodle_load_module($instance->type, $dummysession, (int)$cm->id);
}
/**
* Constructs and loads an appropriate SLOODLE module object, based on the course module or course module ID.
* The appropriate type is detected automatically.
* The object is provided with a dummy SloodleSession object.
* @param int|object $cm Either an integer course module ID, or a course module record.
* @return SloodleModule|bool Returns the constructed module object, or false if it fails.
*/
function sloodle_quick_load_module_from_cm($cm)
{
// Obtain a course module object if necessary
if (is_numeric($cm)) {
$cm = get_coursemodule_from_id('sloodle', $cm);
if ($cm === false) return false;
}
// Get an instance record
$instance = sloodle_get_record('sloodle', 'id', (int)$cm->instance);
if ($instance === false) return false;
// Attempt to load the module
$dummysession = new SloodleSession(false);
return sloodle_load_module($instance->type, $dummysession, (int)$cm->id);
}
?>