MDL-78523 core_communication: Safe disable of communication plugins

This commit is contained in:
Safat
2023-06-22 12:19:44 +10:00
parent 1b1a15a308
commit d785ff6f57
2 changed files with 28 additions and 6 deletions
+13 -6
View File
@@ -51,9 +51,6 @@ class processor {
private stdClass $instancedata,
) {
$providercomponent = $this->instancedata->provider;
if (!\core\plugininfo\communication::is_plugin_enabled($providercomponent)) {
throw new \moodle_exception('communicationproviderdisabled', 'core_communication', '', $providercomponent);
}
$providerclass = $this->get_classname_for_provider($providercomponent);
if (!class_exists($providerclass)) {
throw new \moodle_exception('communicationproviderclassnotfound', 'core_communication', '', $providerclass);
@@ -329,8 +326,8 @@ class processor {
*/
public static function load_by_id(int $id): ?self {
global $DB;
if ($record = $DB->get_record('communication', ['id' => $id])) {
$record = $DB->get_record('communication', ['id' => $id]);
if ($record && self::is_provider_enabled($record->provider)) {
return new self($record);
}
@@ -359,7 +356,7 @@ class processor {
'instancetype' => $instancetype,
]);
if ($record) {
if ($record && self::is_provider_enabled($record->provider)) {
return new self($record);
}
@@ -600,4 +597,14 @@ class processor {
}
return null;
}
/**
* Is communication provider enabled/disabled.
*
* @param string $provider provider component name
* @return bool
*/
public static function is_provider_enabled(string $provider): bool {
return \core\plugininfo\communication::is_plugin_enabled($provider);
}
}
+15
View File
@@ -395,4 +395,19 @@ class processor_test extends \advanced_testcase {
$this->assertEquals($avatar->get_filepath(), '/');
$this->assertEquals($avatar->get_filearea(), 'avatar');
}
/**
* Test if the provider is enabled or disabled.
*
* @covers ::is_provider_enabled
*/
public function test_is_provider_enabled(): void {
$this->resetAfterTest();
$communicationprovider = 'communication_matrix';
$this->assertTrue(processor::is_provider_enabled($communicationprovider));
// Now test is disabling the plugin returns false.
set_config('disabled', 1, $communicationprovider);
$this->assertFalse(processor::is_provider_enabled($communicationprovider));
}
}