diff --git a/admin/tool/mfa/classes/plugininfo/factor.php b/admin/tool/mfa/classes/plugininfo/factor.php index 5d9216fbdda..bbc653762c1 100644 --- a/admin/tool/mfa/classes/plugininfo/factor.php +++ b/admin/tool/mfa/classes/plugininfo/factor.php @@ -16,6 +16,7 @@ namespace tool_mfa\plugininfo; +use moodle_url; use stdClass; /** @@ -292,4 +293,47 @@ class factor extends \core\plugininfo\base { global $DB; return $DB->get_record('tool_mfa', ['id' => $factorid]); } + + /** + * Return URL used for management of plugins of this type. + * + * @return moodle_url + */ + public static function get_manage_url(): moodle_url { + return new moodle_url('/admin/settings.php', [ + 'section' => 'managemfa', + ]); + } + + /** + * These subplugins can be uninstalled. + * + * @return bool + */ + public function is_uninstall_allowed(): bool { + return $this->name !== 'nosetup'; + } + + /** + * Pre-uninstall hook. + * + * This is intended for disabling of plugin, some DB table purging, etc. + * + * NOTE: to be called from uninstall_plugin() only. + * @private + */ + public function uninstall_cleanup() { + global $DB, $CFG; + + $DB->delete_records('tool_mfa', ['factor' => $this->name]); + $DB->delete_records('tool_mfa_secrets', ['factor' => $this->name]); + + $order = explode(',', get_config('tool_mfa', 'factor_order')); + if (in_array($this->name, $order)) { + $order = array_diff($order, [$this->name]); + \tool_mfa\manager::set_factor_config(['factor_order' => implode(',', $order)], 'tool_mfa'); + } + + parent::uninstall_cleanup(); + } } diff --git a/admin/tool/mfa/factor/admin/version.php b/admin/tool/mfa/factor/admin/version.php index 9530e7155fb..5080f4470e9 100644 --- a/admin/tool/mfa/factor/admin/version.php +++ b/admin/tool/mfa/factor/admin/version.php @@ -27,8 +27,6 @@ defined('MOODLE_INTERNAL') || die(); $plugin->version = 2023080300; // The current plugin version (Date: YYYYMMDDXX). -$plugin->requires = 2023042400.00; // Supports from 4.2. -$plugin->component = 'factor_admin'; -$plugin->release = 'v0.1'; +$plugin->requires = 2023042400.00; // Requires this Moodle version. +$plugin->component = 'factor_admin'; // Full name of the plugin (used for diagnostics). $plugin->maturity = MATURITY_STABLE; -$plugin->dependencies = ['tool_mfa' => 2023080300]; diff --git a/admin/tool/mfa/factor/auth/version.php b/admin/tool/mfa/factor/auth/version.php index 4326a860688..54799f3e12e 100644 --- a/admin/tool/mfa/factor/auth/version.php +++ b/admin/tool/mfa/factor/auth/version.php @@ -27,8 +27,6 @@ defined('MOODLE_INTERNAL') || die(); $plugin->version = 2023080300; // The current plugin version (Date: YYYYMMDDXX). -$plugin->requires = 2023042400.00; // Supports from 4.2. -$plugin->component = 'factor_auth'; -$plugin->release = 2021020500; +$plugin->requires = 2023042400.00; // Requires this Moodle version. +$plugin->component = 'factor_auth'; // Full name of the plugin (used for diagnostics). $plugin->maturity = MATURITY_STABLE; -$plugin->dependencies = ['tool_mfa' => 2023080300]; diff --git a/admin/tool/mfa/factor/capability/version.php b/admin/tool/mfa/factor/capability/version.php index 7ee9ced1a61..6e296c35dd3 100644 --- a/admin/tool/mfa/factor/capability/version.php +++ b/admin/tool/mfa/factor/capability/version.php @@ -26,9 +26,7 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2023080300; // The current plugin version (Date: YYYYMMDDXX). -$plugin->requires = 2023042400.00; // Supports from 4.2. -$plugin->component = 'factor_capability'; -$plugin->release = 'v0.1'; +$plugin->version = 2023080300; // The current plugin version (Date: YYYYMMDDXX). +$plugin->requires = 2023042400.00; // Requires this Moodle version. +$plugin->component = 'factor_capability'; // Full name of the plugin (used for diagnostics). $plugin->maturity = MATURITY_STABLE; -$plugin->dependencies = ['tool_mfa' => 2023080300]; diff --git a/admin/tool/mfa/factor/cohort/version.php b/admin/tool/mfa/factor/cohort/version.php index c524df7fbb5..91b9a3400a8 100644 --- a/admin/tool/mfa/factor/cohort/version.php +++ b/admin/tool/mfa/factor/cohort/version.php @@ -27,8 +27,6 @@ defined('MOODLE_INTERNAL') || die(); $plugin->version = 2023080300; // The current plugin version (Date: YYYYMMDDXX). -$plugin->requires = 2023042400.00; // Supports from 4.2. -$plugin->component = 'factor_cohort'; -$plugin->release = 'v0.2'; +$plugin->requires = 2023042400.00; // Requires this Moodle version. +$plugin->component = 'factor_cohort'; // Full name of the plugin (used for diagnostics). $plugin->maturity = MATURITY_STABLE; -$plugin->dependencies = ['tool_mfa' => 2023080300]; diff --git a/admin/tool/mfa/factor/email/version.php b/admin/tool/mfa/factor/email/version.php index 0a3a2c1568c..bc05bbe1bce 100644 --- a/admin/tool/mfa/factor/email/version.php +++ b/admin/tool/mfa/factor/email/version.php @@ -27,8 +27,6 @@ defined('MOODLE_INTERNAL') || die(); $plugin->version = 2023080300; // The current plugin version (Date: YYYYMMDDXX). -$plugin->requires = 2023042400.00; // Supports from 4.2. -$plugin->component = 'factor_email'; -$plugin->release = 'v0.1'; +$plugin->requires = 2023042400.00; // Requires this Moodle version. +$plugin->component = 'factor_email'; // Full name of the plugin (used for diagnostics). $plugin->maturity = MATURITY_STABLE; -$plugin->dependencies = ['tool_mfa' => 2023080300]; diff --git a/admin/tool/mfa/factor/grace/version.php b/admin/tool/mfa/factor/grace/version.php index 93a714fbd7a..81203d24933 100644 --- a/admin/tool/mfa/factor/grace/version.php +++ b/admin/tool/mfa/factor/grace/version.php @@ -27,8 +27,6 @@ defined('MOODLE_INTERNAL') || die(); $plugin->version = 2023080300; // The current plugin version (Date: YYYYMMDDXX). -$plugin->requires = 2023042400.00; // Supports from 4.2. -$plugin->component = 'factor_grace'; -$plugin->release = 'v0.1'; +$plugin->requires = 2023042400.00; // Requires this Moodle version. +$plugin->component = 'factor_grace'; // Full name of the plugin (used for diagnostics). $plugin->maturity = MATURITY_STABLE; -$plugin->dependencies = ['tool_mfa' => 2023080300]; diff --git a/admin/tool/mfa/factor/iprange/version.php b/admin/tool/mfa/factor/iprange/version.php index 35d79c64773..e6ef2559985 100644 --- a/admin/tool/mfa/factor/iprange/version.php +++ b/admin/tool/mfa/factor/iprange/version.php @@ -25,9 +25,7 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2023080300; // The current plugin version (Date: YYYYMMDDXX). -$plugin->requires = 2023042400.00; // Supports from 4.2. -$plugin->component = 'factor_iprange'; -$plugin->release = 'v0.1'; +$plugin->version = 2023080300; // The current plugin version (Date: YYYYMMDDXX). +$plugin->requires = 2023042400.00; // Requires this Moodle version. +$plugin->component = 'factor_iprange'; // Full name of the plugin (used for diagnostics). $plugin->maturity = MATURITY_STABLE; -$plugin->dependencies = ['tool_mfa' => 2023080300]; diff --git a/admin/tool/mfa/factor/nosetup/version.php b/admin/tool/mfa/factor/nosetup/version.php index e48a8480320..a3ac6ceaea1 100644 --- a/admin/tool/mfa/factor/nosetup/version.php +++ b/admin/tool/mfa/factor/nosetup/version.php @@ -26,9 +26,7 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2023080300; // The current plugin version (Date: YYYYMMDDXX). -$plugin->requires = 2023042400.00; // Supports from 4.2. -$plugin->component = 'factor_nosetup'; -$plugin->release = 'v0.1'; +$plugin->version = 2023080300; // The current plugin version (Date: YYYYMMDDXX). +$plugin->requires = 2023042400.00; // Requires this Moodle version. +$plugin->component = 'factor_nosetup'; // Full name of the plugin (used for diagnostics). $plugin->maturity = MATURITY_STABLE; -$plugin->dependencies = ['tool_mfa' => 2023080300]; diff --git a/admin/tool/mfa/factor/role/version.php b/admin/tool/mfa/factor/role/version.php index 322270ed543..2e3b558174c 100644 --- a/admin/tool/mfa/factor/role/version.php +++ b/admin/tool/mfa/factor/role/version.php @@ -27,8 +27,6 @@ defined('MOODLE_INTERNAL') || die(); $plugin->version = 2023080300; // The current plugin version (Date: YYYYMMDDXX). -$plugin->requires = 2023042400.00; // Supports from 4.2. -$plugin->component = 'factor_role'; -$plugin->release = 'v0.1'; +$plugin->requires = 2023042400.00; // Requires this Moodle version. +$plugin->component = 'factor_role'; // Full name of the plugin (used for diagnostics). $plugin->maturity = MATURITY_STABLE; -$plugin->dependencies = ['tool_mfa' => 2023080300]; diff --git a/admin/tool/mfa/factor/token/version.php b/admin/tool/mfa/factor/token/version.php index d3a114a0a25..a87decfca7f 100644 --- a/admin/tool/mfa/factor/token/version.php +++ b/admin/tool/mfa/factor/token/version.php @@ -27,8 +27,6 @@ defined('MOODLE_INTERNAL') || die(); $plugin->version = 2023080300; // The current plugin version (Date: YYYYMMDDXX). -$plugin->requires = 2023042400.00; // Supports from 4.2. -$plugin->component = 'factor_token'; -$plugin->release = 2022011700; +$plugin->requires = 2023042400.00; // Requires this Moodle version. +$plugin->component = 'factor_token'; // Full name of the plugin (used for diagnostics). $plugin->maturity = MATURITY_STABLE; -$plugin->dependencies = ['tool_mfa' => 2023080300]; diff --git a/admin/tool/mfa/factor/totp/version.php b/admin/tool/mfa/factor/totp/version.php index b799ed7777c..0a3c919cf2e 100644 --- a/admin/tool/mfa/factor/totp/version.php +++ b/admin/tool/mfa/factor/totp/version.php @@ -27,8 +27,6 @@ defined('MOODLE_INTERNAL') || die(); $plugin->version = 2023080300; // The current plugin version (Date: YYYYMMDDXX). -$plugin->release = 2021021700; -$plugin->requires = 2023042400.00; // Supports from 4.2. -$plugin->component = 'factor_totp'; +$plugin->requires = 2023042400.00; // Requires this Moodle version. +$plugin->component = 'factor_totp'; // Full name of the plugin (used for diagnostics). $plugin->maturity = MATURITY_STABLE; -$plugin->dependencies = ['tool_mfa' => 2023080300]; diff --git a/admin/tool/mfa/factor/webauthn/version.php b/admin/tool/mfa/factor/webauthn/version.php index 914865f3fb9..8374a0075f8 100644 --- a/admin/tool/mfa/factor/webauthn/version.php +++ b/admin/tool/mfa/factor/webauthn/version.php @@ -25,9 +25,7 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2023080300; // The current plugin version (Date: YYYYMMDDXX). -$plugin->release = 2023062900; -$plugin->requires = 2023042400.00; // Supports from 4.2. -$plugin->component = 'factor_webauthn'; -$plugin->maturity = MATURITY_ALPHA; -$plugin->dependencies = ['tool_mfa' => 2023080300]; +$plugin->version = 2023080300; // The current plugin version (Date: YYYYMMDDXX). +$plugin->requires = 2023042400.00; // Requires this Moodle version. +$plugin->component = 'factor_webauthn'; // Full name of the plugin (used for diagnostics). +$plugin->maturity = MATURITY_STABLE; diff --git a/admin/tool/mfa/lang/en/tool_mfa.php b/admin/tool/mfa/lang/en/tool_mfa.php index 3d032c4cf95..3ce90a27f3d 100644 --- a/admin/tool/mfa/lang/en/tool_mfa.php +++ b/admin/tool/mfa/lang/en/tool_mfa.php @@ -148,13 +148,13 @@ $string['settings:weight_help'] = 'The weight of this factor if passed. A user n $string['setup'] = 'Setup'; $string['setupfactor'] = 'Setup factor'; $string['setuprequired'] = 'User setup'; -$string['subplugintype_factor'] = 'Factor type'; -$string['subplugintype_factor_plural'] = 'Factor types'; $string['state:fail'] = 'Fail'; $string['state:locked'] = 'Locked'; $string['state:neutral'] = 'Neutral'; $string['state:pass'] = 'Pass'; $string['state:unknown'] = 'Unknown'; +$string['subplugintype_factor'] = 'Factor type'; +$string['subplugintype_factor_plural'] = 'Factor types'; $string['totalusers'] = 'Total users'; $string['totalweight'] = 'Total weight'; $string['userempty'] = 'User cannot be empty.'; diff --git a/admin/tool/mfa/version.php b/admin/tool/mfa/version.php index e327895a96b..038518fe1fc 100644 --- a/admin/tool/mfa/version.php +++ b/admin/tool/mfa/version.php @@ -26,7 +26,6 @@ defined('MOODLE_INTERNAL') || die(); $plugin->version = 2023080300; // The current plugin version (Date: YYYYMMDDXX). -$plugin->release = 2023080100; // Same as version. -$plugin->requires = 2023042400.00; // Supports from 4.2. -$plugin->component = 'tool_mfa'; +$plugin->requires = 2023042400.00; // Requires this Moodle version. +$plugin->component = 'tool_mfa'; // Full name of the plugin (used for diagnostics). $plugin->maturity = MATURITY_STABLE;