From b35e8cbe9e9776d86be034365c1033b61497bbb0 Mon Sep 17 00:00:00 2001 From: ben Date: Tue, 23 Sep 2008 17:27:09 +0000 Subject: The database schema will now automatically update itself on upgrade. git-svn-id: https://code.elgg.org/elgg/trunk@2107 36083f99-b078-4883-b0ff-0f9b5a30f544 --- engine/lib/database.php | 47 ++++++++++++++++++++++++++++++++++++++++++++++- engine/lib/version.php | 36 +++++++++++++++++++++++++++++++++--- 2 files changed, 79 insertions(+), 4 deletions(-) (limited to 'engine/lib') diff --git a/engine/lib/database.php b/engine/lib/database.php index a071a4f6f..f1b4a5871 100644 --- a/engine/lib/database.php +++ b/engine/lib/database.php @@ -400,7 +400,11 @@ $statement = trim($statement); $statement = str_replace("prefix_",$CONFIG->dbprefix,$statement); if (!empty($statement)) { - $result = update_data($statement); + try { + $result = update_data($statement); + } catch (DatabaseException $e) { + $errors[] = $e->getMessage(); + } } } if (!empty($errors)) { @@ -414,6 +418,47 @@ throw new DatabaseException(sprintf(elgg_echo('DatabaseException:ScriptNotFound'), $scriptlocation)); } + } + + function db_upgrade($version) { + + global $CONFIG; + + // Elgg and its database must be installed to upgrade it! + if (!is_db_installed() || !is_installed()) return false; + + $version = (int) $version; + + if ($handle = opendir($CONFIG->path . 'engine/schema/upgrades/')) { + + $sqlupgrades = array(); + + while ($sqlfile = readdir($handle)) { + + if (!is_dir($CONFIG->path . 'engine/schema/upgrades/' . $sqlfile)) { + if (preg_match('/([0-9]*)\.sql/',$sqlfile,$matches)) { + $sql_version = (int) $matches[1]; + if ($sql_version > $version) { + $sqlupgrades[] = $sqlfile; + } + } + } + + } + + asort($sqlupgrades); + if (sizeof($sqlupgrades) > 0) { + foreach($sqlupgrades as $sqlfile) { + try { + run_sql_script($CONFIG->path . 'engine/schema/upgrades/' . $sqlfile); + } catch (DatabaseException $e) { + error_log($e->getmessage()); + } + } + } + + } + } /** diff --git a/engine/lib/version.php b/engine/lib/version.php index ee707ca1d..405237298 100644 --- a/engine/lib/version.php +++ b/engine/lib/version.php @@ -21,7 +21,7 @@ global $CONFIG; if (@include($CONFIG->path . "version.php")) { - if ($humanreadable) return $version; + if (!$humanreadable) return $version; return $release; } @@ -34,9 +34,9 @@ * * @return true|false Depending on whether or not the db version matches the code version */ - function db_upgrade_check() { + function version_upgrade_check() { - $dbversion = (int) get_datalist('version'); + $dbversion = (int) datalist_get('version'); $version = get_version(); if ($version > $dbversion) { @@ -45,5 +45,35 @@ return false; } + + /** + * Upgrades Elgg + * + */ + function version_upgrade() { + + $dbversion = (int) datalist_get('version'); + db_upgrade($dbversion); + datalist_set('version', get_version()); + system_message(elgg_echo('upgrade:db')); + forward(); + exit; + + } + + /** + * Runs an upgrade check on boot. + * + */ + function version_boot() { + + if (version_upgrade_check()) { + version_upgrade(); + } + + } + + // Register the boot handler for version + register_elgg_event_handler("boot","system","version_boot"); ?> \ No newline at end of file -- cgit v1.2.3