MDL-61875 core_component: new method to get full components list

This commit is contained in:
Jake Dallimore
2018-04-10 08:44:40 +08:00
parent 2bd2660751
commit 5749f8a4f7
2 changed files with 60 additions and 0 deletions
+34
View File
@@ -1244,4 +1244,38 @@ $cache = '.var_export($cache, true).';
}
}
}
/**
* Returns a list of frankenstyle component names and their paths, for all components (plugins and subsystems).
*
* E.g.
* [
* 'mod' => [
* 'mod_forum' => FORUM_PLUGIN_PATH,
* ...
* ],
* ...
* 'core' => [
* 'core_comment' => COMMENT_SUBSYSTEM_PATH,
* ...
* ]
* ]
*
* @return array an associative array of components and their corresponding paths.
*/
public static function get_component_list() : array {
$components = [];
// Get all plugins.
foreach (self::get_plugin_types() as $plugintype => $typedir) {
$components[$plugintype] = [];
foreach (self::get_plugin_list($plugintype) as $pluginname => $plugindir) {
$components[$plugintype][$plugintype . '_' . $pluginname] = $plugindir;
}
}
// Get all subsystems.
foreach (self::get_core_subsystems() as $subsystemname => $subsystempath) {
$components['core']['core_' . $subsystemname] = $subsystempath;
}
return $components;
}
}
+26
View File
@@ -779,4 +779,30 @@ class core_component_testcase extends advanced_testcase {
$file = $psrclassloader->invokeArgs(null, array($classname, $prefix, $path, $separators));
$this->assertEquals($result, $file);
}
/**
* Confirm the get_component_list method contains an entry for every component.
*/
public function test_get_component_list_contains_all_components() {
global $CFG;
$componentslist = \core_component::get_component_list();
// We should have an entry for each plugin type, and one additional for 'core'.
$plugintypes = \core_component::get_plugin_types();
$numelementsexpected = count($plugintypes) + 1;
$this->assertEquals($numelementsexpected, count($componentslist));
// And an entry for each of the plugin types.
foreach (array_keys($plugintypes) as $plugintype) {
$this->assertArrayHasKey($plugintype, $componentslist);
}
// And finally, one for 'core'.
$this->assertArrayHasKey('core', $componentslist);
// Check a few of the known plugin types to confirm their presence at their respective type index.
$this->assertEquals($componentslist['core']['core_comment'], $CFG->dirroot . '/comment');
$this->assertEquals($componentslist['mod']['mod_forum'], $CFG->dirroot . '/mod/forum');
$this->assertEquals($componentslist['tool']['tool_analytics'], $CFG->dirroot . '/admin/tool/analytics');
}
}