diff --git a/mod/quiz/db/upgrade.php b/mod/quiz/db/upgrade.php index a38e4c9850f..43e8d70a8f7 100644 --- a/mod/quiz/db/upgrade.php +++ b/mod/quiz/db/upgrade.php @@ -20,6 +20,10 @@ // Please do not forget to use upgrade_set_timeout() // before any action that may take longer time to finish. +/** + * @param int $oldversion + * @return bool + */ function xmldb_quiz_upgrade($oldversion) { global $CFG, $DB; @@ -117,49 +121,49 @@ function xmldb_quiz_upgrade($oldversion) { /// Changing the type of all the columns that store grades to be NUMBER(10, 5) or similar. if ($oldversion < 2008081501) { $table = new xmldb_table('quiz'); - $field = new xmldb_field('sumgrades', XMLDB_TYPE_NUMBER, '10, 5', null, null, null, null, 'questions'); + $field = new xmldb_field('sumgrades', XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, '0', 'questions'); $dbman->change_field_type($table, $field); upgrade_mod_savepoint(true, 2008081501, 'quiz'); } if ($oldversion < 2008081502) { $table = new xmldb_table('quiz'); - $field = new xmldb_field('grade', XMLDB_TYPE_NUMBER, '10, 5', null, null, null, null, 'sumgrades'); + $field = new xmldb_field('grade', XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, '0', 'sumgrades'); $dbman->change_field_type($table, $field); upgrade_mod_savepoint(true, 2008081502, 'quiz'); } if ($oldversion < 2008081503) { $table = new xmldb_table('quiz_attempts'); - $field = new xmldb_field('sumgrades', XMLDB_TYPE_NUMBER, '10, 5', null, null, null, null, 'attempt'); + $field = new xmldb_field('sumgrades', XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, '0', 'attempt'); $dbman->change_field_type($table, $field); upgrade_mod_savepoint(true, 2008081503, 'quiz'); } if ($oldversion < 2008081504) { $table = new xmldb_table('quiz_feedback'); - $field = new xmldb_field('mingrade', XMLDB_TYPE_NUMBER, '10, 5', null, null, null, null, 'feedbacktext'); + $field = new xmldb_field('mingrade', XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, '0', 'feedbacktext'); $dbman->change_field_type($table, $field); upgrade_mod_savepoint(true, 2008081504, 'quiz'); } if ($oldversion < 2008081505) { $table = new xmldb_table('quiz_feedback'); - $field = new xmldb_field('maxgrade', XMLDB_TYPE_NUMBER, '10, 5', null, null, null, null, 'mingrade'); + $field = new xmldb_field('maxgrade', XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, '0', 'mingrade'); $dbman->change_field_type($table, $field); upgrade_mod_savepoint(true, 2008081505, 'quiz'); } if ($oldversion < 2008081506) { $table = new xmldb_table('quiz_grades'); - $field = new xmldb_field('grade', XMLDB_TYPE_NUMBER, '10, 5', null, null, null, null, 'userid'); + $field = new xmldb_field('grade', XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, '0', 'userid'); $dbman->change_field_type($table, $field); upgrade_mod_savepoint(true, 2008081506, 'quiz'); } if ($oldversion < 2008081507) { $table = new xmldb_table('quiz_question_instances'); - $field = new xmldb_field('grade', XMLDB_TYPE_NUMBER, '12, 7', null, null, null, null, 'question'); + $field = new xmldb_field('grade', XMLDB_TYPE_NUMBER, '12, 7', null, XMLDB_NOTNULL, null, '0', 'question'); $dbman->change_field_type($table, $field); upgrade_mod_savepoint(true, 2008081507, 'quiz'); } @@ -251,7 +255,7 @@ function xmldb_quiz_upgrade($oldversion) { if ($oldversion < 2009031000) { /// Add new questiondecimaldigits setting, separate form the overall decimaldigits one. $table = new xmldb_table('quiz'); - $field = new xmldb_field('questiondecimalpoints', XMLDB_TYPE_INTEGER, '4', null, XMLDB_NOTNULL, null, '2', 'decimalpoints'); + $field = new xmldb_field('questiondecimalpoints', XMLDB_TYPE_INTEGER, '4', null, XMLDB_NOTNULL, null, '-2', 'decimalpoints'); if (!$dbman->field_exists($table, $field)) { $dbman->add_field($table, $field); } @@ -374,6 +378,118 @@ function xmldb_quiz_upgrade($oldversion) { upgrade_mod_savepoint(true, 2010102000, 'quiz'); } + if ($oldversion < 2011011400) { + // Fix quiz in the post table after upgrade from 1.9 + $table = new xmldb_table('quiz'); + $columns = $DB->get_columns('quiz'); + + if (array_key_exists('questiondecimalpoints', $columns) && $columns['questiondecimalpoints']->default_value != '-2') { + // questiondecimalpoints should be default -2 + // Fixed in earlier upgrade code + $field = new xmldb_field('questiondecimalpoints', XMLDB_TYPE_INTEGER, '4', null, XMLDB_NOTNULL, null, -2, 'decimalpoints'); + if ($dbman->field_exists($table, $field)) { + $dbman->change_field_default($table, $field); + } + } + + if (array_key_exists('sumgrades', $columns) && empty($columns['sumgrades']->not_null)) { + // sumgrades should be NOT NULL DEFAULT '0.0000000', + // Fixed in earlier upgrade code + $field = new xmldb_field('sumgrades', XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, '0', 'questions'); + if ($dbman->field_exists($table, $field)) { + $dbman->change_field_default($table, $field); + } + } + + if (array_key_exists('grade', $columns) && empty($columns['grade']->not_null)) { + // grade should be NOT NULL DEFAULT '0.0000000', + // Fixed in earlier upgrade code + $field = new xmldb_field('grade', XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, '0', 'sumgrades'); + if ($dbman->field_exists($table, $field)) { + $dbman->change_field_default($table, $field); + } + } + + upgrade_mod_savepoint(true, 2011011400, 'quiz'); + } + + if ($oldversion < 2011011401) { + // Fix quiz_attempts in the post table after upgrade from 1.9 + $table = new xmldb_table('quiz_attempts'); + $columns = $DB->get_columns('quiz_attempts'); + + if (array_key_exists('sumgrades', $columns) && empty($columns['sumgrades']->not_null)) { + // sumgrades should be NOT NULL DEFAULT '0.0000000', + // Fixed in earlier upgrade code + $field = new xmldb_field('sumgrades', XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, '0', 'attempt'); + if ($dbman->field_exists($table, $field)) { + $dbman->change_field_default($table, $field); + } + } + + upgrade_mod_savepoint(true, 2011011401, 'quiz'); + } + + if ($oldversion < 2011011402) { + // Fix quiz_feedback in the post table after upgrade from 1.9 + $table = new xmldb_table('quiz_feedback'); + $columns = $DB->get_columns('quiz_feedback'); + + if (array_key_exists('mingrade', $columns) && empty($columns['mingrade']->not_null)) { + // mingrade should be NOT NULL DEFAULT '0.0000000', + // Fixed in earlier upgrade code + $field = new xmldb_field('mingrade', XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, '0', 'feedbacktextformat'); + if ($dbman->field_exists($table, $field)) { + $dbman->change_field_default($table, $field); + } + } + + if (array_key_exists('maxgrade', $columns) && empty($columns['maxgrade']->not_null)) { + // maxgrade should be NOT NULL DEFAULT '0.0000000', + // Fixed in earlier upgrade code + $field = new xmldb_field('maxgrade', XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, '0', 'mingrade'); + if ($dbman->field_exists($table, $field)) { + $dbman->change_field_default($table, $field); + } + } + + upgrade_mod_savepoint(true, 2011011402, 'quiz'); + } + + if ($oldversion < 2011011403) { + // Fix quiz_grades in the post table after upgrade from 1.9 + $table = new xmldb_table('quiz_grades'); + $columns = $DB->get_columns('quiz_grades'); + + if (array_key_exists('grade', $columns) && empty($columns['grade']->not_null)) { + // grade should be NOT NULL DEFAULT '0.0000000', + // Fixed in earlier upgrade code + $field = new xmldb_field('grade', XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, '0', 'userid'); + if ($dbman->field_exists($table, $field)) { + $dbman->change_field_default($table, $field); + } + } + + upgrade_mod_savepoint(true, 2011011403, 'quiz'); + } + + if ($oldversion < 2011011404) { + // Fix quiz_question_instances in the post table after upgrade from 1.9 + $table = new xmldb_table('quiz_question_instances'); + $columns = $DB->get_columns('quiz_question_instances'); + + if (array_key_exists('grade', $columns) && empty($columns['grade']->not_null)) { + // grade should be NOT NULL DEFAULT '0.0000000', + // Fixed in earlier upgrade code + $field = new xmldb_field('grade', XMLDB_TYPE_NUMBER, '12, 7', null, XMLDB_NOTNULL, null, '0', 'question'); + if ($dbman->field_exists($table, $field)) { + $dbman->change_field_default($table, $field); + } + } + + upgrade_mod_savepoint(true, 2011011404, 'quiz'); + } + return true; } diff --git a/mod/quiz/version.php b/mod/quiz/version.php index 0c22d527c38..bbe021268bf 100644 --- a/mod/quiz/version.php +++ b/mod/quiz/version.php @@ -5,7 +5,7 @@ // This fragment is called by moodle_needs_upgrading() and /admin/index.php //////////////////////////////////////////////////////////////////////////////// -$module->version = 2010111904; // The (date) version of this module +$module->version = 2011011404; // The (date) version of this module $module->requires = 2010080300; // Requires this Moodle version $module->cron = 0; // How often should cron check this module (seconds)?