diff --git a/admin/dataformats.php b/admin/dataformats.php index 42a8e50f955..15c9cf8b0cb 100644 --- a/admin/dataformats.php +++ b/admin/dataformats.php @@ -48,14 +48,14 @@ if (!isset($plugins[$name])) { switch ($action) { case 'disable': if ($plugins[$name]->is_enabled()) { - set_config('disabled', 1, 'dataformat_'. $name); - core_plugin_manager::reset_caches(); + $class = \core_plugin_manager::resolve_plugininfo_class('dataformat'); + $class::enable_plugin($name, false); } break; case 'enable': if (!$plugins[$name]->is_enabled()) { - unset_config('disabled', 'dataformat_'. $name); - core_plugin_manager::reset_caches(); + $class = \core_plugin_manager::resolve_plugininfo_class('dataformat'); + $class::enable_plugin($name, true); } break; case 'up': @@ -78,4 +78,3 @@ switch ($action) { break; } redirect($return); - diff --git a/lib/classes/plugininfo/dataformat.php b/lib/classes/plugininfo/dataformat.php index 6bd48ec881e..1a30daf141e 100644 --- a/lib/classes/plugininfo/dataformat.php +++ b/lib/classes/plugininfo/dataformat.php @@ -96,6 +96,29 @@ class dataformat extends base { return $enabled; } + public static function enable_plugin(string $pluginname, int $enabled): bool { + $haschanged = false; + + $plugin = 'dataformat_' . $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; + } + /** * Returns the node name used in admin settings menu for this plugin settings (if applicable) * @@ -163,4 +186,3 @@ class dataformat extends base { } } -