From 87baf79723ef4a4a33bef6c7948641f7697bfa4c Mon Sep 17 00:00:00 2001 From: Sara Arjona Date: Fri, 1 Oct 2021 11:46:34 +0200 Subject: [PATCH] MDL-72720 customfield: Implement enable_plugin() method --- admin/customfields.php | 8 ++++---- lib/classes/plugininfo/customfield.php | 23 +++++++++++++++++++++++ 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/admin/customfields.php b/admin/customfields.php index 2cf80448f52..38f917a1ccd 100644 --- a/admin/customfields.php +++ b/admin/customfields.php @@ -47,14 +47,14 @@ if (!isset($customfieldplugins[$customfieldname])) { switch ($action) { case 'disable': if ($customfieldplugins[$customfieldname]->is_enabled()) { - set_config('disabled', 1, 'customfield_'. $customfieldname); - core_plugin_manager::reset_caches(); + $class = \core_plugin_manager::resolve_plugininfo_class('customfield'); + $class::enable_plugin($customfieldname, false); } break; case 'enable': if (!$customfieldplugins[$customfieldname]->is_enabled()) { - unset_config('disabled', 'customfield_'. $customfieldname); - core_plugin_manager::reset_caches(); + $class = \core_plugin_manager::resolve_plugininfo_class('customfield'); + $class::enable_plugin($customfieldname, true); } break; } diff --git a/lib/classes/plugininfo/customfield.php b/lib/classes/plugininfo/customfield.php index 00ea443270e..3b0e5ee63eb 100644 --- a/lib/classes/plugininfo/customfield.php +++ b/lib/classes/plugininfo/customfield.php @@ -78,6 +78,29 @@ class customfield extends base { return $enabled; } + public static function enable_plugin(string $pluginname, int $enabled): bool { + $haschanged = false; + + $plugin = 'customfield_' . $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; + } + /** * Pre-uninstall hook. *