Merge branch 'MDL-61875-master' of https://github.com/snake/moodle

This commit is contained in:
Eloy Lafuente (stronk7) 2018-04-10 13:03:27 +02:00
commit 7aeb85770f
3 changed files with 63 additions and 16 deletions

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;
}
}

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');
}
}

View File

@ -298,22 +298,9 @@ class manager {
* @return array the array of frankenstyle component names.
*/
protected function get_component_list() {
$components = [];
// Get all plugins.
$plugintypes = \core_component::get_plugin_types();
foreach ($plugintypes as $plugintype => $typedir) {
$plugins = \core_component::get_plugin_list($plugintype);
foreach ($plugins as $pluginname => $plugindir) {
$components[] = $plugintype . '_' . $pluginname;
}
}
// Get all subsystems.
foreach (\core_component::get_core_subsystems() as $name => $path) {
if (isset($path)) {
$components[] = 'core_' . $name;
}
}
return $components;
return array_keys(array_reduce(\core_component::get_component_list(), function($carry, $item) {
return array_merge($carry, $item);
}, []));
}
/**