Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

mod-scorm MDL-25792 Fixed database discrepancies between a fresh inst…

…all and an upgraded site within the SCORM module
  • Loading branch information...
commit b964171cbf5649fd043a80a420a557e3c3ecad92 1 parent 5a7f931
@samhemelryk samhemelryk authored
Showing with 65 additions and 6 deletions.
  1. +64 −5 mod/scorm/db/upgrade.php
  2. +1 −1  mod/scorm/version.php
View
69 mod/scorm/db/upgrade.php
@@ -20,6 +20,11 @@
// Please do not forget to use upgrade_set_timeout()
// before any action that may take longer time to finish.
+/**
+ * @global moodle_database $DB
+ * @param int $oldversion
+ * @return bool
+ */
function xmldb_scorm_upgrade($oldversion) {
global $CFG, $DB;
@@ -220,23 +225,23 @@ function xmldb_scorm_upgrade($oldversion) {
/// Define new fields forcecompleted, forcenewattempt, displayattemptstatus, and displaycoursestructure to be added to scorm
$table = new xmldb_table('scorm');
- $field = new xmldb_field('forcecompleted', XMLDB_TYPE_INTEGER, '1', null, null, null, '0', 'maxattempt');
+ $field = new xmldb_field('forcecompleted', XMLDB_TYPE_INTEGER, 10, null, XMLDB_NOTNULL, null, 1, 'maxattempt');
if (!$dbman->field_exists($table,$field)) {
$dbman->add_field($table, $field);
}
- $field = new xmldb_field('forcenewattempt', XMLDB_TYPE_INTEGER, '1', null, null, null, '0', 'forcecompleted');
+ $field = new xmldb_field('forcenewattempt', XMLDB_TYPE_INTEGER, 1, null, XMLDB_NOTNULL, null, 0, 'forcecompleted');
if (!$dbman->field_exists($table,$field)) {
$dbman->add_field($table, $field);
}
- $field = new xmldb_field('lastattemptlock', XMLDB_TYPE_INTEGER, '1', null, null, null, '0', 'forcenewattempt');
+ $field = new xmldb_field('lastattemptlock', XMLDB_TYPE_INTEGER, 1, null, XMLDB_NOTNULL, null, 0, 'forcenewattempt');
if (!$dbman->field_exists($table,$field)) {
$dbman->add_field($table, $field);
}
- $field = new xmldb_field('displayattemptstatus', XMLDB_TYPE_INTEGER, '1', null, null, null, '1', 'lastattemptlock');
+ $field = new xmldb_field('displayattemptstatus', XMLDB_TYPE_INTEGER, 1, null, XMLDB_NOTNULL, null, 1, 'lastattemptlock');
if (!$dbman->field_exists($table,$field)) {
$dbman->add_field($table, $field);
}
- $field = new xmldb_field('displaycoursestructure', XMLDB_TYPE_INTEGER, '1', null, null, null, '1', 'displayattemptstatus');
+ $field = new xmldb_field('displaycoursestructure', XMLDB_TYPE_INTEGER, 1, null, XMLDB_NOTNULL, null, 1, 'displayattemptstatus');
if (!$dbman->field_exists($table,$field)) {
$dbman->add_field($table, $field);
}
@@ -472,6 +477,60 @@ function xmldb_scorm_upgrade($oldversion) {
/// scorm savepoint reached
upgrade_mod_savepoint(true, 2010092400, 'scorm');
}
+
+ if ($oldversion < 2010122300) {
+ // Fix scorm in the post table after upgrade from 1.9
+ $table = new xmldb_table('scorm');
+ $columns = $DB->get_columns('scorm');
+
+ if (array_key_exists('forcecompleted', $columns) && empty($columns['forcecompleted']->not_null)) {
+ // forcecompleted should be bigint(10) NOT NULL DEFAULT '1'
+ // Fixed in earlier upgrade code
+ $field = new xmldb_field('forcecompleted', XMLDB_TYPE_INTEGER, 10, null, XMLDB_NOTNULL, null, 1, 'maxattempt');
+ if ($dbman->field_exists($table, $field)) {
+ $dbman->change_field_precision($table, $field);
+ }
+ }
+
+ if (array_key_exists('forcenewattempt', $columns) && empty($columns['forcenewattempt']->not_null)) {
+ // forcenewattempt should be NOT NULL
+ // Fixed in earlier upgrade code
+ $field = new xmldb_field('forcenewattempt', XMLDB_TYPE_INTEGER, 1, null, XMLDB_NOTNULL, null, 0, 'forcecompleted');
+ if ($dbman->field_exists($table, $field)) {
+ $dbman->change_field_notnull($table, $field);
+ }
+ }
+
+ if (array_key_exists('lastattemptlock', $columns) && empty($columns['lastattemptlock']->not_null)) {
+ // lastattemptlock should be NOT NULL
+ // Fixed in earlier upgrade code
+ $field = new xmldb_field('lastattemptlock', XMLDB_TYPE_INTEGER, 1, null, XMLDB_NOTNULL, null, 0, 'forcenewattempt');
+ if ($dbman->field_exists($table, $field)) {
+ $dbman->change_field_notnull($table, $field);
+ }
+ }
+
+ if (array_key_exists('displayattemptstatus', $columns) && empty($columns['displayattemptstatus']->not_null)) {
+ // displayattemptstatus should be NOT NULL
+ // Fixed in earlier upgrade code
+ $field = new xmldb_field('displayattemptstatus', XMLDB_TYPE_INTEGER, 1, null, XMLDB_NOTNULL, null, 1, 'lastattemptlock');
+ if ($dbman->field_exists($table, $field)) {
+ $dbman->change_field_notnull($table, $field);
+ }
+ }
+
+ if (array_key_exists('displaycoursestructure', $columns) && empty($columns['displaycoursestructure']->not_null)) {
+ // displaycoursestructure should be NOT NULL
+ // Fixed in earlier upgrade code
+ $field = new xmldb_field('displaycoursestructure', XMLDB_TYPE_INTEGER, 1, null, XMLDB_NOTNULL, null, 1, 'displayattemptstatus');
+ if ($dbman->field_exists($table, $field)) {
+ $dbman->change_field_notnull($table, $field);
+ }
+ }
+
+ upgrade_mod_savepoint(true, 2010122300, 'scorm');
+ }
+
return true;
}
View
2  mod/scorm/version.php 100755 → 100644
@@ -6,7 +6,7 @@
/////////////////////////////////////////////////////////////////////////////////
-$module->version = 2010092400; // The (date) version of this module
+$module->version = 2010122300; // The (date) version of this module
$module->requires = 2010080300; // The version of Moodle that is required
$module->cron = 300; // How often should cron check this module (seconds)?
Please sign in to comment.
Something went wrong with that request. Please try again.