From 1542a9f9e11356b2e7d75632c5967693e2c5bc6d Mon Sep 17 00:00:00 2001 From: Anupama Sarjoshi Date: Wed, 24 Apr 2024 17:05:47 +0100 Subject: [PATCH] MDL-81380 qbank_columnsortorder: Add upgrade.php Before Moodle 4.3, config_plugins settings for qbank_columnsortorder (disabledcol, enabledcol) had a value like qbank_statistics\columns\facility_index, qbank_statistics\columns\discriminative_efficiency, ... In Moodle 4.3, the values are stored as qbank_statistics\columns\facility_index-facility_index. So updating the old values to match the new format. --- question/bank/columnsortorder/db/upgrade.php | 74 ++++++++++++++++++++ question/bank/columnsortorder/version.php | 2 +- 2 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 question/bank/columnsortorder/db/upgrade.php diff --git a/question/bank/columnsortorder/db/upgrade.php b/question/bank/columnsortorder/db/upgrade.php new file mode 100644 index 0000000000000..e149e542fc3c9 --- /dev/null +++ b/question/bank/columnsortorder/db/upgrade.php @@ -0,0 +1,74 @@ +. + +/** + * Custom sort order upgrade script. + * + * @package qbank_columnsortorder + * @copyright 2024 The Open University + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +use core_question\local\bank\column_base; + +/** + * Upgrade the plugin. + * + * @param int $oldversion the version of this plugin we are upgrading from. + * @return bool success/failure. + */ +function xmldb_qbank_columnsortorder_upgrade($oldversion) { + global $DB; + + if ($oldversion < 2024042201) { + // Before Moodle 4.3, config_plugins settings for qbank_columnsortorder (disabledcol, enabledcol) had a value like + // qbank_statistics\columns\facility_index,qbank_statistics\columns\discriminative_efficiency, ... + // In Moodle 4.3, the values are stored as qbank_statistics\columns\discriminative_efficiency-discriminative_efficiency. + // So updating the old values to match the new format. + // Update the columns records for qbank_columnsortorder plugin. + $pluginconfigs = $DB->get_records('config_plugins', ['plugin' => 'qbank_columnsortorder'], 'name, value'); + + foreach ($pluginconfigs as $config) { + if ($config->name == 'version') { + continue; + } + $fields = explode(',', $config->value); + $updatedcols = []; + foreach ($fields as $columnclass) { + // Columns config that are already in the correct format, could be ignored. + if (str_contains($columnclass, column_base::ID_SEPARATOR)) { + continue; + } + + $classbits = explode('\\', $columnclass); + $columnname = end($classbits); + + // The custom fields are to be in the format e.g., qbank_customfields\custom_field_column-test. + if (str_contains($columnclass, 'custom_field_column')) { + array_pop($classbits); + } + + $updatedcols[] = implode('\\', $classbits) . column_base::ID_SEPARATOR . $columnname; + } + $updatedconfig = implode(',', $updatedcols); + set_config($config->name, $updatedconfig, 'qbank_columnsortorder'); + } + // Custom sort order savepoint reached. + upgrade_plugin_savepoint(true, 2024042201, 'qbank', 'qbank_columnsortorder'); + } + + return true; +} diff --git a/question/bank/columnsortorder/version.php b/question/bank/columnsortorder/version.php index 75f003f6477c6..3a8eea4f4e37f 100644 --- a/question/bank/columnsortorder/version.php +++ b/question/bank/columnsortorder/version.php @@ -26,6 +26,6 @@ defined('MOODLE_INTERNAL') || die(); $plugin->component = 'qbank_columnsortorder'; -$plugin->version = 2024042200; +$plugin->version = 2024042201; $plugin->requires = 2024041600; $plugin->maturity = MATURITY_STABLE;