CONTRIB-4754 Added upgrade step to account for name change from
authorTim Gus <tim.gusak@remote-learner.net>
Thu, 28 Nov 2013 21:27:20 +0000 (16:27 -0500)
committerDan Marsden <dan@danmarsden.com>
Fri, 29 Nov 2013 01:59:04 +0000 (14:59 +1300)
"attforblock" to "attendance":
- updated itemmodule field in the grade tables
- updated role_capabilities table to preserve old capabilities
- deleted old data from capabilities and role_capabilities tables

db/upgrade.php
version.php

index 0e9336d..c00926f 100644 (file)
@@ -34,6 +34,44 @@ function xmldb_attendance_upgrade($oldversion=0) {
 
     $result = true;
 
-    // UPGRADES from attforblock are only supported for sites that are running attforblock version 2012120700.
+    if ($oldversion < 2013082902) {
+        // Replace values that reference old module "attforblock" to "attendance".
+        $sql = "UPDATE {grade_items}
+                   SET itemmodule = 'attendance'
+                 WHERE itemmodule = 'attforblock'";
+
+        $DB->execute($sql);
+
+        $sql = "UPDATE {grade_items_history}
+                   SET itemmodule = 'attendance'
+                 WHERE itemmodule = 'attforblock'";
+
+        $DB->execute($sql);
+
+        /*
+         * The user's custom capabilities need to be preserved due to the module renaming.
+         * Capabilities with a modifierid = 0 value are installed by default.
+         * Only update the user's custom capabilities where modifierid is not zero.
+         */
+        $sql = $DB->sql_like('capability', '?').' AND modifierid <> 0';
+        $rs = $DB->get_recordset_select('role_capabilities', $sql, array('%mod/attforblock%'));
+        foreach ($rs as $cap) {
+            $renamedcapability = str_replace('mod/attforblock', 'mod/attendance', $cap->capability);
+            $exists = $DB->record_exists('role_capabilities', array('roleid' => $cap->roleid, 'capability' => $renamedcapability));
+            if (!$exists) {
+                $DB->update_record('role_capabilities', array('id' => $cap->id, 'capability' => $renamedcapability));
+            }
+        }
+
+        // Delete old role capabilities.
+        $sql = $DB->sql_like('capability', '?');
+        $DB->delete_records_select('role_capabilities', $sql, array('%mod/attforblock%'));
+
+        // Delete old capabilities.
+        $DB->delete_records_select('capabilities', 'component = ?', array('mod_attforblock'));
+
+        upgrade_plugin_savepoint($result, 2013082902, 'mod', 'attendance');
+    }
+
     return $result;
 }
index 2a10679..1cfb89d 100644 (file)
@@ -22,7 +22,7 @@
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
-$module->version  = 2013082901;
+$module->version  = 2013082902;
 $module->requires = 2013040500;
 $module->release = '2.5.2';
 $module->maturity  = MATURITY_STABLE;