From 5922ff3285e68dbdf7dac444a31915621f9e2e5f Mon Sep 17 00:00:00 2001 From: cash Date: Sat, 9 Apr 2011 12:48:09 +0000 Subject: Refs #3241 upgrade.php is a much better name for the upgrade library git-svn-id: http://code.elgg.org/elgg/trunk@8962 36083f99-b078-4883-b0ff-0f9b5a30f544 --- engine/lib/deprecated-1.8.php | 6 + engine/lib/upgrade.php | 264 ++++++++++++++++++++++++++++++++++++++++++ engine/lib/version.php | 264 ------------------------------------------ 3 files changed, 270 insertions(+), 264 deletions(-) create mode 100644 engine/lib/upgrade.php delete mode 100644 engine/lib/version.php (limited to 'engine/lib') diff --git a/engine/lib/deprecated-1.8.php b/engine/lib/deprecated-1.8.php index dc219ac76..165546d31 100644 --- a/engine/lib/deprecated-1.8.php +++ b/engine/lib/deprecated-1.8.php @@ -4372,6 +4372,12 @@ function display_widget(ElggObject $widget) { /** + * *************************************************************************** + * NOTE: If this is ever removed from Elgg, sites lose the ability to upgrade + * from 1.7.x and earlier to the latest version of Elgg without upgrading to + * 1.8 first. + * *************************************************************************** + * * Upgrade the database schema in an ordered sequence. * * Executes all upgrade files in elgg/engine/schema/upgrades/ in sequential order. diff --git a/engine/lib/upgrade.php b/engine/lib/upgrade.php new file mode 100644 index 000000000..159da5da8 --- /dev/null +++ b/engine/lib/upgrade.php @@ -0,0 +1,264 @@ +getmessage()); + } + } catch (Exception $e) { + $success = false; + error_log($e->getmessage()); + } + } else { + if (!include("$upgrade_path/$upgrade")) { + $success = false; + } + } + + if ($success) { + // incrementally set upgrade so we know where to start if something fails. + $processed_upgrades[] = $upgrade; + + // don't set the version to a lower number in instances where an upgrade + // has been merged from a lower version + if ($upgrade_version > $version) { + datalist_set('version', $upgrade_version); + } + + $processed_upgrades = array_unique($processed_upgrades); + datalist_set('processed_upgrades', serialize($processed_upgrades)); + } else { + return false; + } + } + + return true; +} + +/** + * Returns the version of the upgrade filename. + * + * @param string $filename The upgrade filename. No full path. + * @return int|false + * @since 1.8 + */ +function elgg_get_upgrade_file_version($filename) { + preg_match('/^([0-9]{10})([\.a-z0-9-_]+)?\.(php)$/i', $filename, $matches); + + if (isset($matches[1])) { + return (int) $matches[1]; + } + + return false; +} + +/** + * Returns a list of upgrade files relative to the $upgrade_path dir. + * + * @param string $upgrade_path The up + * @return array|false + */ +function elgg_get_upgrade_files($upgrade_path = null) { + if (!$upgrade_path) { + $upgrade_path = elgg_get_config('path') . 'engine/lib/upgrades/'; + } + $upgrade_path = sanitise_filepath($upgrade_path); + $handle = opendir($upgrade_path); + + if (!$handle) { + return false; + } + + $upgrade_files = array(); + + while ($upgrade_file = readdir($handle)) { + // make sure this is a wellformed upgrade. + if (is_dir($upgrade_path . '$upgrade_file')) { + continue; + } + $upgrade_version = elgg_get_upgrade_file_version($upgrade_file); + if (!$upgrade_version) { + continue; + } + $upgrade_files[] = $upgrade_file; + } + + return $upgrade_files; +} + +/** + * Get the current version information + * + * @param bool $humanreadable Whether to return a human readable version (default: false) + * + * @return string|false Depending on success + */ +function get_version($humanreadable = false) { + global $CONFIG; + + if (isset($CONFIG->path)) { + if (include($CONFIG->path . "version.php")) { + return (!$humanreadable) ? $version : $release; + } + } + + return FALSE; +} + +/** + * Checks if any upgrades need to be run. + * + * @param null|array $upgrade_files Optional upgrade files + * @param null|array $processed_upgrades Optional processed upgrades + * + * @return array() + */ +function elgg_get_unprocessed_upgrades($upgrade_files = null, $processed_upgrades = null) { + if ($upgrade_files === null) { + $upgrade_files = elgg_get_upgrade_files(); + } + + if ($processed_upgrades === null) { + $processed_upgrades = unserialize(datalist_get('processed_upgrades')); + if (!is_array($processed_upgrades)) { + $processed_upgrades = array(); + } + } + + $unprocessed = array_diff($upgrade_files, $processed_upgrades); + return $unprocessed; +} + +/** + * Determines whether or not the database needs to be upgraded. + * + * @return true|false Depending on whether or not the db version matches the code version + */ +function version_upgrade_check() { + $dbversion = (int) datalist_get('version'); + $version = get_version(); + + if ($version > $dbversion) { + return TRUE; + } + + return FALSE; +} + +/** + * Upgrades Elgg Database and code + * + * @return bool + * + */ +function version_upgrade() { + // It's possible large upgrades could exceed the max execution time. + set_time_limit(0); + + $dbversion = (int) datalist_get('version'); + + // No version number? Oh snap...this is an upgrade from a clean installation < 1.7. + // Run all upgrades without error reporting and hope for the best. + // See http://trac.elgg.org/elgg/ticket/1432 for more. + $quiet = !$dbversion; + + // Note: Database upgrades are deprecated as of 1.8. Use code upgrades. See #1433 + if (db_upgrade($dbversion, '', $quiet)) { + system_message(elgg_echo('upgrade:db')); + } + + if (upgrade_code($dbversion, $quiet)) { + system_message(elgg_echo('upgrade:core')); + + // Now we trigger an event to give the option for plugins to do something + $upgrade_details = new stdClass; + $upgrade_details->from = $dbversion; + $upgrade_details->to = get_version(); + + elgg_trigger_event('upgrade', 'upgrade', $upgrade_details); + + return true; + } + + return false; +} diff --git a/engine/lib/version.php b/engine/lib/version.php deleted file mode 100644 index 27f730c33..000000000 --- a/engine/lib/version.php +++ /dev/null @@ -1,264 +0,0 @@ -getmessage()); - } - } catch (Exception $e) { - $success = false; - error_log($e->getmessage()); - } - } else { - if (!include("$upgrade_path/$upgrade")) { - $success = false; - } - } - - if ($success) { - // incrementally set upgrade so we know where to start if something fails. - $processed_upgrades[] = $upgrade; - - // don't set the version to a lower number in instances where an upgrade - // has been merged from a lower version - if ($upgrade_version > $version) { - datalist_set('version', $upgrade_version); - } - - $processed_upgrades = array_unique($processed_upgrades); - datalist_set('processed_upgrades', serialize($processed_upgrades)); - } else { - return false; - } - } - - return true; -} - -/** - * Returns the version of the upgrade filename. - * - * @param string $filename The upgrade filename. No full path. - * @return int|false - * @since 1.8 - */ -function elgg_get_upgrade_file_version($filename) { - preg_match('/^([0-9]{10})([\.a-z0-9-_]+)?\.(php)$/i', $filename, $matches); - - if (isset($matches[1])) { - return (int) $matches[1]; - } - - return false; -} - -/** - * Returns a list of upgrade files relative to the $upgrade_path dir. - * - * @param string $upgrade_path The up - * @return array|false - */ -function elgg_get_upgrade_files($upgrade_path = null) { - if (!$upgrade_path) { - $upgrade_path = elgg_get_config('path') . 'engine/lib/upgrades/'; - } - $upgrade_path = sanitise_filepath($upgrade_path); - $handle = opendir($upgrade_path); - - if (!$handle) { - return false; - } - - $upgrade_files = array(); - - while ($upgrade_file = readdir($handle)) { - // make sure this is a wellformed upgrade. - if (is_dir($upgrade_path . '$upgrade_file')) { - continue; - } - $upgrade_version = elgg_get_upgrade_file_version($upgrade_file); - if (!$upgrade_version) { - continue; - } - $upgrade_files[] = $upgrade_file; - } - - return $upgrade_files; -} - -/** - * Get the current version information - * - * @param bool $humanreadable Whether to return a human readable version (default: false) - * - * @return string|false Depending on success - */ -function get_version($humanreadable = false) { - global $CONFIG; - - if (isset($CONFIG->path)) { - if (include($CONFIG->path . "version.php")) { - return (!$humanreadable) ? $version : $release; - } - } - - return FALSE; -} - -/** - * Checks if any upgrades need to be run. - * - * @param null|array $upgrade_files Optional upgrade files - * @param null|array $processed_upgrades Optional processed upgrades - * - * @return array() - */ -function elgg_get_unprocessed_upgrades($upgrade_files = null, $processed_upgrades = null) { - if ($upgrade_files === null) { - $upgrade_files = elgg_get_upgrade_files(); - } - - if ($processed_upgrades === null) { - $processed_upgrades = unserialize(datalist_get('processed_upgrades')); - if (!is_array($processed_upgrades)) { - $processed_upgrades = array(); - } - } - - $unprocessed = array_diff($upgrade_files, $processed_upgrades); - return $unprocessed; -} - -/** - * Determines whether or not the database needs to be upgraded. - * - * @return true|false Depending on whether or not the db version matches the code version - */ -function version_upgrade_check() { - $dbversion = (int) datalist_get('version'); - $version = get_version(); - - if ($version > $dbversion) { - return TRUE; - } - - return FALSE; -} - -/** - * Upgrades Elgg Database and code - * - * @return bool - * - */ -function version_upgrade() { - // It's possible large upgrades could exceed the max execution time. - set_time_limit(0); - - $dbversion = (int) datalist_get('version'); - - // No version number? Oh snap...this is an upgrade from a clean installation < 1.7. - // Run all upgrades without error reporting and hope for the best. - // See http://trac.elgg.org/elgg/ticket/1432 for more. - $quiet = !$dbversion; - - // Note: Database upgrades are deprecated as of 1.8. Use code upgrades. See #1433 - if (db_upgrade($dbversion, '', $quiet)) { - system_message(elgg_echo('upgrade:db')); - } - - if (upgrade_code($dbversion, $quiet)) { - system_message(elgg_echo('upgrade:core')); - - // Now we trigger an event to give the option for plugins to do something - $upgrade_details = new stdClass; - $upgrade_details->from = $dbversion; - $upgrade_details->to = get_version(); - - elgg_trigger_event('upgrade', 'upgrade', $upgrade_details); - - return true; - } - - return false; -} -- cgit v1.2.3