Merge branch 'MDL-51580' of git://github.com/stronk7/moodle
authorDavid Monllao <davidm@moodle.com>
Mon, 15 Feb 2016 21:03:28 +0000 (05:03 +0800)
committerDavid Monllao <davidm@moodle.com>
Mon, 15 Feb 2016 21:03:28 +0000 (05:03 +0800)
116 files changed:
admin/environment.xml
admin/tool/customlang/db/upgrade.php
admin/tool/log/db/upgrade.php
admin/tool/log/store/database/db/upgrade.php
admin/tool/log/store/standard/db/upgrade.php
auth/cas/db/upgrade.php
auth/ldap/db/upgrade.php
auth/manual/db/upgrade.php
auth/mnet/db/upgrade.php
blocks/community/db/upgrade.php
blocks/completionstatus/db/upgrade.php
blocks/course_summary/db/upgrade.php
blocks/html/db/upgrade.php
blocks/navigation/db/upgrade.php
blocks/recent_activity/db/upgrade.php
blocks/section_links/db/upgrade.php
blocks/selfcompletion/db/upgrade.php
blocks/settings/db/upgrade.php
enrol/database/db/upgrade.php
enrol/flatfile/db/upgrade.php
enrol/guest/db/upgrade.php
enrol/imsenterprise/db/upgrade.php
enrol/manual/db/upgrade.php
enrol/mnet/db/upgrade.php
enrol/paypal/db/upgrade.php
enrol/self/db/upgrade.php
filter/mathjaxloader/db/upgrade.php
filter/mediaplugin/db/upgrade.php
filter/tex/db/upgrade.php
grade/grading/form/rubric/db/upgrade.php
lang/en/question.php
lib/db/upgrade.php
lib/db/upgradelib.php
lib/editor/atto/db/upgrade.php
lib/editor/tinymce/db/upgrade.php
lib/editor/tinymce/plugins/spellchecker/db/upgrade.php
lib/tests/upgradelib_test.php
lib/upgrade.txt
lib/upgradelib.php
message/output/email/db/upgrade.php
message/output/jabber/db/upgrade.php
message/output/popup/db/upgrade.php
mod/assign/db/upgrade.php
mod/assign/feedback/comments/db/upgrade.php
mod/assign/feedback/editpdf/db/upgrade.php
mod/assign/feedback/file/db/upgrade.php
mod/assign/submission/comments/db/upgrade.php
mod/assign/submission/file/db/upgrade.php
mod/assign/submission/onlinetext/db/upgrade.php
mod/assignment/db/upgrade.php
mod/assignment/db/upgradelib.php [deleted file]
mod/assignment/lang/en/assignment.php
mod/book/db/upgrade.php
mod/book/db/upgradelib.php [deleted file]
mod/book/upgrade.txt
mod/chat/db/upgrade.php
mod/choice/db/upgrade.php
mod/data/db/upgrade.php
mod/feedback/db/upgrade.php
mod/folder/db/upgrade.php
mod/forum/db/upgrade.php
mod/glossary/db/upgrade.php
mod/imscp/db/upgrade.php
mod/label/db/upgrade.php
mod/lesson/db/upgrade.php
mod/lti/db/upgrade.php
mod/page/db/upgrade.php
mod/quiz/db/upgrade.php
mod/quiz/report/overview/db/upgrade.php
mod/quiz/report/statistics/db/upgrade.php
mod/resource/db/upgrade.php
mod/scorm/db/upgrade.php
mod/survey/db/upgrade.php
mod/url/db/upgrade.php
mod/wiki/db/upgrade.php
mod/workshop/db/upgrade.php
mod/workshop/form/accumulative/db/upgrade.php
mod/workshop/form/comments/db/upgrade.php
mod/workshop/form/numerrors/db/upgrade.php
mod/workshop/form/rubric/db/upgrade.php
portfolio/boxnet/db/upgrade.php
portfolio/boxnet/db/upgradelib.php [deleted file]
portfolio/boxnet/lang/en/portfolio_boxnet.php
portfolio/googledocs/db/upgrade.php
portfolio/googledocs/db/upgradelib.php [deleted file]
portfolio/googledocs/lang/en/portfolio_googledocs.php
portfolio/picasa/db/upgrade.php
portfolio/picasa/db/upgradelib.php [deleted file]
portfolio/picasa/lang/en/portfolio_picasa.php
portfolio/upgrade.txt
question/behaviour/manualgraded/db/upgrade.php
question/type/calculated/db/upgrade.php
question/type/essay/db/upgrade.php
question/type/match/db/upgrade.php
question/type/multianswer/db/upgrade.php
question/type/multichoice/db/upgrade.php
question/type/numerical/db/upgrade.php
question/type/random/db/upgrade.php
question/type/randomsamatch/db/upgrade.php
question/type/shortanswer/db/upgrade.php
question/type/upgrade.txt
repository/alfresco/db/upgrade.php
repository/alfresco/db/upgradelib.php [deleted file]
repository/alfresco/lang/en/repository_alfresco.php
repository/boxnet/db/upgrade.php
repository/boxnet/db/upgradelib.php [deleted file]
repository/boxnet/lang/en/repository_boxnet.php
repository/dropbox/db/upgrade.php
repository/googledocs/db/upgrade.php
repository/googledocs/db/upgradelib.php [deleted file]
repository/googledocs/lang/en/repository_googledocs.php
repository/picasa/db/upgrade.php
repository/picasa/db/upgradelib.php [deleted file]
repository/picasa/lang/en/repository_picasa.php
repository/upgrade.txt
theme/more/db/upgrade.php

index 4bf5798..43bc5e4 100644 (file)
       </CUSTOM_CHECK>
     </CUSTOM_CHECKS>
   </MOODLE>
+  <MOODLE version="3.1" requires="2.7">
+    <UNICODE level="required">
+      <FEEDBACK>
+        <ON_ERROR message="unicoderequired" />
+      </FEEDBACK>
+    </UNICODE>
+    <DATABASE level="required">
+      <VENDOR name="mariadb" version="5.5.31" />
+      <VENDOR name="mysql" version="5.5.31" />
+      <VENDOR name="postgres" version="9.1" />
+      <VENDOR name="mssql" version="10.0" />
+      <VENDOR name="oracle" version="10.2" />
+    </DATABASE>
+    <PHP version="5.4.4" level="required">
+    </PHP>
+    <PCREUNICODE level="optional">
+      <FEEDBACK>
+        <ON_CHECK message="pcreunicodewarning" />
+      </FEEDBACK>
+    </PCREUNICODE>
+    <PHP_EXTENSIONS>
+      <PHP_EXTENSION name="iconv" level="required">
+        <FEEDBACK>
+          <ON_ERROR message="iconvrequired" />
+        </FEEDBACK>
+      </PHP_EXTENSION>
+      <PHP_EXTENSION name="mbstring" level="optional">
+        <FEEDBACK>
+          <ON_CHECK message="mbstringrecommended" />
+        </FEEDBACK>
+      </PHP_EXTENSION>
+      <PHP_EXTENSION name="curl" level="required">
+        <FEEDBACK>
+          <ON_ERROR message="curlrequired" />
+        </FEEDBACK>
+      </PHP_EXTENSION>
+      <PHP_EXTENSION name="openssl" level="optional">
+        <FEEDBACK>
+          <ON_CHECK message="opensslrecommended" />
+        </FEEDBACK>
+      </PHP_EXTENSION>
+      <PHP_EXTENSION name="tokenizer" level="optional">
+        <FEEDBACK>
+          <ON_CHECK message="tokenizerrecommended" />
+        </FEEDBACK>
+      </PHP_EXTENSION>
+      <PHP_EXTENSION name="xmlrpc" level="optional">
+        <FEEDBACK>
+          <ON_CHECK message="xmlrpcrecommended" />
+        </FEEDBACK>
+      </PHP_EXTENSION>
+      <PHP_EXTENSION name="soap" level="optional">
+        <FEEDBACK>
+          <ON_CHECK message="soaprecommended" />
+        </FEEDBACK>
+      </PHP_EXTENSION>
+      <PHP_EXTENSION name="ctype" level="required">
+        <FEEDBACK>
+          <ON_ERROR message="ctyperequired" />
+        </FEEDBACK>
+      </PHP_EXTENSION>
+      <PHP_EXTENSION name="zip" level="required">
+        <FEEDBACK>
+          <ON_ERROR message="ziprequired" />
+        </FEEDBACK>
+      </PHP_EXTENSION>
+      <PHP_EXTENSION name="zlib" level="required">
+      </PHP_EXTENSION>
+      <PHP_EXTENSION name="gd" level="required">
+        <FEEDBACK>
+          <ON_ERROR message="gdrequired" />
+        </FEEDBACK>
+      </PHP_EXTENSION>
+      <PHP_EXTENSION name="simplexml" level="required">
+        <FEEDBACK>
+          <ON_ERROR message="simplexmlrequired" />
+        </FEEDBACK>
+      </PHP_EXTENSION>
+      <PHP_EXTENSION name="spl" level="required">
+        <FEEDBACK>
+          <ON_ERROR message="splrequired" />
+        </FEEDBACK>
+      </PHP_EXTENSION>
+      <PHP_EXTENSION name="pcre" level="required">
+      </PHP_EXTENSION>
+      <PHP_EXTENSION name="dom" level="required">
+      </PHP_EXTENSION>
+      <PHP_EXTENSION name="xml" level="required">
+      </PHP_EXTENSION>
+      <PHP_EXTENSION name="intl" level="optional">
+        <FEEDBACK>
+          <ON_CHECK message="intlrecommended" />
+        </FEEDBACK>
+      </PHP_EXTENSION>
+      <PHP_EXTENSION name="json" level="required">
+      </PHP_EXTENSION>
+      <PHP_EXTENSION name="hash" level="required"/>
+    </PHP_EXTENSIONS>
+    <PHP_SETTINGS>
+      <PHP_SETTING name="memory_limit" value="96M" level="required">
+        <FEEDBACK>
+          <ON_ERROR message="settingmemorylimit" />
+        </FEEDBACK>
+      </PHP_SETTING>
+      <PHP_SETTING name="file_uploads" value="1" level="optional">
+        <FEEDBACK>
+          <ON_CHECK message="settingfileuploads" />
+        </FEEDBACK>
+      </PHP_SETTING>
+      <PHP_SETTING name="opcache.enable" value="1" level="optional">
+        <FEEDBACK>
+          <ON_CHECK message="opcacherecommended" />
+        </FEEDBACK>
+      </PHP_SETTING>
+    </PHP_SETTINGS>
+    <CUSTOM_CHECKS>
+      <CUSTOM_CHECK file="lib/upgradelib.php" function="check_database_storage_engine" level="required">
+        <FEEDBACK>
+          <ON_ERROR message="unsupporteddbstorageengine" />
+        </FEEDBACK>
+      </CUSTOM_CHECK>
+      <CUSTOM_CHECK file="question/engine/upgrade/upgradelib.php" function="quiz_attempts_upgraded" level="required">
+        <FEEDBACK>
+          <ON_ERROR message="quizattemptsupgradedmessage" />
+        </FEEDBACK>
+      </CUSTOM_CHECK>
+      <CUSTOM_CHECK file="lib/upgradelib.php" function="check_slasharguments" level="optional">
+        <FEEDBACK>
+          <ON_CHECK message="slashargumentswarning" />
+        </FEEDBACK>
+      </CUSTOM_CHECK>
+      <CUSTOM_CHECK file="lib/upgradelib.php" function="check_database_tables_row_format" level="optional">
+        <FEEDBACK>
+          <ON_CHECK message="unsupporteddbtablerowformat" />
+        </FEEDBACK>
+      </CUSTOM_CHECK>
+    </CUSTOM_CHECKS>
+  </MOODLE>
 </COMPATIBILITY_MATRIX>
index 01f87e9..b3c5c03 100644 (file)
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
-function xmldb_tool_customlang_upgrade($oldversion) {
-    global $CFG, $DB, $OUTPUT;
-
-    $dbman = $DB->get_manager();
-
-
-    // Moodle v2.3.0 release upgrade line
-    // Put any upgrade step following this
-
-
-    // Moodle v2.4.0 release upgrade line
-    // Put any upgrade step following this
-
+defined('MOODLE_INTERNAL') || die();
 
-    // Moodle v2.5.0 release upgrade line.
-    // Put any upgrade step following this.
-
-
-    // Moodle v2.6.0 release upgrade line.
-    // Put any upgrade step following this.
-
-    // Moodle v2.7.0 release upgrade line.
-    // Put any upgrade step following this.
+function xmldb_tool_customlang_upgrade($oldversion) {
+    global $CFG;
 
     // Moodle v2.8.0 release upgrade line.
     // Put any upgrade step following this.
index 2a4eab3..ef219e0 100644 (file)
@@ -31,20 +31,7 @@ defined('MOODLE_INTERNAL') || die();
  * @return bool always true
  */
 function xmldb_tool_log_upgrade($oldversion) {
-    global $CFG, $DB, $OUTPUT;
-
-    $dbman = $DB->get_manager();
-
-    if ($oldversion < 2014040600) {
-        // Reset logging defaults in dev branches,
-        // in production upgrade the install.php is executed instead.
-        require_once(__DIR__ . '/install.php');
-        xmldb_tool_log_install();
-        upgrade_plugin_savepoint(true, 2014040600, 'tool', 'log');
-    }
-
-    // Moodle v2.7.0 release upgrade line.
-    // Put any upgrade step following this.
+    global $CFG;
 
     // Moodle v2.8.0 release upgrade line.
     // Put any upgrade step following this.
index 565efed..dc92035 100644 (file)
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
-function xmldb_logstore_database_upgrade($oldversion) {
-
-    if ($oldversion < 2014041700) {
-        // Clean up old config.
-        unset_config('excludelevels', 'logstore_database');
-        unset_config('excludeactions', 'logstore_database');
-
-        // Savepoint reached.
-        upgrade_plugin_savepoint(true, 2014041700, 'logstore', 'database');
-    }
+defined('MOODLE_INTERNAL') || die();
 
-    // Moodle v2.7.0 release upgrade line.
-    // Put any upgrade step following this.
+function xmldb_logstore_database_upgrade($oldversion) {
+    global $CFG;
 
     // Moodle v2.8.0 release upgrade line.
     // Put any upgrade step following this.
index 9b4247b..b844b62 100644 (file)
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
-function xmldb_logstore_standard_upgrade($oldversion) {
-    global $CFG, $DB;
-
-    $dbman = $DB->get_manager();
-
-    if ($oldversion < 2014032000) {
-
-        // Define field anonymous to be added to logstore_standard_log.
-        $table = new xmldb_table('logstore_standard_log');
-        $field = new xmldb_field('anonymous', XMLDB_TYPE_INTEGER, '1', null, XMLDB_NOTNULL, null, '0', 'relateduserid');
-
-        // Conditionally launch add field anonymous.
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        // Standard savepoint reached.
-        upgrade_plugin_savepoint(true, 2014032000, 'logstore', 'standard');
-    }
-
-    if ($oldversion < 2014041500) {
-
-        // Define index contextid-component (not unique) to be dropped form logstore_standard_log.
-        $table = new xmldb_table('logstore_standard_log');
-        $index = new xmldb_index('contextid-component', XMLDB_INDEX_NOTUNIQUE, array('contextid', 'component'));
-
-        // Conditionally launch drop index contextid-component.
-        if ($dbman->index_exists($table, $index)) {
-            $dbman->drop_index($table, $index);
-        }
-
-        // Define index courseid (not unique) to be dropped form logstore_standard_log.
-        $table = new xmldb_table('logstore_standard_log');
-        $index = new xmldb_index('courseid', XMLDB_INDEX_NOTUNIQUE, array('courseid'));
-
-        // Conditionally launch drop index courseid.
-        if ($dbman->index_exists($table, $index)) {
-            $dbman->drop_index($table, $index);
-        }
-
-        // Define index eventname (not unique) to be dropped form logstore_standard_log.
-        $table = new xmldb_table('logstore_standard_log');
-        $index = new xmldb_index('eventname', XMLDB_INDEX_NOTUNIQUE, array('eventname'));
+defined('MOODLE_INTERNAL') || die();
 
-        // Conditionally launch drop index eventname.
-        if ($dbman->index_exists($table, $index)) {
-            $dbman->drop_index($table, $index);
-        }
-
-        // Define index crud (not unique) to be dropped form logstore_standard_log.
-        $table = new xmldb_table('logstore_standard_log');
-        $index = new xmldb_index('crud', XMLDB_INDEX_NOTUNIQUE, array('crud'));
-
-        // Conditionally launch drop index crud.
-        if ($dbman->index_exists($table, $index)) {
-            $dbman->drop_index($table, $index);
-        }
-
-        // Define index edulevel (not unique) to be dropped form logstore_standard_log.
-        $table = new xmldb_table('logstore_standard_log');
-        $index = new xmldb_index('edulevel', XMLDB_INDEX_NOTUNIQUE, array('edulevel'));
-
-        // Conditionally launch drop index edulevel.
-        if ($dbman->index_exists($table, $index)) {
-            $dbman->drop_index($table, $index);
-        }
-
-        // Define index course-time (not unique) to be added to logstore_standard_log.
-        $table = new xmldb_table('logstore_standard_log');
-        $index = new xmldb_index('course-time', XMLDB_INDEX_NOTUNIQUE, array('courseid', 'anonymous', 'timecreated'));
-
-        // Conditionally launch add index course-time.
-        if (!$dbman->index_exists($table, $index)) {
-            $dbman->add_index($table, $index);
-        }
-
-        // Define index user-module (not unique) to be added to logstore_standard_log.
-        $table = new xmldb_table('logstore_standard_log');
-        $index = new xmldb_index('user-module', XMLDB_INDEX_NOTUNIQUE, array('userid', 'contextlevel', 'contextinstanceid', 'crud', 'edulevel', 'timecreated'));
-
-        // Conditionally launch add index user-module.
-        if (!$dbman->index_exists($table, $index)) {
-            $dbman->add_index($table, $index);
-        }
-
-        // Standard savepoint reached.
-        upgrade_plugin_savepoint(true, 2014041500, 'logstore', 'standard');
-    }
-
-    // Moodle v2.7.0 release upgrade line.
-    // Put any upgrade step following this.
+function xmldb_logstore_standard_upgrade($oldversion) {
+    global $CFG;
 
     // Moodle v2.8.0 release upgrade line.
     // Put any upgrade step following this.
index bca88a4..d421185 100644 (file)
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
+defined('MOODLE_INTERNAL') || die();
+
 /**
  * @param int $oldversion the version we are upgrading from
  * @return bool result
  */
 function xmldb_auth_cas_upgrade($oldversion) {
-
-    // Moodle v2.5.0 release upgrade line
-    // Put any upgrade step following this
-
-    // MDL-39323 New setting in 2.5, make sure it's defined.
-    if ($oldversion < 2013052100) {
-        if (get_config('start_tls', 'auth/cas') === false) {
-            set_config('start_tls', 0, 'auth/cas');
-        }
-        upgrade_plugin_savepoint(true, 2013052100, 'auth', 'cas');
-    }
-
-    if ($oldversion < 2013091700) {
-        // The value of the phpCAS language constants has changed from
-        // 'langname' to 'CAS_Languages_Langname'.
-        if ($cas_language = get_config('auth/cas', 'language')) {
-            set_config('language', 'CAS_Languages_'.ucfirst($cas_language), 'auth/cas');
-        }
-
-        upgrade_plugin_savepoint(true, 2013091700, 'auth', 'cas');
-    }
-
-    // Moodle v2.6.0 release upgrade line.
-    // Put any upgrade step following this.
-
-    // Moodle v2.7.0 release upgrade line.
-    // Put any upgrade step following this.
+    global $CFG, $DB;
 
     // Moodle v2.8.0 release upgrade line.
     // Put any upgrade step following this.
 
     if ($oldversion < 2014111001) {
-        global $DB;
         // From now on the default LDAP objectClass setting for AD has been changed, from 'user' to '(samaccounttype=805306368)'.
         if (is_enabled_auth('cas')
                 && ($DB->get_field('config_plugins', 'value', array('name' => 'user_type', 'plugin' => 'auth/cas')) === 'ad')
index 3a320e3..762815c 100644 (file)
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
+defined('MOODLE_INTERNAL') || die();
+
 /**
  * @param int $oldversion the version we are upgrading from
  * @return bool result
  */
 function xmldb_auth_ldap_upgrade($oldversion) {
-
-    // Moodle v2.5.0 release upgrade line
-    // Put any upgrade step following this
-
-    // MDL-39323 New setting in 2.5, make sure it's defined.
-    if ($oldversion < 2013052100) {
-        if (get_config('start_tls', 'auth/ldap') === false) {
-            set_config('start_tls', 0, 'auth/ldap');
-        }
-        upgrade_plugin_savepoint(true, 2013052100, 'auth', 'ldap');
-    }
-
-    // Moodle v2.6.0 release upgrade line.
-    // Put any upgrade step following this.
-
-    // Moodle v2.7.0 release upgrade line.
-    // Put any upgrade step following this.
+    global $CFG, $DB;
 
     // Moodle v2.8.0 release upgrade line.
     // Put any upgrade step following this.
 
     if ($oldversion < 2014111001) {
-        global $DB;
         // From now on the default LDAP objectClass setting for AD has been changed, from 'user' to '(samaccounttype=805306368)'.
         if (is_enabled_auth('ldap')
                 && ($DB->get_field('config_plugins', 'value', array('name' => 'user_type', 'plugin' => 'auth/ldap')) === 'ad')
index 3039953..3c0ae55 100644 (file)
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
+defined('MOODLE_INTERNAL') || die();
+
 /**
  * @param int $oldversion the version we are upgrading from
  * @return bool result
  */
 function xmldb_auth_manual_upgrade($oldversion) {
-    global $CFG, $DB, $OUTPUT;
-
-    $dbman = $DB->get_manager();
-
-
-    // Moodle v2.3.0 release upgrade line
-    // Put any upgrade step following this
-
-
-    // Moodle v2.4.0 release upgrade line
-    // Put any upgrade step following this
-
-
-    // Moodle v2.5.0 release upgrade line.
-    // Put any upgrade step following this.
-
-
-    // Moodle v2.6.0 release upgrade line.
-    // Put any upgrade step following this.
-
-    // Moodle v2.7.0 release upgrade line.
-    // Put any upgrade step following this.
+    global $CFG;
 
     // Moodle v2.8.0 release upgrade line.
     // Put any upgrade step following this.
index 0090939..bfdef15 100644 (file)
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
+defined('MOODLE_INTERNAL') || die();
+
 /**
  * @param int $oldversion the version we are upgrading from
  * @return bool result
  */
 function xmldb_auth_mnet_upgrade($oldversion) {
-    global $CFG, $DB, $OUTPUT;
-
-    $dbman = $DB->get_manager();
-
-
-    // Moodle v2.3.0 release upgrade line
-    // Put any upgrade step following this
-
-
-    // Moodle v2.4.0 release upgrade line
-    // Put any upgrade step following this
-
-
-    // Moodle v2.5.0 release upgrade line.
-    // Put any upgrade step following this.
-
-
-    // Moodle v2.6.0 release upgrade line.
-    // Put any upgrade step following this.
-
-    // Moodle v2.7.0 release upgrade line.
-    // Put any upgrade step following this.
+    global $CFG;
 
     // Moodle v2.8.0 release upgrade line.
     // Put any upgrade step following this.
index bcc82dc..3a3e7b1 100644 (file)
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
+defined('MOODLE_INTERNAL') || die();
+
 /**
  *
  * @param int $oldversion
- * @param object $block
  */
 function xmldb_block_community_upgrade($oldversion) {
-    global $CFG, $DB;
-
-    // Moodle v2.3.0 release upgrade line
-    // Put any upgrade step following this
-
-
-    // Moodle v2.4.0 release upgrade line
-    // Put any upgrade step following this
-
-
-    // Moodle v2.5.0 release upgrade line.
-    // Put any upgrade step following this.
-
-
-    // Moodle v2.6.0 release upgrade line.
-    // Put any upgrade step following this.
-
-    // Moodle v2.7.0 release upgrade line.
-    // Put any upgrade step following this.
+    global $CFG;
 
     // Moodle v2.8.0 release upgrade line.
     // Put any upgrade step following this.
index 070ebcc..f44773a 100644 (file)
@@ -37,6 +37,8 @@
  * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
+defined('MOODLE_INTERNAL') || die();
+
 /**
  * Handles upgrading instances of this block.
  *
  * @param object $block
  */
 function xmldb_block_completionstatus_upgrade($oldversion, $block) {
-    global $DB;
-
-    // Moodle v2.4.0 release upgrade line
-    // Put any upgrade step following this.
-
-    if ($oldversion < 2012112901) {
-        // Get the instances of this block.
-        if ($blocks = $DB->get_records('block_instances', array('blockname' => 'completionstatus', 'pagetypepattern' => 'my-index'))) {
-            // Loop through and remove them from the My Moodle page.
-            foreach ($blocks as $block) {
-                blocks_delete_instance($block);
-            }
-        }
-        // Savepoint reached.
-        upgrade_block_savepoint(true, 2012112901, 'completionstatus');
-    }
-    // Moodle v2.5.0 release upgrade line.
-    // Put any upgrade step following this.
-
-
-    // Moodle v2.6.0 release upgrade line.
-    // Put any upgrade step following this.
-
-    // Moodle v2.7.0 release upgrade line.
-    // Put any upgrade step following this.
+    global $CFG;
 
     // Moodle v2.8.0 release upgrade line.
     // Put any upgrade step following this.
@@ -80,4 +58,4 @@ function xmldb_block_completionstatus_upgrade($oldversion, $block) {
     // Put any upgrade step following this.
 
     return true;
-}
\ No newline at end of file
+}
index 0c1549e..1678a1b 100644 (file)
@@ -37,6 +37,8 @@
  * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
+defined('MOODLE_INTERNAL') || die();
+
 /**
  * Handles upgrading instances of this block.
  *
  * @param object $block
  */
 function xmldb_block_course_summary_upgrade($oldversion, $block) {
-    global $DB;
-
-    // Moodle v2.4.0 release upgrade line
-    // Put any upgrade step following this.
-
-    if ($oldversion < 2012112901) {
-        // Get the instances of this block.
-        if ($blocks = $DB->get_records('block_instances', array('blockname' => 'course_summary', 'pagetypepattern' => 'my-index'))) {
-            // Loop through and remove them from the My Moodle page.
-            foreach ($blocks as $block) {
-                blocks_delete_instance($block);
-            }
-
-        }
-
-        // Savepoint reached.
-        upgrade_block_savepoint(true, 2012112901, 'course_summary');
-    }
-
-
-    // Moodle v2.5.0 release upgrade line.
-    // Put any upgrade step following this.
-
-
-    // Moodle v2.6.0 release upgrade line.
-    // Put any upgrade step following this.
-
-    // Moodle v2.7.0 release upgrade line.
-    // Put any upgrade step following this.
+    global $CFG;
 
     // Moodle v2.8.0 release upgrade line.
     // Put any upgrade step following this.
@@ -84,4 +58,4 @@ function xmldb_block_course_summary_upgrade($oldversion, $block) {
     // Put any upgrade step following this.
 
     return true;
-}
\ No newline at end of file
+}
index ff87abf..4b5a51a 100644 (file)
  * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
+defined('MOODLE_INTERNAL') || die();
+
 /**
  * Upgrade code for the HTML block.
  *
  * @param int $oldversion
- * @param object $block
  */
 function xmldb_block_html_upgrade($oldversion) {
-    global $CFG, $DB;
-
-    // Moodle v2.3.0 release upgrade line
-    // Put any upgrade step following this.
-
-
-    // Moodle v2.4.0 release upgrade line
-    // Put any upgrade step following this.
-
-
-    // Moodle v2.5.0 release upgrade line.
-    // Put any upgrade step following this.
-
-
-    // Moodle v2.6.0 release upgrade line.
-    // Put any upgrade step following this.
-
-    // Moodle v2.7.0 release upgrade line.
-    // Put any upgrade step following this.
+    global $CFG;
 
     // Moodle v2.8.0 release upgrade line.
     // Put any upgrade step following this.
index 6ea9268..430bb9e 100644 (file)
@@ -37,6 +37,8 @@
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
+defined('MOODLE_INTERNAL') || die();
+
 /**
  * As of the implementation of this block and the general navigation code
  * in Moodle 2.0 the body of immediate upgrade work for this block and
  * was complex due to us wanting to remvoe the outmoded blocks that this
  * block was going to replace.
  *
- * @global moodle_database $DB
  * @param int $oldversion
  * @param object $block
  */
 function xmldb_block_navigation_upgrade($oldversion, $block) {
-    global $DB;
-
-    // Moodle v2.2.0 release upgrade line
-    // Put any upgrade step following this.
-
-    // Moodle v2.3.0 release upgrade line
-    // Put any upgrade step following this.
-
-
-    // Moodle v2.4.0 release upgrade line
-    // Put any upgrade step following this.
-
-
-    // Moodle v2.5.0 release upgrade line.
-    // Put any upgrade step following this.
-
-
-    // Moodle v2.6.0 release upgrade line.
-    // Put any upgrade step following this.
-
-    // Moodle v2.7.0 release upgrade line.
-    // Put any upgrade step following this.
+    global $CFG;
 
     // Moodle v2.8.0 release upgrade line.
     // Put any upgrade step following this.
@@ -85,4 +65,4 @@ function xmldb_block_navigation_upgrade($oldversion, $block) {
     // Put any upgrade step following this.
 
     return true;
-}
\ No newline at end of file
+}
index 8d0f893..02e8be0 100644 (file)
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
+defined('MOODLE_INTERNAL') || die();
+
 /**
  * Upgrade code for the recent activity block.
  *
- * @global moodle_database $DB
  * @param int $oldversion
  * @param object $block
  */
 function xmldb_block_recent_activity_upgrade($oldversion, $block) {
-    global $CFG, $DB;
-
-    $dbman = $DB->get_manager(); // loads ddl manager and xmldb classes
-
-    if ($oldversion < 2014012000) {
-
-        // Define table block_recent_activity to be created.
-        $table = new xmldb_table('block_recent_activity');
-
-        // Adding fields to table block_recent_activity.
-        $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null);
-        $table->add_field('courseid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null);
-        $table->add_field('cmid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null);
-        $table->add_field('timecreated', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null);
-        $table->add_field('userid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null);
-        $table->add_field('action', XMLDB_TYPE_INTEGER, '1', null, XMLDB_NOTNULL, null, null);
-        $table->add_field('modname', XMLDB_TYPE_CHAR, '20', null, null, null, null);
-
-        // Adding keys to table block_recent_activity.
-        $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
-
-        // Adding indexes to table block_recent_activity.
-        $table->add_index('coursetime', XMLDB_INDEX_NOTUNIQUE, array('courseid', 'timecreated'));
-
-        // Conditionally launch create table for block_recent_activity.
-        if (!$dbman->table_exists($table)) {
-            $dbman->create_table($table);
-            // Insert dummy log record for each existing course to notify that their logs need to be migrated.
-            $DB->execute('INSERT INTO {block_recent_activity} (timecreated, userid, courseid, cmid, action) '.
-                    'SELECT ?, 0, id, 0, 3 FROM {course}',
-                    array(time()));
-        }
-
-        // Recent_activity savepoint reached.
-        upgrade_block_savepoint(true, 2014012000, 'recent_activity');
-    }
-
-    // Moodle v2.7.0 release upgrade line.
-    // Put any upgrade step following this.
+    global $CFG;
 
     // Moodle v2.8.0 release upgrade line.
     // Put any upgrade step following this.
index 057f275..66f7957 100644 (file)
@@ -37,6 +37,8 @@
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
+defined('MOODLE_INTERNAL') || die();
+
 /**
  * Upgrade code for the section links block.
  *
  * @param object $block
  */
 function xmldb_block_section_links_upgrade($oldversion, $block) {
-    global $DB;
-
-    // Moodle v2.3.0 release upgrade line
-    // Put any upgrade step following this
-
-    // Moodle v2.4.0 release upgrade line
-    // Put any upgrade step following this
-
-    if ($oldversion < 2013012200.00) {
-
-        // The section links block used to use its own crazy plugin name.
-        // Here we are converting it to the proper component name.
-        $oldplugin = 'blocks/section_links';
-        $newplugin = 'block_section_links';
-
-        // Use the proper API here... thats what we should be doing as it ensures any caches etc are cleared
-        // along the way!
-        // It may be quicker to just write an SQL statement but that would be reckless.
-        $config = get_config($oldplugin);
-        if (!empty($config)) {
-            foreach ($config as $name => $value) {
-                set_config($name, $value, $newplugin);
-                unset_config($name, $oldplugin);
-            }
-        }
-
-        // Main savepoint reached.
-        upgrade_block_savepoint(true, 2013012200.00, 'section_links');
-    }
-
-
-    // Moodle v2.5.0 release upgrade line
-    // Put any upgrade step following this
-
-
-    // Moodle v2.6.0 release upgrade line.
-    // Put any upgrade step following this.
-
-    // Moodle v2.7.0 release upgrade line.
-    // Put any upgrade step following this.
+    global $CFG;
 
     // Moodle v2.8.0 release upgrade line.
     // Put any upgrade step following this.
index e79331c..9dee1f5 100644 (file)
@@ -37,6 +37,8 @@
  * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
+defined('MOODLE_INTERNAL') || die();
+
 /**
  * Handles upgrading instances of this block.
  *
  * @param object $block
  */
 function xmldb_block_selfcompletion_upgrade($oldversion, $block) {
-    global $DB;
-
-    // Moodle v2.4.0 release upgrade line
-    // Put any upgrade step following this.
-
-    if ($oldversion < 2012112901) {
-        // Get the instances of this block.
-        if ($blocks = $DB->get_records('block_instances', array('blockname' => 'selfcompletion', 'pagetypepattern' => 'my-index'))) {
-            // Loop through and remove them from the My Moodle page.
-            foreach ($blocks as $block) {
-                blocks_delete_instance($block);
-            }
-
-        }
-
-        // Savepoint reached.
-        upgrade_block_savepoint(true, 2012112901, 'selfcompletion');
-    }
-
-
-    // Moodle v2.5.0 release upgrade line.
-    // Put any upgrade step following this.
-
-
-    // Moodle v2.6.0 release upgrade line.
-    // Put any upgrade step following this.
-
-    // Moodle v2.7.0 release upgrade line.
-    // Put any upgrade step following this.
+    global $CFG;
 
     // Moodle v2.8.0 release upgrade line.
     // Put any upgrade step following this.
@@ -84,4 +58,4 @@ function xmldb_block_selfcompletion_upgrade($oldversion, $block) {
     // Put any upgrade step following this.
 
     return true;
-}
\ No newline at end of file
+}
index b1cf6f8..bd96db6 100644 (file)
@@ -37,6 +37,8 @@
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
+defined('MOODLE_INTERNAL') || die();
+
 /**
  * As of the implementation of this block and the general navigation code
  * in Moodle 2.0 the body of immediate upgrade work for this block and
  * was complex due to us wanting to remvoe the outmoded blocks that this
  * block was going to replace.
  *
- * @global moodle_database $DB
  * @param int $oldversion
  * @param object $block
  */
 function xmldb_block_settings_upgrade($oldversion, $block) {
-    global $DB;
-
-    // Moodle v2.2.0 release upgrade line
-    // Put any upgrade step following this
-
-    // Moodle v2.3.0 release upgrade line
-    // Put any upgrade step following this
-
-
-    // Moodle v2.4.0 release upgrade line
-    // Put any upgrade step following this
-
-
-    // Moodle v2.5.0 release upgrade line.
-    // Put any upgrade step following this.
-
-
-    // Moodle v2.6.0 release upgrade line.
-    // Put any upgrade step following this.
-
-    // Moodle v2.7.0 release upgrade line.
-    // Put any upgrade step following this.
+    global $CFG;
 
     // Moodle v2.8.0 release upgrade line.
     // Put any upgrade step following this.
@@ -85,4 +65,4 @@ function xmldb_block_settings_upgrade($oldversion, $block) {
     // Put any upgrade step following this.
 
     return true;
-}
\ No newline at end of file
+}
index d1eb164..a2d2c53 100644 (file)
  */
 
 defined('MOODLE_INTERNAL') || die();
-function xmldb_enrol_database_upgrade($oldversion) {
-    global $CFG, $DB;
-
-    $dbman = $DB->get_manager();
-
-
-    // Moodle v2.3.0 release upgrade line.
-    // Put any upgrade step following this.
-
-
-    // Moodle v2.4.0 release upgrade line
-    // Put any upgrade step following this
-
 
-    // Moodle v2.5.0 release upgrade line.
-    // Put any upgrade step following this.
-
-
-    // Moodle v2.6.0 release upgrade line.
-    // Put any upgrade step following this.
-
-    // Moodle v2.7.0 release upgrade line.
-    // Put any upgrade step following this.
+function xmldb_enrol_database_upgrade($oldversion) {
+    global $CFG;
 
     // Moodle v2.8.0 release upgrade line.
     // Put any upgrade step following this.
index ebe5dd7..f16aa4d 100644 (file)
 defined('MOODLE_INTERNAL') || die();
 
 function xmldb_enrol_flatfile_upgrade($oldversion) {
-    global $CFG, $DB;
-
-    $dbman = $DB->get_manager();
-
-
-    // Moodle v2.3.0 release upgrade line
-    // Put any upgrade step following this
-
-
-    // Moodle v2.4.0 release upgrade line
-    // Put any upgrade step following this
-
-
-    // Moodle v2.5.0 release upgrade line.
-    // Put any upgrade step following this.
-
-
-    // Moodle v2.6.0 release upgrade line.
-    // Put any upgrade step following this.
-
-    // Moodle v2.7.0 release upgrade line.
-    // Put any upgrade step following this.
+    global $CFG;
 
     // Moodle v2.8.0 release upgrade line.
     // Put any upgrade step following this.
index 8ae2004..e1111f7 100644 (file)
  * This file keeps track of upgrades to the guest enrolment plugin.
  *
  * @package    enrol_guest
- * @copyright  2011 Petr Skoda {@link http://skodak.org
+ * @copyright  2011 Petr Skoda {@link http://skodak.org}
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
 defined('MOODLE_INTERNAL') || die();
 
 function xmldb_enrol_guest_upgrade($oldversion) {
-    global $CFG, $DB, $OUTPUT;
-
-    $dbman = $DB->get_manager();
-
-    // Moodle v2.2.0 release upgrade line
-    // Put any upgrade step following this
-
-    if ($oldversion < 2011112901) {
-        // convert all null passwords to empty strings
-        $DB->set_field('enrol', 'password', '', array('enrol'=>'guest', 'password'=>null));
-
-        upgrade_plugin_savepoint(true, 2011112901, 'enrol', 'guest');
-    }
-
-    // Moodle v2.3.0 release upgrade line
-    // Put any upgrade step following this
-
-
-    // Moodle v2.4.0 release upgrade line
-    // Put any upgrade step following this
-
-
-    // Moodle v2.5.0 release upgrade line.
-    // Put any upgrade step following this.
-
-
-    // Moodle v2.6.0 release upgrade line.
-    // Put any upgrade step following this.
-
-    // Moodle v2.7.0 release upgrade line.
-    // Put any upgrade step following this.
+    global $CFG;
 
     // Moodle v2.8.0 release upgrade line.
     // Put any upgrade step following this.
@@ -68,5 +38,3 @@ function xmldb_enrol_guest_upgrade($oldversion) {
 
     return true;
 }
-
-
index 7fb9ea3..0bc6134 100644 (file)
@@ -31,24 +31,7 @@ defined('MOODLE_INTERNAL') || die();
  * @return bool true
  */
 function xmldb_enrol_imsenterprise_upgrade($oldversion) {
-    global $CFG, $DB;
-
-    $dbman = $DB->get_manager();
-
-    // Moodle v2.3.0 release upgrade line.
-    // Put any upgrade step following this.
-
-    // Moodle v2.4.0 release upgrade line.
-    // Put any upgrade step following this.
-
-    // Moodle v2.5.0 release upgrade line.
-    // Put any upgrade step following this.
-
-    // Moodle v2.6.0 release upgrade line.
-    // Put any upgrade step following this.
-
-    // Moodle v2.7.0 release upgrade line.
-    // Put any upgrade step following this.
+    global $CFG;
 
     // Moodle v2.8.0 release upgrade line.
     // Put any upgrade step following this.
index 7b98f19..5ec65e3 100644 (file)
  * This file keeps track of upgrades to the manual enrolment plugin
  *
  * @package    enrol_manual
- * @copyright  2012 Petr Skoda {@link http://skodak.org
+ * @copyright  2012 Petr Skoda {@link http://skodak.org}
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
 defined('MOODLE_INTERNAL') || die();
 
 function xmldb_enrol_manual_upgrade($oldversion) {
-    global $CFG, $DB, $OUTPUT;
-
-    $dbman = $DB->get_manager();
-
-    // Moodle v2.3.0 release upgrade line
-    // Put any upgrade step following this
-
-    if ($oldversion < 2012100702) {
-        // Set default expiry threshold to 1 day.
-        $DB->execute("UPDATE {enrol} SET expirythreshold = 86400 WHERE enrol = 'manual' AND expirythreshold = 0");
-        upgrade_plugin_savepoint(true, 2012100702, 'enrol', 'manual');
-    }
-
-    if ($oldversion < 2012101400) {
-        // Delete obsoleted settings, now using expiry* prefix to make them more consistent.
-        unset_config('notifylast', 'enrol_manual');
-        unset_config('notifyhour', 'enrol_manual');
-        upgrade_plugin_savepoint(true, 2012101400, 'enrol', 'manual');
-    }
-
-
-    // Moodle v2.4.0 release upgrade line
-    // Put any upgrade step following this
-
-
-    // Moodle v2.5.0 release upgrade line.
-    // Put any upgrade step following this.
-
-
-    // Moodle v2.6.0 release upgrade line.
-    // Put any upgrade step following this.
-
-    // Moodle v2.7.0 release upgrade line.
-    // Put any upgrade step following this.
+    global $CFG;
 
     // Moodle v2.8.0 release upgrade line.
     // Put any upgrade step following this.
@@ -77,5 +44,3 @@ function xmldb_enrol_manual_upgrade($oldversion) {
 
     return true;
 }
-
-
index e66d6ec..2a59641 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 // This file is part of Moodle - http://moodle.org/
 //
 // Moodle is free software: you can redistribute it and/or modify
 defined('MOODLE_INTERNAL') || die();
 
 function xmldb_enrol_mnet_upgrade($oldversion) {
-    global $CFG, $DB;
-
-    $dbman = $DB->get_manager();
-
-
-    // Moodle v2.3.0 release upgrade line
-    // Put any upgrade step following this
-
-
-    // Moodle v2.4.0 release upgrade line
-    // Put any upgrade step following this
-
-
-    // Moodle v2.5.0 release upgrade line.
-    // Put any upgrade step following this.
-
-
-    // Moodle v2.6.0 release upgrade line.
-    // Put any upgrade step following this.
-
-    // Moodle v2.7.0 release upgrade line.
-    // Put any upgrade step following this.
+    global $CFG;
 
     // Moodle v2.8.0 release upgrade line.
     // Put any upgrade step following this.
index faf51dc..1497469 100644 (file)
 // Please do not forget to use upgrade_set_timeout()
 // before any action that may take longer time to finish.
 
-function xmldb_enrol_paypal_upgrade($oldversion) {
-    global $CFG, $DB;
-
-    $dbman = $DB->get_manager();
-
-
-    // Moodle v2.3.0 release upgrade line
-    // Put any upgrade step following this
-
-
-    // Moodle v2.4.0 release upgrade line
-    // Put any upgrade step following this
-
+defined('MOODLE_INTERNAL') || die();
 
-    // Moodle v2.5.0 release upgrade line.
-    // Put any upgrade step following this.
-
-
-    // Moodle v2.6.0 release upgrade line.
-    // Put any upgrade step following this.
-
-    // Moodle v2.7.0 release upgrade line.
-    // Put any upgrade step following this.
+function xmldb_enrol_paypal_upgrade($oldversion) {
+    global $CFG;
 
     // Moodle v2.8.0 release upgrade line.
     // Put any upgrade step following this.
index 62cb0df..82bb97d 100644 (file)
  * This file keeps track of upgrades to the self enrolment plugin
  *
  * @package    enrol_self
- * @copyright  2012 Petr Skoda {@link http://skodak.org
+ * @copyright  2012 Petr Skoda {@link http://skodak.org}
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
 defined('MOODLE_INTERNAL') || die();
 
 function xmldb_enrol_self_upgrade($oldversion) {
-    global $CFG, $DB, $OUTPUT;
-
-    $dbman = $DB->get_manager();
-
-    // Moodle v2.3.0 release upgrade line
-    // Put any upgrade step following this
-
-    if ($oldversion < 2012101400) {
-        // Set default expiry threshold to 1 day.
-        $DB->execute("UPDATE {enrol} SET expirythreshold = 86400 WHERE enrol = 'self' AND expirythreshold = 0");
-        upgrade_plugin_savepoint(true, 2012101400, 'enrol', 'self');
-    }
-
-    if ($oldversion < 2012120600) {
-        // Enable new self enrolments everywhere.
-        $DB->execute("UPDATE {enrol} SET customint6 = 1 WHERE enrol = 'self'");
-        upgrade_plugin_savepoint(true, 2012120600, 'enrol', 'self');
-    }
-
-
-    // Moodle v2.4.0 release upgrade line
-    // Put any upgrade step following this
-
-
-    // Moodle v2.5.0 release upgrade line.
-    // Put any upgrade step following this.
-
-
-    // Moodle v2.6.0 release upgrade line.
-    // Put any upgrade step following this.
-
-    if ($oldversion < 2013112100) {
-        // Set customint1 (group enrolment key) to 0 if it was not set (null).
-        $DB->execute("UPDATE {enrol} SET customint1 = 0 WHERE enrol = 'self' AND customint1 IS NULL");
-        upgrade_plugin_savepoint(true, 2013112100, 'enrol', 'self');
-    }
-
-    // Moodle v2.7.0 release upgrade line.
-    // Put any upgrade step following this.
+    global $CFG;
 
     // Moodle v2.8.0 release upgrade line.
     // Put any upgrade step following this.
@@ -76,5 +38,3 @@ function xmldb_enrol_self_upgrade($oldversion) {
 
     return true;
 }
-
-
index eb1e4cd..056cc18 100644 (file)
@@ -22,6 +22,8 @@
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
+defined('MOODLE_INTERNAL') || die();
+
 /**
  * @param int $oldversion the version we are upgrading from
  * @return bool result
@@ -31,9 +33,6 @@ function xmldb_filter_mathjaxloader_upgrade($oldversion) {
 
     $dbman = $DB->get_manager();
 
-    // Moodle v2.7.0 release upgrade line.
-    // Put any upgrade step following this.
-
     if ($oldversion < 2014081100) {
 
         $sslcdnurl = get_config('filter_mathjaxloader', 'httpsurl');
index 3e37445..2a70d61 100644 (file)
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
+defined('MOODLE_INTERNAL') || die();
+
 /**
  * @param int $oldversion the version we are upgrading from
  * @return bool result
  */
 function xmldb_filter_mediaplugin_upgrade($oldversion) {
-    global $CFG, $DB;
-
-    $dbman = $DB->get_manager();
-
-
-    if ($oldversion < 2011121200) {
-        // Move all the media enable setttings that are now handled by core media renderer.
-        foreach (array('html5video', 'html5audio', 'mp3', 'flv', 'wmp', 'qt', 'rm',
-                'youtube', 'vimeo', 'swf') as $type) {
-            $existingkey = 'filter_mediaplugin_enable_' . $type;
-            if (array_key_exists($existingkey, $CFG)) {
-                set_config('core_media_enable_' . $type, $CFG->{$existingkey});
-                unset_config($existingkey);
-            }
-        }
-
-        // Override setting for html5 to turn it on (previous default was off; because
-        // of changes in the way fallbacks are handled, this is now unlikely to cause
-        // a problem, and is required for mobile a/v support on non-Flash devices, so
-        // this change is basically needed in order to maintain existing behaviour).
-        set_config('core_media_enable_html5video', 1);
-        set_config('core_media_enable_html5audio', 1);
-
-        upgrade_plugin_savepoint(true, 2011121200, 'filter', 'mediaplugin');
-    }
-
-    // Moodle v2.3.0 release upgrade line
-    // Put any upgrade step following this
-
-
-    // Moodle v2.4.0 release upgrade line
-    // Put any upgrade step following this
-
-
-    // Moodle v2.5.0 release upgrade line.
-    // Put any upgrade step following this.
-
-
-    // Moodle v2.6.0 release upgrade line.
-    // Put any upgrade step following this.
-
-    // Moodle v2.7.0 release upgrade line.
-    // Put any upgrade step following this.
+    global $CFG;
 
     // Moodle v2.8.0 release upgrade line.
     // Put any upgrade step following this.
index 703a7d4..14aa3d8 100644 (file)
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
+defined('MOODLE_INTERNAL') || die();
+
 /**
  * @param int $oldversion the version we are upgrading from
  * @return bool result
  */
 function xmldb_filter_tex_upgrade($oldversion) {
-    global $CFG, $DB;
-
-    $dbman = $DB->get_manager();
-
-
-    // Moodle v2.3.0 release upgrade line
-    // Put any upgrade step following this
-
-
-    // Moodle v2.4.0 release upgrade line
-    // Put any upgrade step following this
-
-
-    // Moodle v2.5.0 release upgrade line.
-    // Put any upgrade step following this.
-
-
-    // Moodle v2.6.0 release upgrade line.
-    // Put any upgrade step following this.
-
-    if ($oldversion < 2013120300) {
-        $settings = array(
-                'density', 'latexbackground', 'convertformat', 'pathlatex',
-                'convertformat', 'pathconvert', 'pathdvips', 'latexpreamble');
-
-        // Move tex settings to config_pluins and delete entries from the config table.
-        foreach ($settings as $setting) {
-            $existingkey = 'filter_tex_'.$setting;
-            if (array_key_exists($existingkey, $CFG)) {
-                set_config($setting, $CFG->{$existingkey}, 'filter_tex');
-                unset_config($existingkey);
-            }
-        }
-
-        upgrade_plugin_savepoint(true, 2013120300, 'filter', 'tex');
-    }
-
-    // Moodle v2.7.0 release upgrade line.
-    // Put any upgrade step following this.
+    global $CFG;
 
     // Moodle v2.8.0 release upgrade line.
     // Put any upgrade step following this.
index a40da47..68a632f 100644 (file)
@@ -31,30 +31,7 @@ defined('MOODLE_INTERNAL') || die();
  * @return bool true
  */
 function xmldb_gradingform_rubric_upgrade($oldversion) {
-    global $CFG, $DB, $OUTPUT;
-
-    $dbman = $DB->get_manager();
-
-    // Moodle v2.2.0 release upgrade line
-    // Put any upgrade step following this
-
-    // Moodle v2.3.0 release upgrade line
-    // Put any upgrade step following this
-
-
-    // Moodle v2.4.0 release upgrade line
-    // Put any upgrade step following this
-
-
-    // Moodle v2.5.0 release upgrade line.
-    // Put any upgrade step following this.
-
-
-    // Moodle v2.6.0 release upgrade line.
-    // Put any upgrade step following this.
-
-    // Moodle v2.7.0 release upgrade line.
-    // Put any upgrade step following this.
+    global $CFG;
 
     // Moodle v2.8.0 release upgrade line.
     // Put any upgrade step following this.
index c4ea1b4..766167f 100644 (file)
@@ -236,8 +236,6 @@ $string['novirtualquestiontype'] = 'No virtual question type for question type {
 $string['numqas'] = 'No. question attempts';
 $string['numquestions'] = 'No. questions';
 $string['numquestionsandhidden'] = '{$a->numquestions} (+{$a->numhidden} hidden)';
-$string['orphanedquestionscategory'] = 'Questions saved from deleted categories';
-$string['orphanedquestionscategoryinfo'] = 'Occasionally, typically due to old software bugs, questions can remain in the database even though the corresponding question category has been deleted. Of course, this should not happen, it has happened in the past on this site. This category has been created automatically, and the orphaned questions moved here so that you can manage them. Note that any images or media files used by these questions have probably been lost.';
 $string['page-question-x'] = 'Any question page';
 $string['page-question-edit'] = 'Question editing page';
 $string['page-question-category'] = 'Question category page';
index 7e6ca5c..82ac377 100644 (file)
@@ -85,3557 +85,22 @@ defined('MOODLE_INTERNAL') || die();
  * @return bool always true
  */
 function xmldb_main_upgrade($oldversion) {
-    global $CFG, $USER, $DB, $OUTPUT, $SITE, $COURSE;
+    global $CFG, $DB;
 
-    require_once($CFG->libdir.'/db/upgradelib.php'); // Core Upgrade-related functions
+    require_once($CFG->libdir.'/db/upgradelib.php'); // Core Upgrade-related functions.
 
-    $dbman = $DB->get_manager(); // loads ddl manager and xmldb classes
+    $dbman = $DB->get_manager(); // Loads ddl manager and xmldb classes.
 
-    if ($oldversion < 2011120500) {
-        // just in case somebody hacks upgrade scripts or env, we really can not continue
-        echo("You need to upgrade to 2.2.x first!\n");
+    // Always keep this upgrade step with version being the minimum
+    // allowed version to upgrade from (v2.7.0 right now).
+    if ($oldversion < 2014051200) {
+        // Just in case somebody hacks upgrade scripts or env, we really can not continue.
+        echo("You need to upgrade to 2.7.x or higher first!\n");
         exit(1);
-        // Note this savepoint is 100% unreachable, but needed to pass the upgrade checks
-        upgrade_main_savepoint(true, 2011120500);
+        // Note this savepoint is 100% unreachable, but needed to pass the upgrade checks.
+        upgrade_main_savepoint(true, 2014051200);
     }
 
-    // Moodle v2.2.0 release upgrade line
-    // Put any upgrade step following this
-
-    if ($oldversion < 2011120500.02) {
-
-        upgrade_set_timeout(60*20); // This may take a while
-        // MDL-28180. Some missing restrictions in certain backup & restore operations
-        // were causing incorrect duplicates in the course_completion_aggr_methd table.
-        // This upgrade step takes rid of them.
-        $sql = 'SELECT course, criteriatype, MIN(id) AS minid
-                  FROM {course_completion_aggr_methd}
-              GROUP BY course, criteriatype
-                HAVING COUNT(*) > 1';
-        $duprs = $DB->get_recordset_sql($sql);
-        foreach ($duprs as $duprec) {
-            // We need to handle NULLs in criteriatype diferently
-            if (is_null($duprec->criteriatype)) {
-                $where = 'course = ? AND criteriatype IS NULL AND id > ?';
-                $params = array($duprec->course, $duprec->minid);
-            } else {
-                $where = 'course = ? AND criteriatype = ? AND id > ?';
-                $params = array($duprec->course, $duprec->criteriatype, $duprec->minid);
-            }
-            $DB->delete_records_select('course_completion_aggr_methd', $where, $params);
-        }
-        $duprs->close();
-
-        // Main savepoint reached
-        upgrade_main_savepoint(true, 2011120500.02);
-    }
-
-    if ($oldversion < 2011120500.03) {
-
-        // Changing precision of field value on table user_preferences to (1333)
-        $table = new xmldb_table('user_preferences');
-        $field = new xmldb_field('value', XMLDB_TYPE_CHAR, '1333', null, XMLDB_NOTNULL, null, null, 'name');
-
-        // Launch change of precision for field value
-        $dbman->change_field_precision($table, $field);
-
-        // Main savepoint reached
-        upgrade_main_savepoint(true, 2011120500.03);
-    }
-
-    if ($oldversion < 2012020200.03) {
-
-        // Define index rolecontext (not unique) to be added to role_assignments
-        $table = new xmldb_table('role_assignments');
-        $index = new xmldb_index('rolecontext', XMLDB_INDEX_NOTUNIQUE, array('roleid', 'contextid'));
-
-        // Conditionally launch add index rolecontext
-        if (!$dbman->index_exists($table, $index)) {
-            $dbman->add_index($table, $index);
-        }
-
-        // Define index usercontextrole (not unique) to be added to role_assignments
-        $index = new xmldb_index('usercontextrole', XMLDB_INDEX_NOTUNIQUE, array('userid', 'contextid', 'roleid'));
-
-        // Conditionally launch add index usercontextrole
-        if (!$dbman->index_exists($table, $index)) {
-            $dbman->add_index($table, $index);
-        }
-
-        // Main savepoint reached
-        upgrade_main_savepoint(true, 2012020200.03);
-    }
-
-    if ($oldversion < 2012020200.06) {
-        // Previously we always allowed users to override their email address via the messaging system
-        // We have now added a setting to allow admins to turn this this ability on and off
-        // While this setting defaults to 0 (off) we're setting it to 1 (on) to maintain the behaviour for upgrading sites
-        set_config('messagingallowemailoverride', 1);
-
-        // Main savepoint reached
-        upgrade_main_savepoint(true, 2012020200.06);
-    }
-
-    if ($oldversion < 2012021700.01) {
-        // Changing precision of field uniquehash on table post to 255
-        $table = new xmldb_table('post');
-        $field = new xmldb_field('uniquehash', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, 'content');
-
-        // Launch change of precision for field uniquehash
-        $dbman->change_field_precision($table, $field);
-
-        // Main savepoint reached
-        upgrade_main_savepoint(true, 2012021700.01);
-    }
-
-    if ($oldversion < 2012021700.02) {
-        // Somewhere before 1.9 summary and content column in post table were not null. In 1.9+
-        // not null became false.
-        $columns = $DB->get_columns('post');
-
-        // Fix discrepancies in summary field after upgrade from 1.9
-        if (array_key_exists('summary', $columns) && $columns['summary']->not_null != false) {
-            $table = new xmldb_table('post');
-            $summaryfield = new xmldb_field('summary', XMLDB_TYPE_TEXT, 'big', null, null, null, null, 'subject');
-
-            if ($dbman->field_exists($table, $summaryfield)) {
-                $dbman->change_field_notnull($table, $summaryfield);
-            }
-
-        }
-
-        // Fix discrepancies in content field after upgrade from 1.9
-        if (array_key_exists('content', $columns) && $columns['content']->not_null != false) {
-            $table = new xmldb_table('post');
-            $contentfield = new xmldb_field('content', XMLDB_TYPE_TEXT, 'big', null, null, null, null, 'summary');
-
-            if ($dbman->field_exists($table, $contentfield)) {
-                $dbman->change_field_notnull($table, $contentfield);
-            }
-
-        }
-
-        upgrade_main_savepoint(true, 2012021700.02);
-    }
-
-    // The ability to backup user (private) files is out completely - MDL-29248
-    if ($oldversion < 2012030100.01) {
-        unset_config('backup_general_user_files', 'backup');
-        unset_config('backup_general_user_files_locked', 'backup');
-        unset_config('backup_auto_user_files', 'backup');
-
-        upgrade_main_savepoint(true, 2012030100.01);
-    }
-
-    if ($oldversion < 2012030900.01) {
-        // Migrate all numbers to signed & all texts and binaries to big size.
-        // It should be safe to interrupt this and continue later.
-        upgrade_mysql_fix_unsigned_and_lob_columns();
-
-        // Main savepoint reached
-        upgrade_main_savepoint(true, 2012030900.01);
-    }
-
-    if ($oldversion < 2012031500.01) {
-        // Upgrade old course_allowed_modules data to be permission overrides.
-        if ($CFG->restrictmodulesfor === 'all') {
-            $courses = $DB->get_records_menu('course', array(), 'id', 'id, 1');
-        } else if ($CFG->restrictmodulesfor === 'requested') {
-            $courses = $DB->get_records_menu('course', array('restrictmodules' => 1), 'id', 'id, 1');
-        } else {
-            $courses = array();
-        }
-
-        if (!$dbman->table_exists('course_allowed_modules')) {
-            // Upgrade must already have been run on this server. This might happen,
-            // for example, during development of these changes.
-            $courses = array();
-        }
-
-        $modidtoname = $DB->get_records_menu('modules', array(), 'id', 'id, name');
-
-        $coursecount = count($courses);
-        if ($coursecount) {
-            $pbar = new progress_bar('allowedmods', 500, true);
-            $transaction = $DB->start_delegated_transaction();
-        }
-
-        $i = 0;
-        foreach ($courses as $courseid => $notused) {
-            $i += 1;
-            upgrade_set_timeout(60); // 1 minute per course should be fine.
-
-            $allowedmoduleids = $DB->get_records_menu('course_allowed_modules',
-            array('course' => $courseid), 'module', 'module, 1');
-            if (empty($allowedmoduleids)) {
-                // This seems to be the best match for backwards compatibility,
-                // not necessarily with the old code in course_allowed_module function,
-                // but with the code that used to be in the coures settings form.
-                $allowedmoduleids = explode(',', $CFG->defaultallowedmodules);
-                $allowedmoduleids = array_combine($allowedmoduleids, $allowedmoduleids);
-            }
-
-            $context = context_course::instance($courseid);
-
-            list($roleids) = get_roles_with_cap_in_context($context, 'moodle/course:manageactivities');
-            list($managerroleids) = get_roles_with_cap_in_context($context, 'moodle/site:config');
-            foreach ($managerroleids as $roleid) {
-                unset($roleids[$roleid]);
-            }
-
-            foreach ($modidtoname as $modid => $modname) {
-                if (isset($allowedmoduleids[$modid])) {
-                    // Module is allowed, no worries.
-                    continue;
-                }
-
-                $capability = 'mod/' . $modname . ':addinstance';
-                foreach ($roleids as $roleid) {
-                    assign_capability($capability, CAP_PREVENT, $roleid, $context);
-                }
-            }
-
-            $pbar->update($i, $coursecount, "Upgrading legacy course_allowed_modules data - $i/$coursecount.");
-        }
-
-        if ($coursecount) {
-            $transaction->allow_commit();
-        }
-
-        upgrade_main_savepoint(true, 2012031500.01);
-    }
-
-    if ($oldversion < 2012031500.02) {
-
-        // Define field restrictmodules to be dropped from course
-        $table = new xmldb_table('course');
-        $field = new xmldb_field('restrictmodules');
-
-        // Conditionally launch drop field requested
-        if ($dbman->field_exists($table, $field)) {
-            $dbman->drop_field($table, $field);
-        }
-
-        // Since structure of 'course' table has changed we need to re-read $SITE from DB.
-        $SITE = $DB->get_record('course', array('id' => $SITE->id));
-        $COURSE = clone($SITE);
-
-        upgrade_main_savepoint(true, 2012031500.02);
-    }
-
-    if ($oldversion < 2012031500.03) {
-
-        // Define table course_allowed_modules to be dropped
-        $table = new xmldb_table('course_allowed_modules');
-
-        // Conditionally launch drop table for course_allowed_modules
-        if ($dbman->table_exists($table)) {
-            $dbman->drop_table($table);
-        }
-
-        upgrade_main_savepoint(true, 2012031500.03);
-    }
-
-    if ($oldversion < 2012031500.04) {
-        // Clean up the old admin settings.
-        unset_config('restrictmodulesfor');
-        unset_config('restrictbydefault');
-        unset_config('defaultallowedmodules');
-
-        upgrade_main_savepoint(true, 2012031500.04);
-    }
-
-    if ($oldversion < 2012032300.02) {
-        // Migrate the old admin debug setting.
-        if ($CFG->debug == 38911) {
-            set_config('debug', DEBUG_DEVELOPER);
-        } else if ($CFG->debug == 6143) {
-            set_config('debug', DEBUG_ALL);
-        }
-        upgrade_main_savepoint(true, 2012032300.02);
-    }
-
-    if ($oldversion < 2012042300.00) {
-        // This change makes the course_section index unique.
-
-        // Look for any duplicate course_sections entries. There should not be
-        // any but on some busy systems we found a few, maybe due to previous
-        // bugs.
-        $transaction = $DB->start_delegated_transaction();
-        $rs = $DB->get_recordset_sql('
-                SELECT DISTINCT
-                    cs.id, cs.course
-                FROM
-                    {course_sections} cs
-                    INNER JOIN {course_sections} older
-                        ON cs.course = older.course AND cs.section = older.section
-                        AND older.id < cs.id');
-        foreach ($rs as $rec) {
-            $DB->delete_records('course_sections', array('id' => $rec->id));
-            // We can't use rebuild_course_cache() here because introducing sectioncache later
-            // so reset modinfo manually.
-            $DB->set_field('course', 'modinfo', null, array('id' => $rec->course));
-        }
-        $rs->close();
-        $transaction->allow_commit();
-
-        // XMLDB does not allow changing index uniqueness - instead we must drop
-        // index then add it again.
-        // MDL-46182: The query to make the index unique uses the index,
-        // so the removal of the non-unique version needs to happen after any
-        // data changes have been made.
-        $table = new xmldb_table('course_sections');
-        $index = new xmldb_index('course_section', XMLDB_INDEX_NOTUNIQUE, array('course', 'section'));
-
-        // Conditionally launch drop index course_section.
-        if ($dbman->index_exists($table, $index)) {
-            $dbman->drop_index($table, $index);
-        }
-
-        // Define index course_section (unique) to be added to course_sections
-        $index = new xmldb_index('course_section', XMLDB_INDEX_UNIQUE, array('course', 'section'));
-
-        // Conditionally launch add index course_section
-        if (!$dbman->index_exists($table, $index)) {
-            $dbman->add_index($table, $index);
-        }
-
-        // Main savepoint reached
-        upgrade_main_savepoint(true, 2012042300.00);
-    }
-
-    if ($oldversion < 2012042300.02) {
-        require_once($CFG->dirroot.'/completion/criteria/completion_criteria.php');
-        // Delete orphaned criteria which were left when modules were removed
-        if ($DB->get_dbfamily() === 'mysql') {
-            $sql = "DELETE cc FROM {course_completion_criteria} cc
-                    LEFT JOIN {course_modules} cm ON cm.id = cc.moduleinstance
-                    WHERE cm.id IS NULL AND cc.criteriatype = ".COMPLETION_CRITERIA_TYPE_ACTIVITY;
-        } else {
-            $sql = "DELETE FROM {course_completion_criteria}
-                    WHERE NOT EXISTS (
-                        SELECT 'x' FROM {course_modules}
-                        WHERE {course_modules}.id = {course_completion_criteria}.moduleinstance)
-                    AND {course_completion_criteria}.criteriatype = ".COMPLETION_CRITERIA_TYPE_ACTIVITY;
-        }
-        $DB->execute($sql);
-
-        // Main savepoint reached
-        upgrade_main_savepoint(true, 2012042300.02);
-    }
-
-    if ($oldversion < 2012050300.01) {
-        // Make sure deleted users do not have picture flag.
-        $DB->set_field('user', 'picture', 0, array('deleted'=>1, 'picture'=>1));
-        upgrade_main_savepoint(true, 2012050300.01);
-    }
-
-    if ($oldversion < 2012050300.02) {
-
-        // Changing precision of field picture on table user to (10)
-        $table = new xmldb_table('user');
-        $field = new xmldb_field('picture', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0', 'secret');
-
-        // Launch change of precision for field picture
-        $dbman->change_field_precision($table, $field);
-
-        // Main savepoint reached
-        upgrade_main_savepoint(true, 2012050300.02);
-    }
-
-    if ($oldversion < 2012050300.03) {
-
-        // Define field coursedisplay to be added to course
-        $table = new xmldb_table('course');
-        $field = new xmldb_field('coursedisplay', XMLDB_TYPE_INTEGER, '2', null, XMLDB_NOTNULL, null, '0', 'completionnotify');
-
-        // Conditionally launch add field coursedisplay
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        // Since structure of 'course' table has changed we need to re-read $SITE from DB.
-        $SITE = $DB->get_record('course', array('id' => $SITE->id));
-        $COURSE = clone($SITE);
-
-        // Main savepoint reached
-        upgrade_main_savepoint(true, 2012050300.03);
-    }
-
-    if ($oldversion < 2012050300.04) {
-
-        // Define table course_display to be dropped
-        $table = new xmldb_table('course_display');
-
-        // Conditionally launch drop table for course_display
-        if ($dbman->table_exists($table)) {
-            $dbman->drop_table($table);
-        }
-
-        // Main savepoint reached
-        upgrade_main_savepoint(true, 2012050300.04);
-    }
-
-    if ($oldversion < 2012050300.05) {
-
-        // Clean up removed admin setting.
-        unset_config('navlinkcoursesections');
-
-        upgrade_main_savepoint(true, 2012050300.05);
-    }
-
-    if ($oldversion < 2012050400.01) {
-
-        // Define index sortorder (not unique) to be added to course
-        $table = new xmldb_table('course');
-        $index = new xmldb_index('sortorder', XMLDB_INDEX_NOTUNIQUE, array('sortorder'));
-
-        // Conditionally launch add index sortorder
-        if (!$dbman->index_exists($table, $index)) {
-            $dbman->add_index($table, $index);
-        }
-
-        // Main savepoint reached
-        upgrade_main_savepoint(true, 2012050400.01);
-    }
-
-    if ($oldversion < 2012050400.02) {
-
-        // Clean up removed admin setting.
-        unset_config('enablecourseajax');
-
-        upgrade_main_savepoint(true, 2012050400.02);
-    }
-
-    if ($oldversion < 2012051100.01) {
-
-        // Define field idnumber to be added to groups
-        $table = new xmldb_table('groups');
-        $field = new xmldb_field('idnumber', XMLDB_TYPE_CHAR, '100', null, XMLDB_NOTNULL, null, null, 'courseid');
-        $index = new xmldb_index('idnumber', XMLDB_INDEX_NOTUNIQUE, array('idnumber'));
-
-        // Conditionally launch add field idnumber
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        // Conditionally launch add index idnumber
-        if (!$dbman->index_exists($table, $index)) {
-            $dbman->add_index($table, $index);
-        }
-
-        // Define field idnumber to be added to groupings
-        $table = new xmldb_table('groupings');
-        $field = new xmldb_field('idnumber', XMLDB_TYPE_CHAR, '100', null, XMLDB_NOTNULL, null, null, 'name');
-        $index = new xmldb_index('idnumber', XMLDB_INDEX_NOTUNIQUE, array('idnumber'));
-
-        // Conditionally launch add field idnumber
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        // Conditionally launch add index idnumber
-        if (!$dbman->index_exists($table, $index)) {
-            $dbman->add_index($table, $index);
-        }
-
-        // Main savepoint reached
-        upgrade_main_savepoint(true, 2012051100.01);
-    }
-
-    if ($oldversion < 2012051100.03) {
-
-        // Amend course table to add sectioncache cache
-        $table = new xmldb_table('course');
-        $field = new xmldb_field('sectioncache', XMLDB_TYPE_TEXT, null, null, null, null, null, 'showgrades');
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        // Amend course_sections to add date, time and groupingid availability
-        // conditions and a setting about whether to show them
-        $table = new xmldb_table('course_sections');
-        $field = new xmldb_field('availablefrom', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0', 'visible');
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-        $field = new xmldb_field('availableuntil', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0', 'availablefrom');
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-        $field = new xmldb_field('showavailability', XMLDB_TYPE_INTEGER, '1', null, XMLDB_NOTNULL, null, '0', 'availableuntil');
-        // Conditionally launch add field showavailability
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-        $field = new xmldb_field('groupingid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0', 'showavailability');
-        // Conditionally launch add field groupingid
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        // Since structure of 'course' table has changed we need to re-read $SITE from DB.
-        $SITE = $DB->get_record('course', array('id' => $SITE->id));
-        $COURSE = clone($SITE);
-
-        // Add course_sections_availability to add completion & grade availability conditions
-        $table = new xmldb_table('course_sections_availability');
-
-        $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null);
-        $table->add_field('coursesectionid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null);
-        $table->add_field('sourcecmid', XMLDB_TYPE_INTEGER, '10', null, null, null, null);
-        $table->add_field('requiredcompletion', XMLDB_TYPE_INTEGER, '1', null, null, null, null);
-        $table->add_field('gradeitemid', XMLDB_TYPE_INTEGER, '10', null, null, null, null);
-        $table->add_field('grademin', XMLDB_TYPE_NUMBER, '10, 5', null, null, null, null);
-        $table->add_field('grademax', XMLDB_TYPE_NUMBER, '10, 5', null, null, null, null);
-
-        $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
-        $table->add_key('coursesectionid', XMLDB_KEY_FOREIGN, array('coursesectionid'), 'course_sections', array('id'));
-        $table->add_key('sourcecmid', XMLDB_KEY_FOREIGN, array('sourcecmid'), 'course_modules', array('id'));
-        $table->add_key('gradeitemid', XMLDB_KEY_FOREIGN, array('gradeitemid'), 'grade_items', array('id'));
-
-        if (!$dbman->table_exists($table)) {
-            $dbman->create_table($table);
-        }
-
-        // Main savepoint reached
-        upgrade_main_savepoint(true, 2012051100.03);
-    }
-
-    if ($oldversion < 2012052100.00) {
-
-        // Define field referencefileid to be added to files.
-        $table = new xmldb_table('files');
-
-        // Define field referencefileid to be added to files.
-        $field = new xmldb_field('referencefileid', XMLDB_TYPE_INTEGER, '10', null, null, null, null, 'sortorder');
-
-        // Conditionally launch add field referencefileid.
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        // Define field referencelastsync to be added to files.
-        $field = new xmldb_field('referencelastsync', XMLDB_TYPE_INTEGER, '10', null, null, null, null, 'referencefileid');
-
-        // Conditionally launch add field referencelastsync.
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        // Define field referencelifetime to be added to files.
-        $field = new xmldb_field('referencelifetime', XMLDB_TYPE_INTEGER, '10', null, null, null, null, 'referencelastsync');
-
-        // Conditionally launch add field referencelifetime.
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        $key = new xmldb_key('referencefileid', XMLDB_KEY_FOREIGN, array('referencefileid'), 'files_reference', array('id'));
-        // Launch add key referencefileid
-        $dbman->add_key($table, $key);
-
-        // Define table files_reference to be created.
-        $table = new xmldb_table('files_reference');
-
-        // Adding fields to table files_reference.
-        $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null);
-        $table->add_field('repositoryid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null);
-        $table->add_field('lastsync', XMLDB_TYPE_INTEGER, '10', null, null, null, null);
-        $table->add_field('lifetime', XMLDB_TYPE_INTEGER, '10', null, null, null, null);
-        $table->add_field('reference', XMLDB_TYPE_TEXT, null, null, null, null, null);
-
-        // Adding keys to table files_reference.
-        $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
-        $table->add_key('repositoryid', XMLDB_KEY_FOREIGN, array('repositoryid'), 'repository_instances', array('id'));
-
-        // Conditionally launch create table for files_reference
-        if (!$dbman->table_exists($table)) {
-            $dbman->create_table($table);
-        }
-
-        // Main savepoint reached
-        upgrade_main_savepoint(true, 2012052100.00);
-    }
-
-    if ($oldversion < 2012052500.03) { // fix invalid course_completion_records MDL-27368
-        //first get all instances of duplicate records
-        $sql = 'SELECT userid, course FROM {course_completions} WHERE (deleted IS NULL OR deleted <> 1) GROUP BY userid, course HAVING (count(id) > 1)';
-        $duplicates = $DB->get_recordset_sql($sql, array());
-
-        foreach ($duplicates as $duplicate) {
-            $pointer = 0;
-            //now get all the records for this user/course
-            $sql = 'userid = ? AND course = ? AND (deleted IS NULL OR deleted <> 1)';
-            $completions = $DB->get_records_select('course_completions', $sql,
-                array($duplicate->userid, $duplicate->course), 'timecompleted DESC, timestarted DESC');
-            $needsupdate = false;
-            $origcompletion = null;
-            foreach ($completions as $completion) {
-                $pointer++;
-                if ($pointer === 1) { //keep 1st record but delete all others.
-                    $origcompletion = $completion;
-                } else {
-                    //we need to keep the "oldest" of all these fields as the valid completion record.
-                    $fieldstocheck = array('timecompleted', 'timestarted', 'timeenrolled');
-                    foreach ($fieldstocheck as $f) {
-                        if ($origcompletion->$f > $completion->$f) {
-                            $origcompletion->$f = $completion->$f;
-                            $needsupdate = true;
-                        }
-                    }
-                    $DB->delete_records('course_completions', array('id'=>$completion->id));
-                }
-            }
-            if ($needsupdate) {
-                $DB->update_record('course_completions', $origcompletion);
-            }
-        }
-
-        // Main savepoint reached
-        upgrade_main_savepoint(true, 2012052500.03);
-    }
-
-    if ($oldversion < 2012052900.00) {
-        // Clean up all duplicate records in the course_completions table in preparation
-        // for adding a new index there.
-        upgrade_course_completion_remove_duplicates(
-            'course_completions',
-            array('userid', 'course'),
-            array('timecompleted', 'timestarted', 'timeenrolled')
-        );
-
-        // Main savepoint reached
-        upgrade_main_savepoint(true, 2012052900.00);
-    }
-
-    if ($oldversion < 2012052900.01) {
-        // Add indexes to prevent new duplicates in the course_completions table.
-        // Define index useridcourse (unique) to be added to course_completions
-        $table = new xmldb_table('course_completions');
-        $index = new xmldb_index('useridcourse', XMLDB_INDEX_UNIQUE, array('userid', 'course'));
-
-        // Conditionally launch add index useridcourse
-        if (!$dbman->index_exists($table, $index)) {
-            $dbman->add_index($table, $index);
-        }
-
-        // Main savepoint reached
-        upgrade_main_savepoint(true, 2012052900.01);
-    }
-
-    if ($oldversion < 2012052900.02) {
-        // Clean up all duplicate records in the course_completion_crit_compl table in preparation
-        // for adding a new index there.
-        upgrade_course_completion_remove_duplicates(
-            'course_completion_crit_compl',
-            array('userid', 'course', 'criteriaid'),
-            array('timecompleted')
-        );
-
-        // Main savepoint reached
-        upgrade_main_savepoint(true, 2012052900.02);
-    }
-
-    if ($oldversion < 2012052900.03) {
-        // Add indexes to prevent new duplicates in the course_completion_crit_compl table.
-        // Define index useridcoursecriteraid (unique) to be added to course_completion_crit_compl
-        $table = new xmldb_table('course_completion_crit_compl');
-        $index = new xmldb_index('useridcoursecriteraid', XMLDB_INDEX_UNIQUE, array('userid', 'course', 'criteriaid'));
-
-        // Conditionally launch add index useridcoursecriteraid
-        if (!$dbman->index_exists($table, $index)) {
-            $dbman->add_index($table, $index);
-        }
-
-        // Main savepoint reached
-        upgrade_main_savepoint(true, 2012052900.03);
-    }
-
-    if ($oldversion < 2012052900.04) {
-        // Clean up all duplicate records in the course_completion_aggr_methd table in preparation
-        // for adding a new index there.
-        upgrade_course_completion_remove_duplicates(
-            'course_completion_aggr_methd',
-            array('course', 'criteriatype')
-        );
-
-        // Main savepoint reached
-        upgrade_main_savepoint(true, 2012052900.04);
-    }
-
-    if ($oldversion < 2012052900.05) {
-        // Add indexes to prevent new duplicates in the course_completion_aggr_methd table.
-        // Define index coursecriteratype (unique) to be added to course_completion_aggr_methd
-        $table = new xmldb_table('course_completion_aggr_methd');
-        $index = new xmldb_index('coursecriteriatype', XMLDB_INDEX_UNIQUE, array('course', 'criteriatype'));
-
-        // Conditionally launch add index coursecriteratype
-        if (!$dbman->index_exists($table, $index)) {
-            $dbman->add_index($table, $index);
-        }
-
-        // Main savepoint reached
-        upgrade_main_savepoint(true, 2012052900.05);
-    }
-
-    if ($oldversion < 2012060600.01) {
-        // Add field referencehash to files_reference
-        $table = new xmldb_table('files_reference');
-        $field = new xmldb_field('referencehash', XMLDB_TYPE_CHAR, '40', null, XMLDB_NOTNULL, null, null, 'reference');
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-        upgrade_main_savepoint(true, 2012060600.01);
-    }
-
-    if ($oldversion < 2012060600.02) {
-        // Populate referencehash field with SHA1 hash of the reference - this shoudl affect only 2.3dev sites
-        // that were using the feature for testing. Production sites have the table empty.
-        $rs = $DB->get_recordset('files_reference', null, '', 'id, reference');
-        foreach ($rs as $record) {
-            $hash = sha1($record->reference);
-            $DB->set_field('files_reference', 'referencehash', $hash, array('id' => $record->id));
-        }
-        $rs->close();
-
-        upgrade_main_savepoint(true, 2012060600.02);
-    }
-
-    if ($oldversion < 2012060600.03) {
-        // Merge duplicate records in files_reference that were created during the development
-        // phase at 2.3dev sites. This is needed so we can create the unique index over
-        // (repositoryid, referencehash) fields.
-        $sql = "SELECT repositoryid, referencehash, MIN(id) AS minid
-                  FROM {files_reference}
-              GROUP BY repositoryid, referencehash
-                HAVING COUNT(*) > 1";
-        $duprs = $DB->get_recordset_sql($sql);
-        foreach ($duprs as $duprec) {
-            // get the list of all ids in {files_reference} that need to be remapped
-            $dupids = $DB->get_records_select('files_reference', "repositoryid = ? AND referencehash = ? AND id > ?",
-                array($duprec->repositoryid, $duprec->referencehash, $duprec->minid), '', 'id');
-            $dupids = array_keys($dupids);
-            // relink records in {files} that are now referring to a duplicate record
-            // in {files_reference} to refer to the first one
-            list($subsql, $subparams) = $DB->get_in_or_equal($dupids);
-            $DB->set_field_select('files', 'referencefileid', $duprec->minid, "referencefileid $subsql", $subparams);
-            // and finally remove all orphaned records from {files_reference}
-            $DB->delete_records_list('files_reference', 'id', $dupids);
-        }
-        $duprs->close();
-
-        upgrade_main_savepoint(true, 2012060600.03);
-    }
-
-    if ($oldversion < 2012060600.04) {
-        // Add a unique index over repositoryid and referencehash fields in files_reference table
-        $table = new xmldb_table('files_reference');
-        $index = new xmldb_index('uq_external_file', XMLDB_INDEX_UNIQUE, array('repositoryid', 'referencehash'));
-
-        if (!$dbman->index_exists($table, $index)) {
-            $dbman->add_index($table, $index);
-        }
-
-        upgrade_main_savepoint(true, 2012060600.04);
-    }
-
-    if ($oldversion < 2012061800.01) {
-
-        // Define field screenreader to be dropped from user
-        $table = new xmldb_table('user');
-        $field = new xmldb_field('ajax');
-
-        // Conditionally launch drop field screenreader
-        if ($dbman->field_exists($table, $field)) {
-            $dbman->drop_field($table, $field);
-        }
-
-        // Main savepoint reached
-        upgrade_main_savepoint(true, 2012061800.01);
-    }
-
-    if ($oldversion < 2012062000.00) {
-        // Add field newcontextid to backup_files_template
-        $table = new xmldb_table('backup_files_template');
-        $field = new xmldb_field('newcontextid', XMLDB_TYPE_INTEGER, '10', null, null, null, null, 'info');
-
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        upgrade_main_savepoint(true, 2012062000.00);
-    }
-
-    if ($oldversion < 2012062000.01) {
-        // Add field newitemid to backup_files_template
-        $table = new xmldb_table('backup_files_template');
-        $field = new xmldb_field('newitemid', XMLDB_TYPE_INTEGER, '10', null, null, null, null, 'newcontextid');
-
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        upgrade_main_savepoint(true, 2012062000.01);
-    }
-
-    // Moodle v2.3.0 release upgrade line
-    // Put any upgrade step following this
-
-    if ($oldversion < 2012062500.02) {
-        // Drop some old backup tables, not used anymore
-
-        // Define table backup_files to be dropped
-        $table = new xmldb_table('backup_files');
-
-        // Conditionally launch drop table for backup_files
-        if ($dbman->table_exists($table)) {
-            $dbman->drop_table($table);
-        }
-
-        // Define table backup_ids to be dropped
-        $table = new xmldb_table('backup_ids');
-
-        // Conditionally launch drop table for backup_ids
-        if ($dbman->table_exists($table)) {
-            $dbman->drop_table($table);
-        }
-
-        // Main savepoint reached
-        upgrade_main_savepoint(true, 2012062500.02);
-    }
-
-    if ($oldversion < 2012070600.04) {
-        // Define table course_modules_avail_fields to be created
-        $table = new xmldb_table('course_modules_avail_fields');
-
-        // Adding fields to table course_modules_avail_fields
-        $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null);
-        $table->add_field('coursemoduleid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null);
-        $table->add_field('userfield', XMLDB_TYPE_CHAR, '50', null, null, null, null);
-        $table->add_field('customfieldid', XMLDB_TYPE_INTEGER, '10', null, null, null, null);
-        $table->add_field('operator', XMLDB_TYPE_CHAR, '20', null, XMLDB_NOTNULL, null, null);
-        $table->add_field('value', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null);
-
-        // Adding keys to table course_modules_avail_fields
-        $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
-        $table->add_key('coursemoduleid', XMLDB_KEY_FOREIGN, array('coursemoduleid'), 'course_modules', array('id'));
-
-        // Conditionally launch create table for course_modules_avail_fields
-        if (!$dbman->table_exists($table)) {
-            $dbman->create_table($table);
-        }
-
-        // Main savepoint reached
-        upgrade_main_savepoint(true, 2012070600.04);
-    }
-
-    if ($oldversion < 2012070600.05) {
-        // Define table course_sections_avail_fields to be created
-        $table = new xmldb_table('course_sections_avail_fields');
-
-        // Adding fields to table course_sections_avail_fields
-        $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null);
-        $table->add_field('coursesectionid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null);
-        $table->add_field('userfield', XMLDB_TYPE_CHAR, '50', null, null, null, null);
-        $table->add_field('customfieldid', XMLDB_TYPE_INTEGER, '10', null, null, null, null);
-        $table->add_field('operator', XMLDB_TYPE_CHAR, '20', null, XMLDB_NOTNULL, null, null);
-        $table->add_field('value', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null);
-
-        // Adding keys to table course_sections_avail_fields
-        $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
-        $table->add_key('coursesectionid', XMLDB_KEY_FOREIGN, array('coursesectionid'), 'course_sections', array('id'));
-
-        // Conditionally launch create table for course_sections_avail_fields
-        if (!$dbman->table_exists($table)) {
-            $dbman->create_table($table);
-        }
-
-        // Main savepoint reached
-        upgrade_main_savepoint(true, 2012070600.05);
-    }
-
-    if ($oldversion < 2012070600.06) {
-
-        // Drop "deleted" fields
-        $table = new xmldb_table('course_completions');
-        $field = new xmldb_field('timenotified');
-        $field = new xmldb_field('deleted');
-
-        // Conditionally launch drop field deleted from course_completions
-        if ($dbman->field_exists($table, $field)) {
-            $dbman->drop_field($table, $field);
-        }
-
-        $field = new xmldb_field('timenotified');
-        // Conditionally launch drop field timenotified from course_completions
-        if ($dbman->field_exists($table, $field)) {
-            $dbman->drop_field($table, $field);
-        }
-
-        // Main savepoint reached
-        upgrade_main_savepoint(true, 2012070600.06);
-    }
-
-    if ($oldversion < 2012070600.07) {
-        $table = new xmldb_table('course_completion_crit_compl');
-        $field = new xmldb_field('deleted');
-
-        // Conditionally launch drop field deleted from course_completion_crit_compl
-        if ($dbman->field_exists($table, $field)) {
-            $dbman->drop_field($table, $field);
-        }
-        // Main savepoint reached
-        upgrade_main_savepoint(true, 2012070600.07);
-    }
-
-    if ($oldversion < 2012070600.08) {
-
-        // Drop unused table "course_completion_notify"
-        $table = new xmldb_table('course_completion_notify');
-
-        // Conditionally launch drop table course_completion_notify
-        if ($dbman->table_exists($table)) {
-            $dbman->drop_table($table);
-        }
-
-        // Main savepoint reached
-        upgrade_main_savepoint(true, 2012070600.08);
-     }
-
-    if ($oldversion < 2012070600.09) {
-
-        // Define index path (not unique) to be added to context
-        $table = new xmldb_table('context');
-        $index = new xmldb_index('path', XMLDB_INDEX_NOTUNIQUE, array('path'), array('varchar_pattern_ops'));
-
-        // Recreate index with new pattern hint
-        if ($DB->get_dbfamily() === 'postgres') {
-            if ($dbman->index_exists($table, $index)) {
-                $dbman->drop_index($table, $index);
-            }
-            $dbman->add_index($table, $index);
-        }
-
-        // Main savepoint reached
-        upgrade_main_savepoint(true, 2012070600.09);
-    }
-
-    if ($oldversion < 2012070600.10) {
-
-        // Define index name (unique) to be dropped form role
-        $table = new xmldb_table('role');
-        $index = new xmldb_index('name', XMLDB_INDEX_UNIQUE, array('name'));
-
-        // Conditionally launch drop index name
-        if ($dbman->index_exists($table, $index)) {
-            $dbman->drop_index($table, $index);
-        }
-
-        // Main savepoint reached
-        upgrade_main_savepoint(true, 2012070600.10);
-    }
-
-    if ($oldversion < 2012070600.11) {
-
-        // Define index component-itemid-userid (not unique) to be added to role_assignments
-        $table = new xmldb_table('role_assignments');
-        $index = new xmldb_index('component-itemid-userid', XMLDB_INDEX_NOTUNIQUE, array('component', 'itemid', 'userid'));
-
-        // Conditionally launch add index component-itemid-userid
-        if (!$dbman->index_exists($table, $index)) {
-            $dbman->add_index($table, $index);
-        }
-
-        // Main savepoint reached
-        upgrade_main_savepoint(true, 2012070600.11);
-    }
-
-    if ($oldversion < 2012071900.01) {
-        // Cleanup after simpeltests tool
-        capabilities_cleanup('tool_unittest');
-        unset_all_config_for_plugin('tool_unittest');
-
-        upgrade_main_savepoint(true, 2012071900.01);
-    }
-
-    if ($oldversion < 2012072400.00) {
-        // Remove obsolete xhtml strict setting - use THEME->doctype in theme config if necessary,
-        // see theme_config->doctype in lib/outputlib.php for more details.
-        unset_config('xmlstrictheaders');
-        upgrade_main_savepoint(true, 2012072400.00);
-    }
-
-    if ($oldversion < 2012072401.00) {
-
-        // Saves orphaned questions from the Dark Side
-        upgrade_save_orphaned_questions();
-
-        // Main savepoint reached
-        upgrade_main_savepoint(true, 2012072401.00);
-    }
-
-    if ($oldversion < 2012072600.01) {
-        // Handle events with empty eventtype //MDL-32827
-
-        $DB->set_field('event', 'eventtype', 'site', array('eventtype' => '', 'courseid' => $SITE->id));
-        $DB->set_field_select('event', 'eventtype', 'due', "eventtype = '' AND courseid != 0 AND groupid = 0 AND (modulename = 'assignment' OR modulename = 'assign')");
-        $DB->set_field_select('event', 'eventtype', 'course', "eventtype = '' AND courseid != 0 AND groupid = 0");
-        $DB->set_field_select('event', 'eventtype', 'group', "eventtype = '' AND groupid != 0");
-        $DB->set_field_select('event', 'eventtype', 'user', "eventtype = '' AND userid != 0");
-
-        // Main savepoint reached
-        upgrade_main_savepoint(true, 2012072600.01);
-    }
-
-    if ($oldversion < 2012080200.02) {
-        // Drop obsolete question upgrade field that should have been added to the install.xml.
-        $table = new xmldb_table('question');
-        $field = new xmldb_field('oldquestiontextformat', XMLDB_TYPE_INTEGER, '2', null, XMLDB_NOTNULL, null, '0');
-
-        if ($dbman->field_exists($table, $field)) {
-            $dbman->drop_field($table, $field);
-        }
-
-        upgrade_main_savepoint(true, 2012080200.02);
-    }
-
-    if ($oldversion < 2012081400.01) {
-        // Move the ability to disable blogs to its own setting MDL-25012.
-
-        if (isset($CFG->bloglevel)) {
-            // Only change settings if existing setting was set.
-            if (empty($CFG->bloglevel)) {
-                set_config('enableblogs', 0);
-                // Now set the bloglevel to a valid setting as the disabled setting has been removed.
-                // This prevents confusing results when users enable the blog system in future.
-                set_config('bloglevel', BLOG_USER_LEVEL);
-            } else {
-                set_config('enableblogs', 1);
-            }
-        }
-
-        // Main savepoint reached
-        upgrade_main_savepoint(true, 2012081400.01);
-    }
-
-    if ($oldversion < 2012081600.01) {
-        // Delete removed setting - Google Maps API V2 will not work in 2013.
-        unset_config('googlemapkey');
-        upgrade_main_savepoint(true, 2012081600.01);
-    }
-
-    if ($oldversion < 2012082300.01) {
-        // Add more custom enrol fields.
-        $table = new xmldb_table('enrol');
-        $field = new xmldb_field('customint5', XMLDB_TYPE_INTEGER, '10', null, null, null, null, 'customint4');
-
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        $field = new xmldb_field('customint6', XMLDB_TYPE_INTEGER, '10', null, null, null, null, 'customint5');
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        $field = new xmldb_field('customint7', XMLDB_TYPE_INTEGER, '10', null, null, null, null, 'customint6');
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        $field = new xmldb_field('customint8', XMLDB_TYPE_INTEGER, '10', null, null, null, null, 'customint7');
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        $field = new xmldb_field('customchar3', XMLDB_TYPE_CHAR, '1333', null, null, null, null, 'customchar2');
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        $field = new xmldb_field('customtext3', XMLDB_TYPE_TEXT, null, null, null, null, null, 'customtext2');
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        $field = new xmldb_field('customtext4', XMLDB_TYPE_TEXT, null, null, null, null, null, 'customtext3');
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2012082300.01);
-    }
-
-    if ($oldversion < 2012082300.02) {
-        // Define field component to be added to groups_members
-        $table = new xmldb_table('groups_members');
-        $field = new xmldb_field('component', XMLDB_TYPE_CHAR, '100', null, XMLDB_NOTNULL, null, null, 'timeadded');
-
-        // Conditionally launch add field component
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        // Define field itemid to be added to groups_members
-        $field = new xmldb_field('itemid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0', 'component');
-
-        // Conditionally launch add field itemid
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        // Main savepoint reached
-        upgrade_main_savepoint(true, 2012082300.02);
-    }
-
-    if ($oldversion < 2012090500.00) {
-        $subquery = 'SELECT b.id FROM {blog_external} b where b.id = ' . $DB->sql_cast_char2int('{post}.content', true);
-        $sql = 'DELETE FROM {post}
-                      WHERE {post}.module = \'blog_external\'
-                            AND NOT EXISTS (' . $subquery . ')
-                            AND ' . $DB->sql_isnotempty('post', 'uniquehash', false, false);
-        $DB->execute($sql);
-        upgrade_main_savepoint(true, 2012090500.00);
-    }
-
-    if ($oldversion < 2012090700.01) {
-        // Add a category field in the course_request table
-        $table = new xmldb_table('course_request');
-        $field = new xmldb_field('category', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, 0, 'summaryformat');
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2012090700.01);
-    }
-
-    if ($oldversion < 2012091700.00) {
-
-        // Dropping screenreader field from user.
-        $table = new xmldb_table('user');
-        $field = new xmldb_field('screenreader');
-
-        if ($dbman->field_exists($table, $field)) {
-            $dbman->drop_field($table, $field);
-        }
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2012091700.00);
-    }
-
-    if ($oldversion < 2012092100.01) {
-        // Some folders still have a sortorder set, which is used for main files but is not
-        // supported by the folder resource. We reset the value here.
-        $sql = 'UPDATE {files} SET sortorder = ? WHERE component = ? AND filearea = ? AND sortorder <> ?';
-        $DB->execute($sql, array(0, 'mod_folder', 'content', 0));
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2012092100.01);
-    }
-
-    if ($oldversion < 2012092600.00) {
-        // Define index idname (unique) to be added to tag
-        $table = new xmldb_table('tag');
-        $index = new xmldb_index('idname', XMLDB_INDEX_UNIQUE, array('id', 'name'));
-
-        // Conditionally launch add index idname
-        if (!$dbman->index_exists($table, $index)) {
-            $dbman->add_index($table, $index);
-        }
-
-        // Main savepoint reached
-        upgrade_main_savepoint(true, 2012092600.00);
-    }
-
-    if ($oldversion < 2012101500.01) {
-        // Find all orphaned blog associations that might exist.
-        $sql = "SELECT ba.id
-                  FROM {blog_association} ba
-             LEFT JOIN {post} p
-                    ON p.id = ba.blogid
-                 WHERE p.id IS NULL";
-        $orphanedrecordids = $DB->get_records_sql($sql);
-        // Now delete these associations.
-        foreach ($orphanedrecordids as $orphanedrecord) {
-            $DB->delete_records('blog_association', array('id' => $orphanedrecord->id));
-        }
-
-        upgrade_main_savepoint(true, 2012101500.01);
-    }
-
-    if ($oldversion < 2012101800.02) {
-        // Renaming backups using previous file naming convention.
-        upgrade_rename_old_backup_files_using_shortname();
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2012101800.02);
-    }
-
-    if ($oldversion < 2012103001.00) {
-        // create new event_subscriptions table
-        $table = new xmldb_table('event_subscriptions');
-        $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null);
-        $table->add_field('url', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null);
-        $table->add_field('courseid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0');
-        $table->add_field('groupid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0');
-        $table->add_field('userid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0');
-        $table->add_field('pollinterval', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0');
-        $table->add_field('lastupdated', XMLDB_TYPE_INTEGER, '10', null, null, null, null);
-        $table->add_field('name', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null);
-        $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
-        if (!$dbman->table_exists($table)) {
-            $dbman->create_table($table);
-        }
-        // Main savepoint reached
-        upgrade_main_savepoint(true, 2012103001.00);
-    }
-
-    if ($oldversion < 2012103002.00) {
-        // Add subscription field to the event table
-        $table = new xmldb_table('event');
-        $field = new xmldb_field('subscriptionid', XMLDB_TYPE_INTEGER, '10', null, null, null, null, 'timemodified');
-
-        // Conditionally launch add field subscriptionid
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-        upgrade_main_savepoint(true, 2012103002.00);
-    }
-
-    if ($oldversion < 2012103003.00) {
-        // Fix uuid field in event table to match RFC-2445 UID property.
-        $table = new xmldb_table('event');
-        $field = new xmldb_field('uuid', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, 'visible');
-        // The column already exists, so make sure there are no nulls (crazy mysql).
-        $DB->set_field_select('event', 'uuid', '', "uuid IS NULL");
-        // Changing precision of field uuid on table event to (255).
-        $dbman->change_field_precision($table, $field);
-        // Main savepoint reached
-        upgrade_main_savepoint(true, 2012103003.00);
-    }
-
-    if ($oldversion < 2012110200.00) {
-
-        // Define table course_format_options to be created
-        $table = new xmldb_table('course_format_options');
-
-        // Adding fields to table course_format_options
-        $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null);
-        $table->add_field('courseid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null);
-        $table->add_field('format', XMLDB_TYPE_CHAR, '21', null, XMLDB_NOTNULL, null, null);
-        $table->add_field('sectionid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0', 'format');
-        $table->add_field('name', XMLDB_TYPE_CHAR, '100', null, XMLDB_NOTNULL, null, null);
-        $table->add_field('value', XMLDB_TYPE_TEXT, null, null, null, null, null);
-
-        // Adding keys to table course_format_options
-        $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
-        $table->add_key('courseid', XMLDB_KEY_FOREIGN, array('courseid'), 'course', array('id'));
-
-        // Adding indexes to table course_format_options
-        $table->add_index('formatoption', XMLDB_INDEX_UNIQUE, array('courseid', 'format', 'sectionid', 'name'));
-
-        // Conditionally launch create table for course_format_options
-        if (!$dbman->table_exists($table)) {
-            $dbman->create_table($table);
-        }
-
-        // Changing type of field format on table course to char with length 21
-        $table = new xmldb_table('course');
-        $field = new xmldb_field('format', XMLDB_TYPE_CHAR, '21', null, XMLDB_NOTNULL, null, 'topics', 'summaryformat');
-
-        // Launch change of type for field format
-        $dbman->change_field_type($table, $field);
-
-        // Since structure of 'course' table has changed we need to re-read $SITE from DB.
-        $SITE = $DB->get_record('course', array('id' => $SITE->id));
-        $COURSE = clone($SITE);
-
-        // Main savepoint reached
-        upgrade_main_savepoint(true, 2012110200.00);
-    }
-
-    if ($oldversion < 2012110201.00) {
-
-        // Copy fields 'coursedisplay', 'numsections', 'hiddensections' from table {course}
-        // to table {course_format_options} as the additional format options
-        $fields = array();
-        $table = new xmldb_table('course');
-        foreach (array('coursedisplay', 'numsections', 'hiddensections') as $fieldname) {
-            // first check that fields still exist
-            $field = new xmldb_field($fieldname);
-            if ($dbman->field_exists($table, $field)) {
-                $fields[] = $fieldname;
-            }
-        }
-
-        if (!empty($fields)) {
-            $transaction = $DB->start_delegated_transaction();
-            $rs = $DB->get_recordset_sql('SELECT id, format, '. join(',', $fields).'
-                FROM {course}
-                WHERE format <> ? AND format <> ?',
-                array('scorm', 'social'));
-            // (do not copy fields from scrom and social formats, we already know that they are not used)
-            foreach ($rs as $rec) {
-                foreach ($fields as $field) {
-                    try {
-                        $DB->insert_record('course_format_options',
-                                array(
-                                    'courseid'  => $rec->id,
-                                    'format'    => $rec->format,
-                                    'sectionid' => 0,
-                                    'name'      => $field,
-                                    'value'     => $rec->$field
-                                ));
-                    } catch (dml_exception $e) {
-                        // index 'courseid,format,sectionid,name' violation
-                        // continue; the entry in course_format_options already exists, use it
-                    }
-                }
-            }
-            $rs->close();
-            $transaction->allow_commit();
-
-            // Drop fields from table course
-            foreach ($fields as $fieldname) {
-                $field = new xmldb_field($fieldname);
-                $dbman->drop_field($table, $field);
-            }
-        }
-
-        // Since structure of 'course' table has changed we need to re-read $SITE from DB.
-        $SITE = $DB->get_record('course', array('id' => $SITE->id));
-        $COURSE = clone($SITE);
-
-        // Main savepoint reached
-        upgrade_main_savepoint(true, 2012110201.00);
-    }
-
-    if ($oldversion < 2012110700.01) {
-
-        // Define field caller_component to be added to portfolio_log.
-        $table = new xmldb_table('portfolio_log');
-        $field = new xmldb_field('caller_component', XMLDB_TYPE_CHAR, '255', null, null, null, null, 'caller_file');
-
-        // Conditionally launch add field caller_component.
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2012110700.01);
-    }
-
-    if ($oldversion < 2012111200.00) {
-
-        // Define table temp_enroled_template to be created
-        $table = new xmldb_table('temp_enroled_template');
-
-        // Adding fields to table temp_enroled_template
-        $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null);
-        $table->add_field('userid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0');
-        $table->add_field('courseid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0');
-        $table->add_field('roleid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null);
-
-        // Adding keys to table temp_enroled_template
-        $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
-
-        // Adding indexes to table temp_enroled_template
-        $table->add_index('userid', XMLDB_INDEX_NOTUNIQUE, array('userid'));
-        $table->add_index('courseid', XMLDB_INDEX_NOTUNIQUE, array('courseid'));
-        $table->add_index('roleid', XMLDB_INDEX_NOTUNIQUE, array('roleid'));
-
-        // Conditionally launch create table for temp_enroled_template
-        if (!$dbman->table_exists($table)) {
-            $dbman->create_table($table);
-        }
-
-        // Define table temp_log_template to be created
-        $table = new xmldb_table('temp_log_template');
-
-        // Adding fields to table temp_log_template
-        $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null);
-        $table->add_field('userid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0');
-        $table->add_field('course', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0');
-        $table->add_field('action', XMLDB_TYPE_CHAR, '40', null, XMLDB_NOTNULL, null, null);
-
-        // Adding keys to table temp_log_template
-        $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
-
-        // Adding indexes to table temp_log_template
-        $table->add_index('action', XMLDB_INDEX_NOTUNIQUE, array('action'));
-        $table->add_index('course', XMLDB_INDEX_NOTUNIQUE, array('course'));
-        $table->add_index('user', XMLDB_INDEX_NOTUNIQUE, array('userid'));
-        $table->add_index('usercourseaction', XMLDB_INDEX_NOTUNIQUE, array('userid', 'course', 'action'));
-
-        // Conditionally launch create table for temp_log_template
-        if (!$dbman->table_exists($table)) {
-            $dbman->create_table($table);
-        }
-
-        // Main savepoint reached
-        upgrade_main_savepoint(true, 2012111200.00);
-    }
-
-    if ($oldversion < 2012111200.01) {
-        // Force the rebuild of the cache of every courses, some cached information could contain wrong icon references.
-        $DB->execute('UPDATE {course} set modinfo = ?, sectioncache = ?', array(null, null));
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2012111200.01);
-    }
-
-    if ($oldversion < 2012111601.01) {
-        // Clea up after old shared memory caching support.
-        unset_config('cachetype');
-        unset_config('rcache');
-        unset_config('rcachettl');
-        unset_config('intcachemax');
-        unset_config('memcachedhosts');
-        unset_config('memcachedpconn');
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2012111601.01);
-    }
-
-    if ($oldversion < 2012112100.00) {
-
-        // Define field eventtype to be added to event_subscriptions.
-        $table = new xmldb_table('event_subscriptions');
-        $field = new xmldb_field('eventtype', XMLDB_TYPE_CHAR, '20', null, XMLDB_NOTNULL, null, null, 'userid');
-
-        // Conditionally launch add field eventtype.
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2012112100.00);
-    }
-
-    // Moodle v2.4.0 release upgrade line
-    // Put any upgrade step following this
-
-    if ($oldversion < 2012120300.01) {
-        // Make sure site-course has format='site' //MDL-36840
-
-        if ($SITE->format !== 'site') {
-            $DB->set_field('course', 'format', 'site', array('id' => $SITE->id));
-            $SITE->format = 'site';
-            $COURSE->format = 'site';
-        }
-
-        // Main savepoint reached
-        upgrade_main_savepoint(true, 2012120300.01);
-    }
-
-    if ($oldversion < 2012120300.04) {
-        // Remove "_utf8" suffix from all langs in course table.
-        $langs = $DB->get_records_sql("SELECT DISTINCT lang FROM {course} WHERE lang LIKE ?", array('%_utf8'));
-
-        foreach ($langs as $lang=>$unused) {
-            $newlang = str_replace('_utf8', '', $lang);
-            $sql = "UPDATE {course} SET lang = :newlang WHERE lang = :lang";
-            $DB->execute($sql, array('newlang'=>$newlang, 'lang'=>$lang));
-        }
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2012120300.04);
-    }
-
-    if ($oldversion < 2012123000.00) {
-        // Purge removed module filters and all their settings.
-
-        $tables = array('filter_active', 'filter_config');
-        foreach ($tables as $table) {
-            $DB->delete_records_select($table, "filter LIKE 'mod/%'");
-            $filters = $DB->get_records_sql("SELECT DISTINCT filter FROM {{$table}} WHERE filter LIKE 'filter/%'");
-            foreach ($filters as $filter) {
-                $DB->set_field($table, 'filter', substr($filter->filter, 7), array('filter'=>$filter->filter));
-            }
-        }
-
-        $configs = array('stringfilters', 'filterall');
-        foreach ($configs as $config) {
-            if ($filters = get_config(null, $config)) {
-                $filters = explode(',', $filters);
-                $newfilters = array();
-                foreach($filters as $filter) {
-                    if (strpos($filter, '/') === false) {
-                        $newfilters[] = $filter;
-                    } else if (strpos($filter, 'filter/') === 0) {
-                        $newfilters[] = substr($filter, 7);
-                    }
-                }
-                $filters = implode(',', $newfilters);
-                set_config($config, $filters);
-            }
-        }
-
-        unset($tables);
-        unset($table);
-        unset($configs);
-        unset($newfilters);
-        unset($filters);
-        unset($filter);
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2012123000.00);
-    }
-
-    if ($oldversion < 2013021100.01) {
-        // Make sure there are no bogus nulls in old MySQL tables.
-        $DB->set_field_select('user', 'password', '', "password IS NULL");
-
-        // Changing precision of field password on table user to (255).
-        $table = new xmldb_table('user');
-        $field = new xmldb_field('password', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, 'username');
-
-        // Launch change of precision for field password.
-        $dbman->change_field_precision($table, $field);
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2013021100.01);
-    }
-
-    if ($oldversion < 2013021800.00) {
-        // Add the site identifier to the cache config's file.
-        $siteidentifier = $DB->get_field('config', 'value', array('name' => 'siteidentifier'));
-        cache_helper::update_site_identifier($siteidentifier);
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2013021800.00);
-    }
-
-    if ($oldversion < 2013021801.00) {
-        // Fixing possible wrong MIME types for SMART Notebook files.
-        $extensions = array('%.gallery', '%.galleryitem', '%.gallerycollection', '%.nbk', '%.notebook', '%.xbk');
-        $select = $DB->sql_like('filename', '?', false);
-        foreach ($extensions as $extension) {
-            $DB->set_field_select(
-                'files',
-                'mimetype',
-                'application/x-smarttech-notebook',
-                $select,
-                array($extension)
-            );
-        }
-        upgrade_main_savepoint(true, 2013021801.00);
-    }
-
-    if ($oldversion < 2013021801.01) {
-        // This upgrade step is re-written under MDL-38228 (see below).
-        /*
-        // Retrieve the list of course_sections as a recordset to save memory
-        $coursesections = $DB->get_recordset('course_sections', null, 'course, id', 'id, course, sequence');
-        foreach ($coursesections as $coursesection) {
-            // Retrieve all of the actual modules in this course and section combination to reduce DB calls
-            $actualsectionmodules = $DB->get_records('course_modules',
-                    array('course' => $coursesection->course, 'section' => $coursesection->id), '', 'id, section');
-
-            // Break out the current sequence so that we can compare it
-            $currentsequence = explode(',', $coursesection->sequence);
-            $newsequence = array();
-
-            // Check each of the modules in the current sequence
-            foreach ($currentsequence as $module) {
-                if (isset($actualsectionmodules[$module])) {
-                    $newsequence[] = $module;
-                    // We unset the actualsectionmodules so that we don't get duplicates and that we can add orphaned
-                    // modules later
-                    unset($actualsectionmodules[$module]);
-                }
-            }
-
-            // Append any modules which have somehow been orphaned
-            foreach ($actualsectionmodules as $module) {
-                $newsequence[] = $module->id;
-            }
-
-            // Piece it all back together
-            $sequence = implode(',', $newsequence);
-
-            // Only update if there have been changes
-            if ($sequence !== $coursesection->sequence) {
-                $coursesection->sequence = $sequence;
-                $DB->update_record('course_sections', $coursesection);
-
-                // And clear the sectioncache and modinfo cache - they'll be regenerated on next use
-                $course = new stdClass();
-                $course->id = $coursesection->course;
-                $course->sectioncache = null;
-                $course->modinfo = null;
-                $DB->update_record('course', $course);
-            }
-        }
-        $coursesections->close();
-        */
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2013021801.01);
-    }
-
-    if ($oldversion < 2013021902.00) {
-        // ISO country change: Netherlands Antilles is split into BQ, CW & SX
-        // http://www.iso.org/iso/iso_3166-1_newsletter_vi-8_split_of_the_dutch_antilles_final-en.pdf
-        $sql = "UPDATE {user} SET country = '' WHERE country = ?";
-        $DB->execute($sql, array('AN'));
-
-        upgrade_main_savepoint(true, 2013021902.00);
-    }
-
-    if ($oldversion < 2013022600.00) {
-        // Delete entries regarding invalid 'interests' option which breaks course.
-        $DB->delete_records('course_sections_avail_fields', array('userfield' => 'interests'));
-        $DB->delete_records('course_modules_avail_fields', array('userfield' => 'interests'));
-        // Clear course cache (will be rebuilt on first visit) in case of changes to these.
-        $DB->execute('UPDATE {course} set modinfo = ?, sectioncache = ?', array(null, null));
-
-        upgrade_main_savepoint(true, 2013022600.00);
-    }
-
-    // Add index to field "timemodified" for grade_grades_history table.
-    if ($oldversion < 2013030400.00) {
-        $table = new xmldb_table('grade_grades_history');
-        $field = new xmldb_field('timemodified');
-
-        if ($dbman->field_exists($table, $field)) {
-            $index = new xmldb_index('timemodified', XMLDB_INDEX_NOTUNIQUE, array('timemodified'));
-            if (!$dbman->index_exists($table, $index)) {
-                $dbman->add_index($table, $index);
-            }
-        }
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2013030400.00);
-    }
-
-    if ($oldversion < 2013030400.02) {
-        // Cleanup qformat blackboard settings.
-        unset_all_config_for_plugin('qformat_blackboard');
-
-        upgrade_main_savepoint(true, 2013030400.02);
-    }
-
-    // This is checking to see if the site has been running a specific version with a bug in it
-    // because this upgrade step is slow and is only needed if the site has been running with the affected versions.
-    if ($oldversion >= 2012062504.08 && $oldversion < 2012062504.13) {
-        // This upgrade step is re-written under MDL-38228 (see below).
-
-        /*
-        // Retrieve the list of course_sections as a recordset to save memory.
-        // This is to fix a regression caused by MDL-37939.
-        // In this case the upgrade step is fixing records where:
-        // The data in course_sections.sequence contains the correct module id
-        // The section field for on the course modules table may have been updated to point to the incorrect id.
-
-        // This query is looking for sections where the sequence is not in sync with the course_modules table.
-        // The syntax for the like query is looking for a value in a comma separated list.
-        // It adds a comma to either site of the list and then searches for LIKE '%,id,%'.
-        $sequenceconcat = $DB->sql_concat("','", 's.sequence', "','");
-        $moduleconcat = $DB->sql_concat("'%,'", 'cm.id', "',%'");
-        $sql = 'SELECT s2.id, s2.course, s2.sequence
-                FROM {course_sections} s2
-                JOIN(
-                    SELECT DISTINCT s.id
-                    FROM
-                    {course_modules} cm
-                    JOIN {course_sections} s
-                    ON
-                        cm.course = s.course
-                    WHERE cm.section != s.id AND ' . $sequenceconcat . ' LIKE ' . $moduleconcat . '
-                ) d
-                ON s2.id = d.id';
-        $coursesections = $DB->get_recordset_sql($sql);
-
-        foreach ($coursesections as $coursesection) {
-            // Retrieve all of the actual modules in this course and section combination to reduce DB calls.
-            $actualsectionmodules = $DB->get_records('course_modules',
-                    array('course' => $coursesection->course, 'section' => $coursesection->id), '', 'id, section');
-
-            // Break out the current sequence so that we can compare it.
-            $currentsequence = explode(',', $coursesection->sequence);
-            $orphanlist = array();
-
-            // Check each of the modules in the current sequence.
-            foreach ($currentsequence as $cmid) {
-                if (!empty($cmid) && !isset($actualsectionmodules[$cmid])) {
-                    $orphanlist[] = $cmid;
-                }
-            }
-
-            if (!empty($orphanlist)) {
-                list($sql, $params) = $DB->get_in_or_equal($orphanlist, SQL_PARAMS_NAMED);
-                $sql = "id $sql";
-
-                $DB->set_field_select('course_modules', 'section', $coursesection->id, $sql, $params);
-
-                // And clear the sectioncache and modinfo cache - they'll be regenerated on next use.
-                $course = new stdClass();
-                $course->id = $coursesection->course;
-                $course->sectioncache = null;
-                $course->modinfo = null;
-                $DB->update_record('course', $course);
-            }
-        }
-        $coursesections->close();
-
-        // No savepoint needed for this change.
-         */
-    }
-
-    if ($oldversion < 2013032200.01) {
-        // GD is now always available
-        set_config('gdversion', 2);
-
-        upgrade_main_savepoint(true, 2013032200.01);
-    }
-
-    if ($oldversion < 2013032600.03) {
-        // Fixing possible wrong MIME type for MIME HTML (MHTML) files.
-        $extensions = array('%.mht', '%.mhtml');
-        $select = $DB->sql_like('filename', '?', false);
-        foreach ($extensions as $extension) {
-            $DB->set_field_select(
-                'files',
-                'mimetype',
-                'message/rfc822',
-                $select,
-                array($extension)
-            );
-        }
-        upgrade_main_savepoint(true, 2013032600.03);
-    }
-
-    if ($oldversion < 2013032600.04) {
-        // MDL-31983 broke the quiz version number. Fix it.
-        $DB->set_field('modules', 'version', '2013021500',
-                array('name' => 'quiz', 'version' => '2013310100'));
-        upgrade_main_savepoint(true, 2013032600.04);
-    }
-
-    if ($oldversion < 2013040200.00) {
-        // Add openbadges tables.
-
-        // Define table 'badge' to be created.
-        $table = new xmldb_table('badge');
-
-        // Adding fields to table 'badge'.
-        $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null);
-        $table->add_field('name', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, 'id');
-        $table->add_field('description', XMLDB_TYPE_TEXT, null, null, null, null, null, 'name');
-        $table->add_field('image', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, 'description');
-        $table->add_field('timecreated', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0', 'image');
-        $table->add_field('timemodified', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0', 'timecreated');
-        $table->add_field('usercreated', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, 'timemodified');
-        $table->add_field('usermodified', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, 'usercreated');
-        $table->add_field('issuername', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, 'usermodified');
-        $table->add_field('issuerurl', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, 'issuername');
-        $table->add_field('issuercontact', XMLDB_TYPE_CHAR, '255', null, null, null, null, 'issuerurl');
-        $table->add_field('expiredate', XMLDB_TYPE_INTEGER, '10', null, null, null, null, 'issuercontact');
-        $table->add_field('expireperiod', XMLDB_TYPE_INTEGER, '10', null, null, null, null, 'expiredate');
-        $table->add_field('type', XMLDB_TYPE_INTEGER, '1', null, XMLDB_NOTNULL, null, '1', 'expireperiod');
-        $table->add_field('courseid', XMLDB_TYPE_INTEGER, '10', null, null, null, null, 'type');
-        $table->add_field('message', XMLDB_TYPE_TEXT, null, null, XMLDB_NOTNULL, null, null, 'courseid');
-        $table->add_field('messagesubject', XMLDB_TYPE_TEXT, null, null, XMLDB_NOTNULL, null, null, 'message');
-        $table->add_field('attachment', XMLDB_TYPE_INTEGER, '1', null, XMLDB_NOTNULL, null, '1', 'messagesubject');
-        $table->add_field('notification', XMLDB_TYPE_INTEGER, '1', null, XMLDB_NOTNULL, null, '1', 'attachment');
-        $table->add_field('status', XMLDB_TYPE_INTEGER, '1', null, XMLDB_NOTNULL, null, '0', 'notification');
-        $table->add_field('nextcron', XMLDB_TYPE_INTEGER, '10', null, null, null, null, 'status');
-
-        // Adding keys to table 'badge'.
-        $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
-        $table->add_key('fk_courseid', XMLDB_KEY_FOREIGN, array('courseid'), 'course', array('id'));
-        $table->add_key('fk_usermodified', XMLDB_KEY_FOREIGN, array('usermodified'), 'user', array('id'));
-        $table->add_key('fk_usercreated', XMLDB_KEY_FOREIGN, array('usercreated'), 'user', array('id'));
-
-        // Adding indexes to table 'badge'.
-        $table->add_index('type', XMLDB_INDEX_NOTUNIQUE, array('type'));
-
-        // Conditionally launch create table for 'badge'.
-        if (!$dbman->table_exists($table)) {
-            $dbman->create_table($table);
-        }
-
-        // Define table 'badge_criteria' to be created.
-        $table = new xmldb_table('badge_criteria');
-
-        // Adding fields to table 'badge_criteria'.
-        $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null);
-        $table->add_field('badgeid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0', 'id');
-        $table->add_field('criteriatype', XMLDB_TYPE_INTEGER, '10', null, null, null, null, 'badgeid');
-        $table->add_field('method', XMLDB_TYPE_INTEGER, '1', null, XMLDB_NOTNULL, null, '1', 'criteriatype');
-
-        // Adding keys to table 'badge_criteria'.
-        $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
-        $table->add_key('fk_badgeid', XMLDB_KEY_FOREIGN, array('badgeid'), 'badge', array('id'));
-
-        // Adding indexes to table 'badge_criteria'.
-        $table->add_index('criteriatype', XMLDB_INDEX_NOTUNIQUE, array('criteriatype'));
-        $table->add_index('badgecriteriatype', XMLDB_INDEX_UNIQUE, array('badgeid', 'criteriatype'));
-
-        // Conditionally launch create table for 'badge_criteria'.
-        if (!$dbman->table_exists($table)) {
-            $dbman->create_table($table);
-        }
-
-        // Define table 'badge_criteria_param' to be created.
-        $table = new xmldb_table('badge_criteria_param');
-
-        // Adding fields to table 'badge_criteria_param'.
-        $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null);
-        $table->add_field('critid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, 'id');
-        $table->add_field('name', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, 'critid');
-        $table->add_field('value', XMLDB_TYPE_CHAR, '255', null, null, null, null, 'name');
-
-        // Adding keys to table 'badge_criteria_param'.
-        $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
-        $table->add_key('fk_critid', XMLDB_KEY_FOREIGN, array('critid'), 'badge_criteria', array('id'));
-
-        // Conditionally launch create table for 'badge_criteria_param'.
-        if (!$dbman->table_exists($table)) {
-            $dbman->create_table($table);
-        }
-
-        // Define table 'badge_issued' to be created.
-        $table = new xmldb_table('badge_issued');
-
-        // Adding fields to table 'badge_issued'.
-        $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null);
-        $table->add_field('badgeid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0', 'id');
-        $table->add_field('userid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0', 'badgeid');
-        $table->add_field('uniquehash', XMLDB_TYPE_TEXT, null, null, XMLDB_NOTNULL, null, null, 'userid');
-        $table->add_field('dateissued', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0', 'uniquehash');
-        $table->add_field('dateexpire', XMLDB_TYPE_INTEGER, '10', null, null, null, null, 'dateissued');
-        $table->add_field('visible', XMLDB_TYPE_INTEGER, '1', null, XMLDB_NOTNULL, null, '0', 'dateexpire');
-        $table->add_field('issuernotified', XMLDB_TYPE_INTEGER, '10', null, null, null, null, 'visible');
-
-        // Adding keys to table 'badge_issued'.
-        $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
-        $table->add_key('fk_badgeid', XMLDB_KEY_FOREIGN, array('badgeid'), 'badge', array('id'));
-        $table->add_key('fk_userid', XMLDB_KEY_FOREIGN, array('userid'), 'user', array('id'));
-
-        $table->add_index('badgeuser', XMLDB_INDEX_UNIQUE, array('badgeid', 'userid'));
-
-        // Conditionally launch create table for 'badge_issued'.
-        if (!$dbman->table_exists($table)) {
-            $dbman->create_table($table);
-        }
-
-        // Define table 'badge_criteria_met' to be created.
-        $table = new xmldb_table('badge_criteria_met');
-
-        // Adding fields to table 'badge_criteria_met'.
-        $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null);
-        $table->add_field('issuedid', XMLDB_TYPE_INTEGER, '10', null, null, null, null, 'id');
-        $table->add_field('critid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, 'issuedid');
-        $table->add_field('userid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, 'critid');
-        $table->add_field('datemet', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, 'userid');
-
-        // Adding keys to table 'badge_criteria_met'
-        $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
-        $table->add_key('fk_critid', XMLDB_KEY_FOREIGN, array('critid'), 'badge_criteria', array('id'));
-        $table->add_key('fk_userid', XMLDB_KEY_FOREIGN, array('userid'), 'user', array('id'));
-        $table->add_key('fk_issuedid', XMLDB_KEY_FOREIGN, array('issuedid'), 'badge_issued', array('id'));
-
-        // Conditionally launch create table for 'badge_criteria_met'.
-        if (!$dbman->table_exists($table)) {
-            $dbman->create_table($table);
-        }
-
-        // Define table 'badge_manual_award' to be created.
-        $table = new xmldb_table('badge_manual_award');
-
-        // Adding fields to table 'badge_manual_award'.
-        $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null);
-        $table->add_field('badgeid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, 'id');
-        $table->add_field('recipientid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, 'badgeid');
-        $table->add_field('issuerid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, 'recipientid');
-        $table->add_field('issuerrole', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, 'issuerid');
-        $table->add_field('datemet', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, 'issuerrole');
-
-        // Adding keys to table 'badge_manual_award'.
-        $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
-        $table->add_key('fk_badgeid', XMLDB_KEY_FOREIGN, array('badgeid'), 'badge', array('id'));
-        $table->add_key('fk_recipientid', XMLDB_KEY_FOREIGN, array('recipientid'), 'user', array('id'));
-        $table->add_key('fk_issuerid', XMLDB_KEY_FOREIGN, array('issuerid'), 'user', array('id'));
-        $table->add_key('fk_issuerrole', XMLDB_KEY_FOREIGN, array('issuerrole'), 'role', array('id'));
-
-        // Conditionally launch create table for 'badge_manual_award'.
-        if (!$dbman->table_exists($table)) {
-            $dbman->create_table($table);
-        }
-
-        // Define table 'badge_backpack' to be created.
-        $table = new xmldb_table('badge_backpack');
-
-        // Adding fields to table 'badge_backpack'.
-        $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null);
-        $table->add_field('userid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0', 'id');
-        $table->add_field('email', XMLDB_TYPE_CHAR, '100', null, XMLDB_NOTNULL, null, null, 'userid');
-        $table->add_field('backpackurl', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, 'email');
-        $table->add_field('backpackuid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, 'backpackurl');
-        $table->add_field('backpackgid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, 'backpackuid');
-        $table->add_field('autosync', XMLDB_TYPE_INTEGER, '1', null, XMLDB_NOTNULL, null, '0', 'backpackgid');
-        $table->add_field('password', XMLDB_TYPE_CHAR, '50', null, null, null, null, 'autosync');
-
-        // Adding keys to table 'badge_backpack'.
-        $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
-        $table->add_key('fk_userid', XMLDB_KEY_FOREIGN, array('userid'), 'user', array('id'));
-
-        // Conditionally launch create table for 'badge_backpack'.
-        if (!$dbman->table_exists($table)) {
-            $dbman->create_table($table);
-        }
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2013040200.00);
-    }
-
-    if ($oldversion < 2013040201.00) {
-        // Convert name field in event table to text type as RFC-2445 doesn't have any limitation on it.
-        $table = new xmldb_table('event');
-        $field = new xmldb_field('name', XMLDB_TYPE_TEXT, null, null, XMLDB_NOTNULL, null, null);
-        if ($dbman->field_exists($table, $field)) {
-            $dbman->change_field_type($table, $field);
-        }
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2013040201.00);
-    }
-
-    if ($oldversion < 2013040300.01) {
-
-        // Define field completionstartonenrol to be dropped from course.
-        $table = new xmldb_table('course');
-        $field = new xmldb_field('completionstartonenrol');
-
-        // Conditionally launch drop field completionstartonenrol.
-        if ($dbman->field_exists($table, $field)) {
-            $dbman->drop_field($table, $field);
-        }
-
-        // Since structure of 'course' table has changed we need to re-read $SITE from DB.
-        $SITE = $DB->get_record('course', array('id' => $SITE->id));
-        $COURSE = clone($SITE);
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2013040300.01);
-    }
-
-    if ($oldversion < 2013041200.00) {
-        // MDL-29877 Some bad restores created grade items with no category information.
-        $sql = "UPDATE {grade_items}
-                   SET categoryid = courseid
-                 WHERE itemtype <> 'course' and itemtype <> 'category'
-                       AND categoryid IS NULL";
-        $DB->execute($sql);
-        upgrade_main_savepoint(true, 2013041200.00);
-    }
-
-    if ($oldversion < 2013041600.00) {
-        // Copy constants from /course/lib.php instead of including the whole library:
-        $c = array( 'FRONTPAGENEWS'                 => 0,
-                    'FRONTPAGECOURSELIST'           => 1,
-                    'FRONTPAGECATEGORYNAMES'        => 2,
-                    'FRONTPAGETOPICONLY'            => 3,
-                    'FRONTPAGECATEGORYCOMBO'        => 4,
-                    'FRONTPAGEENROLLEDCOURSELIST'   => 5,
-                    'FRONTPAGEALLCOURSELIST'        => 6,
-                    'FRONTPAGECOURSESEARCH'         => 7);
-        // Update frontpage settings $CFG->frontpage and $CFG->frontpageloggedin. In 2.4 there was too much of hidden logic about them.
-        // This script tries to make sure that with the new (more user-friendly) frontpage settings the frontpage looks as similar as possible to what it was before upgrade.
-        $ncourses = $DB->count_records('course');
-        foreach (array('frontpage', 'frontpageloggedin') as $configkey) {
-            if ($frontpage = explode(',', $CFG->{$configkey})) {
-                $newfrontpage = array();
-                foreach ($frontpage as $v) {
-                    switch ($v) {
-                        case $c['FRONTPAGENEWS']:
-                            // Not related to course listings, leave as it is.
-                            $newfrontpage[] = $c['FRONTPAGENEWS'];
-                            break;
-                        case $c['FRONTPAGECOURSELIST']:
-                            if ($configkey === 'frontpageloggedin' && empty($CFG->disablemycourses)) {
-                                // In 2.4 unless prohibited in config, the "list of courses" was considered "list of enrolled courses" plus course search box.
-                                $newfrontpage[] = $c['FRONTPAGEENROLLEDCOURSELIST'];
-                            } else if ($ncourses <= 200) {
-                                // Still list of courses was only displayed in there were less than 200 courses in system. Otherwise - search box only.
-                                $newfrontpage[] = $c['FRONTPAGEALLCOURSELIST'];
-                                break; // skip adding search box
-                            }
-                            if (!in_array($c['FRONTPAGECOURSESEARCH'], $newfrontpage)) {
-                                $newfrontpage[] = $c['FRONTPAGECOURSESEARCH'];
-                            }
-                            break;
-                        case $c['FRONTPAGECATEGORYNAMES']:
-                            // In 2.4 search box was displayed automatically after categories list. In 2.5 it is displayed as a separate setting.
-                            $newfrontpage[] = $c['FRONTPAGECATEGORYNAMES'];
-                            if (!in_array($c['FRONTPAGECOURSESEARCH'], $newfrontpage)) {
-                                $newfrontpage[] = $c['FRONTPAGECOURSESEARCH'];
-                            }
-                            break;
-                        case $c['FRONTPAGECATEGORYCOMBO']:
-                            $maxcourses = empty($CFG->numcoursesincombo) ? 500 : $CFG->numcoursesincombo;
-                            // In 2.4 combo list was not displayed if there are more than $CFG->numcoursesincombo courses in the system.
-                            if ($ncourses < $maxcourses) {
-                                $newfrontpage[] = $c['FRONTPAGECATEGORYCOMBO'];
-                            }
-                            if (!in_array($c['FRONTPAGECOURSESEARCH'], $newfrontpage)) {
-                                $newfrontpage[] = $c['FRONTPAGECOURSESEARCH'];
-                            }
-                            break;
-                    }
-                }
-                set_config($configkey, join(',', $newfrontpage));
-            }
-        }
-        // $CFG->numcoursesincombo no longer affects whether the combo list is displayed. Setting is deprecated.
-        unset_config('numcoursesincombo');
-
-        upgrade_main_savepoint(true, 2013041600.00);
-    }
-
-    if ($oldversion < 2013041601.00) {
-        // Create a new 'badge_external' table first.
-        // Define table 'badge_external' to be created.
-        $table = new xmldb_table('badge_external');
-
-        // Adding fields to table 'badge_external'.
-        $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null);
-        $table->add_field('backpackid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, 'id');
-        $table->add_field('collectionid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, 'backpackid');
-
-        // Adding keys to table 'badge_external'.
-        $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
-        $table->add_key('fk_backpackid', XMLDB_KEY_FOREIGN, array('backpackid'), 'badge_backpack', array('id'));
-
-        // Conditionally launch create table for 'badge_external'.
-        if (!$dbman->table_exists($table)) {
-            $dbman->create_table($table);
-        }
-
-        // Perform user data migration.
-        $usercollections = $DB->get_records('badge_backpack');
-        foreach ($usercollections as $usercollection) {
-            $collection = new stdClass();
-            $collection->backpackid = $usercollection->id;
-            $collection->collectionid = $usercollection->backpackgid;
-            $DB->insert_record('badge_external', $collection);
-        }
-
-        // Finally, drop the column.
-        // Define field backpackgid to be dropped from 'badge_backpack'.
-        $table = new xmldb_table('badge_backpack');
-        $field = new xmldb_field('backpackgid');
-
-        // Conditionally launch drop field backpackgid.
-        if ($dbman->field_exists($table, $field)) {
-            $dbman->drop_field($table, $field);
-        }
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2013041601.00);
-    }
-
-    if ($oldversion < 2013041601.01) {
-        // Changing the default of field descriptionformat on table user to 1.
-        $table = new xmldb_table('user');
-        $field = new xmldb_field('descriptionformat', XMLDB_TYPE_INTEGER, '2', null, XMLDB_NOTNULL, null, '1', 'description');
-
-        // Launch change of default for field descriptionformat.
-        $dbman->change_field_default($table, $field);
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2013041601.01);
-    }
-
-    if ($oldversion < 2013041900.00) {
-        require_once($CFG->dirroot . '/cache/locallib.php');
-        // The features bin needs updating.
-        cache_config_writer::update_default_config_stores();
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2013041900.00);
-    }
-
-    if ($oldversion < 2013042300.00) {
-        // Adding index to unreadmessageid field of message_working table (MDL-34933)
-        $table = new xmldb_table('message_working');
-        $index = new xmldb_index('unreadmessageid_idx', XMLDB_INDEX_NOTUNIQUE, array('unreadmessageid'));
-
-        // Conditionally launch add index unreadmessageid
-        if (!$dbman->index_exists($table, $index)) {
-            $dbman->add_index($table, $index);
-        }
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2013042300.00);
-    }
-
-    // Moodle v2.5.0 release upgrade line.
-    // Put any upgrade step following this.
-
-    if ($oldversion < 2013051400.01) {
-        // Fix incorrect cc-nc url. Unfortunately the license 'plugins' do
-        // not give a mechanism to do this.
-
-        $sql = "UPDATE {license}
-                   SET source = :url, version = :newversion
-                 WHERE shortname = :shortname AND version = :oldversion";
-
-        $params = array(
-            'url' => 'http://creativecommons.org/licenses/by-nc/3.0/',
-            'shortname' => 'cc-nc',
-            'newversion' => '2013051500',
-            'oldversion' => '2010033100'
-        );
-
-        $DB->execute($sql, $params);
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2013051400.01);
-    }
-
-    if ($oldversion < 2013061400.01) {
-        // Clean up old tokens which haven't been deleted.
-        $DB->execute("DELETE FROM {user_private_key} WHERE NOT EXISTS
-                         (SELECT 'x' FROM {user} WHERE deleted = 0 AND id = userid)");
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2013061400.01);
-    }
-
-    if ($oldversion < 2013061700.00) {
-        // MDL-40103: Remove unused template tables from the database.
-        // These are now created inline with xmldb_table.
-
-        $tablestocleanup = array('temp_enroled_template','temp_log_template','backup_files_template','backup_ids_template');
-        $dbman = $DB->get_manager();
-
-        foreach ($tablestocleanup as $table) {
-            $xmltable = new xmldb_table($table);
-            if ($dbman->table_exists($xmltable)) {
-                $dbman->drop_table($xmltable);
-            }
-        }
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2013061700.00);
-    }
-
-    if ($oldversion < 2013070800.00) {
-
-        // Remove orphan repository instances.
-        if ($DB->get_dbfamily() === 'mysql') {
-            $sql = "DELETE {repository_instances} FROM {repository_instances}
-                    LEFT JOIN {context} ON {context}.id = {repository_instances}.contextid
-                    WHERE {context}.id IS NULL";
-        } else {
-            $sql = "DELETE FROM {repository_instances}
-                    WHERE NOT EXISTS (
-                        SELECT 'x' FROM {context}
-                        WHERE {context}.id = {repository_instances}.contextid)";
-        }
-        $DB->execute($sql);
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2013070800.00);
-    }
-
-    if ($oldversion < 2013070800.01) {
-
-        // Define field lastnamephonetic to be added to user.
-        $table = new xmldb_table('user');
-        $field = new xmldb_field('lastnamephonetic', XMLDB_TYPE_CHAR, '255', null, null, null, null, 'imagealt');
-        $index = new xmldb_index('lastnamephonetic', XMLDB_INDEX_NOTUNIQUE, array('lastnamephonetic'));
-
-        // Conditionally launch add field lastnamephonetic.
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-            $dbman->add_index($table, $index);
-        }
-
-        // Define field firstnamephonetic to be added to user.
-        $table = new xmldb_table('user');
-        $field = new xmldb_field('firstnamephonetic', XMLDB_TYPE_CHAR, '255', null, null, null, null, 'lastnamephonetic');
-        $index = new xmldb_index('firstnamephonetic', XMLDB_INDEX_NOTUNIQUE, array('firstnamephonetic'));
-
-        // Conditionally launch add field firstnamephonetic.
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-            $dbman->add_index($table, $index);
-        }
-
-        // Define field alternatename to be added to user.
-        $table = new xmldb_table('user');
-        $field = new xmldb_field('middlename', XMLDB_TYPE_CHAR, '255', null, null, null, null, 'firstnamephonetic');
-        $index = new xmldb_index('middlename', XMLDB_INDEX_NOTUNIQUE, array('middlename'));
-
-        // Conditionally launch add field firstnamephonetic.
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-            $dbman->add_index($table, $index);
-        }
-
-        // Define field alternatename to be added to user.
-        $table = new xmldb_table('user');
-        $field = new xmldb_field('alternatename', XMLDB_TYPE_CHAR, '255', null, null, null, null, 'middlename');
-        $index = new xmldb_index('alternatename', XMLDB_INDEX_NOTUNIQUE, array('alternatename'));
-
-        // Conditionally launch add field alternatename.
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-            $dbman->add_index($table, $index);
-        }
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2013070800.01);
-    }
-    if ($oldversion < 2013071500.01) {
-        // The enrol_authorize plugin has been removed, if there are no records
-        // and no plugin files then remove the plugin data.
-        $enrolauthorize = new xmldb_table('enrol_authorize');
-        $enrolauthorizerefunds = new xmldb_table('enrol_authorize_refunds');
-
-        if (!file_exists($CFG->dirroot.'/enrol/authorize/version.php') &&
-            $dbman->table_exists($enrolauthorize) &&
-            $dbman->table_exists($enrolauthorizerefunds)) {
-
-            $enrolauthorizecount = $DB->count_records('enrol_authorize');
-            $enrolauthorizerefundcount = $DB->count_records('enrol_authorize_refunds');
-
-            if (empty($enrolauthorizecount) && empty($enrolauthorizerefundcount)) {
-
-                // Drop the database tables.
-                $dbman->drop_table($enrolauthorize);
-                $dbman->drop_table($enrolauthorizerefunds);
-
-                // Drop the message provider and associated data manually.
-                $DB->delete_records('message_providers', array('component' => 'enrol_authorize'));
-                $DB->delete_records_select('config_plugins', "plugin = 'message' AND ".$DB->sql_like('name', '?', false), array("%_provider_enrol_authorize_%"));
-                $DB->delete_records_select('user_preferences', $DB->sql_like('name', '?', false), array("message_provider_enrol_authorize_%"));
-
-                // Remove capabilities.
-                capabilities_cleanup('enrol_authorize');
-
-                // Remove all other associated config.
-                unset_all_config_for_plugin('enrol_authorize');
-            }
-        }
-        upgrade_main_savepoint(true, 2013071500.01);
-    }
-
-    if ($oldversion < 2013071500.02) {
-        // Define field attachment to be dropped from badge.
-        $table = new xmldb_table('badge');
-        $field = new xmldb_field('image');
-
-        // Conditionally launch drop field eventtype.
-        if ($dbman->field_exists($table, $field)) {
-            $dbman->drop_field($table, $field);
-        }
-
-        upgrade_main_savepoint(true, 2013071500.02);
-    }
-
-    if ($oldversion < 2013072600.01) {
-        upgrade_mssql_nvarcharmax();
-        upgrade_mssql_varbinarymax();
-
-        upgrade_main_savepoint(true, 2013072600.01);
-    }
-
-    if ($oldversion < 2013081200.00) {
-        // Define field uploadfiles to be added to external_services.
-        $table = new xmldb_table('external_services');
-        $field = new xmldb_field('uploadfiles', XMLDB_TYPE_INTEGER, '1', null, XMLDB_NOTNULL, null, '0', 'downloadfiles');
-
-        // Conditionally launch add field uploadfiles.
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2013081200.00);
-    }
-
-    if ($oldversion < 2013082300.01) {
-        // Define the table 'backup_logs' and the field 'message' which we will be changing from a char to a text field.
-        $table = new xmldb_table('backup_logs');
-        $field = new xmldb_field('message', XMLDB_TYPE_TEXT, null, null, XMLDB_NOTNULL, null, null, 'loglevel');
-
-        // Perform the change.
-        $dbman->change_field_type($table, $field);
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2013082300.01);
-    }
-
-    // Convert SCORM course format courses to singleactivity.
-    if ($oldversion < 2013082700.00) {
-        // First set relevant singleactivity settings.
-        $formatoptions = new stdClass();
-        $formatoptions->format = 'singleactivity';
-        $formatoptions->sectionid = 0;
-        $formatoptions->name = 'activitytype';
-        $formatoptions->value = 'scorm';
-
-        $courses = $DB->get_recordset('course', array('format' => 'scorm'), 'id');
-        foreach ($courses as $course) {
-            $formatoptions->courseid = $course->id;
-            $DB->insert_record('course_format_options', $formatoptions);
-        }
-        $courses->close();
-
-        // Now update course format for these courses.
-        $sql = "UPDATE {course}
-                   SET format = 'singleactivity', modinfo = '', sectioncache = ''
-                 WHERE format = 'scorm'";
-        $DB->execute($sql);
-        upgrade_main_savepoint(true, 2013082700.00);
-    }
-
-    if ($oldversion < 2013090500.01) {
-        // Define field calendartype to be added to course.
-        $table = new xmldb_table('course');
-        $field = new xmldb_field('calendartype', XMLDB_TYPE_CHAR, '30', null, XMLDB_NOTNULL, null, null);
-
-        // Conditionally launch add field calendartype.
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        // Since structure of 'course' table has changed we need to re-read $SITE from DB.
-        $SITE = $DB->get_record('course', array('id' => $SITE->id));
-        $COURSE = clone($SITE);
-
-        // Define field calendartype to be added to user.
-        $table = new xmldb_table('user');
-        $field = new xmldb_field('calendartype', XMLDB_TYPE_CHAR, '30', null, XMLDB_NOTNULL, null, 'gregorian');
-
-        // Conditionally launch add field calendartype.
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2013090500.01);
-    }
-
-    if ($oldversion < 2013091000.02) {
-
-        // Define field cacherev to be added to course.
-        $table = new xmldb_table('course');
-        $field = new xmldb_field('cacherev', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0', 'completionnotify');
-
-        // Conditionally launch add field cacherev.
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        // Since structure of 'course' table has changed we need to re-read $SITE from DB.
-        $SITE = $DB->get_record('course', array('id' => $SITE->id));
-        $COURSE = clone($SITE);
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2013091000.02);
-    }
-
-    if ($oldversion < 2013091000.03) {
-
-        // Define field modinfo to be dropped from course.
-        $table = new xmldb_table('course');
-        $field = new xmldb_field('modinfo');
-
-        // Conditionally launch drop field modinfo.
-        if ($dbman->field_exists($table, $field)) {
-            $dbman->drop_field($table, $field);
-        }
-
-        // Define field sectioncache to be dropped from course.
-        $field = new xmldb_field('sectioncache');
-
-        // Conditionally launch drop field sectioncache.
-        if ($dbman->field_exists($table, $field)) {
-            $dbman->drop_field($table, $field);
-        }
-
-        // Since structure of 'course' table has changed we need to re-read $SITE from DB.
-        $SITE = $DB->get_record('course', array('id' => $SITE->id));
-        $COURSE = clone($SITE);
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2013091000.03);
-    }
-
-    if ($oldversion < 2013091300.01) {
-
-        $table = new xmldb_table('user');
-
-        // Changing precision of field institution on table user to (255).
-        $field = new xmldb_field('institution', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, 'phone2');
-
-        // Launch change of precision for field institution.
-        $dbman->change_field_precision($table, $field);
-
-        // Changing precision of field department on table user to (255).
-        $field = new xmldb_field('department', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, 'institution');
-
-        // Launch change of precision for field department.
-        $dbman->change_field_precision($table, $field);
-
-        // Changing precision of field address on table user to (255).
-        $field = new xmldb_field('address', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, 'department');
-
-        // Launch change of precision for field address.
-        $dbman->change_field_precision($table, $field);
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2013091300.01);
-    }
-
-    if ($oldversion < 2013092000.01) {
-
-        // Define table question_statistics to be created.
-        $table = new xmldb_table('question_statistics');
-
-        // Adding fields to table question_statistics.
-        $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null);
-        $table->add_field('hashcode', XMLDB_TYPE_CHAR, '40', null, XMLDB_NOTNULL, null, null);
-        $table->add_field('timemodified', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null);
-        $table->add_field('questionid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null);
-        $table->add_field('slot', XMLDB_TYPE_INTEGER, '10', null, null, null, null);
-        $table->add_field('subquestion', XMLDB_TYPE_INTEGER, '4', null, XMLDB_NOTNULL, null, null);
-        $table->add_field('s', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0');
-        $table->add_field('effectiveweight', XMLDB_TYPE_NUMBER, '15, 5', null, null, null, null);
-        $table->add_field('negcovar', XMLDB_TYPE_INTEGER, '2', null, XMLDB_NOTNULL, null, '0');
-        $table->add_field('discriminationindex', XMLDB_TYPE_NUMBER, '15, 5', null, null, null, null);
-        $table->add_field('discriminativeefficiency', XMLDB_TYPE_NUMBER, '15, 5', null, null, null, null);
-        $table->add_field('sd', XMLDB_TYPE_NUMBER, '15, 10', null, null, null, null);
-        $table->add_field('facility', XMLDB_TYPE_NUMBER, '15, 10', null, null, null, null);
-        $table->add_field('subquestions', XMLDB_TYPE_TEXT, null, null, null, null, null);
-        $table->add_field('maxmark', XMLDB_TYPE_NUMBER, '12, 7', null, null, null, null);
-        $table->add_field('positions', XMLDB_TYPE_TEXT, null, null, null, null, null);
-        $table->add_field('randomguessscore', XMLDB_TYPE_NUMBER, '12, 7', null, null, null, null);
-
-        // Adding keys to table question_statistics.
-        $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
-
-        // Conditionally launch create table for question_statistics.
-        if (!$dbman->table_exists($table)) {
-            $dbman->create_table($table);
-        }
-
-        // Define table question_response_analysis to be created.
-        $table = new xmldb_table('question_response_analysis');
-
-        // Adding fields to table question_response_analysis.
-        $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null);
-        $table->add_field('hashcode', XMLDB_TYPE_CHAR, '40', null, XMLDB_NOTNULL, null, null);
-        $table->add_field('timemodified', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null);
-        $table->add_field('questionid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null);
-        $table->add_field('subqid', XMLDB_TYPE_CHAR, '100', null, XMLDB_NOTNULL, null, null);
-        $table->add_field('aid', XMLDB_TYPE_CHAR, '100', null, null, null, null);
-        $table->add_field('response', XMLDB_TYPE_TEXT, null, null, null, null, null);
-        $table->add_field('rcount', XMLDB_TYPE_INTEGER, '10', null, null, null, null);
-        $table->add_field('credit', XMLDB_TYPE_NUMBER, '15, 5', null, XMLDB_NOTNULL, null, null);
-
-        // Adding keys to table question_response_analysis.
-        $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
-
-        // Conditionally launch create table for question_response_analysis.
-        if (!$dbman->table_exists($table)) {
-            $dbman->create_table($table);
-        }
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2013092000.01);
-    }
-
-    if ($oldversion < 2013092001.01) {
-        // Force uninstall of deleted tool.
-        if (!file_exists("$CFG->dirroot/$CFG->admin/tool/bloglevelupgrade")) {
-            // Remove capabilities.
-            capabilities_cleanup('tool_bloglevelupgrade');
-            // Remove all other associated config.
-            unset_all_config_for_plugin('tool_bloglevelupgrade');
-        }
-        upgrade_main_savepoint(true, 2013092001.01);
-    }
-
-    if ($oldversion < 2013092001.02) {
-        // Define field version to be dropped from modules.
-        $table = new xmldb_table('modules');
-        $field = new xmldb_field('version');
-
-        // Conditionally launch drop field version.
-        if ($dbman->field_exists($table, $field)) {
-            // Migrate all plugin version info to config_plugins table.
-            $modules = $DB->get_records('modules');
-            foreach ($modules as $module) {
-                set_config('version', $module->version, 'mod_'.$module->name);
-            }
-            unset($modules);
-
-            $dbman->drop_field($table, $field);
-        }
-
-        // Define field version to be dropped from block.
-        $table = new xmldb_table('block');
-        $field = new xmldb_field('version');
-
-        // Conditionally launch drop field version.
-        if ($dbman->field_exists($table, $field)) {
-            $blocks = $DB->get_records('block');
-            foreach ($blocks as $block) {
-                set_config('version', $block->version, 'block_'.$block->name);
-            }
-            unset($blocks);
-
-            $dbman->drop_field($table, $field);
-        }
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2013092001.02);
-    }
-
-    if ($oldversion < 2013092700.01) {
-
-        $table = new xmldb_table('files');
-
-        // Define field referencelastsync to be dropped from files.
-        $field = new xmldb_field('referencelastsync');
-
-        // Conditionally launch drop field referencelastsync.
-        if ($dbman->field_exists($table, $field)) {
-            $dbman->drop_field($table, $field);
-        }
-
-        // Define field referencelifetime to be dropped from files.
-        $field = new xmldb_field('referencelifetime');
-
-        // Conditionally launch drop field referencelifetime.
-        if ($dbman->field_exists($table, $field)) {
-            $dbman->drop_field($table, $field);
-        }
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2013092700.01);
-    }
-
-    if ($oldversion < 2013100400.01) {
-        // Add user_devices core table.
-
-        // Define field id to be added to user_devices.
-        $table = new xmldb_table('user_devices');
-
-        $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null);
-        $table->add_field('userid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0', 'id');
-        $table->add_field('appid', XMLDB_TYPE_CHAR, '128', null, XMLDB_NOTNULL, null, null, 'userid');
-        $table->add_field('name', XMLDB_TYPE_CHAR, '32', null, XMLDB_NOTNULL, null, null, 'appid');
-        $table->add_field('model', XMLDB_TYPE_CHAR, '32', null, XMLDB_NOTNULL, null, null, 'name');
-        $table->add_field('platform', XMLDB_TYPE_CHAR, '32', null, XMLDB_NOTNULL, null, null, 'model');
-        $table->add_field('version', XMLDB_TYPE_CHAR, '32', null, XMLDB_NOTNULL, null, null, 'platform');
-        $table->add_field('pushid', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, 'version');
-        $table->add_field('uuid', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, 'pushid');
-        $table->add_field('timecreated', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, 'uuid');
-        $table->add_field('timemodified', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, 'timecreated');
-
-        $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
-        $table->add_key('pushid-userid', XMLDB_KEY_UNIQUE, array('pushid', 'userid'));
-        $table->add_key('pushid-platform', XMLDB_KEY_UNIQUE, array('pushid', 'platform'));
-        $table->add_key('userid', XMLDB_KEY_FOREIGN, array('userid'), 'user', array('id'));
-
-        if (!$dbman->table_exists($table)) {
-            $dbman->create_table($table);
-        }
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2013100400.01);
-    }
-
-    if ($oldversion < 2013100800.00) {
-
-        // Define field maxfraction to be added to question_attempts.
-        $table = new xmldb_table('question_attempts');
-        $field = new xmldb_field('maxfraction', XMLDB_TYPE_NUMBER, '12, 7', null, XMLDB_NOTNULL, null, '1', 'minfraction');
-
-        // Conditionally launch add field maxfraction.
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2013100800.00);
-    }
-
-    if ($oldversion < 2013100800.01) {
-        // Create a new 'user_password_resets' table.
-        $table = new xmldb_table('user_password_resets');
-        $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null);
-        $table->add_field('userid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null);
-        $table->add_field('timerequested', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null);
-        $table->add_field('timererequested', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, 0, null);
-        $table->add_field('token', XMLDB_TYPE_CHAR, '32', null, XMLDB_NOTNULL, null, null, null);
-
-        // Adding keys to table.
-        $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
-        $table->add_key('fk_userid', XMLDB_KEY_FOREIGN, array('userid'), 'user', array('id'));
-
-        // Conditionally launch create table.
-        if (!$dbman->table_exists($table)) {
-            $dbman->create_table($table);
-        }
-        upgrade_main_savepoint(true, 2013100800.01);
-    }
-
-    if ($oldversion < 2013100800.02) {
-        $sql = "INSERT INTO {user_preferences}(userid, name, value)
-                SELECT id, 'htmleditor', 'textarea' FROM {user} u where u.htmleditor = 0";
-        $DB->execute($sql);
-
-        // Define field htmleditor to be dropped from user
-        $table = new xmldb_table('user');
-        $field = new xmldb_field('htmleditor');
-
-        // Conditionally launch drop field requested
-        if ($dbman->field_exists($table, $field)) {
-            $dbman->drop_field($table, $field);
-        }
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2013100800.02);
-    }
-
-    if ($oldversion < 2013100900.00) {
-
-        // Define field lifetime to be dropped from files_reference.
-        $table = new xmldb_table('files_reference');
-        $field = new xmldb_field('lifetime');
-
-        // Conditionally launch drop field lifetime.
-        if ($dbman->field_exists($table, $field)) {
-            $dbman->drop_field($table, $field);
-        }
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2013100900.00);
-    }
-
-    if ($oldversion < 2013100901.00) {
-        // Fixing possible wrong MIME type for Java Network Launch Protocol (JNLP) files.
-        $select = $DB->sql_like('filename', '?', false);
-        $DB->set_field_select(
-            'files',
-            'mimetype',
-            'application/x-java-jnlp-file',
-            $select,
-            array('%.jnlp')
-        );
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2013100901.00);
-    }
-
-    if ($oldversion < 2013102100.00) {
-        // Changing default value for the status of a course backup.
-        $table = new xmldb_table('backup_courses');
-        $field = new xmldb_field('laststatus', XMLDB_TYPE_CHAR, '1', null, XMLDB_NOTNULL, null, '5', 'lastendtime');
-
-        // Launch change of precision for field value
-        $dbman->change_field_precision($table, $field);
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2013102100.00);
-    }
-
-    if ($oldversion < 2013102201.00) {
-        $params = array('plugin' => 'editor_atto', 'name' => 'version');
-        $attoversion = $DB->get_record('config_plugins',
-                                       $params,
-                                       'value',
-                                       IGNORE_MISSING);
-
-        if ($attoversion) {
-            $attoversion = floatval($attoversion->value);
-        }
-        // Only these versions that were part of 2.6 beta should be removed.
-        // Manually installed versions of 2.5 - or later releases for 2.6 installed
-        // via the plugins DB should not be uninstalled.
-        if ($attoversion && $attoversion > 2013051500.00 && $attoversion < 2013102201.00) {
-            // Remove all other associated config.
-            unset_all_config_for_plugin('editor_atto');
-            unset_all_config_for_plugin('atto_bold');
-            unset_all_config_for_plugin('atto_clear');
-            unset_all_config_for_plugin('atto_html');
-            unset_all_config_for_plugin('atto_image');
-            unset_all_config_for_plugin('atto_indent');
-            unset_all_config_for_plugin('atto_italic');
-            unset_all_config_for_plugin('atto_link');
-            unset_all_config_for_plugin('atto_media');
-            unset_all_config_for_plugin('atto_orderedlist');
-            unset_all_config_for_plugin('atto_outdent');
-            unset_all_config_for_plugin('atto_strike');
-            unset_all_config_for_plugin('atto_title');
-            unset_all_config_for_plugin('atto_underline');
-            unset_all_config_for_plugin('atto_unlink');
-            unset_all_config_for_plugin('atto_unorderedlist');
-
-        }
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2013102201.00);
-    }
-
-    if ($oldversion < 2013102500.01) {
-        // Find all fileareas that have missing root folder entry and add the root folder entry.
-        if (empty($CFG->filesrootrecordsfixed)) {
-            upgrade_fix_missing_root_folders();
-            // To skip running the same script on the upgrade to the next major release.
-            set_config('filesrootrecordsfixed', 1);
-        }
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2013102500.01);
-    }
-
-    if ($oldversion < 2013110500.01) {
-        // MDL-38228. Corrected course_modules upgrade script instead of 2013021801.01.
-
-        // This upgrade script fixes the mismatches between DB fields course_modules.section
-        // and course_sections.sequence. It makes sure that each module is included
-        // in the sequence of at least one section.
-        // There is also a separate script for admins: admin/cli/fix_course_sortorder.php
-
-        // This script in included in each major version upgrade process so make sure we don't run it twice.
-        if (empty($CFG->movingmoduleupgradescriptwasrun)) {
-            upgrade_course_modules_sequences();
-
-            // To skip running the same script on the upgrade to the next major release.
-            set_config('movingmoduleupgradescriptwasrun', 1);
-        }
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2013110500.01);
-    }
-
-    if ($oldversion < 2013110600.01) {
-
-        if (!file_exists($CFG->dirroot . '/theme/mymobile')) {
-            // Replace the mymobile settings.
-            $DB->set_field('course', 'theme', 'clean', array('theme' => 'mymobile'));
-            $DB->set_field('course_categories', 'theme', 'clean', array('theme' => 'mymobile'));
-            $DB->set_field('user', 'theme', 'clean', array('theme' => 'mymobile'));
-            $DB->set_field('mnet_host', 'theme', 'clean', array('theme' => 'mymobile'));
-
-            // Replace the theme configs.
-            if (get_config('core', 'theme') === 'mymobile') {
-                set_config('theme', 'clean');
-            }
-            if (get_config('core', 'thememobile') === 'mymobile') {
-                set_config('thememobile', 'clean');
-            }
-            if (get_config('core', 'themelegacy') === 'mymobile') {
-                set_config('themelegacy', 'clean');
-            }
-            if (get_config('core', 'themetablet') === 'mymobile') {
-                set_config('themetablet', 'clean');
-            }
-
-            // Hacky emulation of plugin uninstallation.
-            unset_all_config_for_plugin('theme_mymobile');
-        }
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2013110600.01);
-    }
-
-    if ($oldversion < 2013110600.02) {
-
-        // If the user is logged in, we ensure that the alternate name fields are present
-        // in the session. It will not be the case when upgrading from 2.5 downwards.
-        if (!empty($USER->id)) {
-            $refreshuser = $DB->get_record('user', array('id' => $USER->id));
-            $fields = array('firstnamephonetic', 'lastnamephonetic', 'middlename', 'alternatename', 'firstname', 'lastname');
-            foreach ($fields as $field) {
-                $USER->{$field} = $refreshuser->{$field};
-            }
-        }
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2013110600.02);
-    }
-
-    // Moodle v2.6.0 release upgrade line.
-    // Put any upgrade step following this.
-    if ($oldversion < 2013111800.01) {
-
-        // Delete notes of deleted courses.
-        $sql = "DELETE FROM {post}
-                 WHERE NOT EXISTS (SELECT {course}.id FROM {course}
-                                    WHERE {course}.id = {post}.courseid)
-                       AND {post}.module = ?";
-        $DB->execute($sql, array('notes'));
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2013111800.01);
-    }
-
-    if ($oldversion < 2013122400.01) {
-        // Purge stored passwords from config_log table, ideally this should be in each plugin
-        // but that would complicate backporting...
-        $items = array(
-            'core/cronremotepassword', 'core/proxypassword', 'core/smtppass', 'core/jabberpassword',
-            'enrol_database/dbpass', 'enrol_ldap/bind_pw', 'url/secretphrase');
-        foreach ($items as $item) {
-            list($plugin, $name) = explode('/', $item);
-            $sqlcomparevalue =  $DB->sql_compare_text('value');
-            $sqlcompareoldvalue = $DB->sql_compare_text('oldvalue');
-            if ($plugin === 'core') {
-                $sql = "UPDATE {config_log}
-                           SET value = :value
-                         WHERE name = :name AND plugin IS NULL AND $sqlcomparevalue <> :empty";
-                $params = array('value' => '********', 'name' => $name, 'empty' => '');
-                $DB->execute($sql, $params);
-
-                $sql = "UPDATE {config_log}
-                           SET oldvalue = :value
-                         WHERE name = :name AND plugin IS NULL AND $sqlcompareoldvalue <> :empty";
-                $params = array('value' => '********', 'name' => $name, 'empty' => '');
-                $DB->execute($sql, $params);
-
-            } else {
-                $sql = "UPDATE {config_log}
-                           SET value = :value
-                         WHERE name = :name AND plugin = :plugin AND $sqlcomparevalue <> :empty";
-                $params = array('value' => '********', 'name' => $name, 'plugin' => $plugin, 'empty' => '');
-                $DB->execute($sql, $params);
-
-                $sql = "UPDATE {config_log}
-                           SET oldvalue = :value
-                         WHERE name = :name AND plugin = :plugin AND  $sqlcompareoldvalue <> :empty";
-                $params = array('value' => '********', 'name' => $name, 'plugin' => $plugin, 'empty' => '');
-                $DB->execute($sql, $params);
-            }
-        }
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2013122400.01);
-    }
-
-    if ($oldversion < 2014011000.01) {
-
-        // Define table cache_text to be dropped.
-        $table = new xmldb_table('cache_text');
-
-        // Conditionally launch drop table for cache_text.
-        if ($dbman->table_exists($table)) {
-            $dbman->drop_table($table);
-        }
-
-        unset_config('cachetext');
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2014011000.01);
-    }
-
-    if ($oldversion < 2014011701.00) {
-        // Fix gradebook sortorder duplicates.
-        upgrade_grade_item_fix_sortorder();
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2014011701.00);
-    }
-
-    if ($oldversion < 2014012300.01) {
-        // Remove deleted users home pages.
-        $sql = "DELETE FROM {my_pages}
-                WHERE EXISTS (SELECT {user}.id
-                                  FROM {user}
-                                  WHERE {user}.id = {my_pages}.userid
-                                  AND {user}.deleted = 1)
-                AND {my_pages}.private = 1";
-        $DB->execute($sql);
-
-        // Reached main savepoint.
-        upgrade_main_savepoint(true, 2014012300.01);
-    }
-
-    if ($oldversion < 2014012400.00) {
-        // Define table lock_db to be created.
-        $table = new xmldb_table('lock_db');
-
-        // Adding fields to table lock_db.
-        $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null);
-        $table->add_field('resourcekey', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null);
-        $table->add_field('expires', XMLDB_TYPE_INTEGER, '10', null, null, null, null);
-        $table->add_field('owner', XMLDB_TYPE_CHAR, '36', null, null, null, null);
-
-        // Adding keys to table lock_db.
-        $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
-
-        // Adding indexes to table lock_db.
-        $table->add_index('resourcekey_uniq', XMLDB_INDEX_UNIQUE, array('resourcekey'));
-        $table->add_index('expires_idx', XMLDB_INDEX_NOTUNIQUE, array('expires'));
-        $table->add_index('owner_idx', XMLDB_INDEX_NOTUNIQUE, array('owner'));
-
-        // Conditionally launch create table for lock_db.
-        if (!$dbman->table_exists($table)) {
-            $dbman->create_table($table);
-        }
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2014012400.00);
-    }
-
-    if ($oldversion < 2014021300.01) {
-        // Delete any cached stats to force recalculation later, then we can be sure that cached records will have the correct
-        // field.
-        $DB->delete_records('question_response_analysis');
-        $DB->delete_records('question_statistics');
-        $DB->delete_records('quiz_statistics');
-
-        // Define field variant to be added to question_statistics.
-        $table = new xmldb_table('question_statistics');
-        $field = new xmldb_field('variant', XMLDB_TYPE_INTEGER, '10', null, null, null, null, 'subquestion');
-
-        // Conditionally launch add field variant.
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2014021300.01);
-    }
-
-    if ($oldversion < 2014021300.02) {
-
-        // Define field variant to be added to question_response_analysis.
-        $table = new xmldb_table('question_response_analysis');
-        $field = new xmldb_field('variant', XMLDB_TYPE_INTEGER, '10', null, null, null, null, 'questionid');
-
-        // Conditionally launch add field variant.
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2014021300.02);
-    }
-
-    if ($oldversion < 2014021800.00) {
-
-        // Define field queued to be added to portfolio_tempdata.
-        $table = new xmldb_table('portfolio_tempdata');
-        $field = new xmldb_field('queued', XMLDB_TYPE_INTEGER, '1', null, XMLDB_NOTNULL, null, '0', 'instance');
-
-        // Conditionally launch add field queued.
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2014021800.00);
-    }
-
-    if ($oldversion < 2014021900.01) {
-        // Force uninstall of deleted tool.
-
-        // Normally, in this sort of situation, we would do a file_exists check,
-        // in case the plugin had been added back as an add-on. However, this
-        // plugin is completely useless after Moodle 2.6, so we check that the
-        // files have been removed in upgrade_stale_php_files_present, and we
-        // uninstall it unconditionally here.
-
-        // Remove all associated config.
-        unset_all_config_for_plugin('tool_qeupgradehelper');
-
-        upgrade_main_savepoint(true, 2014021900.01);
-    }
-
-    if ($oldversion < 2014021900.02) {
-
-        // Define table question_states to be dropped.
-        $table = new xmldb_table('question_states');
-
-        // Conditionally launch drop table for question_states.
-        if ($dbman->table_exists($table)) {
-            $dbman->drop_table($table);
-        }
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2014021900.02);
-    }
-
-    if ($oldversion < 2014021900.03) {
-
-        // Define table question_sessions to be dropped.
-        $table = new xmldb_table('question_sessions');
-
-        // Conditionally launch drop table for question_sessions.
-        if ($dbman->table_exists($table)) {
-            $dbman->drop_table($table);
-        }
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2014021900.03);
-    }
-
-    if ($oldversion < 2014022600.00) {
-        $table = new xmldb_table('task_scheduled');
-
-        // Adding fields to table task_scheduled.
-        $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null);
-        $table->add_field('component', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null);
-        $table->add_field('classname', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null);
-        $table->add_field('lastruntime', XMLDB_TYPE_INTEGER, '10', null, null, null, null);
-        $table->add_field('nextruntime', XMLDB_TYPE_INTEGER, '10', null, null, null, null);
-        $table->add_field('blocking', XMLDB_TYPE_INTEGER, '2', null, XMLDB_NOTNULL, null, '0');
-        $table->add_field('minute', XMLDB_TYPE_CHAR, '25', null, XMLDB_NOTNULL, null, null);
-        $table->add_field('hour', XMLDB_TYPE_CHAR, '25', null, XMLDB_NOTNULL, null, null);
-        $table->add_field('day', XMLDB_TYPE_CHAR, '25', null, XMLDB_NOTNULL, null, null);
-        $table->add_field('month', XMLDB_TYPE_CHAR, '25', null, XMLDB_NOTNULL, null, null);
-        $table->add_field('dayofweek', XMLDB_TYPE_CHAR, '25', null, XMLDB_NOTNULL, null, null);
-        $table->add_field('faildelay', XMLDB_TYPE_INTEGER, '10', null, null, null, null);
-        $table->add_field('customised', XMLDB_TYPE_INTEGER, '2', null, XMLDB_NOTNULL, null, '0');
-        $table->add_field('disabled', XMLDB_TYPE_INTEGER, '1', null, XMLDB_NOTNULL, null, '0');
-
-        // Adding keys to table task_scheduled.
-        $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
-
-        // Adding indexes to table task_scheduled.
-        $table->add_index('classname_uniq', XMLDB_INDEX_UNIQUE, array('classname'));
-
-        // Conditionally launch create table for task_scheduled.
-        if (!$dbman->table_exists($table)) {
-            $dbman->create_table($table);
-        }
-
-        // Define table task_adhoc to be created.
-        $table = new xmldb_table('task_adhoc');
-
-        // Adding fields to table task_adhoc.
-        $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null);
-        $table->add_field('component', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null);
-        $table->add_field('classname', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null);
-        $table->add_field('nextruntime', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null);
-        $table->add_field('faildelay', XMLDB_TYPE_INTEGER, '10', null, null, null, null);
-        $table->add_field('customdata', XMLDB_TYPE_TEXT, null, null, null, null, null);
-        $table->add_field('blocking', XMLDB_TYPE_INTEGER, '2', null, XMLDB_NOTNULL, null, '0');
-
-        // Adding keys to table task_adhoc.
-        $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
-
-        // Adding indexes to table task_adhoc.
-        $table->add_index('nextruntime_idx', XMLDB_INDEX_NOTUNIQUE, array('nextruntime'));
-
-        // Conditionally launch create table for task_adhoc.
-        if (!$dbman->table_exists($table)) {
-            $dbman->create_table($table);
-        }
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2014022600.00);
-    }
-
-    if ($oldversion < 2014031400.02) {
-        // Delete any cached stats to force recalculation later, then we can be sure that cached records will have the correct
-        // field.
-        $DB->delete_records('question_response_analysis');
-        $DB->delete_records('question_statistics');
-        $DB->delete_records('quiz_statistics');
-
-        // Define field response to be dropped from question_response_analysis.
-        $table = new xmldb_table('question_response_analysis');
-        $field = new xmldb_field('rcount');
-
-        // Conditionally launch drop field response.
-        if ($dbman->field_exists($table, $field)) {
-            $dbman->drop_field($table, $field);
-        }
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2014031400.02);
-    }
-
-    if ($oldversion < 2014031400.03) {
-
-        // Define table question_response_count to be created.
-        $table = new xmldb_table('question_response_count');
-
-        // Adding fields to table question_response_count.
-        $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null);
-        $table->add_field('analysisid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null);
-        $table->add_field('try', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null);
-        $table->add_field('rcount', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null);
-
-        // Adding keys to table question_response_count.
-        $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
-        $table->add_key('analysisid', XMLDB_KEY_FOREIGN, array('analysisid'), 'question_response_analysis', array('id'));
-
-        // Conditionally launch create table for question_response_count.
-        if (!$dbman->table_exists($table)) {
-            $dbman->create_table($table);
-        }
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2014031400.03);
-    }
-
-    if ($oldversion < 2014031400.04) {
-
-        // Define field whichtries to be added to question_response_analysis.
-        $table = new xmldb_table('question_response_analysis');
-        $field = new xmldb_field('whichtries', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, 'hashcode');
-
-        // Conditionally launch add field whichtries.
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2014031400.04);
-    }
-
-    if ($oldversion < 2014032600.00) {
-        // Removing the themes from core.
-        $themes = array('afterburner', 'anomaly', 'arialist', 'binarius', 'boxxie', 'brick', 'formal_white', 'formfactor',
-            'fusion', 'leatherbound', 'magazine', 'nimble', 'nonzero', 'overlay', 'serenity', 'sky_high', 'splash',
-            'standard', 'standardold');
-
-        foreach ($themes as $key => $theme) {
-            if (check_dir_exists($CFG->dirroot . '/theme/' . $theme, false)) {
-                // Ignore the themes that have been re-downloaded.
-                unset($themes[$key]);
-            }
-        }
-
-        // Check we actually have themes to remove.
-        if (count($themes) > 0) {
-
-            // Replace the theme configs.
-            if (in_array(get_config('core', 'theme'), $themes)) {
-                set_config('theme', 'clean');
-            }
-            if (in_array(get_config('core', 'thememobile'), $themes)) {
-                set_config('thememobile', 'clean');
-            }
-            if (in_array(get_config('core', 'themelegacy'), $themes)) {
-                set_config('themelegacy', 'clean');
-            }
-            if (in_array(get_config('core', 'themetablet'), $themes)) {
-                set_config('themetablet', 'clean');
-            }
-        }
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2014032600.00);
-    }
-
-    if ($oldversion < 2014032600.02) {
-        // Add new fields to the 'tag_instance' table.
-        $table = new xmldb_table('tag_instance');
-        $field = new xmldb_field('component', XMLDB_TYPE_CHAR, '100', null, false, null, null, 'tagid');
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        $field = new xmldb_field('contextid', XMLDB_TYPE_INTEGER, '10', null, false, null, null, 'itemid');
-        // Define the 'contextid' foreign key to be added to the tag_instance table.
-        $key = new xmldb_key('contextid', XMLDB_KEY_FOREIGN, array('contextid'), 'context', array('id'));
-        if ($dbman->field_exists($table, $field)) {
-            $dbman->drop_key($table, $key);
-            $DB->set_field('tag_instance', 'contextid', null, array('contextid' => 0));
-            $dbman->change_field_default($table, $field);
-        } else {
-            $dbman->add_field($table, $field);
-        }
-        $dbman->add_key($table, $key);
-
-        $field = new xmldb_field('timecreated', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0', 'ordering');
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        $sql = "UPDATE {tag_instance}
-                   SET timecreated = timemodified";
-        $DB->execute($sql);
-
-        // Update all the course tags.
-        $sql = "UPDATE {tag_instance}
-                   SET component = 'core',
-                       contextid = (SELECT ctx.id
-                                      FROM {context} ctx
-                                     WHERE ctx.contextlevel = :contextlevel
-                                       AND ctx.instanceid = {tag_instance}.itemid)
-                 WHERE itemtype = 'course' AND contextid IS NULL";
-        $DB->execute($sql, array('contextlevel' => CONTEXT_COURSE));
-
-        // Update all the user tags.
-        $sql = "UPDATE {tag_instance}
-                   SET component = 'core',
-                       contextid = (SELECT ctx.id
-                                      FROM {context} ctx
-                                     WHERE ctx.contextlevel = :contextlevel
-                                       AND ctx.instanceid = {tag_instance}.itemid)
-                 WHERE itemtype = 'user' AND contextid IS NULL";
-        $DB->execute($sql, array('contextlevel' => CONTEXT_USER));
-
-        // Update all the blog post tags.
-        $sql = "UPDATE {tag_instance}
-                   SET component = 'core',
-                       contextid = (SELECT ctx.id
-                                      FROM {context} ctx
-                                      JOIN {post} p
-                                        ON p.userid = ctx.instanceid
-                                     WHERE ctx.contextlevel = :contextlevel
-                                       AND p.id = {tag_instance}.itemid)
-                 WHERE itemtype = 'post' AND contextid IS NULL";
-        $DB->execute($sql, array('contextlevel' => CONTEXT_USER));
-
-        // Update all the wiki page tags.
-        $sql = "UPDATE {tag_instance}
-                   SET component = 'mod_wiki',
-                       contextid = (SELECT ctx.id
-                                      FROM {context} ctx
-                                      JOIN {course_modules} cm
-                                        ON cm.id = ctx.instanceid
-                                      JOIN {modules} m
-                                        ON m.id = cm.module
-                                      JOIN {wiki} w
-                                        ON w.id = cm.instance
-                                      JOIN {wiki_subwikis} sw
-                                        ON sw.wikiid = w.id
-                                      JOIN {wiki_pages} wp
-                                        ON wp.subwikiid = sw.id
-                                     WHERE m.name = 'wiki'
-                                       AND ctx.contextlevel = :contextlevel
-                                       AND wp.id = {tag_instance}.itemid)
-                 WHERE itemtype = 'wiki_pages' AND contextid IS NULL";
-        $DB->execute($sql, array('contextlevel' => CONTEXT_MODULE));
-
-        // Update all the question tags.
-        $sql = "UPDATE {tag_instance}
-                   SET component = 'core_question',
-                       contextid = (SELECT qc.contextid
-                                      FROM {question} q
-                                      JOIN {question_categories} qc
-                                        ON q.category = qc.id
-                                     WHERE q.id = {tag_instance}.itemid)
-                 WHERE itemtype = 'question' AND contextid IS NULL";
-        $DB->execute($sql);
-
-        // Update all the tag tags.
-        $sql = "UPDATE {tag_instance}
-                   SET component = 'core',
-                       contextid = :systemcontext
-                 WHERE itemtype = 'tag' AND contextid IS NULL";
-        $DB->execute($sql, array('systemcontext' => context_system::instance()->id));
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2014032600.02);
-    }
-
-    if ($oldversion < 2014032700.01) {
-
-        // Define field disabled to be added to task_scheduled.
-        $table = new xmldb_table('task_scheduled');
-        $field = new xmldb_field('disabled', XMLDB_TYPE_INTEGER, '1', null, XMLDB_NOTNULL, null, '0', 'customised');
-
-        // Conditionally launch add field disabled.
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2014032700.01);
-    }
-
-    if ($oldversion < 2014032700.02) {
-
-        // Update displayloginfailures setting.
-        if (empty($CFG->displayloginfailures)) {
-            set_config('displayloginfailures', 0);
-        } else {
-            set_config('displayloginfailures', 1);
-        }
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2014032700.02);
-    }
-
-    if ($oldversion < 2014040800.00) {
-
-        // Define field availability to be added to course_modules.
-        $table = new xmldb_table('course_modules');
-        $field = new xmldb_field('availability', XMLDB_TYPE_TEXT, null, null, null, null, null, 'showdescription');
-
-        // Conditionally launch add field availability.
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        // Define field availability to be added to course_sections.
-        $table = new xmldb_table('course_sections');
-        $field = new xmldb_field('availability', XMLDB_TYPE_TEXT, null, null, null, null, null, 'groupingid');
-
-        // Conditionally launch add field availability.
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        // Update existing conditions to new format. This could be a slow
-        // process, so begin by counting the number of affected modules/sections.
-        // (Performance: On the OU system, these took ~0.3 seconds, with about
-        // 20,000 results out of about 400,000 total rows in those tables.)
-        $cmcount = $DB->count_records_sql("
-                SELECT COUNT(1)
-                  FROM {course_modules} cm
-                 WHERE cm.availablefrom != 0 OR
-                       cm.availableuntil != 0 OR
-                       EXISTS (SELECT 1 FROM {course_modules_availability} WHERE coursemoduleid = cm.id) OR
-                       EXISTS (SELECT 1 FROM {course_modules_avail_fields} WHERE coursemoduleid = cm.id)");
-        $sectcount = $DB->count_records_sql("
-                SELECT COUNT(1)
-                  FROM {course_sections} cs
-                 WHERE cs.groupingid != 0 OR
-                       cs.availablefrom != 0 OR
-                       cs.availableuntil != 0 OR
-                       EXISTS (SELECT 1 FROM {course_sections_availability} WHERE coursesectionid = cs.id) OR
-                       EXISTS (SELECT 1 FROM {course_sections_avail_fields} WHERE coursesectionid = cs.id)");
-
-        if ($cmcount + $sectcount > 0) {
-            // Show progress bar and start db transaction.
-            $transaction = $DB->start_delegated_transaction();
-            $pbar = new progress_bar('availupdate', 500, true);
-
-            // Loop through all course-modules.
-            // (Performance: On the OU system, the query took <1 second for ~20k
-            // results; updating all those entries took ~3 minutes.)
-            $done = 0;
-            $lastupdate = 0;
-            $rs = $DB->get_recordset_sql("
-                    SELECT cm.id, cm.availablefrom, cm.availableuntil, cm.showavailability,
-                           COUNT(DISTINCT cma.id) AS availcount,
-                           COUNT(DISTINCT cmf.id) AS fieldcount
-                      FROM {course_modules} cm
-                           LEFT JOIN {course_modules_availability} cma ON cma.coursemoduleid = cm.id
-                           LEFT JOIN {course_modules_avail_fields} cmf ON cmf.coursemoduleid = cm.id
-                     WHERE cm.availablefrom != 0 OR
-                           cm.availableuntil != 0 OR
-                           cma.id IS NOT NULL OR
-                           cmf.id IS NOT NULL
-                  GROUP BY cm.id, cm.availablefrom, cm.availableuntil, cm.showavailability");
-            foreach ($rs as $rec) {
-                // Update progress initially and then once per second.
-                if (time() != $lastupdate) {
-                    $lastupdate = time();
-                    $pbar->update($done, $cmcount + $sectcount,
-                            "Updating activity availability settings ($done/$cmcount)");
-                }
-
-                // Get supporting records - only if there are any (to reduce the
-                // number of queries where just date/group is used).
-                if ($rec->availcount) {
-                    $availrecs = $DB->get_records('course_modules_availability',
-                            array('coursemoduleid' => $rec->id));
-                } else {
-                    $availrecs = array();
-                }
-                if ($rec->fieldcount) {
-                    $fieldrecs = $DB->get_records_sql("
-                            SELECT cmaf.userfield, cmaf.operator, cmaf.value, uif.shortname
-                              FROM {course_modules_avail_fields} cmaf
-                         LEFT JOIN {user_info_field} uif ON uif.id = cmaf.customfieldid
-                             WHERE cmaf.coursemoduleid = ?", array($rec->id));
-                } else {
-                    $fieldrecs = array();
-                }
-
-                // Update item.
-                $availability = upgrade_availability_item(0, 0,
-                        $rec->availablefrom, $rec->availableuntil,
-                        $rec->showavailability, $availrecs, $fieldrecs);
-                if ($availability) {
-                    $DB->set_field('course_modules', 'availability', $availability, array('id' => $rec->id));
-                }
-
-                // Update progress.
-                $done++;
-            }
-            $rs->close();
-
-            // Loop through all course-sections.
-            // (Performance: On the OU system, this took <1 second for, er, 150 results.)
-            $done = 0;
-            $rs = $DB->get_recordset_sql("
-                    SELECT cs.id, cs.groupingid, cs.availablefrom,
-                           cs.availableuntil, cs.showavailability,
-                           COUNT(DISTINCT csa.id) AS availcount,
-                           COUNT(DISTINCT csf.id) AS fieldcount
-                      FROM {course_sections} cs
-                           LEFT JOIN {course_sections_availability} csa ON csa.coursesectionid = cs.id
-                           LEFT JOIN {course_sections_avail_fields} csf ON csf.coursesectionid = cs.id
-                     WHERE cs.groupingid != 0 OR
-                           cs.availablefrom != 0 OR
-                           cs.availableuntil != 0 OR
-                           csa.id IS NOT NULL OR
-                           csf.id IS NOT NULL
-                  GROUP BY cs.id, cs.groupingid, cs.availablefrom,
-                           cs.availableuntil, cs.showavailability");
-            foreach ($rs as $rec) {
-                // Update progress once per second.
-                if (time() != $lastupdate) {
-                    $lastupdate = time();
-                    $pbar->update($done + $cmcount, $cmcount + $sectcount,
-                            "Updating section availability settings ($done/$sectcount)");
-                }
-
-                // Get supporting records - only if there are any (to reduce the
-                // number of queries where just date/group is used).
-                if ($rec->availcount) {
-                    $availrecs = $DB->get_records('course_sections_availability',
-                            array('coursesectionid' => $rec->id));
-                } else {
-                    $availrecs = array();
-                }
-                if ($rec->fieldcount) {
-                    $fieldrecs = $DB->get_records_sql("
-                            SELECT csaf.userfield, csaf.operator, csaf.value, uif.shortname
-                              FROM {course_sections_avail_fields} csaf
-                         LEFT JOIN {user_info_field} uif ON uif.id = csaf.customfieldid
-                             WHERE csaf.coursesectionid = ?", array($rec->id));
-                } else {
-                    $fieldrecs = array();
-                }
-
-                // Update item.
-                $availability = upgrade_availability_item($rec->groupingid ? 1 : 0,
-                        $rec->groupingid, $rec->availablefrom, $rec->availableuntil,
-                        $rec->showavailability, $availrecs, $fieldrecs);
-                if ($availability) {
-                    $DB->set_field('course_sections', 'availability', $availability, array('id' => $rec->id));
-                }
-
-                // Update progress.
-                $done++;
-            }
-            $rs->close();
-
-            // Final progress update for 100%.
-            $pbar->update($done + $cmcount, $cmcount + $sectcount,
-                    'Availability settings updated for ' . ($cmcount + $sectcount) .
-                    ' activities and sections');
-
-            $transaction->allow_commit();
-        }
-
-        // Drop tables which are not necessary because they are covered by the
-        // new availability fields.
-        $table = new xmldb_table('course_modules_availability');
-        if ($dbman->table_exists($table)) {
-            $dbman->drop_table($table);
-        }
-        $table = new xmldb_table('course_modules_avail_fields');
-        if ($dbman->table_exists($table)) {
-            $dbman->drop_table($table);
-        }
-        $table = new xmldb_table('course_sections_availability');
-        if ($dbman->table_exists($table)) {
-            $dbman->drop_table($table);
-        }
-        $table = new xmldb_table('course_sections_avail_fields');
-        if ($dbman->table_exists($table)) {
-            $dbman->drop_table($table);
-        }
-
-        // Drop unnnecessary fields from course_modules.
-        $table = new xmldb_table('course_modules');
-        $field = new xmldb_field('availablefrom');
-        if ($dbman->field_exists($table, $field)) {
-            $dbman->drop_field($table, $field);
-        }
-        $field = new xmldb_field('availableuntil');
-        if ($dbman->field_exists($table, $field)) {
-            $dbman->drop_field($table, $field);
-        }
-        $field = new xmldb_field('showavailability');
-        if ($dbman->field_exists($table, $field)) {
-            $dbman->drop_field($table, $field);
-        }
-
-        // Drop unnnecessary fields from course_sections.
-        $table = new xmldb_table('course_sections');
-        $field = new xmldb_field('availablefrom');
-        if ($dbman->field_exists($table, $field)) {
-            $dbman->drop_field($table, $field);
-        }
-        $field = new xmldb_field('availableuntil');
-        if ($dbman->field_exists($table, $field)) {
-            $dbman->drop_field($table, $field);
-        }
-        $field = new xmldb_field('showavailability');
-        if ($dbman->field_exists($table, $field)) {
-            $dbman->drop_field($table, $field);
-        }
-        $field = new xmldb_field('groupingid');
-        if ($dbman->field_exists($table, $field)) {
-            $dbman->drop_field($table, $field);
-        }
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2014040800.00);
-    }
-
-    if ($oldversion < 2014041500.01) {
-
-        $table = new xmldb_table('user_info_data');
-
-        $sql = 'SELECT DISTINCT info.id
-                  FROM {user_info_data} info
-            INNER JOIN {user_info_data} older
-                    ON info.fieldid = older.fieldid
-                   AND info.userid = older.userid
-                   AND older.id < info.id';
-        $transaction = $DB->start_delegated_transaction();
-        $rs = $DB->get_recordset_sql($sql);
-        foreach ($rs as $rec) {
-            $DB->delete_records('user_info_data', array('id' => $rec->id));
-        }
-        $transaction->allow_commit();
-
-        $oldindex = new xmldb_index('userid_fieldid', XMLDB_INDEX_NOTUNIQUE, array('userid', 'fieldid'));
-        if ($dbman->index_exists($table, $oldindex)) {
-            $dbman->drop_index($table, $oldindex);
-        }
-
-        $newindex = new xmldb_index('userid_fieldid', XMLDB_INDEX_UNIQUE, array('userid', 'fieldid'));
-
-        if (!$dbman->index_exists($table, $newindex)) {
-            $dbman->add_index($table, $newindex);
-        }
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2014041500.01);
-    }
-
-    if ($oldversion < 2014050100.00) {
-        // Fixing possible wrong MIME type for DigiDoc files.
-        $extensions = array('%.bdoc', '%.cdoc', '%.ddoc');
-        $select = $DB->sql_like('filename', '?', false);
-        foreach ($extensions as $extension) {
-            $DB->set_field_select(
-                'files',
-                'mimetype',
-                'application/x-digidoc',
-                $select,
-                array($extension)
-            );
-        }
-        upgrade_main_savepoint(true, 2014050100.00);
-    }
-
-    // Moodle v2.7.0 release upgrade line.
-    // Put any upgrade step following this.
-
     // MDL-32543 Make sure that the log table has correct length for action and url fields.
     if ($oldversion < 2014051200.02) {
 
index 5b0c838..e6b29ab 100644 (file)
@@ -76,387 +76,6 @@ function upgrade_mysql_get_supported_tables() {
     return $tables;
 }
 
-/**
- * Remove all signed numbers from current database and change
- * text fields to long texts - mysql only.
- */
-function upgrade_mysql_fix_unsigned_and_lob_columns() {
-    // We are not using standard API for changes of column
-    // because everything 'signed'-related will be removed soon.
-
-    // If anybody already has numbers higher than signed limit the execution stops
-    // and tables must be fixed manually before continuing upgrade.
-
-    global $DB;
-
-    if ($DB->get_dbfamily() !== 'mysql') {
-        return;
-    }
-
-    $pbar = new progress_bar('mysqlconvertunsignedlobs', 500, true);
-
-    $prefix = $DB->get_prefix();
-    $tables = upgrade_mysql_get_supported_tables();
-
-    $tablecount = count($tables);
-    $i = 0;
-    foreach ($tables as $table) {
-        $i++;
-
-        $changes = array();
-
-        $sql = "SHOW COLUMNS FROM `{{$table}}`";
-        $rs = $DB->get_recordset_sql($sql);
-        foreach ($rs as $column) {
-            $column = (object)array_change_key_case((array)$column, CASE_LOWER);
-            if (stripos($column->type, 'unsigned') !== false) {
-                $maxvalue = 0;
-                if (preg_match('/^int/i', $column->type)) {
-                    $maxvalue = 2147483647;
-                } else if (preg_match('/^medium/i', $column->type)) {
-                    $maxvalue = 8388607;
-                } else if (preg_match('/^smallint/i', $column->type)) {
-                    $maxvalue = 32767;
-                } else if (preg_match('/^tinyint/i', $column->type)) {
-                    $maxvalue = 127;
-                }
-                if ($maxvalue) {
-                    // Make sure nobody is abusing our integer ranges - moodle int sizes are in digits, not bytes!!!
-                    $invalidcount = $DB->get_field_sql("SELECT COUNT('x') FROM `{{$table}}` WHERE `$column->field` > :maxnumber", array('maxnumber'=>$maxvalue));
-                    if ($invalidcount) {
-                        throw new moodle_exception('notlocalisederrormessage', 'error', new moodle_url('/admin/'), "Database table '{$table}'' contains unsigned column '{$column->field}' with $invalidcount values that are out of allowed range, upgrade can not continue.");
-                    }
-                }
-                $type = preg_replace('/unsigned/i', 'signed', $column->type);
-                $notnull = ($column->null === 'NO') ? 'NOT NULL' : 'NULL';
-                $default = (!is_null($column->default) and $column->default !== '') ? "DEFAULT '$column->default'" : '';
-                $autoinc = (stripos($column->extra, 'auto_increment') !== false) ? 'AUTO_INCREMENT' : '';
-                // Primary and unique not necessary here, change_database_structure does not add prefix.
-                $changes[] = "MODIFY COLUMN `$column->field` $type $notnull $default $autoinc";
-
-            } else if ($column->type === 'tinytext' or $column->type === 'mediumtext' or $column->type === 'text') {
-                $notnull = ($column->null === 'NO') ? 'NOT NULL' : 'NULL';
-                $default = (!is_null($column->default) and $column->default !== '') ? "DEFAULT '$column->default'" : '';
-                // Primary, unique and inc are not supported for texts.
-                $changes[] = "MODIFY COLUMN `$column->field` LONGTEXT $notnull $default";
-
-            } else if ($column->type === 'tinyblob' or $column->type === 'mediumblob' or $column->type === 'blob') {
-                $notnull = ($column->null === 'NO') ? 'NOT NULL' : 'NULL';
-                $default = (!is_null($column->default) and $column->default !== '') ? "DEFAULT '$column->default'" : '';
-                // Primary, unique and inc are not supported for blobs.
-                $changes[] = "MODIFY COLUMN `$column->field` LONGBLOB $notnull $default";
-            }
-
-        }
-        $rs->close();
-
-        if ($changes) {
-            // Set appropriate timeout - 1 minute per thousand of records should be enough, min 60 minutes just in case.
-            $count = $DB->count_records($table, array());
-            $timeout = ($count/1000)*60;
-            $timeout = ($timeout < 60*60) ? 60*60 : (int)$timeout;
-            upgrade_set_timeout($timeout);
-
-            $sql = "ALTER TABLE `{$prefix}$table` ".implode(', ', $changes);
-            $DB->change_database_structure($sql);
-        }
-
-        $pbar->update($i, $tablecount, "Converted unsigned/lob columns in MySQL database - $i/$tablecount.");
-    }
-}
-
-/**
- * Migrate NTEXT to NVARCHAR(MAX).
- */
-function upgrade_mssql_nvarcharmax() {
-    global $DB;
-
-    if ($DB->get_dbfamily() !== 'mssql') {
-        return;
-    }
-
-    $pbar = new progress_bar('mssqlconvertntext', 500, true);
-
-    $prefix = $DB->get_prefix();
-    $tables = $DB->get_tables(false);
-
-    $tablecount = count($tables);
-    $i = 0;
-    foreach ($tables as $table) {
-        $i++;
-
-        $columns = array();
-
-        $sql = "SELECT column_name
-                  FROM INFORMATION_SCHEMA.COLUMNS
-                 WHERE table_name = '{{$table}}' AND UPPER(data_type) = 'NTEXT'";
-        $rs = $DB->get_recordset_sql($sql);
-        foreach ($rs as $column) {
-            $columns[] = $column->column_name;
-        }
-        $rs->close();
-
-        if ($columns) {
-            // Set appropriate timeout - 1 minute per thousand of records should be enough, min 60 minutes just in case.
-            $count = $DB->count_records($table, array());
-            $timeout = ($count/1000)*60;
-            $timeout = ($timeout < 60*60) ? 60*60 : (int)$timeout;
-            upgrade_set_timeout($timeout);
-
-            $updates = array();
-            foreach ($columns as $column) {
-                // Change the definition.
-                $sql = "ALTER TABLE {$prefix}$table ALTER COLUMN $column NVARCHAR(MAX)";
-                $DB->change_database_structure($sql);
-                $updates[] = "$column = $column";
-            }
-
-            // Now force the migration of text data to new optimised storage.
-            $sql = "UPDATE {{$table}} SET ".implode(', ', $updates);
-            $DB->execute($sql);
-        }
-
-        $pbar->update($i, $tablecount, "Converted NTEXT to NVARCHAR(MAX) columns in MS SQL Server database - $i/$tablecount.");
-    }
-}
-
-/**
- * Migrate IMAGE to VARBINARY(MAX).
- */
-function upgrade_mssql_varbinarymax() {
-    global $DB;
-
-    if ($DB->get_dbfamily() !== 'mssql') {
-        return;
-    }
-
-    $pbar = new progress_bar('mssqlconvertimage', 500, true);
-
-    $prefix = $DB->get_prefix();
-    $tables = $DB->get_tables(false);
-
-    $tablecount = count($tables);
-    $i = 0;
-    foreach ($tables as $table) {
-        $i++;
-
-        $columns = array();
-
-        $sql = "SELECT column_name
-                  FROM INFORMATION_SCHEMA.COLUMNS
-                 WHERE table_name = '{{$table}}' AND UPPER(data_type) = 'IMAGE'";
-        $rs = $DB->get_recordset_sql($sql);
-        foreach ($rs as $column) {
-            $columns[] = $column->column_name;
-        }
-        $rs->close();
-
-        if ($columns) {
-            // Set appropriate timeout - 1 minute per thousand of records should be enough, min 60 minutes just in case.
-            $count = $DB->count_records($table, array());
-            $timeout = ($count/1000)*60;
-            $timeout = ($timeout < 60*60) ? 60*60 : (int)$timeout;
-            upgrade_set_timeout($timeout);
-
-            foreach ($columns as $column) {
-                // Change the definition.
-                $sql = "ALTER TABLE {$prefix}$table ALTER COLUMN $column VARBINARY(MAX)";
-                $DB->change_database_structure($sql);
-            }
-
-            // Binary columns should not be used, do not waste time optimising the storage.
-        }
-
-        $pbar->update($i, $tablecount, "Converted IMAGE to VARBINARY(MAX) columns in MS SQL Server database - $i/$tablecount.");
-    }
-}
-
-/**
- * This upgrade script fixes the mismatches between DB fields course_modules.section
- * and course_sections.sequence. It makes sure that each module is included
- * in the sequence of at least one section.
- * Note that this script is different from admin/cli/fix_course_sortorder.php
- * in the following ways:
- * 1. It does not fix the cases when module appears several times in section(s) sequence(s) -
- *    it will be done automatically on the next viewing of the course.
- * 2. It does not remove non-existing modules from section sequences - administrator
- *    has to run the CLI script to do it.
- * 3. When this script finds an orphaned module it adds it to the section but makes hidden
- *    where CLI script does not change the visiblity specified in the course_modules table.
- */
-function upgrade_course_modules_sequences() {
-    global $DB;
-
-    // Find all modules that point to the section which does not point back to this module.
-    $sequenceconcat = $DB->sql_concat("','", "s.sequence", "','");
-    $moduleconcat = $DB->sql_concat("'%,'", "m.id", "',%'");
-    $sql = "SELECT m.id, m.course, m.section, s.sequence
-        FROM {course_modules} m LEFT OUTER JOIN {course_sections} s
-        ON m.course = s.course and m.section = s.id
-        WHERE s.sequence IS NULL OR ($sequenceconcat NOT LIKE $moduleconcat)
-        ORDER BY m.course";
-    $rs = $DB->get_recordset_sql($sql);
-    $sections = null;
-    foreach ($rs as $cm) {
-        if (!isset($sections[$cm->course])) {
-            // Retrieve all sections for the course (only once for each corrupt course).
-            $sections = array($cm->course =>
-                    $DB->get_records('course_sections', array('course' => $cm->course),
-                            'section', 'id, section, sequence, visible'));
-            if (empty($sections[$cm->course])) {
-                // Very odd - the course has a module in it but has no sections. Create 0-section.
-                $newsection = array('sequence' => '', 'section' => 0, 'visible' => 1);
-                $newsection['id'] = $DB->insert_record('course_sections',
-                        $newsection + array('course' => $cm->course, 'summary' => '', 'summaryformat' => FORMAT_HTML));
-                $sections[$cm->course] = array($newsection['id'] => (object)$newsection);
-            }
-        }
-        // Attempt to find the section that has this module in it's sequence.
-        // If there are several of them, pick the last because this is what get_fast_modinfo() does.
-        $sectionid = null;
-        foreach ($sections[$cm->course] as $section) {
-            if (!empty($section->sequence) && in_array($cm->id, preg_split('/,/', $section->sequence))) {
-                $sectionid = $section->id;
-            }
-        }
-        if ($sectionid) {
-            // Found the section. Update course_module to point to the correct section.
-            $params = array('id' => $cm->id, 'section' => $sectionid);
-            if (!$sections[$cm->course][$sectionid]->visible) {
-                $params['visible'] = 0;
-            }
-            $DB->update_record('course_modules', $params);
-        } else {
-            // No section in the course has this module in it's sequence.
-            if (isset($sections[$cm->course][$cm->section])) {
-                // Try to add module to the section it points to (if it is valid).
-                $sectionid = $cm->section;
-            } else {
-                // Section not found. Just add to the first available section.
-                reset($sections[$cm->course]);
-                $sectionid = key($sections[$cm->course]);
-            }
-            $newsequence = ltrim($sections[$cm->course][$sectionid]->sequence . ',' . $cm->id, ',');
-            $sections[$cm->course][$sectionid]->sequence = $newsequence;
-            $DB->update_record('course_sections', array('id' => $sectionid, 'sequence' => $newsequence));
-            // Make module invisible because it was not displayed at all before this upgrade script.
-            $DB->update_record('course_modules', array('id' => $cm->id, 'section' => $sectionid, 'visible' => 0, 'visibleold' => 0));
-        }
-    }
-    $rs->close();
-    unset($sections);
-
-    // Note that we don't need to reset course cache here because it is reset automatically after upgrade.
-}
-
-/**
- * Updates a single item (course module or course section) to transfer the
- * availability settings from the old to the new format.
- *
- * Note: We do not convert groupmembersonly for modules at present. If we did,
- * $groupmembersonly would be set to the groupmembersonly option for the
- * module. Since we don't, it will be set to 0 for modules, and 1 for sections
- * if they have a grouping.
- *
- * @param int $groupmembersonly 1 if activity has groupmembersonly option
- * @param int $groupingid Grouping id (0 = none)
- * @param int $availablefrom Available from time (0 = none)
- * @param int $availableuntil Available until time (0 = none)
- * @param int $showavailability Show availability (1) or hide activity entirely
- * @param array $availrecs Records from course_modules/sections_availability
- * @param array $fieldrecs Records from course_modules/sections_avail_fields
- */
-function upgrade_availability_item($groupmembersonly, $groupingid,
-        $availablefrom, $availableuntil, $showavailability,
-        array $availrecs, array $fieldrecs) {
-    global $CFG, $DB;
-    $conditions = array();
-    $shows = array();
-
-    // Group members only condition (if enabled).
-    if ($CFG->enablegroupmembersonly && $groupmembersonly) {
-        if ($groupingid) {
-            $conditions[] = '{"type":"grouping"' .
-                    ($groupingid ? ',"id":' . $groupingid : '') . '}';
-        } else {
-            // No grouping specified, so allow any group.
-            $conditions[] = '{"type":"group"}';
-        }
-        // Group members only condition was not displayed to students.
-        $shows[] = 'false';
-
-        // In the unlikely event that the site had enablegroupmembers only
-        // but NOT enableavailability, we need to turn this on now.
-        if (!$CFG->enableavailability) {
-            set_config('enableavailability', 1);
-        }
-    }
-
-    // Date conditions.
-    if ($availablefrom) {
-        $conditions[] = '{"type":"date","d":">=","t":' . $availablefrom . '}';
-        $shows[] = $showavailability ? 'true' : 'false';
-    }
-    if ($availableuntil) {
-        $conditions[] = '{"type":"date","d":"<","t":' . $availableuntil . '}';
-        // Until dates never showed to students.
-        $shows[] = 'false';
-    }
-
-    // Conditions from _availability table.
-    foreach ($availrecs as $rec) {
-        if (!empty($rec->sourcecmid)) {
-            // Completion condition.
-            $conditions[] = '{"type":"completion","cm":' . $rec->sourcecmid .
-                    ',"e":' . $rec->requiredcompletion . '}';
-        } else {
-            // Grade condition.
-            $minmax = '';
-            if (!empty($rec->grademin)) {
-                $minmax .= ',"min":' . sprintf('%.5f', $rec->grademin);
-            }
-            if (!empty($rec->grademax)) {
-                $minmax .= ',"max":' . sprintf('%.5f', $rec->grademax);
-            }
-            $conditions[] = '{"type":"grade","id":' . $rec->gradeitemid . $minmax . '}';
-        }
-        $shows[] = $showavailability ? 'true' : 'false';
-    }
-
-    // Conditions from _fields table.
-    foreach ($fieldrecs as $rec) {
-        if (isset($rec->userfield)) {
-            // Standard field.
-            $fieldbit = ',"sf":' . json_encode($rec->userfield);
-        } else {
-            // Custom field.
-            $fieldbit = ',"cf":' . json_encode($rec->shortname);
-        }
-        // Value is not included for certain operators.
-        switch($rec->operator) {
-            case 'isempty':
-            case 'isnotempty':
-                $valuebit = '';
-                break;
-
-            default:
-                $valuebit = ',"v":' . json_encode($rec->value);
-                break;
-        }
-        $conditions[] = '{"type":"profile","op":"' . $rec->operator . '"' .
-                $fieldbit . $valuebit . '}';
-        $shows[] = $showavailability ? 'true' : 'false';
-    }
-
-    // If there are some conditions, set them into database.
-    if ($conditions) {
-        return '{"op":"&","showc":[' . implode(',', $shows) . '],' .
-                '"c":[' . implode(',', $conditions) . ']}';
-    } else {
-        return null;
-    }
-}
-
 /**
  * Using data for a single course-module that has groupmembersonly enabled,
  * returns the new availability value that incorporates the correct
index 547bbad..87a5bcf 100644 (file)
@@ -34,25 +34,6 @@ function xmldb_editor_atto_upgrade($oldversion) {
 
     $dbman = $DB->get_manager();
 
-    if ($oldversion < 2014032800) {
-        // Make Atto the default.
-        $currenteditors = $CFG->texteditors;
-        $neweditors = array();
-
-        $list = explode(',', $currenteditors);
-        array_push($neweditors, 'atto');
-        foreach ($list as $editor) {
-            if ($editor != 'atto') {
-                array_push($neweditors, $editor);
-            }
-        }
-
-        set_config('texteditors', implode(',', $neweditors));
-        upgrade_plugin_savepoint(true, 2014032800, 'editor', 'atto');
-    }
-
-    // Moodle v2.7.0 release upgrade line.
-    // Put any upgrade step following this.
     if ($oldversion < 2014081400) {
 
         // Define table editor_atto_autosave to be created.
index 6323f52..14204f5 100644 (file)
@@ -27,137 +27,6 @@ defined('MOODLE_INTERNAL') || die();
 function xmldb_editor_tinymce_upgrade($oldversion) {
     global $CFG, $DB;
 
-    $dbman = $DB->get_manager();
-
-
-    if ($oldversion < 2012083100) {
-        // Reset redesigned editor toolbar setting.
-        unset_config('customtoolbar', 'editor_tinymce');
-        upgrade_plugin_savepoint(true, 2012083100, 'editor', 'tinymce');
-    }
-
-
-    // Moodle v2.4.0 release upgrade line
-    // Put any upgrade step following this
-
-
-    // Moodle v2.5.0 release upgrade line.
-    // Put any upgrade step following this.
-
-    if ($oldversion < 2013061400) {
-        // Reset redesigned editor toolbar setting.
-        $oldorder = "fontselect,fontsizeselect,formatselect,|,undo,redo,|,search,replace,|,fullscreen
-
-bold,italic,underline,strikethrough,sub,sup,|,justifyleft,justifycenter,justifyright,|,cleanup,removeformat,pastetext,pasteword,|,forecolor,backcolor,|,ltr,rtl
-
-bullist,numlist,outdent,indent,|,link,unlink,|,image,nonbreaking,charmap,table,|,code";
-
-        $neworder = "formatselect,bold,italic,|,bullist,numlist,|,link,unlink,|,image
-
-undo,redo,|,underline,strikethrough,sub,sup,|,justifyleft,justifycenter,justifyright,|,outdent,indent,|,forecolor,backcolor,|,ltr,rtl,|,nonbreaking,charmap,table
-
-fontselect,fontsizeselect,code,search,replace,|,cleanup,removeformat,pastetext,pasteword,|,fullscreen";
-        $currentorder = get_config('editor_tinymce', 'customtoolbar');
-        if ($currentorder == $oldorder) {
-            unset_config('customtoolbar', 'editor_tinymce');
-            set_config('customtoolbar', $neworder, 'editor_tinymce');
-        }
-        upgrade_plugin_savepoint(true, 2013061400, 'editor', 'tinymce');
-    }
-
-    if ($oldversion < 2013070500) {
-        // Insert wrap plugin to nicely wrap the toolbars on small screens.
-        $oldorder = "formatselect,bold,italic,|,bullist,numlist,|,link,unlink,|,image
-
-undo,redo,|,underline,strikethrough,sub,sup,|,justifyleft,justifycenter,justifyright,|,outdent,indent,|,forecolor,backcolor,|,ltr,rtl,|,nonbreaking,charmap,table
-
-fontselect,fontsizeselect,code,search,replace,|,cleanup,removeformat,pastetext,pasteword,|,fullscreen";
-
-        $neworder = "formatselect,bold,italic,wrap,bullist,numlist,|,link,unlink,|,image
-
-undo,redo,|,underline,strikethrough,sub,sup,|,justifyleft,justifycenter,justifyright,wrap,outdent,indent,|,forecolor,backcolor,|,ltr,rtl,|,nonbreaking,charmap,table
-
-fontselect,fontsizeselect,wrap,code,search,replace,|,cleanup,removeformat,pastetext,pasteword,|,fullscreen";
-        $currentorder = get_config('editor_tinymce', 'customtoolbar');
-        if ($currentorder == $oldorder) {
-            unset_config('customtoolbar', 'editor_tinymce');
-            set_config('customtoolbar', $neworder, 'editor_tinymce');
-        } else {
-            // Simple auto conversion algorithm.
-            $toolbars = explode("\n", $oldorder);
-            $newtoolbars = array();
-            foreach ($toolbars as $toolbar) {
-                $sepcount = substr_count($toolbar, '|');
-
-                if ($sepcount > 0) {
-                    // We assume the middle separator (rounding down).
-                    $divisionindex = round($sepcount / 2, 0, PHP_ROUND_HALF_DOWN);
-
-                    $buttons = explode(',', $toolbar);
-                    $index = 0;
-                    foreach ($buttons as $key => $button) {
-                        if ($button === "|") {
-                            if ($index == $divisionindex) {
-                                $buttons[$key] = 'wrap';
-                                break;
-                            } else {
-                                $index += 1;
-                            }
-                        }
-                    }
-                    $toolbar = implode(',', $buttons);
-                }
-                array_push($newtoolbars, $toolbar);
-            }
-            $neworder = implode("\n", $newtoolbars);
-
-            // Set the new config.
-            unset_config('customtoolbar', 'editor_tinymce');
-            set_config('customtoolbar', $neworder, 'editor_tinymce');
-        }
-        upgrade_plugin_savepoint(true, 2013070500, 'editor', 'tinymce');
-    }
-
-    if ($oldversion < 2013102900) {
-        // Reset redesigned editor toolbar setting.
-        $currentorder = get_config('editor_tinymce', 'customtoolbar');
-        // Start with a wrap.
-        $neworder = "wrap,". $currentorder;
-        // Replace all separators with wraps to allow for proper display of groups.
-        $neworder = preg_replace('/\|\|*/', "wrap", $neworder);
-        // Insert a wrap between the format selector and the bold button.
-        $neworder = str_replace("formatselect,bold", "formatselect,wrap,bold", $neworder);
-        set_config('customtoolbar', $neworder, 'editor_tinymce');
-        upgrade_plugin_savepoint(true, 2013102900, 'editor', 'tinymce');
-    }
-
-    if ($oldversion < 2013110600) {
-        // Reset redesigned editor toolbar setting.
-        $currentorder = get_config('editor_tinymce', 'customtoolbar');
-        $olddefaultorder = "wrap,formatselect,wrap,bold,italic,wrap,bullist,numlist,wrap,link,unlink,wrap,image
-
-undo,redo,wrap,underline,strikethrough,sub,sup,wrap,justifyleft,justifycenter,justifyright,wrap,outdent,indent,wrap,forecolor,backcolor,wrap,ltr,rtl,wrap,nonbreaking,charmap,table
-
-fontselect,fontsizeselect,wrap,code,search,replace,wrap,cleanup,removeformat,pastetext,pasteword,wrap,fullscreen";
-        $neworder = "wrap,formatselect,wrap,bold,italic,wrap,bullist,numlist,wrap,link,unlink,wrap,image
-
-undo,redo,wrap,underline,strikethrough,sub,sup,wrap,justifyleft,justifycenter,justifyright,wrap,outdent,indent,wrap,forecolor,backcolor,wrap,ltr,rtl
-
-fontselect,fontsizeselect,wrap,code,search,replace,wrap,nonbreaking,charmap,table,wrap,cleanup,removeformat,pastetext,pasteword,wrap,fullscreen";
-        if ($currentorder == $olddefaultorder) {
-            set_config('customtoolbar', $neworder, 'editor_tinymce');
-        }
-
-        upgrade_plugin_savepoint(true, 2013110600, 'editor', 'tinymce');
-    }
-
-    // Moodle v2.6.0 release upgrade line.
-    // Put any upgrade step following this.
-
-
-    // Moodle v2.7.0 release upgrade line.
-    // Put any upgrade step following this.
-
     if ($oldversion < 2014062900) {
         // We only want to delete DragMath from the customtoolbar setting if the directory no longer exists. If
         // the directory is present then it means it has been restored, so do not remove any settings.
index 021ab45..2186346 100644 (file)
 defined('MOODLE_INTERNAL') || die();
 
 function xmldb_tinymce_spellchecker_upgrade($oldversion) {
-    global $CFG, $DB;
-    require_once(__DIR__.'/upgradelib.php');
-
-    $dbman = $DB->get_manager();
-
-    if ($oldversion < 2012051800) {
-        tinymce_spellchecker_migrate_settings();
-        upgrade_plugin_savepoint(true, 2012051800, 'tinymce', 'spellchecker');
-    }
-
-
-    // Moodle v2.4.0 release upgrade line
-    // Put any upgrade step following this
-
-
-    // Moodle v2.5.0 release upgrade line.
-    // Put any upgrade step following this.
-
-
-    // Moodle v2.6.0 release upgrade line.
-    // Put any upgrade step following this.
-
-    // Moodle v2.7.0 release upgrade line.
-    // Put any upgrade step following this.
+    global $CFG;
 
     // Moodle v2.8.0 release upgrade line.
     // Put any upgrade step following this.
index ca40f86..1c4b707 100644 (file)
@@ -43,80 +43,6 @@ class core_upgradelib_testcase extends advanced_testcase {
         $this->assertFalse(upgrade_stale_php_files_present());
     }
 
-    /**
-     * Test the {@link upgrade_grade_item_fix_sortorder() function with
-     * faked duplicate sortorder data.
-     */
-    public function test_upgrade_grade_item_fix_sortorder() {
-        global $DB;
-
-        $this->resetAfterTest(true);
-
-        // The purpose of this test is to make sure that after upgrade script
-        // there is no duplicates in the field grade_items.sortorder (for each course)
-        // and the result of query "SELECT id FROM grade_items WHERE courseid=? ORDER BY sortorder, id" does not change.
-        $sequencesql = 'SELECT id FROM {grade_items} WHERE courseid=? ORDER BY sortorder, id';
-
-        // Each set is used for filling the db with fake data and will be representing the result of query:
-        // "SELECT sortorder from {grade_items} WHERE courseid=? ORDER BY id".
-        $testsets = array(
-            // Items that need no action.
-            array(1,2,3),
-            array(5,6,7),
-            array(7,6,1,3,2,5),
-            // Items with sortorder duplicates
-            array(1,2,2,3,3,4,5),
-            // Only one sortorder duplicate.
-            array(1,1),
-            array(3,3),
-            // Non-sequential sortorders with one or multiple duplicates.
-            array(3,3,7,5,6,6,9,10,8,3),
-            array(7,7,3),
-            array(3,4,5,3,5,4,7,1)
-        );
-        $origsequences = array();
-
-        // Generate the data and remember the initial sequence or items.
-        foreach ($testsets as $testset) {
-            $course = $this->getDataGenerator()->create_course();
-            foreach ($testset as $sortorder) {
-                $this->insert_fake_grade_item_sortorder($course->id, $sortorder);
-            }
-            $DB->get_records('grade_items');
-            $origsequences[$course->id] = $DB->get_fieldset_sql($sequencesql, array($course->id));
-        }
-
-        $duplicatedetectionsql = "SELECT courseid, sortorder
-                                    FROM {grade_items}
-                                GROUP BY courseid, sortorder
-                                  HAVING COUNT(id) > 1";
-
-        // Verify there are duplicates before we start the fix.
-        $dupes = $DB->record_exists_sql($duplicatedetectionsql);
-        $this->assertTrue($dupes);
-
-        // Do the work.
-        upgrade_grade_item_fix_sortorder();
-
-        // Verify that no duplicates are left in the database.
-        $dupes = $DB->record_exists_sql($duplicatedetectionsql);
-        $this->assertFalse($dupes);
-
-        // Verify that sequences are exactly the same as they were before upgrade script.
-        $idx = 0;
-        foreach ($origsequences as $courseid => $origsequence) {
-            if (count(($testsets[$idx])) == count(array_unique($testsets[$idx]))) {
-                // If there were no duplicates for this course verify that sortorders are not modified.
-                $newsortorders = $DB->get_fieldset_sql("SELECT sortorder from {grade_items} WHERE courseid=? ORDER BY id", array($courseid));
-                $this->assertEquals($testsets[$idx], $newsortorders);
-            }
-            $newsequence = $DB->get_fieldset_sql($sequencesql, array($courseid));
-            $this->assertEquals($origsequence, $newsequence,
-                    "Sequences do not match for test set $idx : ".join(',', $testsets[$idx]));
-            $idx++;
-        }
-    }
-
     /**
      * Populate some fake grade items into the database with specified
      * sortorder and course id.
@@ -150,57 +76,6 @@ class core_upgradelib_testcase extends advanced_testcase {
         return $DB->get_record('grade_items', array('id' => $item->id));
     }
 
-    public function test_upgrade_fix_missing_root_folders() {
-        global $DB, $SITE;
-
-        $this->resetAfterTest(true);
-
-        // Setup some broken data...
-        // Create two resources (and associated file areas).
-        $this->setAdminUser();
-        $resource1 = $this->getDataGenerator()->get_plugin_generator('mod_resource')
-            ->create_instance(array('course' => $SITE->id));
-        $resource2 = $this->getDataGenerator()->get_plugin_generator('mod_resource')
-            ->create_instance(array('course' => $SITE->id));
-
-        // Delete the folder record of resource1 to simulate broken data.
-        $context = context_module::instance($resource1->cmid);
-        $selectargs = array('contextid' => $context->id,
-                            'component' => 'mod_resource',
-                            'filearea' => 'content',
-                            'itemid' => 0);
-
-        // Verify file records exist.
-        $areafilecount = $DB->count_records('files', $selectargs);
-        $this->assertNotEmpty($areafilecount);
-
-        // Delete the folder record.
-        $folderrecord = $selectargs;
-        $folderrecord['filepath'] = '/';
-        $folderrecord['filename'] = '.';
-
-        // Get previous folder record.
-        $oldrecord = $DB->get_record('files', $folderrecord);
-        $DB->delete_records('files', $folderrecord);
-
-        // Verify the folder record has been removed.
-        $newareafilecount = $DB->count_records('files', $selectargs);
-        $this->assertSame($newareafilecount, $areafilecount - 1);
-
-        $this->assertFalse($DB->record_exists('files', $folderrecord));
-
-        // Run the upgrade step!
-        upgrade_fix_missing_root_folders();
-
-        // Verify the folder record has been restored.
-        $newareafilecount = $DB->count_records('files', $selectargs);
-        $this->assertSame($newareafilecount, $areafilecount);
-
-        $newrecord = $DB->get_record('files', $folderrecord, '*', MUST_EXIST);
-        // Verify the hash is correctly created.
-        $this->assertSame($oldrecord->pathnamehash, $newrecord->pathnamehash);
-    }
-
     public function test_upgrade_fix_missing_root_folders_draft() {
         global $DB, $SITE;
 
@@ -245,115 +120,6 @@ class core_upgradelib_testcase extends advanced_testcase {
         $this->assertEquals($originalhash, $newhash);
     }
 
-    /**
-     * Tests the upgrade of an individual course-module or section from the
-     * old to new availability system. (This test does not use the database
-     * so it can run any time.)
-     */
-    public function test_upgrade_availability_item() {
-        global $CFG;
-        $this->resetAfterTest();
-
-        // This function is in the other upgradelib.
-        require_once($CFG->libdir . '/db/upgradelib.php');
-
-        // Groupmembersonly (or nothing). Show option on but ignored.
-        // Note: This $CFG option doesn't exist any more but we are testing the
-        // upgrade function so it did exist then...
-        $CFG->enablegroupmembersonly = 0;
-        $this->assertNull(
-                upgrade_availability_item(1, 0, 0, 0, 1, array(), array()));
-        $CFG->enablegroupmembersonly = 1;
-        $this->assertNull(
-                upgrade_availability_item(0, 0, 0, 0, 1, array(), array()));
-        $this->assertEquals(
-                '{"op":"&","showc":[false],"c":[{"type":"group"}]}',
-                upgrade_availability_item(1, 0, 0, 0, 1, array(), array()));
-        $this->assertEquals(
-                '{"op":"&","showc":[false],"c":[{"type":"grouping","id":4}]}',
-                upgrade_availability_item(1, 4, 0, 0, 1, array(), array()));
-
-        // Dates (with show/hide options - until date always hides).
-        $this->assertEquals(
-                '{"op":"&","showc":[true],"c":[{"type":"date","d":">=","t":996}]}',
-                upgrade_availability_item(0, 0, 996, 0, 1, array(), array()));
-        $this->assertEquals(
-                '{"op":"&","showc":[false],"c":[{"type":"date","d":">=","t":997}]}',
-                upgrade_availability_item(0, 0, 997, 0, 0, array(), array()));
-        $this->assertEquals(
-                '{"op":"&","showc":[false],"c":[{"type":"date","d":"<","t":998}]}',
-                upgrade_availability_item(0, 0, 0, 998, 1, array(), array()));
-        $this->assertEquals(
-                '{"op":"&","showc":[true,false],"c":[' .
-                '{"type":"date","d":">=","t":995},{"type":"date","d":"<","t":999}]}',
-                upgrade_availability_item(0, 0, 995, 999, 1, array(), array()));
-
-        // Grade (show option works as normal).
-        $availrec = (object)array(
-                'sourcecmid' => null, 'requiredcompletion' => null,
-                'gradeitemid' => 13, 'grademin' => null, 'grademax' => null);
-        $this->assertEquals(
-                '{"op":"&","showc":[true],"c":[{"type":"grade","id":13}]}',
-                upgrade_availability_item(0, 0, 0, 0, 1, array($availrec), array()));
-        $availrec->grademin = 4.1;
-        $this->assertEquals(
-                '{"op":"&","showc":[false],"c":[{"type":"grade","id":13,"min":4.10000}]}',
-                upgrade_availability_item(0, 0, 0, 0, 0, array($availrec), array()));
-        $availrec->grademax = 9.9;
-        $this->assertEquals(
-                '{"op":"&","showc":[true],"c":[{"type":"grade","id":13,"min":4.10000,"max":9.90000}]}',
-                upgrade_availability_item(0, 0, 0, 0, 1, array($availrec), array()));
-        $availrec->grademin = null;
-        $this->assertEquals(
-                '{"op":"&","showc":[true],"c":[{"type":"grade","id":13,"max":9.90000}]}',
-                upgrade_availability_item(0, 0, 0, 0, 1, array($availrec), array()));
-
-        // Completion (show option normal).
-        $availrec->grademax = null;
-        $availrec->gradeitemid = null;
-        $availrec->sourcecmid = 666;
-        $availrec->requiredcompletion = 1;
-        $this->assertEquals(
-                '{"op":"&","showc":[true],"c":[{"type":"completion","cm":666,"e":1}]}',
-                upgrade_availability_item(0, 0, 0, 0, 1, array($availrec), array()));
-        $this->assertEquals(
-                '{"op":"&","showc":[false],"c":[{"type":"completion","cm":666,"e":1}]}',
-                upgrade_availability_item(0, 0, 0, 0, 0, array($availrec), array()));
-
-        // Profile conditions (custom/standard field, values/not, show option normal).
-        $fieldrec = (object)array('userfield' => 'email', 'operator' => 'isempty',
-                'value' => '', 'shortname' => null);
-        $this->assertEquals(
-                '{"op":"&","showc":[true],"c":[{"type":"profile","op":"isempty","sf":"email"}]}',
-                upgrade_availability_item(0, 0, 0, 0, 1, array(), array($fieldrec)));
-        $fieldrec->value = '@';
-        $fieldrec->operator = 'contains';
-        $this->assertEquals(
-                '{"op":"&","showc":[true],"c":[{"type":"profile","op":"contains","sf":"email","v":"@"}]}',
-                upgrade_availability_item(0, 0, 0, 0, 1, array(), array($fieldrec)));
-        $fieldrec->operator = 'isnotempty';
-        $fieldrec->userfield = null;
-        $fieldrec->shortname = 'frogtype';
-        $this->assertEquals(
-                '{"op":"&","showc":[false],"c":[{"type":"profile","op":"isnotempty","cf":"frogtype"}]}',
-                upgrade_availability_item(0, 0, 0, 0, 0, array(), array($fieldrec)));
-
-        // Everything at once.
-        $this->assertEquals('{"op":"&","showc":[false,true,false,true,true,true],' .
-                '"c":[{"type":"grouping","id":13},' .
-                '{"type":"date","d":">=","t":990},' .
-                '{"type":"date","d":"<","t":991},' .
-                '{"type":"grade","id":665,"min":70.00000},' .
-                '{"type":"completion","cm":42,"e":2},' .
-                '{"type":"profile","op":"isempty","sf":"email"}]}',
-                upgrade_availability_item(1, 13, 990, 991, 1, array(
-                    (object)array('sourcecmid' => null, 'gradeitemid' => 665, 'grademin' => 70),
-                    (object)array('sourcecmid' => 42, 'gradeitemid' => null, 'requiredcompletion' => 2)
-                ), array(
-                    (object)array('userfield' => 'email', 'shortname' => null, 'operator' => 'isempty'),
-                )));
-    }
-
     /**
      * Test upgrade minmaxgrade step.
      */
@@ -488,6 +254,8 @@ class core_upgradelib_testcase extends advanced_testcase {
 
         $this->resetAfterTest(true);
 
+        require_once($CFG->libdir . '/db/upgradelib.php');
+
         $c = array();
         $a = array();
         $gi = array();
@@ -551,8 +319,11 @@ class core_upgradelib_testcase extends advanced_testcase {
      */
     public function test_upgrade_calculated_grade_items_freeze() {
         global $DB, $CFG;
+
         $this->resetAfterTest();
 
+        require_once($CFG->libdir . '/db/upgradelib.php');
+
         // Create a user.
         $user = $this->getDataGenerator()->create_user();
 
@@ -679,8 +450,11 @@ class core_upgradelib_testcase extends advanced_testcase {
 
     function test_upgrade_calculated_grade_items_regrade() {
         global $DB, $CFG;
+
         $this->resetAfterTest();
 
+        require_once($CFG->libdir . '/db/upgradelib.php');
+
         // Create a user.
         $user = $this->getDataGenerator()->create_user();
 
@@ -743,9 +517,12 @@ class core_upgradelib_testcase extends advanced_testcase {
     }
 
     public function test_upgrade_course_tags() {
-        global $DB;
+        global $DB, $CFG;
+
         $this->resetAfterTest();
 
+        require_once($CFG->libdir . '/db/upgradelib.php');
+
         // Running upgrade script when there are no tags.
         upgrade_course_tags();
         $this->assertFalse($DB->record_exists('tag_instance', array()));
index 081b0a1..68ac67a 100644 (file)
@@ -3,6 +3,19 @@ information provided here is intended especially for developers.
 
 === 3.1 ===
 
+* The following functions, previously used (exclusively) by upgrade steps are not available
+  anymore because of the upgrade cleanup performed for this version. See MDL-51580 for more info:
+    - upgrade_mysql_fix_unsigned_and_lob_columns()
+    - upgrade_course_completion_remove_duplicates()
+    - upgrade_save_orphaned_questions()
+    - upgrade_rename_old_backup_files_using_shortname()
+    - upgrade_mssql_nvarcharmax()
+    - upgrade_mssql_varbinarymax()
+    - upgrade_fix_missing_root_folders()
+    - upgrade_course_modules_sequences()
+    - upgrade_grade_item_fix_sortorder()
+    - upgrade_availability_item()
+
 * Plugins can extend the navigation for user by declaring the following callback:
   <frankenstyle>_extend_navigation_user(navigation_node $parentnode, stdClass $user,
                                         context_user $context, stdClass $course,
index 1771153..4f96d38 100644 (file)
@@ -1915,300 +1915,6 @@ function admin_mnet_method_profile(Zend_Server_Reflection_Function_Abstract $fun
     return $profile;
 }
 
-
-/**
- * This function finds duplicate records (based on combinations of fields that should be unique)
- * and then progamatically generated a "most correct" version of the data, update and removing
- * records as appropriate
- *
- * Thanks to Dan Marsden for help
- *
- * @param   string  $table      Table name
- * @param   array   $uniques    Array of field names that should be unique
- * @param   array   $fieldstocheck  Array of fields to generate "correct" data from (optional)
- * @return  void
- */
-function upgrade_course_completion_remove_duplicates($table, $uniques, $fieldstocheck = array()) {
-    global $DB;
-
-    // Find duplicates
-    $sql_cols = implode(', ', $uniques);
-
-    $sql = "SELECT {$sql_cols} FROM {{$table}} GROUP BY {$sql_cols} HAVING (count(id) > 1)";
-    $duplicates = $DB->get_recordset_sql($sql, array());
-
-    // Loop through duplicates
-    foreach ($duplicates as $duplicate) {
-        $pointer = 0;
-
-        // Generate SQL for finding records with these duplicate uniques
-        $sql_select = implode(' = ? AND ', $uniques).' = ?'; // builds "fieldname = ? AND fieldname = ?"
-        $uniq_values = array();
-        foreach ($uniques as $u) {
-            $uniq_values[] = $duplicate->$u;
-        }
-
-        $sql_order = implode(' DESC, ', $uniques).' DESC'; // builds "fieldname DESC, fieldname DESC"
-
-        // Get records with these duplicate uniques
-        $records = $DB->get_records_select(
-            $table,
-            $sql_select,
-            $uniq_values,
-            $sql_order
-        );
-
-        // Loop through and build a "correct" record, deleting the others
-        $needsupdate = false;
-        $origrecord = null;
-        foreach ($records as $record) {
-            $pointer++;
-            if ($pointer === 1) { // keep 1st record but delete all others.
-                $origrecord = $record;
-            } else {
-                // If we have fields to check, update original record
-                if ($fieldstocheck) {
-                    // we need to keep the "oldest" of all these fields as the valid completion record.
-                    // but we want to ignore null values
-                    foreach ($fieldstocheck as $f) {
-                        if ($record->$f && (($origrecord->$f > $record->$f) || !$origrecord->$f)) {
-                            $origrecord->$f = $record->$f;
-                            $needsupdate = true;
-                        }
-                    }
-                }
-                $DB->delete_records($table, array('id' => $record->id));
-            }
-        }
-        if ($needsupdate || isset($origrecord->reaggregate)) {
-            // If this table has a reaggregate field, update to force recheck on next cron run
-            if (isset($origrecord->reaggregate)) {
-                $origrecord->reaggregate = time();
-            }
-            $DB->update_record($table, $origrecord);
-        }
-    }
-}
-
-/**
- * Find questions missing an existing category and associate them with
- * a category which purpose is to gather them.
- *
- * @return void
- */
-function upgrade_save_orphaned_questions() {
-    global $DB;
-
-    // Looking for orphaned questions
-    $orphans = $DB->record_exists_select('question',
-            'NOT EXISTS (SELECT 1 FROM {question_categories} WHERE {question_categories}.id = {question}.category)');
-    if (!$orphans) {
-        return;
-    }
-
-    // Generate a unique stamp for the orphaned questions category, easier to identify it later on
-    $uniquestamp = "unknownhost+120719170400+orphan";
-    $systemcontext = context_system::instance();
-
-    // Create the orphaned category at system level
-    $cat = $DB->get_record('question_categories', array('stamp' => $uniquestamp,
-            'contextid' => $systemcontext->id));
-    if (!$cat) {
-        $cat = new stdClass();
-        $cat->parent = 0;
-        $cat->contextid = $systemcontext->id;
-        $cat->name = get_string('orphanedquestionscategory', 'question');
-        $cat->info = get_string('orphanedquestionscategoryinfo', 'question');
-        $cat->sortorder = 999;
-        $cat->stamp = $uniquestamp;
-        $cat->id = $DB->insert_record("question_categories", $cat);
-    }
-
-    // Set a category to those orphans
-    $params = array('catid' => $cat->id);
-    $DB->execute('UPDATE {question} SET category = :catid WHERE NOT EXISTS
-            (SELECT 1 FROM {question_categories} WHERE {question_categories}.id = {question}.category)', $params);
-}
-
-/**
- * Rename old backup files to current backup files.
- *
- * When added the setting 'backup_shortname' (MDL-28657) the backup file names did not contain the id of the course.
- * Further we fixed that behaviour by forcing the id to be always present in the file name (MDL-33812).
- * This function will explore the backup directory and attempt to rename the previously created files to include
- * the id in the name. Doing this will put them back in the process of deleting the excess backups for each course.
- *
- * This function manually recreates the file name, instead of using
- * {@link backup_plan_dbops::get_default_backup_filename()}, use it carefully if you're using it outside of the
- * usual upgrade process.
- *
- * @see backup_cron_automated_helper::remove_excess_backups()
- * @link http://tracker.moodle.org/browse/MDL-35116
- * @return void
- * @since Moodle 2.4
- */
-function upgrade_rename_old_backup_files_using_shortname() {
-    global $CFG;
-    $dir = get_config('backup', 'backup_auto_destination');
-    $useshortname = get_config('backup', 'backup_shortname');
-    if (empty($dir) || !is_dir($dir) || !is_writable($dir)) {
-        return;
-    }
-
-    require_once($CFG->dirroot.'/backup/util/includes/backup_includes.php');
-    $backupword = str_replace(' ', '_', core_text::strtolower(get_string('backupfilename')));
-    $backupword = trim(clean_filename($backupword), '_');
-    $filename = $backupword . '-' . backup::FORMAT_MOODLE . '-' . backup::TYPE_1COURSE . '-';
-    $regex = '#^'.preg_quote($filename, '#').'.*\.mbz$#';
-    $thirtyapril = strtotime('30 April 2012 00:00');
-
-    // Reading the directory.
-    if (!$files = scandir($dir)) {
-        return;
-    }
-    foreach ($files as $file) {
-        // Skip directories and files which do not start with the common prefix.
-        // This avoids working on files which are not related to this issue.
-        if (!is_file($dir . '/' . $file) || !preg_match($regex, $file)) {
-            continue;
-        }
-
-        // Extract the information from the XML file.
-        try {
-            $bcinfo = backup_general_helper::get_backup_information_from_mbz($dir . '/' . $file);
-        } catch (backup_helper_exception $e) {
-            // Some error while retrieving the backup informations, skipping...
-            continue;
-        }
-
-        // Make sure this a course backup.
-        if ($bcinfo->format !== backup::FORMAT_MOODLE || $bcinfo->type !== backup::TYPE_1COURSE) {
-            continue;
-        }
-
-        // Skip the backups created before the short name option was initially introduced (MDL-28657).
-        // This was integrated on the 2nd of May 2012. Let's play safe with timezone and use the 30th of April.
-        if ($bcinfo->backup_date < $thirtyapril) {
-            continue;
-        }
-
-        // Let's check if the file name contains the ID where it is supposed to be, if it is the case then
-        // we will skip the file. Of course it could happen that the course ID is identical to the course short name
-        // even though really unlikely, but then renaming this file is not necessary. If the ID is not found in the
-        // file name then it was probably the short name which was used.
-        $idfilename = $filename . $bcinfo->original_course_id . '-';
-        $idregex = '#^'.preg_quote($idfilename, '#').'.*\.mbz$#';
-        if (preg_match($idregex, $file)) {
-            continue;
-        }
-
-        // Generating the file name manually. We do not use backup_plan_dbops::get_default_backup_filename() because
-        // it will query the database to get some course information, and the course could not exist any more.
-        $newname = $filename . $bcinfo->original_course_id . '-';
-        if ($useshortname) {
-            $shortname = str_replace(' ', '_', $bcinfo->original_course_shortname);
-            $shortname = core_text::strtolower(trim(clean_filename($shortname), '_'));
-            $newname .= $shortname . '-';
-        }
-
-        $backupdateformat = str_replace(' ', '_', get_string('backupnameformat', 'langconfig'));
-        $date = userdate($bcinfo->backup_date, $backupdateformat, 99, false);
-        $date = core_text::strtolower(trim(clean_filename($date), '_'));
-        $newname .= $date;
-
-        if (isset($bcinfo->root_settings['users']) && !$bcinfo->root_settings['users']) {
-            $newname .= '-nu';
-        } else if (isset($bcinfo->root_settings['anonymize']) && $bcinfo->root_settings['anonymize']) {
-            $newname .= '-an';
-        }
-        $newname .= '.mbz';
-
-        // Final check before attempting the renaming.
-        if ($newname == $file || file_exists($dir . '/' . $newname)) {
-            continue;
-        }
-        @rename($dir . '/' . $file, $dir . '/' . $newname);
-    }
-}
-
-/**
- * Detect duplicate grade item sortorders and resort the
- * items to remove them.
- */
-function upgrade_grade_item_fix_sortorder() {
-    global $DB;
-
-    // The simple way to fix these sortorder duplicates would be simply to resort each
-    // affected course. But in order to reduce the impact of this upgrade step we're trying
-    // to do it more efficiently by doing a series of update statements rather than updating
-    // every single grade item in affected courses.
-
-    $sql = "SELECT DISTINCT g1.courseid
-              FROM {grade_items} g1
-              JOIN {grade_items} g2 ON g1.courseid = g2.courseid
-             WHERE g1.sortorder = g2.sortorder AND g1.id != g2.id
-             ORDER BY g1.courseid ASC";
-    foreach ($DB->get_fieldset_sql($sql) as $courseid) {
-        $transaction = $DB->start_delegated_transaction();
-        $items = $DB->get_records('grade_items', array('courseid' => $courseid), '', 'id, sortorder, sortorder AS oldsort');
-
-        // Get all duplicates in course order, highest sort order, and higest id first so that we can make space at the
-        // bottom higher end of the sort orders and work down by id.
-        $sql = "SELECT DISTINCT g1.id, g1.sortorder
-                FROM {grade_items} g1
-                JOIN {grade_items} g2 ON g1.courseid = g2.courseid
-                WHERE g1.sortorder = g2.sortorder AND g1.id != g2.id AND g1.courseid = :courseid
-                ORDER BY g1.sortorder DESC, g1.id DESC";
-
-        // This is the O(N*N) like the database version we're replacing, but at least the constants are a billion times smaller...
-        foreach ($DB->get_records_sql($sql, array('courseid' => $courseid)) as $duplicate) {
-            foreach ($items as $item) {
-                if ($item->sortorder > $duplicate->sortorder || ($item->sortorder == $duplicate->sortorder && $item->id > $duplicate->id)) {
-                    $item->sortorder += 1;
-                }
-            }
-        }
-        foreach ($items as $item) {
-            if ($item->sortorder != $item->oldsort) {
-                $DB->update_record('grade_items', array('id' => $item->id, 'sortorder' => $item->sortorder));
-            }
-        }
-
-        $transaction->allow_commit();
-    }
-}
-
-/**
- * Detect file areas with missing root directory records and add them.
- */
-function upgrade_fix_missing_root_folders() {
-    global $DB, $USER;
-
-    $transaction = $DB->start_delegated_transaction();
-
-    $sql = "SELECT contextid, component, filearea, itemid
-              FROM {files}
-             WHERE (component <> 'user' OR filearea <> 'draft')
-          GROUP BY contextid, component, filearea, itemid
-            HAVING MAX(CASE WHEN filename = '.' AND filepath = '/' THEN 1 ELSE 0 END) = 0";
-
-    $rs = $DB->get_recordset_sql($sql);
-    $defaults = array('filepath' => '/',
-        'filename' => '.',
-        'userid' => 0, // Don't rely on any particular user for these system records.
-        'filesize' => 0,
-        'timecreated' => time(),
-        'timemodified' => time(),
-        'contenthash' => sha1(''));
-    foreach ($rs as $r) {
-        $pathhash = sha1("/$r->contextid/$r->component/$r->filearea/$r->itemid/.");
-        $DB->insert_record('files', (array)$r + $defaults +
-            array('pathnamehash' => $pathhash));
-    }
-    $rs->close();
-    $transaction->allow_commit();
-}
-
 /**
  * Detect draft file areas with missing root directory records and add them.
  */
index 4d9e1d4..e5ad531 100644 (file)
  * @license    http://www.gnu.org/copyleft/gpl.html GNU Public License
  */
 
+defined('MOODLE_INTERNAL') || die();
+
 /**
  * Upgrade code for the email message processor
  *
  * @param int $oldversion The version that we are upgrading from
  */
 function xmldb_message_email_upgrade($oldversion) {
-    global $CFG, $DB;
-
-    $dbman = $DB->get_manager();
-
-
-    // Moodle v2.2.0 release upgrade line
-    // Put any upgrade step following this
-
-    // Moodle v2.3.0 release upgrade line
-    // Put any upgrade step following this
-
-
-    // Moodle v2.4.0 release upgrade line
-    // Put any upgrade step following this
-
-
-    // Moodle v2.5.0 release upgrade line.
-    // Put any upgrade step following this.
-
-
-    // Moodle v2.6.0 release upgrade line.
-    // Put any upgrade step following this.
-
-    // Moodle v2.7.0 release upgrade line.
-    // Put any upgrade step following this.
+    global $CFG;
 
     // Moodle v2.8.0 release upgrade line.
     // Put any upgrade step following this.
@@ -65,5 +43,3 @@ function xmldb_message_email_upgrade($oldversion) {
 
     return true;
 }
-
-
index a42641f..3979a91 100644 (file)
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
+defined('MOODLE_INTERNAL') || die();
+
 /**
  * Upgrade code for the jabber message processor
  *
  * @param int $oldversion The version that we are upgrading from
  */
 function xmldb_message_jabber_upgrade($oldversion) {
-    global $CFG, $DB;
-
-    $dbman = $DB->get_manager();
-
-
-    // Moodle v2.2.0 release upgrade line
-    // Put any upgrade step following this
-
-    // Moodle v2.3.0 release upgrade line
-    // Put any upgrade step following this
-
-
-    // Moodle v2.4.0 release upgrade line
-    // Put any upgrade step following this
-
-
-    // Moodle v2.5.0 release upgrade line.
-    // Put any upgrade step following this.
-
-
-    // Moodle v2.6.0 release upgrade line.
-    // Put any upgrade step following this.
-
-    // Moodle v2.7.0 release upgrade line.
-    // Put any upgrade step following this.
+    global $CFG;
 
     // Moodle v2.8.0 release upgrade line.
     // Put any upgrade step following this.
@@ -65,5 +43,3 @@ function xmldb_message_jabber_upgrade($oldversion) {
 
     return true;
 }
-
-
index 50353b6..5c08828 100644 (file)
  * @license   http://www.gnu.org/copyleft/gpl.html GNU Public License
  */
 
+defined('MOODLE_INTERNAL') || die();
+
 /**
  * Upgrade code for the popup message processor
  *
  * @param int $oldversion The version that we are upgrading from
  */
 function xmldb_message_popup_upgrade($oldversion) {
-    global $CFG, $DB;
-
-    $dbman = $DB->get_manager();
-
-
-    // Moodle v2.2.0 release upgrade line
-    // Put any upgrade step following this
-
-    // Moodle v2.3.0 release upgrade line
-    // Put any upgrade step following this
-
-
-    // Moodle v2.4.0 release upgrade line
-    // Put any upgrade step following this
-
-
-    // Moodle v2.5.0 release upgrade line.
-    // Put any upgrade step following this.
-
-
-    // Moodle v2.6.0 release upgrade line.
-    // Put any upgrade step following this.
-
-    // Moodle v2.7.0 release upgrade line.
-    // Put any upgrade step following this.
+    global $CFG;
 
     // Moodle v2.8.0 release upgrade line.
     // Put any upgrade step following this.
@@ -65,5 +43,3 @@ function xmldb_message_popup_upgrade($oldversion) {
 
     return true;
 }
-
-
index 2debb16..d5e358e 100644 (file)
@@ -22,6 +22,8 @@
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
+defined('MOODLE_INTERNAL') || die();
+
 /**
  * upgrade this assignment instance - this function could be skipped but it will be needed later
  * @param int $oldversion The old version of the assign module
@@ -32,461 +34,6 @@ function xmldb_assign_upgrade($oldversion) {
 
     $dbman = $DB->get_manager();
 
-    if ($oldversion < 2012051700) {
-
-        // Define field to be added to assign.
-        $table = new xmldb_table('assign');
-        $field = new xmldb_field('sendlatenotifications', XMLDB_TYPE_INTEGER, '2', null,
-                                 XMLDB_NOTNULL, null, '0', 'sendnotifications');
-
-        // Conditionally launch add field.
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        // Assign savepoint reached.
-        upgrade_mod_savepoint(true, 2012051700, 'assign');
-    }
-
-    // Moodle v2.3.0 release upgrade line.
-    // Put any upgrade step following this.
-
-    if ($oldversion < 2012071800) {
-
-        // Define field requiresubmissionstatement to be added to assign.
-        $table = new xmldb_table('assign');
-        $field = new xmldb_field('requiresubmissionstatement', XMLDB_TYPE_INTEGER, '2', null,
-                                 XMLDB_NOTNULL, null, '0', 'timemodified');
-
-        // Conditionally launch add field requiresubmissionstatement.
-
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        // Assign savepoint reached.
-        upgrade_mod_savepoint(true, 2012071800, 'assign');
-    }
-
-    if ($oldversion < 2012081600) {
-
-        // Define field to be added to assign.
-        $table = new xmldb_table('assign');
-        $field = new xmldb_field('completionsubmit', XMLDB_TYPE_INTEGER, '2', null,
-                                 XMLDB_NOTNULL, null, '0', 'timemodified');
-
-        // Conditionally launch add field.
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        // Assign savepoint reached.
-        upgrade_mod_savepoint(true, 2012081600, 'assign');
-    }
-
-    // Individual extension dates support.
-    if ($oldversion < 2012082100) {
-
-        // Define field cutoffdate to be added to assign.
-        $table = new xmldb_table('assign');
-        $field = new xmldb_field('cutoffdate', XMLDB_TYPE_INTEGER, '10', null,
-                                 XMLDB_NOTNULL, null, '0', 'completionsubmit');
-
-        // Conditionally launch add field cutoffdate.
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-        // If prevent late is on - set cutoffdate to due date.
-
-        // Now remove the preventlatesubmissions column.
-        $field = new xmldb_field('preventlatesubmissions', XMLDB_TYPE_INTEGER, '2', null,
-                                 XMLDB_NOTNULL, null, '0', 'nosubmissions');
-        if ($dbman->field_exists($table, $field)) {
-            // Set the cutoffdate to the duedate if preventlatesubmissions was enabled.
-            $sql = 'UPDATE {assign} SET cutoffdate = duedate WHERE preventlatesubmissions = 1';
-            $DB->execute($sql);
-
-            $dbman->drop_field($table, $field);
-        }
-
-        // Define field extensionduedate to be added to assign_grades.
-        $table = new xmldb_table('assign_grades');
-        $field = new xmldb_field('extensionduedate', XMLDB_TYPE_INTEGER, '10', null,
-                                 XMLDB_NOTNULL, null, '0', 'mailed');
-
-        // Conditionally launch add field extensionduedate.
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        // Assign savepoint reached.
-        upgrade_mod_savepoint(true, 2012082100, 'assign');
-    }
-
-    // Team assignment support.
-    if ($oldversion < 2012082300) {
-
-        // Define field to be added to assign.
-        $table = new xmldb_table('assign');
-        $field = new xmldb_field('teamsubmission', XMLDB_TYPE_INTEGER, '2', null,
-                                 XMLDB_NOTNULL, null, '0', 'cutoffdate');
-
-        // Conditionally launch add field.
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-        $field = new xmldb_field('requireallteammemberssubmit', XMLDB_TYPE_INTEGER, '2', null,
-                                 XMLDB_NOTNULL, null, '0', 'teamsubmission');
-        // Conditionally launch add field.
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-        $field = new xmldb_field('teamsubmissiongroupingid', XMLDB_TYPE_INTEGER, '10', null,
-                                 XMLDB_NOTNULL, null, '0', 'requireallteammemberssubmit');
-        // Conditionally launch add field.
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-        $index = new xmldb_index('teamsubmissiongroupingid',
-                                 XMLDB_INDEX_NOTUNIQUE,
-                                 array('teamsubmissiongroupingid'));
-        // Conditionally launch add index.
-        if (!$dbman->index_exists($table, $index)) {
-            $dbman->add_index($table, $index);
-        }
-        $table = new xmldb_table('assign_submission');
-        $field = new xmldb_field('groupid', XMLDB_TYPE_INTEGER, '10', null,
-                                 XMLDB_NOTNULL, null, '0', 'status');
-        // Conditionally launch add field.
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-        upgrade_mod_savepoint(true, 2012082300, 'assign');
-    }
-    if ($oldversion < 2012082400) {
-
-        // Define table assign_user_mapping to be created.
-        $table = new xmldb_table('assign_user_mapping');
-
-        // Adding fields to table assign_user_mapping.
-        $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null);
-        $table->add_field('assignment', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0');
-        $table->add_field('userid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0');
-
-        // Adding keys to table assign_user_mapping.
-        $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
-        $table->add_key('assignment', XMLDB_KEY_FOREIGN, array('assignment'), 'assign', array('id'));
-        $table->add_key('user', XMLDB_KEY_FOREIGN, array('userid'), 'user', array('id'));
-
-        // Conditionally launch create table for assign_user_mapping.
-        if (!$dbman->table_exists($table)) {
-            $dbman->create_table($table);
-        }
-
-        // Define field blindmarking to be added to assign.
-        $table = new xmldb_table('assign');
-        $field = new xmldb_field('blindmarking', XMLDB_TYPE_INTEGER, '2', null,
-                                 XMLDB_NOTNULL, null, '0', 'teamsubmissiongroupingid');
-
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        // Define field revealidentities to be added to assign.
-        $table = new xmldb_table('assign');
-        $field = new xmldb_field('revealidentities', XMLDB_TYPE_INTEGER, '2', null,
-                                 XMLDB_NOTNULL, null, '0', 'blindmarking');
-
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        // Assignment savepoint reached.
-        upgrade_mod_savepoint(true, 2012082400, 'assign');
-    }
-
-    // Moodle v2.4.0 release upgrade line.
-    // Put any upgrade step following this.
-
-    if ($oldversion < 2013030600) {
-        upgrade_set_timeout(60*20);
-
-        // Some assignments (upgraded from 2.2 assignment) have duplicate entries in the assign_submission
-        // and assign_grades tables for a single user. This needs to be cleaned up before we can add the unique indexes
-        // below.
-
-        // Only do this cleanup if the attempt number field has not been added to the table yet.
-        $table = new xmldb_table('assign_submission');
-        $field = new xmldb_field('attemptnumber', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0', 'groupid');
-        if (!$dbman->field_exists($table, $field)) {
-            // OK safe to cleanup duplicates here.
-
-            $sql = 'SELECT assignment, userid, groupid from {assign_submission} ' .
-                   'GROUP BY assignment, userid, groupid HAVING (count(id) > 1)';
-            $badrecords = $DB->get_recordset_sql($sql);
-
-            foreach ($badrecords as $badrecord) {
-                $params = array('userid'=>$badrecord->userid,
-                                'groupid'=>$badrecord->groupid,
-                                'assignment'=>$badrecord->assignment);
-                $duplicates = $DB->get_records('assign_submission', $params, 'timemodified DESC', 'id, timemodified');
-                if ($duplicates) {
-                    // Take the first (last updated) entry out of the list so it doesn't get deleted.
-                    $valid = array_shift($duplicates);
-                    $deleteids = array();
-                    foreach ($duplicates as $duplicate) {
-                        $deleteids[] = $duplicate->id;
-                    }
-
-                    list($sqlids, $sqlidparams) = $DB->get_in_or_equal($deleteids);
-                    $DB->delete_records_select('assign_submission', 'id ' . $sqlids, $sqlidparams);
-                }
-            }
-
-            $badrecords->close();
-        }
-
-        // Same cleanup required for assign_grades
-        // Only do this cleanup if the attempt number field has not been added to the table yet.
-        $table = new xmldb_table('assign_grades');
-        $field = new xmldb_field('attemptnumber', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0', 'grade');
-        if (!$dbman->field_exists($table, $field)) {
-            // OK safe to cleanup duplicates here.
-
-            $sql = 'SELECT assignment, userid from {assign_grades} GROUP BY assignment, userid HAVING (count(id) > 1)';
-            $badrecords = $DB->get_recordset_sql($sql);
-
-            foreach ($badrecords as $badrecord) {
-                $params = array('userid'=>$badrecord->userid,
-                                'assignment'=>$badrecord->assignment);
-                $duplicates = $DB->get_records('assign_grades', $params, 'timemodified DESC', 'id, timemodified');
-                if ($duplicates) {
-                    // Take the first (last updated) entry out of the list so it doesn't get deleted.
-                    $valid = array_shift($duplicates);
-                    $deleteids = array();
-                    foreach ($duplicates as $duplicate) {
-                        $deleteids[] = $duplicate->id;
-                    }
-
-                    list($sqlids, $sqlidparams) = $DB->get_in_or_equal($deleteids);
-                    $DB->delete_records_select('assign_grades', 'id ' . $sqlids, $sqlidparams);
-                }
-            }
-
-            $badrecords->close();
-        }
-
-        // Define table assign_user_flags to be created.
-        $table = new xmldb_table('assign_user_flags');
-
-        // Adding fields to table assign_user_flags.
-        $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null);
-        $table->add_field('userid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0');
-        $table->add_field('assignment', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0');
-        $table->add_field('locked', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0');
-        $table->add_field('mailed', XMLDB_TYPE_INTEGER, '4', null, XMLDB_NOTNULL, null, '0');
-        $table->add_field('extensionduedate', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0');
-
-        // Adding keys to table assign_user_flags.
-        $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
-        $table->add_key('userid', XMLDB_KEY_FOREIGN, array('userid'), 'user', array('id'));
-        $table->add_key('assignment', XMLDB_KEY_FOREIGN, array('assignment'), 'assign', array('id'));
-
-        // Adding indexes to table assign_user_flags.
-        $table->add_index('mailed', XMLDB_INDEX_NOTUNIQUE, array('mailed'));
-
-        // Conditionally launch create table for assign_user_flags.
-        if (!$dbman->table_exists($table)) {
-            $dbman->create_table($table);
-
-            // Copy the flags from the old table to the new one.
-            $sql = 'INSERT INTO {assign_user_flags}
-                        (assignment, userid, locked, mailed, extensionduedate)
-                    SELECT assignment, userid, locked, mailed, extensionduedate
-                    FROM {assign_grades}';
-            $DB->execute($sql);
-        }
-
-        // And delete the old columns.
-        // Define index mailed (not unique) to be dropped form assign_grades.
-        $table = new xmldb_table('assign_grades');
-        $index = new xmldb_index('mailed', XMLDB_INDEX_NOTUNIQUE, array('mailed'));
-
-        // Conditionally launch drop index mailed.
-        if ($dbman->index_exists($table, $index)) {
-            $dbman->drop_index($table, $index);
-        }
-
-        // Define field locked to be dropped from assign_grades.
-        $table = new xmldb_table('assign_grades');
-        $field = new xmldb_field('locked');
-
-        // Conditionally launch drop field locked.
-        if ($dbman->field_exists($table, $field)) {
-            $dbman->drop_field($table, $field);
-        }
-
-        // Define field mailed to be dropped from assign_grades.
-        $table = new xmldb_table('assign_grades');
-        $field = new xmldb_field('mailed');
-
-        // Conditionally launch drop field mailed.
-        if ($dbman->field_exists($table, $field)) {
-            $dbman->drop_field($table, $field);
-        }
-
-        // Define field extensionduedate to be dropped from assign_grades.
-        $table = new xmldb_table('assign_grades');
-        $field = new xmldb_field('extensionduedate');
-
-        // Conditionally launch drop field extensionduedate.
-        if ($dbman->field_exists($table, $field)) {
-            $dbman->drop_field($table, $field);
-        }
-
-        // Define field attemptreopenmethod to be added to assign.
-        $table = new xmldb_table('assign');
-        $field = new xmldb_field('attemptreopenmethod', XMLDB_TYPE_CHAR, '10', null,
-                                 XMLDB_NOTNULL, null, 'none', 'revealidentities');
-
-        // Conditionally launch add field attemptreopenmethod.
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        // Define field maxattempts to be added to assign.
-        $table = new xmldb_table('assign');
-        $field = new xmldb_field('maxattempts', XMLDB_TYPE_INTEGER, '6', null, XMLDB_NOTNULL, null, '-1', 'attemptreopenmethod');
-
-        // Conditionally launch add field maxattempts.
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        // Define field attemptnumber to be added to assign_submission.
-        $table = new xmldb_table('assign_submission');
-        $field = new xmldb_field('attemptnumber', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0', 'groupid');
-
-        // Conditionally launch add field attemptnumber.
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        // Define index attemptnumber (not unique) to be added to assign_submission.
-        $table = new xmldb_table('assign_submission');
-        $index = new xmldb_index('attemptnumber', XMLDB_INDEX_NOTUNIQUE, array('attemptnumber'));
-        // Conditionally launch add index attemptnumber.
-        if (!$dbman->index_exists($table, $index)) {
-            $dbman->add_index($table, $index);
-        }
-
-        // Define field attemptnumber to be added to assign_grades.
-        $table = new xmldb_table('assign_grades');
-        $field = new xmldb_field('attemptnumber', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0', 'grade');
-
-        // Conditionally launch add field attemptnumber.
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        // Define index attemptnumber (not unique) to be added to assign_grades.
-        $table = new xmldb_table('assign_grades');
-        $index = new xmldb_index('attemptnumber', XMLDB_INDEX_NOTUNIQUE, array('attemptnumber'));
-
-        // Conditionally launch add index attemptnumber.
-        if (!$dbman->index_exists($table, $index)) {
-            $dbman->add_index($table, $index);
-        }
-
-        // Define index uniqueattemptsubmission (unique) to be added to assign_submission.
-        $table = new xmldb_table('assign_submission');
-        $index = new xmldb_index('uniqueattemptsubmission',
-                                 XMLDB_INDEX_UNIQUE,
-                                 array('assignment', 'userid', 'groupid', 'attemptnumber'));
-
-        // Conditionally launch add index uniqueattempt.
-        if (!$dbman->index_exists($table, $index)) {
-            $dbman->add_index($table, $index);
-        }
-
-        // Define index uniqueattemptgrade (unique) to be added to assign_grades.
-        $table = new xmldb_table('assign_grades');
-        $index = new xmldb_index('uniqueattemptgrade', XMLDB_INDEX_UNIQUE, array('assignment', 'userid', 'attemptnumber'));
-
-        // Conditionally launch add index uniqueattempt.
-        if (!$dbman->index_exists($table, $index)) {
-            $dbman->add_index($table, $index);
-        }
-
-        // Module assign savepoint reached.
-        upgrade_mod_savepoint(true, 2013030600, 'assign');
-    }
-
-    // Moodle v2.5.0 release upgrade line.
-    // Put any upgrade step following this.
-
-    if ($oldversion < 2013061101) {
-        // Define field markingworkflow to be added to assign.
-        $table = new xmldb_table('assign');
-        $field = new xmldb_field('markingworkflow', XMLDB_TYPE_INTEGER, '2', null, XMLDB_NOTNULL, null, '0', 'maxattempts');
-
-        // Conditionally launch add field markingworkflow.
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        // Define field markingallocation to be added to assign.
-        $field = new xmldb_field('markingallocation', XMLDB_TYPE_INTEGER, '2', null, XMLDB_NOTNULL, null, '0', 'markingworkflow');
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        // Define field workflowstate to be added to assign_grades.
-        $table = new xmldb_table('assign_user_flags');
-        $field = new xmldb_field('workflowstate', XMLDB_TYPE_CHAR, '20', null, null, null, null, 'extensionduedate');
-
-        // Conditionally launch add field workflowstate.
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        // Define field allocatedmarker to be added to assign_grades.
-        $field = new xmldb_field('allocatedmarker', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0', 'workflowstate');
-        // Conditionally launch add field workflowstate.
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-        upgrade_mod_savepoint(true, 2013061101, 'assign');
-    }
-
-    // Moodle v2.6.0 release upgrade line.
-    // Put any upgrade step following this.
-
-    if ($oldversion < 2014010801) {
-
-        // Define field sendstudentnotifications to be added to assign.
-        $table = new xmldb_table('assign');
-        $field = new xmldb_field('sendstudentnotifications',
-                                 XMLDB_TYPE_INTEGER,
-                                 '2',
-                                 null,
-                                 XMLDB_NOTNULL,
-                                 null,
-                                 '1',
-                                 'markingallocation');
-
-        // Conditionally launch add field sendstudentnotifications.
-        if (!$dbman->field_exists($table, $field)) {
-            $dbman->add_field($table, $field);
-        }
-
-        // Assign savepoint reached.
-        upgrade_mod_savepoint(true, 2014010801, 'assign');
-    }
-
-    // Moodle v2.7.0 release upgrade line.
-    // Put any upgrade step following this.
-
     if ($oldversion < 2014051201) {
 
         // Cleanup bad database records where assignid is missing.
@@ -495,6 +42,7 @@ function xmldb_assign_upgrade($oldversion) {
         // Assign savepoint reached.
         upgrade_mod_savepoint(true, 2014051201, 'assign');
     }
+
     if ($oldversion < 2014072400) {
 
         // Add "latest" column to submissions table to mark the latest attempt.
index 30cb8e9..3c35f2f 100644 (file)
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
+defined('MOODLE_INTERNAL') || die();
+
 /**
  * Stub for upgrade code
  * @param int $oldversion
  * @return bool
  */
 function xmldb_assignfeedback_comments_upgrade($oldversion) {
-    // Do the upgrades.
-    // Moodle v2.3.0 release upgrade line.
-    // Put any upgrade step following this.
-
-    // Moodle v2.4.0 release upgrade line.
-    // Put any upgrade step following this.
-
-    // Moodle v2.5.0 release upgrade line.
-    // Put any upgrade step following this.
-
-    // Moodle v2.6.0 release upgrade line.
-    // Put any upgrade step following this.
-
-    // Moodle v2.7.0 release upgrade line.
-    // Put any upgrade step following this.
+    global $CFG;
 
     // Moodle v2.8.0 release upgrade line.
     // Put any upgrade step following this.
index 89d6e74..65861e8 100644 (file)
@@ -32,44 +32,6 @@ defined('MOODLE_INTERNAL') || die();
 function xmldb_assignfeedback_editpdf_upgrade($oldversion) {
     global $CFG;
 
-    if ($oldversion < 2013110800) {
-
-        // Check that no stamps where uploaded.
-        $fs = get_file_storage();
-        $stamps = $fs->get_area_files(context_system::instance()->id, 'assignfeedback_editpdf',
-            'stamps', 0, "filename", false);
-
-        // Add default stamps.
-        if (empty($stamps)) {
-            // List of default stamps.
-            $defaultstamps = array('smile.png', 'sad.png', 'tick.png', 'cross.png');
-
-            // Stamp file object.
-            $filerecord = new stdClass;
-