From c70519cc1d46fc34f789b9eee7dfbe3d9098334c Mon Sep 17 00:00:00 2001 From: Sara Arjona Date: Fri, 1 Oct 2021 11:34:35 +0200 Subject: [PATCH] MDL-72720 availability: Implement enable_plugin() method --- admin/tool/availabilityconditions/index.php | 7 ++++--- lib/classes/plugininfo/availability.php | 23 +++++++++++++++++++++ 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/admin/tool/availabilityconditions/index.php b/admin/tool/availabilityconditions/index.php index f76b3e205e6..ff18a7211ba 100644 --- a/admin/tool/availabilityconditions/index.php +++ b/admin/tool/availabilityconditions/index.php @@ -52,13 +52,14 @@ if (($plugin = optional_param('plugin', '', PARAM_PLUGIN))) { $action = required_param('action', PARAM_ALPHA); switch ($action) { case 'hide' : - set_config('disabled', 1, 'availability_' . $plugin); + $class = \core_plugin_manager::resolve_plugininfo_class('availability'); + $class::enable_plugin($plugin, false); break; case 'show' : - unset_config('disabled', 'availability_' . $plugin); + $class = \core_plugin_manager::resolve_plugininfo_class('availability'); + $class::enable_plugin($plugin, true); break; } - core_plugin_manager::reset_caches(); // Always redirect back after an action. redirect($pageurl); diff --git a/lib/classes/plugininfo/availability.php b/lib/classes/plugininfo/availability.php index 1059ec5dbc9..b8edd612138 100644 --- a/lib/classes/plugininfo/availability.php +++ b/lib/classes/plugininfo/availability.php @@ -56,6 +56,29 @@ class availability extends base { return $enabled; } + public static function enable_plugin(string $pluginname, int $enabled): bool { + $haschanged = false; + + $plugin = 'availability_' . $pluginname; + $oldvalue = get_config($plugin, 'disabled'); + $disabled = !$enabled; + // Only set value if there is no config setting or if the value is different from the previous one. + if ($oldvalue == false && $disabled) { + set_config('disabled', $disabled, $plugin); + $haschanged = true; + } else if ($oldvalue != false && !$disabled) { + unset_config('disabled', $plugin); + $haschanged = true; + } + + if ($haschanged) { + add_to_config_log('disabled', $oldvalue, $disabled, $plugin); + \core_plugin_manager::reset_caches(); + } + + return $haschanged; + } + /** * Defines if there should be a way to uninstall the plugin via the administration UI. *