From 5cf5e181dd5f9223e06c8e7c4eee2bad629d16dd Mon Sep 17 00:00:00 2001 From: skodak Date: Fri, 28 Sep 2007 21:58:02 +0000 Subject: [PATCH] MDL-11504 added grade_letter -> grade_letters migration - will not be executed on dev sites where grade_letters already exists :-( --- lib/db/upgrade.php | 50 +++++++++--------------- lib/db/upgradelib.php | 90 +++++++++++++++++++++++++++++++++++++++++++ version.php | 2 +- 3 files changed, 109 insertions(+), 33 deletions(-) diff --git a/lib/db/upgrade.php b/lib/db/upgrade.php index 74d4b0a6c0..841c67c682 100644 --- a/lib/db/upgrade.php +++ b/lib/db/upgrade.php @@ -1361,6 +1361,9 @@ function xmldb_main_upgrade($oldversion=0) { rs_close($rs); } } + + /// migrate grade letter table + $result = $result && upgrade_18_letters(); } if ($result && $oldversion < 2007072400) { @@ -2017,25 +2020,6 @@ function xmldb_main_upgrade($oldversion=0) { } - if ($result && $oldversion < 2007091800) { - - /// Define table grade_letters to be created - $table = new XMLDBTable('grade_letters'); - - /// Adding fields to table grade_letters - $table->addFieldInfo('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); - $table->addFieldInfo('contextid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null); - $table->addFieldInfo('lowerboundary', XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, null, null, null); - $table->addFieldInfo('letter', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, null, null); - - /// Adding keys to table grade_letters - $table->addKeyInfo('primary', XMLDB_KEY_PRIMARY, array('id')); - - /// Launch create table for grade_letters - $result = $result && create_table($table); - } - - /// Create the permanent context_temp table to be used by build_context_path() if ($result && $oldversion < 2007092001) { @@ -2180,19 +2164,6 @@ function xmldb_main_upgrade($oldversion=0) { } } - if ($result && $oldversion < 2007092801) { - - /// Define index contextidlowerboundary (not unique) to be added to grade_letters - $table = new XMLDBTable('grade_letters'); - $index = new XMLDBIndex('contextid-lowerboundary'); - $index->setAttributes(XMLDB_INDEX_NOTUNIQUE, array('contextid', 'lowerboundary')); - - /// Launch add index contextidlowerboundary - if (!index_exists($table, $field)) { - $result = $result && add_index($table, $index); - } - } - if ($result && $oldversion < 2007092803) { /// Remove obsoleted unit tests tables - they will be recreated automatically @@ -2267,7 +2238,22 @@ function xmldb_main_upgrade($oldversion=0) { /// fix incorrect -1 default for grade_item->display execute_sql("UPDATE {$CFG->prefix}grade_items SET display=0 WHERE display=-1"); + } + + if ($result && $oldversion < 2007092806) { + require_once($CFG->libdir.'/db/upgradelib.php'); + + $result = upgrade_18_letters(); // executes on dev sites only + /// Define index contextidlowerboundary (not unique) to be added to grade_letters + $table = new XMLDBTable('grade_letters'); + $index = new XMLDBIndex('contextid-lowerboundary'); + $index->setAttributes(XMLDB_INDEX_NOTUNIQUE, array('contextid', 'lowerboundary')); + + /// Launch add index contextidlowerboundary + if (!index_exists($table, $index)) { + $result = $result && add_index($table, $index); + } } /* diff --git a/lib/db/upgradelib.php b/lib/db/upgradelib.php index a76c83e6e7..9d5eb09238 100644 --- a/lib/db/upgradelib.php +++ b/lib/db/upgradelib.php @@ -7,6 +7,96 @@ * (Do not use functions from accesslib.php, grades classes or group functions at all!) */ +/** + * Migrates the grade_letter data to grade_letters + */ +function upgrade_18_letters() { + global $CFG; + + $table = new XMLDBTable('grade_letters'); + + if (table_exists($table)) { + // already converted or development site + return true; + } + + $result = true; + +/// Rename field grade_low on table grade_letter to lowerboundary + $table = new XMLDBTable('grade_letter'); + $field = new XMLDBField('grade_low'); + $field->setAttributes(XMLDB_TYPE_NUMBER, '5, 2', null, XMLDB_NOTNULL, null, null, null, '0.00', 'grade_high'); + +/// Launch rename field grade_low + $result = $result && rename_field($table, $field, 'lowerboundary'); + +/// Define field grade_high to be dropped from grade_letter + $table = new XMLDBTable('grade_letter'); + $field = new XMLDBField('grade_high'); + +/// Launch drop field grade_high + $result = $result && drop_field($table, $field); + +/// Define index courseid (not unique) to be dropped form grade_letter + $table = new XMLDBTable('grade_letter'); + $index = new XMLDBIndex('courseid'); + $index->setAttributes(XMLDB_INDEX_NOTUNIQUE, array('courseid')); + +/// Launch drop index courseid + $result = $result && drop_index($table, $index); + +/// Rename field courseid on table grade_letter to contextid + $table = new XMLDBTable('grade_letter'); + $field = new XMLDBField('courseid'); + $field->setAttributes(XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0', 'id'); + +/// Launch rename field courseid + $result = $result && rename_field($table, $field, 'contextid'); + + $sql = "UPDATE {$CFG->prefix}grade_letter + SET contextid=COALESCE((SELECT c.id + FROM {$CFG->prefix}context c + WHERE c.instanceid={$CFG->prefix}grade_letter.contextid AND c.contextlevel=".CONTEXT_COURSE."), 0)"; + execute_sql($sql); + +/// remove broken records + execute_sql("DELETE FROM {$CFG->prefix}grade_letter WHERE contextid=0"); + +/// Define table grade_letter to be renamed to grade_letters + $table = new XMLDBTable('grade_letter'); + +/// Launch rename table for grade_letter + $result = $result && rename_table($table, 'grade_letters'); + +/// Changing type of field lowerboundary on table grade_letters to number + $table = new XMLDBTable('grade_letters'); + $field = new XMLDBField('lowerboundary'); + $field->setAttributes(XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, null, null, null, 'contextid'); + +/// Launch change of type for field lowerboundary + $result = $result && change_field_precision($table, $field); + $result = $result && change_field_default($table, $field); + +/// Changing the default of field letter on table grade_letters to drop it + $table = new XMLDBTable('grade_letters'); + $field = new XMLDBField('letter'); + $field->setAttributes(XMLDB_TYPE_CHAR, '255', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null, 'lowerboundary'); + +/// Launch change of default for field letter + $result = $result && change_field_precision($table, $field); + $result = $result && change_field_default($table, $field); + +/// Define index contextidlowerboundary (not unique) to be added to grade_letters + $table = new XMLDBTable('grade_letters'); + $index = new XMLDBIndex('contextid-lowerboundary'); + $index->setAttributes(XMLDB_INDEX_NOTUNIQUE, array('contextid', 'lowerboundary')); + +/// Launch add index contextidlowerboundary + $result = $result && add_index($table, $index); + + return $result; +} + /** * This function is used to migrade old data and settings from old gradebook into new grading system. diff --git a/version.php b/version.php index edc2239b45..4452f3f579 100644 --- a/version.php +++ b/version.php @@ -6,7 +6,7 @@ // This is compared against the values stored in the database to determine // whether upgrades should be performed (see lib/db/*.php) - $version = 2007092803; // YYYYMMDD = date + $version = 2007092806; // YYYYMMDD = date // XY = increments within a single day $release = '1.9 Beta +'; // Human-friendly version name -- 2.39.5