[ Index ]

PHP Cross Reference of Moodle 1.9.3 [Build 15-Oct-2008]

title

Body

[close]

/lib/db/ -> upgrade.php (source)

   1  <?PHP  //$Id: upgrade.php,v 1.154.2.42 2008/10/13 21:45:24 stronk7 Exp $
   2  
   3  // This file keeps track of upgrades to Moodle.
   4  //
   5  // Sometimes, changes between versions involve
   6  // alterations to database structures and other
   7  // major things that may break installations.
   8  //
   9  // The upgrade function in this file will attempt
  10  // to perform all the necessary actions to upgrade
  11  // your older installtion to the current version.
  12  //
  13  // If there's something it cannot do itself, it
  14  // will tell you what you need to do.
  15  //
  16  // The commands in here will all be database-neutral,
  17  // using the functions defined in lib/ddllib.php
  18  
  19  
  20  function xmldb_main_upgrade($oldversion=0) {
  21  
  22      global $CFG, $THEME, $USER, $db;
  23  
  24      $result = true;
  25  
  26      if ($result && $oldversion < 2006100401) {
  27          /// Only for those tracking Moodle 1.7 dev, others will have these dropped in moodle_install_roles()
  28          if (!empty($CFG->rolesactive)) {
  29              drop_table(new XMLDBTable('user_students'));
  30              drop_table(new XMLDBTable('user_teachers'));
  31              drop_table(new XMLDBTable('user_coursecreators'));
  32              drop_table(new XMLDBTable('user_admins'));
  33          }
  34  
  35          upgrade_main_savepoint($result, 2006100401);
  36      }
  37  
  38      if ($result && $oldversion < 2006100601) {         /// Disable the exercise module because it's unmaintained
  39          if ($module = get_record('modules', 'name', 'exercise')) {
  40              if ($module->visible) {
  41                  // Hide/disable the module entry
  42                  set_field('modules', 'visible', '0', 'id', $module->id);
  43                  // Save existing visible state for all activities
  44                  set_field('course_modules', 'visibleold', '1', 'visible' ,'1', 'module', $module->id);
  45                  set_field('course_modules', 'visibleold', '0', 'visible' ,'0', 'module', $module->id);
  46                  // Hide all activities
  47                  set_field('course_modules', 'visible', '0', 'module', $module->id);
  48  
  49                  //require_once($CFG->dirroot.'/course/lib.php');
  50                  //rebuild_course_cache();  // Rebuld cache for all modules because they might have changed
  51              }
  52          }
  53  
  54          upgrade_main_savepoint($result, 2006100601);
  55      }
  56  
  57      if ($result && $oldversion < 2006101001) {         /// Disable the LAMS module by default (if it is installed)
  58          if (count_records('modules', 'name', 'lams') && !count_records('lams')) {
  59              set_field('modules', 'visible', 0, 'name', 'lams');  // Disable it by default
  60          }
  61  
  62          upgrade_main_savepoint($result, 2006101001);
  63      }
  64  
  65      if ($result && $oldversion < 2006102600) {
  66  
  67          /// Define fields to be added to user_info_field
  68          $table  = new XMLDBTable('user_info_field');
  69          $field = new XMLDBField('description');
  70          $field->setAttributes(XMLDB_TYPE_TEXT, 'big', null, null, null, null, null, null, 'categoryid');
  71          $field1 = new XMLDBField('param1');
  72          $field1->setAttributes(XMLDB_TYPE_TEXT, 'big', null, null, null, null, null, null, 'defaultdata');
  73          $field2 = new XMLDBField('param2');
  74          $field2->setAttributes(XMLDB_TYPE_TEXT, 'big', null, null, null, null, null, null, 'param1');
  75          $field3 = new XMLDBField('param3');
  76          $field3->setAttributes(XMLDB_TYPE_TEXT, 'big', null, null, null, null, null, null, 'param2');
  77          $field4 = new XMLDBField('param4');
  78          $field4->setAttributes(XMLDB_TYPE_TEXT, 'big', null, null, null, null, null, null, 'param3');
  79          $field5 = new XMLDBField('param5');
  80          $field5->setAttributes(XMLDB_TYPE_TEXT, 'big', null, null, null, null, null, null, 'param4');
  81  
  82          /// Launch add fields
  83          $result = $result && add_field($table, $field);
  84          $result = $result && add_field($table, $field1);
  85          $result = $result && add_field($table, $field2);
  86          $result = $result && add_field($table, $field3);
  87          $result = $result && add_field($table, $field4);
  88          $result = $result && add_field($table, $field5);
  89  
  90          upgrade_main_savepoint($result, 2006102600);
  91      }
  92  
  93      if ($result && $oldversion < 2006112000) {
  94  
  95      /// Define field attachment to be added to post
  96          $table = new XMLDBTable('post');
  97          $field = new XMLDBField('attachment');
  98          $field->setAttributes(XMLDB_TYPE_CHAR, '100', null, null, null, null, null, null, 'format');
  99  
 100      /// Launch add field attachment
 101          $result = $result && add_field($table, $field);
 102  
 103          upgrade_main_savepoint($result, 2006112000);
 104      }
 105  
 106      if ($result && $oldversion < 2006112200) {
 107  
 108      /// Define field imagealt to be added to user
 109          $table = new XMLDBTable('user');
 110          $field = new XMLDBField('imagealt');
 111          $field->setAttributes(XMLDB_TYPE_CHAR, '255', null, null, null, null, null, null, 'trustbitmask');
 112  
 113      /// Launch add field imagealt
 114          $result = $result && add_field($table, $field);
 115  
 116          $table = new XMLDBTable('user');
 117          $field = new XMLDBField('screenreader');
 118          $field->setAttributes(XMLDB_TYPE_INTEGER, '1', null, XMLDB_NOTNULL, null, null, null, '0', 'imagealt');
 119  
 120      /// Launch add field screenreader
 121          $result = $result && add_field($table, $field);
 122  
 123          upgrade_main_savepoint($result, 2006112200);
 124      }
 125  
 126      if ($result && $oldversion < 2006120300) {    /// Delete guest course section settings
 127          // following code can be executed repeatedly, such as when upgrading from 1.7.x - it is ok
 128          if ($guest = get_record('user', 'username', 'guest')) {
 129              execute_sql("DELETE FROM {$CFG->prefix}course_display where userid=$guest->id", true);
 130          }
 131  
 132          upgrade_main_savepoint($result, 2006120300);
 133      }
 134  
 135      if ($result && $oldversion < 2006120400) {    /// Remove secureforms config setting
 136          execute_sql("DELETE FROM {$CFG->prefix}config where name='secureforms'", true);
 137  
 138          upgrade_main_savepoint($result, 2006120400);
 139      }
 140  
 141      if (!empty($CFG->rolesactive) && $oldversion < 2006120700) { // add moodle/user:viewdetails to all roles!
 142          // note: use of assign_capability() is discouraged in upgrade script!
 143          if ($roles = get_records('role')) {
 144              $context = get_context_instance(CONTEXT_SYSTEM);
 145              foreach ($roles as $roleid=>$role) {
 146                  assign_capability('moodle/user:viewdetails', CAP_ALLOW, $roleid, $context->id);
 147              }
 148          }
 149  
 150          upgrade_main_savepoint($result, 2006120700);
 151      }
 152  
 153      // Move the auth plugin settings into the config_plugin table
 154      if ($result && $oldversion < 2007010300) {
 155          if ($CFG->auth == 'email') {
 156              set_config('registerauth', 'email');
 157          } else {
 158              set_config('registerauth', '');
 159          }
 160          $authplugins = get_list_of_plugins('auth');
 161          foreach ($CFG as $k => $v) {
 162              if (strpos($k, 'ldap_') === 0) {
 163                  //upgrade nonstandard ldap settings
 164                  $setting = substr($k, 5);
 165                  if (set_config($setting, $v, "auth/ldap")) {
 166                      delete_records('config', 'name', $k);
 167                      unset($CFG->{$k});
 168                  }
 169                  continue;
 170              }
 171              if (strpos($k, 'auth_') !== 0) {
 172                  continue;
 173              }
 174              $authsetting = substr($k, 5);
 175              foreach ($authplugins as $auth) {
 176                  if (strpos($authsetting, $auth) !== 0) {
 177                      continue;
 178                  }
 179                  $setting = substr($authsetting, strlen($auth));
 180                  if (set_config($setting, $v, "auth/$auth")) {
 181                      delete_records('config', 'name', $k);
 182                      unset($CFG->{$k});
 183                  }
 184                  break; // don't check the rest of the auth plugin names
 185              }
 186          }
 187  
 188          upgrade_main_savepoint($result, 2007010300);
 189      }
 190  
 191      if ($result && $oldversion < 2007010301) {
 192          //
 193          // Core MNET tables
 194          //
 195          $table = new XMLDBTable('mnet_host');
 196          $table->comment = 'Information about the local and remote hosts for RPC';
 197          // fields
 198          $f = $table->addFieldInfo('id',                 XMLDB_TYPE_INTEGER,  '10', false,
 199                                    XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
 200          $f->comment = 'Unique Host ID';
 201          $f = $table->addFieldInfo('deleted',            XMLDB_TYPE_INTEGER,  '1', XMLDB_UNSIGNED,
 202                                    XMLDB_NOTNULL, null, null, null, 0);
 203          $f = $table->addFieldInfo('wwwroot',            XMLDB_TYPE_CHAR,   '255', null,
 204                                    XMLDB_NOTNULL, null, null, null, null);
 205          $f = $table->addFieldInfo('ip_address',         XMLDB_TYPE_CHAR,    '39', null,
 206                                    XMLDB_NOTNULL, null, null, null, null);
 207          $f = $table->addFieldInfo('name',               XMLDB_TYPE_CHAR,    '80', null,
 208                                    XMLDB_NOTNULL, null, null, null, null);
 209          $f = $table->addFieldInfo('public_key',         XMLDB_TYPE_TEXT, 'medium', null,
 210                                    XMLDB_NOTNULL, null, null, null, null);
 211          $f = $table->addFieldInfo('public_key_expires', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED,
 212                                    XMLDB_NOTNULL, null, null, null, 0);
 213          $f = $table->addFieldInfo('transport',          XMLDB_TYPE_INTEGER,  '2', XMLDB_UNSIGNED,
 214                                    XMLDB_NOTNULL, null, null, null, 0);
 215          $f = $table->addFieldInfo('portno',             XMLDB_TYPE_INTEGER,  '2', XMLDB_UNSIGNED,
 216                                    XMLDB_NOTNULL, null, null, null, 0);
 217          $f = $table->addFieldInfo('last_connect_time',  XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED,
 218                                    XMLDB_NOTNULL, null, null, null, 0);
 219          $f = $table->addFieldInfo('last_log_id',  XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED,
 220                                    XMLDB_NOTNULL, null, null, null, 0);
 221          // PK and indexes
 222          $table->addKeyInfo('primary', XMLDB_KEY_PRIMARY, array('id'));
 223          // Create the table
 224          $result = $result && create_table($table);
 225  
 226          $table = new XMLDBTable('mnet_host2service');
 227          $table->comment = 'Information about the services for a given host';
 228          // fields
 229          $f = $table->addFieldInfo('id',        XMLDB_TYPE_INTEGER,  '10', false,
 230                                    XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
 231          $f = $table->addFieldInfo('hostid',    XMLDB_TYPE_INTEGER,  '10', XMLDB_UNSIGNED,
 232                                    XMLDB_NOTNULL, NULL, null, null, 0);
 233          $f = $table->addFieldInfo('serviceid', XMLDB_TYPE_INTEGER,  '10', XMLDB_UNSIGNED,
 234                                    XMLDB_NOTNULL, NULL, null, null, 0);
 235          $f = $table->addFieldInfo('publish', XMLDB_TYPE_INTEGER,  '1', XMLDB_UNSIGNED,
 236                                    XMLDB_NOTNULL, NULL, null, null, 0);
 237          $f = $table->addFieldInfo('subscribe', XMLDB_TYPE_INTEGER,  '1', XMLDB_UNSIGNED,
 238                                    XMLDB_NOTNULL, NULL, null, null, 0);
 239          // PK and indexes
 240          $table->addKeyInfo('primary', XMLDB_KEY_PRIMARY, array('id'));
 241          $table->addIndexInfo('hostid_serviceid', XMLDB_INDEX_UNIQUE, array('hostid', 'serviceid'));
 242          // Create the table
 243          $result = $result && create_table($table);
 244  
 245          $table = new XMLDBTable('mnet_log');
 246          $table->comment = 'Store session data from users migrating to other sites';
 247          // fields
 248          $f = $table->addFieldInfo('id',        XMLDB_TYPE_INTEGER,  '10', false,
 249                                    XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
 250          $f = $table->addFieldInfo('hostid',    XMLDB_TYPE_INTEGER,  '10', XMLDB_UNSIGNED,
 251                                    XMLDB_NOTNULL, NULL, null, null, 0);
 252          $f = $table->addFieldInfo('remoteid',    XMLDB_TYPE_INTEGER,  '10', XMLDB_UNSIGNED,
 253                                    XMLDB_NOTNULL, NULL, null, null, 0);
 254          $f = $table->addFieldInfo('time',    XMLDB_TYPE_INTEGER,  '10', XMLDB_UNSIGNED,
 255                                    XMLDB_NOTNULL, NULL, null, null, 0);
 256          $f = $table->addFieldInfo('userid',    XMLDB_TYPE_INTEGER,  '10', XMLDB_UNSIGNED,
 257                                    XMLDB_NOTNULL, NULL, null, null, 0);
 258          $f = $table->addFieldInfo('ip',    XMLDB_TYPE_CHAR,  '15', null,
 259                                    XMLDB_NOTNULL, NULL, null, null, null);
 260          $f = $table->addFieldInfo('course',    XMLDB_TYPE_INTEGER,  '10', XMLDB_UNSIGNED,
 261                                    XMLDB_NOTNULL, NULL, null, null, 0);
 262          $f = $table->addFieldInfo('coursename',    XMLDB_TYPE_CHAR,  '40', null,
 263                                    XMLDB_NOTNULL, NULL, null, null, null);
 264          $f = $table->addFieldInfo('module',    XMLDB_TYPE_CHAR,  '20', null,
 265                                    XMLDB_NOTNULL, NULL, null, null, null);
 266          $f = $table->addFieldInfo('cmid',    XMLDB_TYPE_INTEGER,  '10', XMLDB_UNSIGNED,
 267                                    XMLDB_NOTNULL, NULL, null, null, 0);
 268          $f = $table->addFieldInfo('action',    XMLDB_TYPE_CHAR,  '40', null,
 269                                    XMLDB_NOTNULL, NULL, null, null, null);
 270          $f = $table->addFieldInfo('url',    XMLDB_TYPE_CHAR,  '100', null,
 271                                    XMLDB_NOTNULL, NULL, null, null, null);
 272          $f = $table->addFieldInfo('info',    XMLDB_TYPE_CHAR,  '255', null,
 273                                    XMLDB_NOTNULL, NULL, null, null, null);
 274          // PK and indexes
 275          $table->addKeyInfo('primary', XMLDB_KEY_PRIMARY, array('id'));
 276          $table->addIndexInfo('host_user_course', XMLDB_INDEX_NOTUNIQUE, array('hostid', 'userid', 'course'));
 277          // Create the table
 278          $result = $result && create_table($table);
 279  
 280  
 281          $table = new XMLDBTable('mnet_rpc');
 282          $table->comment = 'Functions or methods that we may publish or subscribe to';
 283          // fields
 284          $f = $table->addFieldInfo('id',        XMLDB_TYPE_INTEGER,  '10', false,
 285                                    XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
 286          $f = $table->addFieldInfo('function_name',    XMLDB_TYPE_CHAR,  '40', null,
 287                                    XMLDB_NOTNULL, NULL, null, null, null);
 288          $f = $table->addFieldInfo('xmlrpc_path',    XMLDB_TYPE_CHAR,  '80', null,
 289                                    XMLDB_NOTNULL, NULL, null, null, null);
 290          $f = $table->addFieldInfo('parent_type',    XMLDB_TYPE_CHAR,  '6', null,
 291                                    XMLDB_NOTNULL, NULL, null, null, null);
 292          $f = $table->addFieldInfo('parent',    XMLDB_TYPE_CHAR,  '20', null,
 293                                    XMLDB_NOTNULL, NULL, null, null, null);
 294          $f = $table->addFieldInfo('enabled', XMLDB_TYPE_INTEGER,  '1', XMLDB_UNSIGNED,
 295                                    XMLDB_NOTNULL, NULL, null, null, 0);
 296          $f = $table->addFieldInfo('help',    XMLDB_TYPE_TEXT,  'medium', null,
 297                                    XMLDB_NOTNULL, NULL, null, null, null);
 298          $f = $table->addFieldInfo('profile',    XMLDB_TYPE_TEXT,  'medium', null,
 299                                    XMLDB_NOTNULL, NULL, null, null, null);
 300          // PK and indexes
 301          $table->addKeyInfo('primary', XMLDB_KEY_PRIMARY, array('id'));
 302          $table->addIndexInfo('enabled_xpath', XMLDB_INDEX_NOTUNIQUE, array('enabled', 'xmlrpc_path'));
 303          // Create the table
 304          $result = $result && create_table($table);
 305  
 306          $table = new XMLDBTable('mnet_service');
 307          $table->comment = 'A service is a group of functions';
 308          // fields
 309          $f = $table->addFieldInfo('id',        XMLDB_TYPE_INTEGER,  '10', false,
 310                                    XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
 311          $f = $table->addFieldInfo('name',    XMLDB_TYPE_CHAR,  '40', null,
 312                                    XMLDB_NOTNULL, NULL, null, null, null);
 313          $f = $table->addFieldInfo('description',    XMLDB_TYPE_CHAR,  '40', null,
 314                                    XMLDB_NOTNULL, NULL, null, null, null);
 315          $f = $table->addFieldInfo('apiversion',    XMLDB_TYPE_CHAR,  '10', null,
 316                                    XMLDB_NOTNULL, NULL, null, null, null);
 317          $f = $table->addFieldInfo('offer',    XMLDB_TYPE_INTEGER,  '1', XMLDB_UNSIGNED,
 318                                    XMLDB_NOTNULL, NULL, null, null, 0);
 319          // PK and indexes
 320          $table->addKeyInfo('primary', XMLDB_KEY_PRIMARY, array('id'));
 321          // Create the table
 322          $result = $result && create_table($table);
 323  
 324          $table = new XMLDBTable('mnet_service2rpc');
 325          $table->comment = 'Group functions or methods under a service';
 326          // fields
 327          $f = $table->addFieldInfo('id',        XMLDB_TYPE_INTEGER,  '10', false,
 328                                    XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
 329          $f = $table->addFieldInfo('serviceid', XMLDB_TYPE_INTEGER,  '10', XMLDB_UNSIGNED,
 330                                    XMLDB_NOTNULL, NULL, null, null, 0);
 331          $f = $table->addFieldInfo('rpcid',    XMLDB_TYPE_INTEGER,  '10', XMLDB_UNSIGNED,
 332                                    XMLDB_NOTNULL, NULL, null, null, 0);
 333          // PK and indexes
 334          $table->addKeyInfo('primary', XMLDB_KEY_PRIMARY, array('id'));
 335          $table->addIndexInfo('unique', XMLDB_INDEX_UNIQUE, array('rpcid', 'serviceid'));
 336          // Create the table
 337          $result = $result && create_table($table);
 338  
 339          //
 340          // Prime MNET configuration entries -- will be needed later by auth/mnet
 341          //
 342          include_once $CFG->dirroot . '/mnet/lib.php';
 343          $env = new mnet_environment();
 344          $env->init();
 345          unset($env);
 346  
 347          // add mnethostid to user-
 348          $table = new XMLDBTable('user');
 349          $field = new XMLDBField('mnethostid');
 350          $field->setType(XMLDB_TYPE_INTEGER);
 351          $field->setLength(10);
 352          $field->setNotNull(true);
 353          $field->setSequence(null);
 354          $field->setEnum(null);
 355          $field->setDefault('0');
 356          $field->setPrevious("deleted");
 357          $field->setNext("username");
 358          $result = $result && add_field($table, $field);
 359  
 360          // The default mnethostid is zero... we need to update this for all
 361          // users of the local IdP service.
 362          set_field('user',
 363                    'mnethostid', $CFG->mnet_localhost_id,
 364                    'mnethostid', '0');
 365  
 366  
 367          $index = new XMLDBIndex('username');
 368          $index->setUnique(true);
 369          $index->setFields(array('username'));
 370          drop_index($table, $index);
 371          $index->setFields(array('mnethostid', 'username'));
 372          if (!add_index($table, $index)) {
 373              notify(get_string('duplicate_usernames', 'mnet', 'http://docs.moodle.org/en/DuplicateUsernames'));
 374          }
 375  
 376          unset($table, $field, $index);
 377  
 378          /**
 379           ** auth/mnet tables
 380           **/
 381          $table = new XMLDBTable('mnet_session');
 382          $table->comment='Store session data from users migrating to other sites';
 383          // fields
 384          $f = $table->addFieldInfo('id',         XMLDB_TYPE_INTEGER,  '10', false,
 385                                    XMLDB_NOTNULL,XMLDB_SEQUENCE, null, null, null);
 386          $f = $table->addFieldInfo('userid', XMLDB_TYPE_INTEGER,  '10', XMLDB_UNSIGNED,
 387                                    XMLDB_NOTNULL, NULL, null, null, 0);
 388          $f = $table->addFieldInfo('username',   XMLDB_TYPE_CHAR,  '100', null,
 389                                    XMLDB_NOTNULL, NULL, null, null, null);
 390          $f = $table->addFieldInfo('token',      XMLDB_TYPE_CHAR,  '40', null,
 391                                    XMLDB_NOTNULL, NULL, null, null, null);
 392          $f = $table->addFieldInfo('mnethostid', XMLDB_TYPE_INTEGER,  '10', XMLDB_UNSIGNED,
 393                                    XMLDB_NOTNULL, NULL, null, null, 0);
 394          $f = $table->addFieldInfo('useragent',  XMLDB_TYPE_CHAR,  '40', null,
 395                                    XMLDB_NOTNULL, NULL, null, null, null);
 396          $f = $table->addFieldInfo('confirm_timeout', XMLDB_TYPE_INTEGER,  '10', XMLDB_UNSIGNED,
 397                                    XMLDB_NOTNULL, NULL, null, null, 0);
 398          $f = $table->addFieldInfo('session_id',   XMLDB_TYPE_CHAR,  '40', null,
 399                                    XMLDB_NOTNULL, NULL, null, null, null);
 400          $f = $table->addFieldInfo('expires', XMLDB_TYPE_INTEGER,  '10', XMLDB_UNSIGNED,
 401                                    XMLDB_NOTNULL, NULL, null, null, 0);
 402          // PK and indexes
 403          $table->addKeyInfo('primary', XMLDB_KEY_PRIMARY, array('id'));
 404          $table->addIndexInfo('token', XMLDB_INDEX_UNIQUE, array('token'));
 405          // Create the table
 406          $result = $result && create_table($table);
 407  
 408  
 409          $table = new XMLDBTable('mnet_sso_access_control');
 410          $table->comment = 'Users by host permitted (or not) to login from a remote provider';
 411          $f = $table->addFieldInfo('id',         XMLDB_TYPE_INTEGER,  '10', false,
 412                                    XMLDB_NOTNULL,XMLDB_SEQUENCE, null, null, null);
 413          $f = $table->addFieldInfo('username',   XMLDB_TYPE_CHAR,  '100', null,
 414                                    XMLDB_NOTNULL, NULL, null, null, null);
 415          $f = $table->addFieldInfo('mnet_host_id', XMLDB_TYPE_INTEGER,  '10', XMLDB_UNSIGNED,
 416                                    XMLDB_NOTNULL, NULL, null, null, 0);
 417          $f = $table->addFieldInfo('access',  XMLDB_TYPE_CHAR,  '20', null,
 418                                    XMLDB_NOTNULL, NULL, null, null, 'allow');
 419          // PK and indexes
 420          $table->addKeyInfo('primary', XMLDB_KEY_PRIMARY, array('id'));
 421          $table->addIndexInfo('mnethostid_username', XMLDB_INDEX_UNIQUE, array('mnet_host_id', 'username'));
 422          // Create the table
 423          $result = $result && create_table($table);
 424  
 425          if (empty($USER->mnet_host_id)) {
 426              $USER->mnet_host_id = $CFG->mnet_localhost_id;    // Something for the current user to prevent warnings
 427          }
 428  
 429          /**
 430           ** enrol/mnet tables
 431           **/
 432          $table = new XMLDBTable('mnet_enrol_course');
 433          $table->comment = 'Information about courses on remote hosts';
 434          $f = $table->addFieldInfo('id',         XMLDB_TYPE_INTEGER,  '10', false,
 435                                    XMLDB_NOTNULL,XMLDB_SEQUENCE, null, null, null);
 436          $f = $table->addFieldInfo('hostid', XMLDB_TYPE_INTEGER,  '10', XMLDB_UNSIGNED,
 437                                    XMLDB_NOTNULL, NULL, null, null, 0);
 438          $f = $table->addFieldInfo('remoteid', XMLDB_TYPE_INTEGER,  '10', XMLDB_UNSIGNED,
 439                            XMLDB_NOTNULL, NULL, null, null, 0);
 440          $f = $table->addFieldInfo('cat_id', XMLDB_TYPE_INTEGER,  '10', XMLDB_UNSIGNED,
 441                                    XMLDB_NOTNULL, NULL, null, null, 0);
 442          $f = $table->addFieldInfo('cat_name',  XMLDB_TYPE_CHAR,  '255', null,
 443                                    XMLDB_NOTNULL, NULL, null, null, null);
 444          $f = $table->addFieldInfo('cat_description',  XMLDB_TYPE_TEXT,  'medium', null,
 445                                    XMLDB_NOTNULL, NULL, null, null, null);
 446          $f = $table->addFieldInfo('sortorder', XMLDB_TYPE_INTEGER,  '4', XMLDB_UNSIGNED,
 447                                    XMLDB_NOTNULL, NULL, null, null, 0);
 448          $f = $table->addFieldInfo('fullname',  XMLDB_TYPE_CHAR,  '254', null,
 449                                    XMLDB_NOTNULL, NULL, null, null, null);
 450          $f = $table->addFieldInfo('shortname',  XMLDB_TYPE_CHAR,  '15', null,
 451                                    XMLDB_NOTNULL, NULL, null, null, null);
 452          $f = $table->addFieldInfo('idnumber',  XMLDB_TYPE_CHAR,  '100', null,
 453                                    XMLDB_NOTNULL, NULL, null, null, null);
 454          $f = $table->addFieldInfo('summary',  XMLDB_TYPE_TEXT,  'medium', null,
 455                                    XMLDB_NOTNULL, NULL, null, null, null);
 456          $f = $table->addFieldInfo('startdate', XMLDB_TYPE_INTEGER,  '10', XMLDB_UNSIGNED,
 457                                    XMLDB_NOTNULL, NULL, null, null, 0);
 458          $f = $table->addFieldInfo('cost',  XMLDB_TYPE_CHAR,  '10', null,
 459                                    XMLDB_NOTNULL, NULL, null, null, null);
 460          $f = $table->addFieldInfo('currency',  XMLDB_TYPE_CHAR,  '3', null,
 461                                    XMLDB_NOTNULL, NULL, null, null, null);
 462          $f = $table->addFieldInfo('defaultroleid', XMLDB_TYPE_INTEGER,  '4', XMLDB_UNSIGNED,
 463                                    XMLDB_NOTNULL, NULL, null, null, 0);
 464          $f = $table->addFieldInfo('defaultrolename',  XMLDB_TYPE_CHAR,  '255', null,
 465                                    XMLDB_NOTNULL, NULL, null, null, null);
 466          // PK and indexes
 467          $table->addKeyInfo('primary', XMLDB_KEY_PRIMARY, array('id'));
 468          $table->addIndexInfo('hostid_remoteid', XMLDB_INDEX_UNIQUE, array('hostid', 'remoteid'));
 469          // Create the table
 470          $result = $result && create_table($table);
 471  
 472  
 473          $table = new XMLDBTable('mnet_enrol_assignments');
 474  
 475          $table->comment = 'Information about enrolments on courses on remote hosts';
 476          $f = $table->addFieldInfo('id',         XMLDB_TYPE_INTEGER,  '10', false,
 477                                    XMLDB_NOTNULL,XMLDB_SEQUENCE, null, null, null);
 478          $f = $table->addFieldInfo('userid', XMLDB_TYPE_INTEGER,  '10', XMLDB_UNSIGNED,
 479                                    XMLDB_NOTNULL, NULL, null, null, 0);
 480          $f = $table->addFieldInfo('hostid', XMLDB_TYPE_INTEGER,  '10', XMLDB_UNSIGNED,
 481                                    XMLDB_NOTNULL, NULL, null, null, 0);
 482          $f = $table->addFieldInfo('courseid', XMLDB_TYPE_INTEGER,  '10', XMLDB_UNSIGNED,
 483                                    XMLDB_NOTNULL, NULL, null, null, 0);
 484          $f = $table->addFieldInfo('rolename',  XMLDB_TYPE_CHAR,  '255', null,
 485                                    XMLDB_NOTNULL, NULL, null, null, null);
 486          $f = $table->addFieldInfo('enroltime', XMLDB_TYPE_INTEGER,  '10', XMLDB_UNSIGNED,
 487                                    XMLDB_NOTNULL, NULL, null, null, 0);
 488          $f = $table->addFieldInfo('enroltype',  XMLDB_TYPE_CHAR,  '20', null,
 489                                    XMLDB_NOTNULL, NULL, null, null, null);
 490  
 491          // PK and indexes
 492          $table->addKeyInfo('primary', XMLDB_KEY_PRIMARY, array('id'));
 493          $table->addIndexInfo('hostid_courseid', XMLDB_INDEX_NOTUNIQUE, array('hostid', 'courseid'));
 494          $table->addIndexInfo('userid', XMLDB_INDEX_NOTUNIQUE, array('userid'));
 495          // Create the table
 496          $result = $result && create_table($table);
 497  
 498          upgrade_main_savepoint($result, 2007010301);
 499      }
 500  
 501      if ($result && $oldversion < 2007010404) {
 502  
 503          /// Define field shortname to be added to user_info_field
 504          $table = new XMLDBTable('user_info_field');
 505          $field = new XMLDBField('shortname');
 506          $field->setAttributes(XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, null, 'shortname', 'id');
 507  
 508          /// Launch add field shortname
 509          $result = $result && add_field($table, $field);
 510  
 511          /// Changing type of field name on table user_info_field to text
 512          $table = new XMLDBTable('user_info_field');
 513          $field = new XMLDBField('name');
 514          $field->setAttributes(XMLDB_TYPE_TEXT, 'big', null, XMLDB_NOTNULL, null, null, null, null, 'shortname');
 515  
 516          /// Launch change of type for field name
 517          $result = $result && change_field_type($table, $field);
 518  
 519          /// For existing fields use 'name' as the 'shortname' entry
 520          if ($fields = get_records_select('user_info_field', '', '', 'id, name')) {
 521              foreach ($fields as $field) {
 522                  $field->shortname = clean_param($field->name, PARAM_ALPHANUM);
 523                  $result && update_record('user_info_field', $field);
 524              }
 525          }
 526  
 527          upgrade_main_savepoint($result, 2007010404);
 528      }
 529  
 530      if ($result && $oldversion < 2007011501) {
 531          if (!empty($CFG->enablerecordcache) && empty($CFG->rcache) &&
 532              // Note: won't force-load these settings into CFG
 533              // we don't need or want cache during the upgrade itself
 534              empty($CFG->cachetype) && empty($CFG->intcachemax)) {
 535              set_config('cachetype',   'internal');
 536              set_config('rcache',      true);
 537              set_config('intcachemax', $CFG->enablerecordcache);
 538              unset_config('enablerecordcache');
 539              unset($CFG->enablerecordcache);
 540          }
 541  
 542          upgrade_main_savepoint($result, 2007011501);
 543      }
 544  
 545      if ($result && $oldversion < 2007012100) {
 546      /// Some old PG servers have user->firstname & user->lastname with 30cc. They must be 100cc.
 547      /// Fixing that conditionally. MDL-7110
 548          if ($CFG->dbfamily == 'postgres') {
 549          /// Get Metadata from user table
 550              $cols = array_change_key_case($db->MetaColumns($CFG->prefix . 'user'), CASE_LOWER);
 551  
 552          /// Process user->firstname if needed
 553              if ($col = $cols['firstname']) {
 554                  if ($col->max_length < 100) {
 555                  /// Changing precision of field firstname on table user to (100)
 556                      $table = new XMLDBTable('user');
 557                      $field = new XMLDBField('firstname');
 558                      $field->setAttributes(XMLDB_TYPE_CHAR, '100', null, XMLDB_NOTNULL, null, null, null, null, 'idnumber');
 559  
 560                  /// Launch change of precision for field firstname
 561                      $result = $result && change_field_precision($table, $field);
 562                  }
 563              }
 564  
 565          /// Process user->lastname if needed
 566              if ($col = $cols['lastname']) {
 567                  if ($col->max_length < 100) {
 568                  /// Changing precision of field lastname on table user to (100)
 569                      $table = new XMLDBTable('user');
 570                      $field = new XMLDBField('lastname');
 571                      $field->setAttributes(XMLDB_TYPE_CHAR, '100', null, XMLDB_NOTNULL, null, null, null, null, 'firstname');
 572  
 573                  /// Launch change of precision for field lastname
 574                      $result = $result && change_field_precision($table, $field);
 575                  }
 576              }
 577          }
 578  
 579          upgrade_main_savepoint($result, 2007012100);
 580      }
 581  
 582      if ($result && $oldversion < 2007012101) {
 583  
 584      /// Changing precision of field lang on table course to (30)
 585          $table = new XMLDBTable('course');
 586          $field = new XMLDBField('lang');
 587          $field->setAttributes(XMLDB_TYPE_CHAR, '30', null, XMLDB_NOTNULL, null, null, null, null, 'groupmodeforce');
 588  
 589      /// Launch change of precision for field course->lang
 590          $result = $result && change_field_precision($table, $field);
 591  
 592      /// Changing precision of field lang on table user to (30)
 593          $table = new XMLDBTable('user');
 594          $field = new XMLDBField('lang');
 595          $field->setAttributes(XMLDB_TYPE_CHAR, '30', null, XMLDB_NOTNULL, null, null, null, 'en', 'country');
 596  
 597      /// Launch change of precision for field user->lang
 598          $result = $result && change_field_precision($table, $field);
 599  
 600          upgrade_main_savepoint($result, 2007012101);
 601      }
 602  
 603      if ($result && $oldversion < 2007012400) {
 604  
 605      /// Rename field access on table mnet_sso_access_control to accessctrl
 606          $table = new XMLDBTable('mnet_sso_access_control');
 607          $field = new XMLDBField('access');
 608          $field->setAttributes(XMLDB_TYPE_CHAR, '20', null, XMLDB_NOTNULL, null, null, null, 'allow', 'mnet_host_id');
 609  
 610      /// Launch rename field accessctrl
 611          $result = $result && rename_field($table, $field, 'accessctrl');
 612  
 613          upgrade_main_savepoint($result, 2007012400);
 614      }
 615  
 616      if ($result && $oldversion < 2007012500) {
 617          execute_sql("DELETE FROM {$CFG->prefix}user WHERE username='changeme'", true);
 618  
 619          upgrade_main_savepoint($result, 2007012500);
 620      }
 621  
 622      if ($result && $oldversion < 2007020400) {
 623      /// Only for MySQL and PG, declare the user->ajax field as not null. MDL-8421.
 624          if ($CFG->dbfamily == 'mysql' || $CFG->dbfamily == 'postgres') {
 625          /// Changing nullability of field ajax on table user to not null
 626              $table = new XMLDBTable('user');
 627              $field = new XMLDBField('ajax');
 628              $field->setAttributes(XMLDB_TYPE_INTEGER, '1', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '1', 'htmleditor');
 629  
 630          /// Launch change of nullability for field ajax
 631              $result = $result && change_field_notnull($table, $field);
 632          }
 633  
 634          upgrade_main_savepoint($result, 2007020400);
 635      }
 636  
 637      if (!empty($CFG->rolesactive) && $result && $oldversion < 2007021401) {
 638      /// create default logged in user role if not present - upgrade rom 1.7.x
 639          if (empty($CFG->defaultuserroleid) or empty($CFG->guestroleid) or $CFG->defaultuserroleid == $CFG->guestroleid) {
 640              if (!get_records('role', 'shortname', 'user')) {
 641                  $userroleid = create_role(addslashes(get_string('authenticateduser')), 'user',
 642                                            addslashes(get_string('authenticateduserdescription')), 'moodle/legacy:user');
 643                  if ($userroleid) {
 644                      reset_role_capabilities($userroleid);
 645                      set_config('defaultuserroleid', $userroleid);
 646                  }
 647              }
 648          }
 649  
 650          upgrade_main_savepoint($result, 2007021401);
 651      }
 652  
 653      if ($result && $oldversion < 2007021501) {
 654      /// delete removed setting from config
 655          unset_config('tabselectedtofront');
 656  
 657          upgrade_main_savepoint($result, 2007021501);
 658      }
 659  
 660  
 661      if ($result && $oldversion < 2007032200) {
 662  
 663      /// Define table role_sortorder to be created
 664          $table = new XMLDBTable('role_sortorder');
 665  
 666      /// Adding fields to table role_sortorder
 667          $table->addFieldInfo('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
 668          $table->addFieldInfo('userid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
 669          $table->addFieldInfo('roleid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
 670          $table->addFieldInfo('contextid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
 671          $table->addFieldInfo('sortoder', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, null);
 672  
 673      /// Adding keys to table role_sortorder
 674          $table->addKeyInfo('primary', XMLDB_KEY_PRIMARY, array('id'));
 675          $table->addKeyInfo('userid', XMLDB_KEY_FOREIGN, array('userid'), 'user', array('id'));
 676          $table->addKeyInfo('roleid', XMLDB_KEY_FOREIGN, array('roleid'), 'role', array('id'));
 677          $table->addKeyInfo('contextid', XMLDB_KEY_FOREIGN, array('contextid'), 'context', array('id'));
 678  
 679      /// Adding indexes to table role_sortorder
 680          $table->addIndexInfo('userid-roleid-contextid', XMLDB_INDEX_UNIQUE, array('userid', 'roleid', 'contextid'));
 681  
 682      /// Launch create table for role_sortorder
 683          $result = $result && create_table($table);
 684  
 685          upgrade_main_savepoint($result, 2007032200);
 686      }
 687  
 688  
 689      /// code to change lenghen tag field to 255, MDL-9095
 690      if ($result && $oldversion < 2007040400) {
 691  
 692      /// Define index text (not unique) to be dropped form tags
 693          $table = new XMLDBTable('tags');
 694          $index = new XMLDBIndex('text');
 695          $index->setAttributes(XMLDB_INDEX_NOTUNIQUE, array('text'));
 696  
 697      /// Launch drop index text
 698          $result = $result && drop_index($table, $index);
 699  
 700          $field = new XMLDBField('text');
 701          $field->setAttributes(XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, null, null, 'userid');
 702  
 703      /// Launch change of type for field text
 704          $result = $result && change_field_type($table, $field);
 705  
 706          $index = new XMLDBIndex('text');
 707          $index->setAttributes(XMLDB_INDEX_NOTUNIQUE, array('text'));
 708  
 709      /// Launch add index text
 710          $result = $result && add_index($table, $index);
 711  
 712          upgrade_main_savepoint($result, 2007040400);
 713      }
 714  
 715      if ($result && $oldversion < 2007041100) {
 716  
 717      /// Define field idnumber to be added to course_modules
 718          $table = new XMLDBTable('course_modules');
 719          $field = new XMLDBField('idnumber');
 720          $field->setAttributes(XMLDB_TYPE_CHAR, '100', null, null, null, null, null, null, 'section');
 721  
 722      /// Launch add field idnumber
 723          $result = $result && add_field($table, $field);
 724  
 725          upgrade_main_savepoint($result, 2007041100);
 726      }
 727  
 728      /* Changes to the custom profile menu type - store values rather than indices.
 729         We could do all this with one tricky SQL statement but it's a one-off so no
 730         harm in using PHP loops */
 731      if ($result && $oldversion < 2007041600) {
 732  
 733      /// Get the menu fields
 734          if ($fields = get_records('user_info_field', 'datatype', 'menu')) {
 735              foreach ($fields as $field) {
 736  
 737              /// Get user data for the menu field
 738                  if ($data = get_records('user_info_data', 'fieldid', $field->id)) {
 739  
 740                  /// Get the menu options
 741                      $options = explode("\n", $field->param1);
 742                      foreach ($data as $d) {
 743                          $key = array_search($d->data, $options);
 744  
 745                      /// If the data is an integer and is not one of the options,
 746                      /// set the respective option value
 747                          if (is_int($d->data) and (($key === NULL) or ($key === false)) and isset($options[$d->data])) {
 748                                  $d->data = $options[$d->data];
 749                                  $result = $result && update_record('user_info_data', $d);
 750                          }
 751                      }
 752                  }
 753              }
 754          }
 755  
 756          upgrade_main_savepoint($result, 2007041600);
 757      }
 758  
 759      /// adding new gradebook tables
 760      if ($result && $oldversion < 2007041800) {
 761  
 762      /// Define table events_handlers to be created
 763          $table = new XMLDBTable('events_handlers');
 764  
 765      /// Adding fields to table events_handlers
 766          $table->addFieldInfo('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
 767          $table->addFieldInfo('eventname', XMLDB_TYPE_CHAR, '166', null, XMLDB_NOTNULL, null, null, null, null);
 768          $table->addFieldInfo('handlermodule', XMLDB_TYPE_CHAR, '166', null, XMLDB_NOTNULL, null, null, null, null);
 769          $table->addFieldInfo('handlerfile', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, null, null);
 770          $table->addFieldInfo('handlerfunction', XMLDB_TYPE_TEXT, 'medium', null, null, null, null, null, null);
 771  
 772      /// Adding keys to table events_handlers
 773          $table->addKeyInfo('primary', XMLDB_KEY_PRIMARY, array('id'));
 774  
 775      /// Adding indexes to table events_handlers
 776          $table->addIndexInfo('eventname-handlermodule', XMLDB_INDEX_UNIQUE, array('eventname', 'handlermodule'));
 777  
 778      /// Launch create table for events_handlers
 779          $result = $result && create_table($table);
 780  
 781      /// Define table events_queue to be created
 782          $table = new XMLDBTable('events_queue');
 783  
 784      /// Adding fields to table events_queue
 785          $table->addFieldInfo('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
 786          $table->addFieldInfo('eventdata', XMLDB_TYPE_TEXT, 'big', null, XMLDB_NOTNULL, null, null, null, null);
 787          $table->addFieldInfo('schedule', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, null, null);
 788          $table->addFieldInfo('stackdump', XMLDB_TYPE_TEXT, 'medium', null, null, null, null, null, null);
 789          $table->addFieldInfo('userid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null);
 790          $table->addFieldInfo('timecreated', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
 791  
 792      /// Adding keys to table events_queue
 793          $table->addKeyInfo('primary', XMLDB_KEY_PRIMARY, array('id'));
 794          $table->addKeyInfo('userid', XMLDB_KEY_FOREIGN, array('userid'), 'user', array('id'));
 795  
 796      /// Launch create table for events_queue
 797          $result = $result && create_table($table);
 798  
 799      /// Define table events_queue_handlers to be created
 800          $table = new XMLDBTable('events_queue_handlers');
 801  
 802      /// Adding fields to table events_queue_handlers
 803          $table->addFieldInfo('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
 804          $table->addFieldInfo('queuedeventid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
 805          $table->addFieldInfo('handlerid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
 806          $table->addFieldInfo('status', XMLDB_TYPE_INTEGER, '10', null, null, null, null, null, null);
 807          $table->addFieldInfo('errormessage', XMLDB_TYPE_TEXT, 'medium', null, null, null, null, null, null);
 808          $table->addFieldInfo('timemodified', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
 809  
 810      /// Adding keys to table events_queue_handlers
 811          $table->addKeyInfo('primary', XMLDB_KEY_PRIMARY, array('id'));
 812          $table->addKeyInfo('queuedeventid', XMLDB_KEY_FOREIGN, array('queuedeventid'), 'events_queue', array('id'));
 813          $table->addKeyInfo('handlerid', XMLDB_KEY_FOREIGN, array('handlerid'), 'events_handlers', array('id'));
 814  
 815      /// Launch create table for events_queue_handlers
 816          $result = $result && create_table($table);
 817  
 818          upgrade_main_savepoint($result, 2007041800);
 819      }
 820  
 821      if ($result && $oldversion < 2007043001) {
 822  
 823      /// Define field schedule to be added to events_handlers
 824          $table = new XMLDBTable('events_handlers');
 825          $field = new XMLDBField('schedule');
 826          $field->setAttributes(XMLDB_TYPE_CHAR, '255', null, null, null, null, null, null, 'handlerfunction');
 827  
 828      /// Launch add field schedule
 829          $result = $result && add_field($table, $field);
 830  
 831      /// Define field status to be added to events_handlers
 832          $table = new XMLDBTable('events_handlers');
 833          $field = new XMLDBField('status');
 834          $field->setAttributes(XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0', 'schedule');
 835  
 836      /// Launch add field status
 837          $result = $result && add_field($table, $field);
 838  
 839          upgrade_main_savepoint($result, 2007043001);
 840      }
 841  
 842      if ($result && $oldversion < 2007050201) {
 843  
 844      /// Define field theme to be added to course_categories
 845          $table = new XMLDBTable('course_categories');
 846          $field = new XMLDBField('theme');
 847          $field->setAttributes(XMLDB_TYPE_CHAR, '50', null, null, null, null, null, null, 'path');
 848  
 849      /// Launch add field theme
 850          $result = $result && add_field($table, $field);
 851  
 852          upgrade_main_savepoint($result, 2007050201);
 853      }
 854  
 855      if ($result && $oldversion < 2007051100) {
 856  
 857      /// Define field forceunique to be added to user_info_field
 858          $table = new XMLDBTable('user_info_field');
 859          $field = new XMLDBField('forceunique');
 860          $field->setAttributes(XMLDB_TYPE_INTEGER, '2', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0', 'visible');
 861  
 862      /// Launch add field forceunique
 863          $result = $result && add_field($table, $field);
 864  
 865      /// Define field signup to be added to user_info_field
 866          $table = new XMLDBTable('user_info_field');
 867          $field = new XMLDBField('signup');
 868          $field->setAttributes(XMLDB_TYPE_INTEGER, '2', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0', 'forceunique');
 869  
 870      /// Launch add field signup
 871          $result = $result && add_field($table, $field);
 872  
 873          upgrade_main_savepoint($result, 2007051100);
 874      }
 875  
 876      if (!empty($CFG->rolesactive) && $result && $oldversion < 2007051801) {
 877          // Get the role id of the "Auth. User" role and check if the default role id is different
 878          // note: use of assign_capability() is discouraged in upgrade script!
 879          $userrole = get_record( 'role', 'shortname', 'user' );
 880          $defaultroleid = $CFG->defaultuserroleid;
 881  
 882          if( $defaultroleid != $userrole->id ) {
 883              //  Add in the new moodle/my:manageblocks capibility to the default user role
 884              $context = get_context_instance(CONTEXT_SYSTEM);
 885              assign_capability('moodle/my:manageblocks',CAP_ALLOW,$defaultroleid,$context->id);
 886          }
 887  
 888          upgrade_main_savepoint($result, 2007051801);
 889      }
 890  
 891      if ($result && $oldversion < 2007052200) {
 892  
 893      /// Define field schedule to be dropped from events_queue
 894          $table = new XMLDBTable('events_queue');
 895          $field = new XMLDBField('schedule');
 896  
 897      /// Launch drop field stackdump
 898          $result = $result && drop_field($table, $field);
 899  
 900          upgrade_main_savepoint($result, 2007052200);
 901      }
 902  
 903      if ($result && $oldversion < 2007052300) {
 904          require_once($CFG->dirroot . '/question/upgrade.php');
 905          $result = $result && question_remove_rqp_qtype();
 906  
 907          upgrade_main_savepoint($result, 2007052300);
 908      }
 909  
 910      if ($result && $oldversion < 2007060500) {
 911  
 912      /// Define field usermodified to be added to post
 913          $table = new XMLDBTable('post');
 914          $field = new XMLDBField('usermodified');
 915          $field->setAttributes(XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null, 'created');
 916  
 917      /// Launch add field usermodified
 918          $result = $result && add_field($table, $field);
 919  
 920      /// Define key usermodified (foreign) to be added to post
 921          $table = new XMLDBTable('post');
 922          $key = new XMLDBKey('usermodified');
 923          $key->setAttributes(XMLDB_KEY_FOREIGN, array('usermodified'), 'user', array('id'));
 924  
 925      /// Launch add key usermodified
 926          $result = $result && add_key($table, $key);
 927  
 928          upgrade_main_savepoint($result, 2007060500);
 929      }
 930  
 931      if ($result && $oldversion < 2007070603) {
 932          // Small update of guest user to be 100% sure it has the correct mnethostid (MDL-10375)
 933          set_field('user', 'mnethostid', $CFG->mnet_localhost_id, 'username', 'guest');
 934  
 935          upgrade_main_savepoint($result, 2007070603);
 936      }
 937  
 938      if ($result && $oldversion < 2007071400) {
 939          /**
 940           ** mnet application table
 941           **/
 942          $table = new XMLDBTable('mnet_application');
 943          $table->comment = 'Information about applications on remote hosts';
 944          $f = $table->addFieldInfo('id',         XMLDB_TYPE_INTEGER,  '10', false,
 945                                    XMLDB_NOTNULL,XMLDB_SEQUENCE, null, null, null);
 946          $f = $table->addFieldInfo('name',  XMLDB_TYPE_CHAR,  '50', null,
 947                                    XMLDB_NOTNULL, NULL, null, null, null);
 948          $f = $table->addFieldInfo('display_name',  XMLDB_TYPE_CHAR,  '50', null,
 949                                    XMLDB_NOTNULL, NULL, null, null, null);
 950          $f = $table->addFieldInfo('xmlrpc_server_url',  XMLDB_TYPE_CHAR,  '255', null,
 951                                    XMLDB_NOTNULL, NULL, null, null, null);
 952          $f = $table->addFieldInfo('sso_land_url',  XMLDB_TYPE_CHAR,  '255', null,
 953                                    XMLDB_NOTNULL, NULL, null, null, null);
 954  
 955          // PK and indexes
 956          $table->addKeyInfo('primary', XMLDB_KEY_PRIMARY, array('id'));
 957          // Create the table
 958          $result = $result && create_table($table);
 959  
 960          // Insert initial applications (moodle and mahara)
 961          $application = new stdClass();
 962          $application->name                = 'moodle';
 963          $application->display_name        = 'Moodle';
 964          $application->xmlrpc_server_url   = '/mnet/xmlrpc/server.php';
 965          $application->sso_land_url        = '/auth/mnet/land.php';
 966          if ($result) {
 967              $newid  = insert_record('mnet_application', $application, false);
 968          }
 969  
 970          $application = new stdClass();
 971          $application->name                = 'mahara';
 972          $application->display_name        = 'Mahara';
 973          $application->xmlrpc_server_url   = '/api/xmlrpc/server.php';
 974          $application->sso_land_url        = '/auth/xmlrpc/land.php';
 975          $result = $result && insert_record('mnet_application', $application, false);
 976  
 977          // New mnet_host->applicationid field
 978          $table = new XMLDBTable('mnet_host');
 979          $field = new XMLDBField('applicationid');
 980          $field->setAttributes(XMLDB_TYPE_INTEGER, '1', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, $newid , 'last_log_id');
 981  
 982          $result = $result && add_field($table, $field);
 983  
 984      /// Define key applicationid (foreign) to be added to mnet_host
 985          $table = new XMLDBTable('mnet_host');
 986          $key = new XMLDBKey('applicationid');
 987          $key->setAttributes(XMLDB_KEY_FOREIGN, array('applicationid'), 'mnet_application', array('id'));
 988  
 989      /// Launch add key applicationid
 990          $result = $result && add_key($table, $key);
 991  
 992          upgrade_main_savepoint($result, 2007071400);
 993      }
 994  
 995      if ($result && $oldversion < 2007071607) {
 996          require_once($CFG->dirroot . '/question/upgrade.php');
 997          $result = $result && question_remove_rqp_qtype_config_string();
 998  
 999          upgrade_main_savepoint($result, 2007071607);
1000      }
1001  
1002      if ($result && $oldversion < 2007072200) {
1003  
1004  /// Remove all grade tables used in development phases - we need new empty tables for final gradebook upgrade
1005          $tables = array('grade_categories',
1006                          'grade_items',
1007                          'grade_calculations',
1008                          'grade_grades',
1009                          'grade_grades_raw',
1010                          'grade_grades_final',
1011                          'grade_grades_text',
1012                          'grade_outcomes',
1013                          'grade_outcomes_courses',
1014                          'grade_history',
1015                          'grade_import_newitem',
1016                          'grade_import_values');
1017  
1018          foreach ($tables as $table) {
1019              $table = new XMLDBTable($table);
1020              if (table_exists($table)) {
1021                  drop_table($table);
1022              }
1023          }
1024  
1025          $tables = array('grade_categories_history',
1026                          'grade_items_history',
1027                          'grade_grades_history',
1028                          'grade_grades_text_history',
1029                          'grade_scale_history',
1030                          'grade_outcomes_history');
1031  
1032          foreach ($tables as $table) {
1033              $table = new XMLDBTable($table);
1034              if (table_exists($table)) {
1035                  drop_table($table);
1036              }
1037          }
1038  
1039  
1040      /// Define table grade_outcomes to be created
1041          $table = new XMLDBTable('grade_outcomes');
1042  
1043      /// Adding fields to table grade_outcomes
1044          $table->addFieldInfo('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
1045          $table->addFieldInfo('courseid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null);
1046          $table->addFieldInfo('shortname', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, null, null);
1047          $table->addFieldInfo('fullname', XMLDB_TYPE_TEXT, 'small', null, XMLDB_NOTNULL, null, null, null, null);
1048          $table->addFieldInfo('scaleid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null);
1049          $table->addFieldInfo('description', XMLDB_TYPE_TEXT, 'small', null, null, null, null, null, null);
1050          $table->addFieldInfo('timecreated', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null);
1051          $table->addFieldInfo('timemodified', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null);
1052          $table->addFieldInfo('usermodified', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null);
1053  
1054      /// Adding keys to table grade_outcomes
1055          $table->addKeyInfo('primary', XMLDB_KEY_PRIMARY, array('id'));
1056          $table->addKeyInfo('courseid', XMLDB_KEY_FOREIGN, array('courseid'), 'course', array('id'));
1057          $table->addKeyInfo('scaleid', XMLDB_KEY_FOREIGN, array('scaleid'), 'scale', array('id'));
1058          $table->addKeyInfo('usermodified', XMLDB_KEY_FOREIGN, array('usermodified'), 'user', array('id'));
1059  
1060      /// Launch create table for grade_outcomes
1061          $result = $result && create_table($table);
1062  
1063  
1064      /// Define table grade_categories to be created
1065          $table = new XMLDBTable('grade_categories');
1066  
1067      /// Adding fields to table grade_categories
1068          $table->addFieldInfo('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
1069          $table->addFieldInfo('courseid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
1070          $table->addFieldInfo('parent', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null);
1071          $table->addFieldInfo('depth', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
1072          $table->addFieldInfo('path', XMLDB_TYPE_CHAR, '255', null, null, null, null, null, null);
1073          $table->addFieldInfo('fullname', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, null, null);
1074          $table->addFieldInfo('aggregation', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0');
1075          $table->addFieldInfo('keephigh', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0');
1076          $table->addFieldInfo('droplow', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0');
1077          $table->addFieldInfo('aggregateonlygraded', XMLDB_TYPE_INTEGER, '1', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
1078          $table->addFieldInfo('aggregateoutcomes', XMLDB_TYPE_INTEGER, '1', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
1079          $table->addFieldInfo('aggregatesubcats', XMLDB_TYPE_INTEGER, '1', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
1080          $table->addFieldInfo('timecreated', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
1081          $table->addFieldInfo('timemodified', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
1082  
1083      /// Adding keys to table grade_categories
1084          $table->addKeyInfo('primary', XMLDB_KEY_PRIMARY, array('id'));
1085          $table->addKeyInfo('courseid', XMLDB_KEY_FOREIGN, array('courseid'), 'course', array('id'));
1086          $table->addKeyInfo('parent', XMLDB_KEY_FOREIGN, array('parent'), 'grade_categories', array('id'));
1087  
1088      /// Launch create table for grade_categories
1089          $result = $result && create_table($table);
1090  
1091  
1092      /// Define table grade_items to be created
1093          $table = new XMLDBTable('grade_items');
1094  
1095      /// Adding fields to table grade_items
1096          $table->addFieldInfo('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
1097          $table->addFieldInfo('courseid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null);
1098          $table->addFieldInfo('categoryid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null);
1099          $table->addFieldInfo('itemname', XMLDB_TYPE_CHAR, '255', null, null, null, null, null, null);
1100          $table->addFieldInfo('itemtype', XMLDB_TYPE_CHAR, '30', null, XMLDB_NOTNULL, null, null, null, null);
1101          $table->addFieldInfo('itemmodule', XMLDB_TYPE_CHAR, '30', null, null, null, null, null, null);
1102          $table->addFieldInfo('iteminstance', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null);
1103          $table->addFieldInfo('itemnumber', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null);
1104          $table->addFieldInfo('iteminfo', XMLDB_TYPE_TEXT, 'medium', null, null, null, null, null, null);
1105          $table->addFieldInfo('idnumber', XMLDB_TYPE_CHAR, '255', null, null, null, null, null, null);
1106          $table->addFieldInfo('calculation', XMLDB_TYPE_TEXT, 'medium', null, null, null, null, null, null);
1107          $table->addFieldInfo('gradetype', XMLDB_TYPE_INTEGER, '4', null, XMLDB_NOTNULL, null, null, null, '1');
1108          $table->addFieldInfo('grademax', XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, null, null, '100');
1109          $table->addFieldInfo('grademin', XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, null, null, '0');
1110          $table->addFieldInfo('scaleid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null);
1111          $table->addFieldInfo('outcomeid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null);
1112          $table->addFieldInfo('gradepass', XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, null, null, '0');
1113          $table->addFieldInfo('multfactor', XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, null, null, '1.0');
1114          $table->addFieldInfo('plusfactor', XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, null, null, '0');
1115          $table->addFieldInfo('aggregationcoef', XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, null, null, '0');
1116          $table->addFieldInfo('sortorder', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0');
1117          $table->addFieldInfo('display', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0');
1118          $table->addFieldInfo('decimals', XMLDB_TYPE_INTEGER, '1', XMLDB_UNSIGNED, null, null, null, null, null);
1119          $table->addFieldInfo('hidden', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0');
1120          $table->addFieldInfo('locked', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0');
1121          $table->addFieldInfo('locktime', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
1122          $table->addFieldInfo('needsupdate', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0');
1123          $table->addFieldInfo('timecreated', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null);
1124          $table->addFieldInfo('timemodified', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null);
1125  
1126      /// Adding keys to table grade_items
1127          $table->addKeyInfo('primary', XMLDB_KEY_PRIMARY, array('id'));
1128          $table->addKeyInfo('courseid', XMLDB_KEY_FOREIGN, array('courseid'), 'course', array('id'));
1129          $table->addKeyInfo('categoryid', XMLDB_KEY_FOREIGN, array('categoryid'), 'grade_categories', array('id'));
1130          $table->addKeyInfo('scaleid', XMLDB_KEY_FOREIGN, array('scaleid'), 'scale', array('id'));
1131          $table->addKeyInfo('outcomeid', XMLDB_KEY_FOREIGN, array('outcomeid'), 'grade_outcomes', array('id'));
1132  
1133      /// Adding indexes to table grade_grades
1134          $table->addIndexInfo('locked-locktime', XMLDB_INDEX_NOTUNIQUE, array('locked', 'locktime'));
1135          $table->addIndexInfo('itemtype-needsupdate', XMLDB_INDEX_NOTUNIQUE, array('itemtype', 'needsupdate'));
1136          $table->addIndexInfo('gradetype', XMLDB_INDEX_NOTUNIQUE, array('gradetype'));
1137  
1138      /// Launch create table for grade_items
1139          $result = $result && create_table($table);
1140  
1141  
1142      /// Define table grade_grades to be created
1143          $table = new XMLDBTable('grade_grades');
1144  
1145      /// Adding fields to table grade_grades
1146          $table->addFieldInfo('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
1147          $table->addFieldInfo('itemid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
1148          $table->addFieldInfo('userid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
1149          $table->addFieldInfo('rawgrade', XMLDB_TYPE_NUMBER, '10, 5', null, null, null, null, null, null);
1150          $table->addFieldInfo('rawgrademax', XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, null, null, '100');
1151          $table->addFieldInfo('rawgrademin', XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, null, null, '0');
1152          $table->addFieldInfo('rawscaleid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null);
1153          $table->addFieldInfo('usermodified', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null);
1154          $table->addFieldInfo('finalgrade', XMLDB_TYPE_NUMBER, '10, 5', null, null, null, null, null, null);
1155          $table->addFieldInfo('hidden', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
1156          $table->addFieldInfo('locked', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
1157          $table->addFieldInfo('locktime', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
1158          $table->addFieldInfo('exported', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
1159          $table->addFieldInfo('overridden', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
1160          $table->addFieldInfo('excluded', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
1161          $table->addFieldInfo('feedback', XMLDB_TYPE_TEXT, 'medium', null, null, null, null, null, null);
1162          $table->addFieldInfo('feedbackformat', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
1163          $table->addFieldInfo('information', XMLDB_TYPE_TEXT, 'medium', null, null, null, null, null, null);
1164          $table->addFieldInfo('informationformat', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
1165          $table->addFieldInfo('timecreated', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null);
1166          $table->addFieldInfo('timemodified', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null);
1167  
1168      /// Adding keys to table grade_grades
1169          $table->addKeyInfo('primary', XMLDB_KEY_PRIMARY, array('id'));
1170          $table->addKeyInfo('itemid', XMLDB_KEY_FOREIGN, array('itemid'), 'grade_items', array('id'));
1171          $table->addKeyInfo('userid', XMLDB_KEY_FOREIGN, array('userid'), 'user', array('id'));
1172          $table->addKeyInfo('rawscaleid', XMLDB_KEY_FOREIGN, array('rawscaleid'), 'scale', array('id'));
1173          $table->addKeyInfo('usermodified', XMLDB_KEY_FOREIGN, array('usermodified'), 'user', array('id'));
1174  
1175      /// Adding indexes to table grade_grades
1176          $table->addIndexInfo('locked-locktime', XMLDB_INDEX_NOTUNIQUE, array('locked', 'locktime'));
1177  
1178      /// Launch create table for grade_grades
1179          $result = $result && create_table($table);
1180  
1181  
1182      /// Define table grade_outcomes_history to be created
1183          $table = new XMLDBTable('grade_outcomes_history');
1184  
1185      /// Adding fields to table grade_outcomes_history
1186          $table->addFieldInfo('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
1187          $table->addFieldInfo('action', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
1188          $table->addFieldInfo('oldid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
1189          $table->addFieldInfo('source', XMLDB_TYPE_CHAR, '255', null, null, null, null, null, null);
1190          $table->addFieldInfo('timemodified', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null);
1191          $table->addFieldInfo('loggeduser', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null);
1192          $table->addFieldInfo('courseid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null);
1193          $table->addFieldInfo('shortname', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, null, null);
1194          $table->addFieldInfo('fullname', XMLDB_TYPE_TEXT, 'small', null, XMLDB_NOTNULL, null, null, null, null);
1195          $table->addFieldInfo('scaleid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null);
1196          $table->addFieldInfo('description', XMLDB_TYPE_TEXT, 'small', null, null, null, null, null, null);
1197  
1198      /// Adding keys to table grade_outcomes_history
1199          $table->addKeyInfo('primary', XMLDB_KEY_PRIMARY, array('id'));
1200          $table->addKeyInfo('oldid', XMLDB_KEY_FOREIGN, array('oldid'), 'grade_outcomes', array('id'));
1201          $table->addKeyInfo('courseid', XMLDB_KEY_FOREIGN, array('courseid'), 'course', array('id'));
1202          $table->addKeyInfo('scaleid', XMLDB_KEY_FOREIGN, array('scaleid'), 'scale', array('id'));
1203          $table->addKeyInfo('loggeduser', XMLDB_KEY_FOREIGN, array('loggeduser'), 'user', array('id'));
1204  
1205      /// Adding indexes to table grade_outcomes_history
1206          $table->addIndexInfo('action', XMLDB_INDEX_NOTUNIQUE, array('action'));
1207  
1208      /// Launch create table for grade_outcomes_history
1209          $result = $result && create_table($table);
1210  
1211  
1212      /// Define table grade_categories_history to be created
1213          $table = new XMLDBTable('grade_categories_history');
1214  
1215      /// Adding fields to table grade_categories_history
1216          $table->addFieldInfo('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
1217          $table->addFieldInfo('action', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
1218          $table->addFieldInfo('oldid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
1219          $table->addFieldInfo('source', XMLDB_TYPE_CHAR, '255', null, null, null, null, null, null);
1220          $table->addFieldInfo('timemodified', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null);
1221          $table->addFieldInfo('loggeduser', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null);
1222          $table->addFieldInfo('courseid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
1223          $table->addFieldInfo('parent', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null);
1224          $table->addFieldInfo('depth', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
1225          $table->addFieldInfo('path', XMLDB_TYPE_CHAR, '255', null, null, null, null, null, null);
1226          $table->addFieldInfo('fullname', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, null, null);
1227          $table->addFieldInfo('aggregation', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0');
1228          $table->addFieldInfo('keephigh', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0');
1229          $table->addFieldInfo('droplow', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0');
1230          $table->addFieldInfo('aggregateonlygraded', XMLDB_TYPE_INTEGER, '1', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
1231          $table->addFieldInfo('aggregateoutcomes', XMLDB_TYPE_INTEGER, '1', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
1232          $table->addFieldInfo('aggregatesubcats', XMLDB_TYPE_INTEGER, '1', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
1233  
1234      /// Adding keys to table grade_categories_history
1235          $table->addKeyInfo('primary', XMLDB_KEY_PRIMARY, array('id'));
1236          $table->addKeyInfo('oldid', XMLDB_KEY_FOREIGN, array('oldid'), 'grade_categories', array('id'));
1237          $table->addKeyInfo('courseid', XMLDB_KEY_FOREIGN, array('courseid'), 'course', array('id'));
1238          $table->addKeyInfo('parent', XMLDB_KEY_FOREIGN, array('parent'), 'grade_categories', array('id'));
1239          $table->addKeyInfo('loggeduser', XMLDB_KEY_FOREIGN, array('loggeduser'), 'user', array('id'));
1240  
1241      /// Adding indexes to table grade_categories_history
1242          $table->addIndexInfo('action', XMLDB_INDEX_NOTUNIQUE, array('action'));
1243  
1244      /// Launch create table for grade_categories_history
1245          $result = $result && create_table($table);
1246  
1247  
1248      /// Define table grade_items_history to be created
1249          $table = new XMLDBTable('grade_items_history');
1250  
1251      /// Adding fields to table grade_items_history
1252          $table->addFieldInfo('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
1253          $table->addFieldInfo('action', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
1254          $table->addFieldInfo('oldid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
1255          $table->addFieldInfo('source', XMLDB_TYPE_CHAR, '255', null, null, null, null, null, null);
1256          $table->addFieldInfo('timemodified', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null);
1257          $table->addFieldInfo('loggeduser', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null);
1258          $table->addFieldInfo('courseid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null);
1259          $table->addFieldInfo('categoryid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null);
1260          $table->addFieldInfo('itemname', XMLDB_TYPE_CHAR, '255', null, null, null, null, null, null);
1261          $table->addFieldInfo('itemtype', XMLDB_TYPE_CHAR, '30', null, XMLDB_NOTNULL, null, null, null, null);
1262          $table->addFieldInfo('itemmodule', XMLDB_TYPE_CHAR, '30', null, null, null, null, null, null);
1263          $table->addFieldInfo('iteminstance', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null);
1264          $table->addFieldInfo('itemnumber', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null);
1265          $table->addFieldInfo('iteminfo', XMLDB_TYPE_TEXT, 'medium', null, null, null, null, null, null);
1266          $table->addFieldInfo('idnumber', XMLDB_TYPE_CHAR, '255', null, null, null, null, null, null);
1267          $table->addFieldInfo('calculation', XMLDB_TYPE_TEXT, 'medium', null, null, null, null, null, null);
1268          $table->addFieldInfo('gradetype', XMLDB_TYPE_INTEGER, '4', null, XMLDB_NOTNULL, null, null, null, '1');
1269          $table->addFieldInfo('grademax', XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, null, null, '100');
1270          $table->addFieldInfo('grademin', XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, null, null, '0');
1271          $table->addFieldInfo('scaleid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null);
1272          $table->addFieldInfo('outcomeid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null);
1273          $table->addFieldInfo('gradepass', XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, null, null, '0');
1274          $table->addFieldInfo('multfactor', XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, null, null, '1.0');
1275          $table->addFieldInfo('plusfactor', XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, null, null, '0');
1276          $table->addFieldInfo('aggregationcoef', XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, null, null, '0');
1277          $table->addFieldInfo('sortorder', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0');
1278          $table->addFieldInfo('display', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0');
1279          $table->addFieldInfo('decimals', XMLDB_TYPE_INTEGER, '1', XMLDB_UNSIGNED, null, null, null, null, null);
1280          $table->addFieldInfo('hidden', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0');
1281          $table->addFieldInfo('locked', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0');
1282          $table->addFieldInfo('locktime', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
1283          $table->addFieldInfo('needsupdate', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0');
1284  
1285      /// Adding keys to table grade_items_history
1286          $table->addKeyInfo('primary', XMLDB_KEY_PRIMARY, array('id'));
1287          $table->addKeyInfo('oldid', XMLDB_KEY_FOREIGN, array('oldid'), 'grade_items', array('id'));
1288          $table->addKeyInfo('courseid', XMLDB_KEY_FOREIGN, array('courseid'), 'course', array('id'));
1289          $table->addKeyInfo('categoryid', XMLDB_KEY_FOREIGN, array('categoryid'), 'grade_categories', array('id'));
1290          $table->addKeyInfo('scaleid', XMLDB_KEY_FOREIGN, array('scaleid'), 'scale', array('id'));
1291          $table->addKeyInfo('outcomeid', XMLDB_KEY_FOREIGN, array('outcomeid'), 'grade_outcomes', array('id'));
1292          $table->addKeyInfo('loggeduser', XMLDB_KEY_FOREIGN, array('loggeduser'), 'user', array('id'));
1293  
1294      /// Adding indexes to table grade_items_history
1295          $table->addIndexInfo('action', XMLDB_INDEX_NOTUNIQUE, array('action'));
1296  
1297      /// Launch create table for grade_items_history
1298          $result = $result && create_table($table);
1299  
1300  
1301      /// Define table grade_grades_history to be created
1302          $table = new XMLDBTable('grade_grades_history');
1303  
1304      /// Adding fields to table grade_grades_history
1305          $table->addFieldInfo('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
1306          $table->addFieldInfo('action', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
1307          $table->addFieldInfo('oldid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
1308          $table->addFieldInfo('source', XMLDB_TYPE_CHAR, '255', null, null, null, null, null, null);
1309          $table->addFieldInfo('timemodified', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null);
1310          $table->addFieldInfo('loggeduser', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null);
1311          $table->addFieldInfo('itemid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
1312          $table->addFieldInfo('userid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
1313          $table->addFieldInfo('rawgrade', XMLDB_TYPE_NUMBER, '10, 5', null, null, null, null, null, null);
1314          $table->addFieldInfo('rawgrademax', XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, null, null, '100');
1315          $table->addFieldInfo('rawgrademin', XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, null, null, '0');
1316          $table->addFieldInfo('rawscaleid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null);
1317          $table->addFieldInfo('usermodified', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null);
1318          $table->addFieldInfo('finalgrade', XMLDB_TYPE_NUMBER, '10, 5', null, null, null, null, null, null);
1319          $table->addFieldInfo('hidden', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
1320          $table->addFieldInfo('locked', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0');
1321          $table->