MDL-83704 core: Stop loading subplugins files to fetch caps

This information is heavily cached in the component class. This should
be used wherever possible rather than checking on disk.
This commit is contained in:
Andrew Nicols 2024-11-13 10:14:37 +08:00
parent cd5c991ede
commit e5b715291d
No known key found for this signature in database
GPG Key ID: 6D1E3157C8CFBF14
2 changed files with 7 additions and 12 deletions

View File

@ -170,15 +170,7 @@ class module extends context {
$subcaps = array();
$modulepath = "{$CFG->dirroot}/mod/{$module->name}";
if (file_exists("{$modulepath}/db/subplugins.json")) {
$subplugins = (array) json_decode(file_get_contents("{$modulepath}/db/subplugins.json"))->plugintypes;
} else if (file_exists("{$modulepath}/db/subplugins.php")) {
debugging('Use of subplugins.php has been deprecated. ' .
'Please update your plugin to provide a subplugins.json file instead.',
DEBUG_DEVELOPER);
$subplugins = array(); // Should be redefined in the file.
include("{$modulepath}/db/subplugins.php");
}
$subplugins = \core\component::get_subplugins("mod_{$module->name}");
if (!empty($subplugins)) {
foreach (array_keys($subplugins) as $subplugintype) {

View File

@ -189,13 +189,16 @@ class module_test extends \advanced_testcase {
$this->resetAfterTest();
$course = $this->getDataGenerator()->create_course();
$page = $this->getDataGenerator()->create_module('page', ['course' => $course->id, 'name' => 'Pokus']);
$context = module::instance($page->cmid);
$mod = $this->getDataGenerator()->create_module('book', ['course' => $course->id, 'name' => 'Pokus']);
$context = module::instance($mod->cmid);
$capabilities = $context->get_capabilities();
$capabilities = convert_to_array($capabilities);
$capabilities = array_column($capabilities, 'name');
$this->assertContains('mod/page:view', $capabilities);
$this->assertContains('mod/book:read', $capabilities);
$this->assertContains('booktool/exportimscp:export', $capabilities);
$this->assertContains('booktool/importhtml:import', $capabilities);
$this->assertNotContains('mod/url:view', $capabilities);
$this->assertNotContains('moodle/course:view', $capabilities);
$this->assertNotContains('moodle/category:manage', $capabilities);