From bdab64dc6140a8c79b1d577573fec804fcf1b3bf Mon Sep 17 00:00:00 2001 From: Sara Arjona Date: Tue, 5 Oct 2021 12:56:25 +0200 Subject: [PATCH] MDL-72720 qtype: Implement enable_plugin() method --- admin/qtypes.php | 7 ++++--- lib/classes/plugininfo/qtype.php | 23 +++++++++++++++++++++++ 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/admin/qtypes.php b/admin/qtypes.php index 47046983044..cb53268f509 100644 --- a/admin/qtypes.php +++ b/admin/qtypes.php @@ -80,7 +80,8 @@ if (($disable = optional_param('disable', '', PARAM_PLUGIN)) && confirm_sesskey( print_error('unknownquestiontype', 'question', $thispageurl, $disable); } - set_config($disable . '_disabled', 1, 'question'); + $class = \core_plugin_manager::resolve_plugininfo_class('qtype'); + $class::enable_plugin($disable, false); redirect($thispageurl); } @@ -94,7 +95,8 @@ if (($enable = optional_param('enable', '', PARAM_PLUGIN)) && confirm_sesskey()) print_error('cannotenable', 'question', $thispageurl, $enable); } - unset_config($enable . '_disabled', 'question'); + $class = \core_plugin_manager::resolve_plugininfo_class('qtype'); + $class::enable_plugin($enable, true); redirect($thispageurl); } @@ -251,4 +253,3 @@ function question_type_icon_html($action, $qtypename, $icon, $alt, $tip) { new pix_icon($icon, $alt, 'moodle', array('title' => '', 'class' => 'iconsmall')), null, array('title' => $tip)); } - diff --git a/lib/classes/plugininfo/qtype.php b/lib/classes/plugininfo/qtype.php index deeae712d8b..f03490609cf 100644 --- a/lib/classes/plugininfo/qtype.php +++ b/lib/classes/plugininfo/qtype.php @@ -65,6 +65,29 @@ class qtype extends base { return $enabled; } + public static function enable_plugin(string $pluginname, int $enabled): bool { + $haschanged = false; + + $settingname = $pluginname . '_disabled'; + $oldvalue = get_config('question', $settingname); + $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($settingname, $disabled, 'question'); + $haschanged = true; + } else if ($oldvalue != false && !$disabled) { + unset_config($settingname, 'question'); + $haschanged = true; + } + + if ($haschanged) { + add_to_config_log($settingname, $oldvalue, $disabled, 'question'); + \core_plugin_manager::reset_caches(); + } + + return $haschanged; + } + public function is_uninstall_allowed() { global $DB;