function hotpot_upgrade($oldversion)
{
    global $CFG;
    $ok = true;
    // set path to update functions
    $update_to_v2 = "{$CFG->dirroot}/mod/hotpot/db/update_to_v2.php";
    // if the version number indicates this could be an early HotPot v2.1 (Moodle 1.6),
    // check this is not actually HotPot v2.0 (Moodle 1.5) with an overly advanced version number
    if ($oldversion > 2005031400 && $oldversion <= 2006082899) {
        require_once $update_to_v2;
        if (hotpot_db_field_exists('hotpot_attempts', 'details')) {
            $oldversion = 2005031400;
        }
    }
    // update from HotPot v1 to HotPot v2
    if ($oldversion < 2005031400) {
        require_once $update_to_v2;
        $ok = $ok && hotpot_update_to_v2_from_v1();
    }
    // update to HotPot v2.1
    if ($oldversion < 2005090700) {
        require_once $update_to_v2;
        $ok = $ok && hotpot_update_to_v2_1();
    }
    if ($oldversion > 2005031419 && $oldversion < 2005090702) {
        require_once $update_to_v2;
        $ok = $ok && hotpot_update_to_v2_1_2();
    }
    if ($oldversion < 2005090706) {
        require_once $update_to_v2;
        $ok = $ok && hotpot_update_to_v2_1_6();
    }
    if ($oldversion < 2005090708) {
        require_once $update_to_v2;
        $ok = $ok && hotpot_update_to_v2_1_8();
    }
    if ($oldversion < 2006042103) {
        require_once $update_to_v2;
        $ok = $ok && hotpot_update_to_v2_1_16();
    }
    if ($oldversion < 2006042602) {
        require_once $update_to_v2;
        $ok = $ok && hotpot_update_to_v2_1_17();
    }
    if ($oldversion < 2006042803) {
        require_once $update_to_v2;
        $ok = $ok && hotpot_update_to_v2_1_18();
    }
    if ($oldversion < 2006071600) {
        require_once $update_to_v2;
        $ok = $ok && hotpot_update_to_v2_1_21();
    }
    if ($oldversion < 2006083101) {
        require_once $update_to_v2;
        $ok = $ok && hotpot_update_to_v2_2();
    }
    //////  DO NOT ADD NEW THINGS HERE!!  USE upgrade.php and the lib/ddllib.php functions.
    return $ok;
}
Example #2
0
function hotpot_upgrade($oldversion)
{
    global $CFG;
    $ok = true;
    // set path to update functions
    $update_to_v2 = "{$CFG->dirroot}/mod/hotpot/db/update_to_v2.php";
    // if the version number indicates this could be an early HotPot v2.1 (Moodle 1.6),
    // check this is not actually HotPot v1 or v2.0 (Moodle 1.5) with an overly advanced version number
    if ($oldversion > 2005031400 && $oldversion <= 2006082899) {
        require_once $update_to_v2;
        if (hotpot_db_table_exists('hotpot_attempts')) {
            if (hotpot_db_field_exists('hotpot_attempts', 'details')) {
                // HotPot v2.0 (Moodle 1.5)
                $oldversion = 2005031400;
            }
        } else {
            // HotPot v1
            $oldversion = 2004122000;
        }
    }
    if ($oldversion < 2004021400) {
        execute_sql(" ALTER TABLE `{$CFG->prefix}hotpot_events` ADD `starttime` INT(10) unsigned NOT NULL DEFAULT '0' AFTER `time`");
        execute_sql(" ALTER TABLE `{$CFG->prefix}hotpot_events` ADD `endtime` INT(10) unsigned NOT NULL DEFAULT '0' AFTER `time`");
    }
    // update from HotPot v1 to HotPot v2
    if ($oldversion < 2005031400) {
        require_once $update_to_v2;
        $ok = $ok && hotpot_update_to_v2_from_v1();
    }
    if ($oldversion < 2005090700) {
        require_once $update_to_v2;
        $ok = $ok && hotpot_update_to_v2_1();
    }
    if ($oldversion > 2005031419 && $oldversion < 2005090702) {
        // update to from HotPot v2.1.0 or v2.1.1
        require_once $update_to_v2;
        $ok = $ok && hotpot_update_to_v2_1_2();
    }
    if ($oldversion < 2006042103) {
        require_once $update_to_v2;
        $ok = $ok && hotpot_update_to_v2_1_16();
    }
    if ($oldversion < 2006042601) {
        require_once $update_to_v2;
        $ok = $ok && hotpot_update_to_v2_1_17();
    }
    if ($oldversion < 2006042803) {
        require_once $update_to_v2;
        $ok = $ok && hotpot_update_to_v2_1_18();
    }
    if ($oldversion < 2006083101) {
        require_once $update_to_v2;
        $ok = $ok && hotpot_update_to_v2_2();
    }
    //////  DO NOT ADD NEW THINGS HERE!!  USE upgrade.php and the lib/ddllib.php functions.
    return $ok;
}
Example #3
0
function hotpot_db_update_field_type($table, $oldfield, $field, $type, $size, $unsigned, $notnull, $default = NULL, $after = NULL)
{
    $ok = true;
    global $CFG, $db;
    // check validity of arguments, and adjust if necessary
    if ($oldfield && !hotpot_db_field_exists($table, $oldfield)) {
        $oldfield = '';
    }
    if (empty($oldfield) && hotpot_db_field_exists($table, $field)) {
        $oldfield = $field;
    }
    if (is_string($unsigned)) {
        $unsigned = strtoupper($unsigned) == 'UNSIGNED';
    }
    if (is_string($notnull)) {
        $notnull = strtoupper($notnull) == 'NOT NULL';
    }
    if (isset($default)) {
        if (!is_numeric($default) && strtoupper($default) != 'NULL' && !preg_match("|^'.*'\$|", $default)) {
            $default = "'{$default}'";
        }
    }
    // set full table name
    $table = "{$CFG->prefix}{$table}";
    // update the field in the database
    switch (strtolower($CFG->dbfamily)) {
        case 'mysql':
            // optimize integer types
            switch (strtoupper($type)) {
                case 'TEXT':
                    $size = '';
                    $unsigned = false;
                    break;
                case 'INTEGER':
                    if (!is_numeric($size)) {
                        $size = '';
                    } else {
                        if ($size <= 4) {
                            $type = "TINYINT";
                            // 1 byte
                        } else {
                            if ($size <= 6) {
                                $type = "SMALLINT";
                                // 2 bytes
                            } else {
                                if ($size <= 8) {
                                    $type = "MEDIUMINT";
                                    // 3 bytes
                                } else {
                                    if ($size <= 10) {
                                        $type = "INTEGER";
                                        // 4 bytes (=INT)
                                    } else {
                                        if ($size > 10) {
                                            $type = "BIGINT";
                                            // 8 bytes
                                        }
                                    }
                                }
                            }
                        }
                    }
                    break;
                case 'VARCHAR':
                    $unsigned = false;
                    break;
            }
            // set action
            if (empty($oldfield)) {
                $action = "ADD";
            } else {
                $action = "CHANGE `{$oldfield}`";
            }
            // set fieldtype
            $fieldtype = $type;
            if ($size) {
                $fieldtype .= "({$size})";
            }
            if ($unsigned) {
                $fieldtype .= ' UNSIGNED';
            }
            if ($notnull) {
                $fieldtype .= ' NOT NULL';
            }
            if (isset($default)) {
                $fieldtype .= " DEFAULT {$default}";
            }
            if (!empty($after)) {
                $fieldtype .= " AFTER `{$after}`";
            }
            $ok = $ok && execute_sql("ALTER TABLE `{$table}` {$action} `{$field}` {$fieldtype}");
            break;
        case 'postgres':
            // get db version
            //    N.B. $db->ServerInfo() usually returns blank
            //    (except lib/adodb/drivers/adodb-postgre64-inc.php)
            $dbversion = '';
            $rs = $db->Execute("SELECT version()");
            if ($rs && $rs->RecordCount() > 0) {
                $records = $rs->GetArray();
                if (preg_match('/\\d+\\.\\d+/', $records[0][0], $matches)) {
                    $dbversion = $matches[0];
                }
            }
            $tmpfield = 'temporary_' . $field . '_' . time();
            switch (strtoupper($type)) {
                case "INTEGER":
                    if (!is_numeric($size)) {
                        $fieldtype = "INTEGER";
                    } else {
                        if ($size <= 4) {
                            $fieldtype = "INT2";
                            // 2 bytes
                        } else {
                            if ($size <= 10) {
                                $fieldtype = "INT4";
                                // 4 bytes (=INTEGER)
                            } else {
                                if ($size > 10) {
                                    $fieldtype = "INT8";
                                    // 8 bytes
                                }
                            }
                        }
                    }
                    break;
                case "VARCHAR":
                    $fieldtype = "VARCHAR({$size})";
                    break;
                default:
                    $fieldtype = $type;
            }
            // start transaction
            execute_sql('BEGIN');
            // create temporary field
            execute_sql('ALTER TABLE ' . $table . ' ADD COLUMN "' . $tmpfield . '" ' . $fieldtype);
            // set default
            if (isset($default)) {
                execute_sql('UPDATE ' . $table . ' SET "' . $tmpfield . '" = ' . $default);
                execute_sql('ALTER TABLE ' . $table . ' ALTER COLUMN "' . $tmpfield . '" SET DEFAULT ' . $default);
            } else {
                execute_sql('ALTER TABLE ' . $table . ' ALTER COLUMN "' . $tmpfield . '" DROP DEFAULT');
            }
            // set not null
            if ($dbversion == '' || $dbversion >= "7.3") {
                $notnull = $notnull ? 'SET NOT NULL' : 'DROP NOT NULL';
                execute_sql('ALTER TABLE ' . $table . ' ALTER COLUMN "' . $tmpfield . '" ' . $notnull);
            } else {
                execute_sql("\n                    UPDATE pg_attribute SET attnotnull=" . ($notnull ? 'TRUE' : 'FALSE') . " \n                    WHERE attname = '{$tmpfield}'\n                    AND attrelid = (SELECT oid FROM pg_class WHERE relname = '{$table}')\n                ");
            }
            // transfer $oldfield values, if necessary
            if ($oldfield != '') {
                execute_sql('UPDATE ' . $table . ' SET "' . $tmpfield . '" = CAST ("' . $oldfield . '" AS ' . $fieldtype . ')');
                execute_sql('ALTER TABLE ' . $table . ' DROP COLUMN "' . $oldfield . '"');
            }
            // rename $tmpfield to $field
            execute_sql('ALTER TABLE ' . $table . ' RENAME COLUMN "' . $tmpfield . '" TO "' . $field . '"');
            // do the transaction
            execute_sql('COMMIT');
            // reclaim disk space (must be done outside transaction)
            if ($oldfield != '' && $dbversion >= "7.3") {
                execute_sql('UPDATE ' . $table . ' SET "' . $field . '" = "' . $field . '"');
                execute_sql('VACUUM FULL ' . $table);
            }
            break;
    }
    // end switch $CGF->dbfamily
    return $ok;
}