Пример #1
0
/**
 * Run any php upgrade scripts which are required
 *
 * @param int  $version Version upgrading from.
 * @param bool $quiet   Suppress errors.  Don't use this.
 *
 * @return bool
 * @access private
 */
function upgrade_code($version, $quiet = FALSE)
{
    // do not remove - upgrade scripts depend on this
    global $CONFIG;
    $version = (int) $version;
    $upgrade_path = elgg_get_config('path') . 'engine/lib/upgrades/';
    $processed_upgrades = elgg_get_processed_upgrades();
    // upgrading from 1.7 to 1.8. Need to bootstrap.
    if (!$processed_upgrades) {
        elgg_upgrade_bootstrap_17_to_18();
        // grab accurate processed upgrades
        $processed_upgrades = elgg_get_processed_upgrades();
    }
    $upgrade_files = elgg_get_upgrade_files($upgrade_path);
    if ($upgrade_files === false) {
        return false;
    }
    $upgrades = elgg_get_unprocessed_upgrades($upgrade_files, $processed_upgrades);
    // Sort and execute
    sort($upgrades);
    foreach ($upgrades as $upgrade) {
        $upgrade_version = elgg_get_upgrade_file_version($upgrade);
        $success = true;
        // hide all errors.
        if ($quiet) {
            // hide include errors as well as any exceptions that might happen
            try {
                if (!@(include "{$upgrade_path}/{$upgrade}")) {
                    $success = false;
                    error_log("Could not include {$upgrade_path}/{$upgrade}");
                }
            } catch (Exception $e) {
                $success = false;
                error_log($e->getmessage());
            }
        } else {
            if (!(include "{$upgrade_path}/{$upgrade}")) {
                $success = false;
                error_log("Could not include {$upgrade_path}/{$upgrade}");
            }
        }
        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 of Elgg
            if ($upgrade_version > $version) {
                datalist_set('version', $upgrade_version);
            }
            elgg_set_processed_upgrades($processed_upgrades);
        } else {
            return false;
        }
    }
    return true;
}
Пример #2
0
function file_tools_upgrade_handler()
{
    $upgrades_path = dirname(dirname(__FILE__)) . "/upgrades/";
    // find all upgrade files
    $upgrade_files = elgg_get_upgrade_files($upgrades_path);
    // get processed upgrade file, so we can add our own files when done
    $processed_upgrades = elgg_get_processed_upgrades();
    // get unprocessed upgrade files
    if ($unprocessed_upgrades = elgg_get_unprocessed_upgrades($upgrade_files, $processed_upgrades)) {
        foreach ($unprocessed_upgrades as $upgrade_file) {
            // make sure we don't try to run someone elses upgrade files
            if (in_array($upgrade_file, $upgrade_files) && file_exists($upgrades_path . $upgrade_file)) {
                // run upgrade
                include $upgrades_path . $upgrade_file;
                // make sure we don't do it again
                $processed_upgrades[] = $upgrade_file;
            }
        }
        // store processed upgrade files
        elgg_set_processed_upgrades($processed_upgrades);
    }
}
Пример #3
0
 * after an upgrade, you can delete it. Future versions of Elgg will include a
 * new version of the script. Deleting the script is not a requirement and
 * leaving it behind does not affect the security of the site.
 *
 * @package Elgg.Core
 * @subpackage Upgrade
 */
// we want to know if an error occurs
ini_set('display_errors', 1);
define('UPGRADING', 'upgrading');
require_once dirname(__FILE__) . "/engine/start.php";
if (get_input('upgrade') == 'upgrade') {
    // disable the system log for upgrades to avoid exceptions when the schema changes.
    elgg_unregister_event_handler('log', 'systemlog', 'system_log_default_logger');
    elgg_unregister_event_handler('all', 'all', 'system_log_listener');
    if (elgg_get_unprocessed_upgrades()) {
        version_upgrade();
    }
    elgg_trigger_event('upgrade', 'system', null);
    elgg_invalidate_simplecache();
    elgg_reset_system_cache();
} else {
    // if upgrading from < 1.8.0, check for the core view 'welcome' and bail if it's found.
    // see http://trac.elgg.org/ticket/3064
    // we're not checking the view itself because it's likely themes will override this view.
    // we're only concerned with core files.
    $welcome = dirname(__FILE__) . '/views/default/welcome.php';
    if (file_exists($welcome)) {
        elgg_set_viewtype('failsafe');
        // can't have pretty messages because we don't know the state of the views.
        $content = elgg_echo('upgrade:unable_to_upgrade_info');
Пример #4
0
/**
 * Run any php upgrade scripts which are required
 *
 * @param int  $version Version upgrading from.
 * @param bool $quiet   Suppress errors.  Don't use this.
 *
 * @return bool
 */
function upgrade_code($version, $quiet = FALSE)
{
    global $CONFIG;
    $version = (int) $version;
    $upgrade_path = elgg_get_config('path') . 'engine/lib/upgrades/';
    $processed_upgrades = unserialize(datalist_get('processed_upgrades'));
    // the day we started the new upgrade names
    $upgrade_epoch = 2011021700;
    if (!$processed_upgrades) {
        $processed_upgrades = array();
    }
    $upgrades = array();
    $upgrade_files = elgg_get_upgrade_files($upgrade_path);
    if ($upgrade_files === false) {
        return false;
    }
    // bootstrap into the new upgrade system.
    // can't do this in an upgrade because we need to check for 2010050701,
    // which would already have been run by then.
    if ($version < $upgrade_epoch) {
        foreach ($upgrade_files as $upgrade_file) {
            $upgrade_version = elgg_get_upgrade_file_version($upgrade_file);
            // the upgrade that made life difficult
            // the only way to test if we're upgrading from 1.7 to 1.8 or within 1.8
            // is to test for the the walled_garden config option, which
            // 2010050701 explicitly sets
            if ($upgrade_version == 2010050701) {
                $db_prefix = elgg_get_config('dbprefix');
                $site_guid = elgg_get_config('site_guid');
                $q = "SELECT value FROM {$db_prefix}config\n\t\t\t\t\tWHERE name = 'walled_garden' AND site_guid = {$site_guid}";
                $result = get_data_row($q);
                if (!$result) {
                    $upgrades[] = $upgrade_file;
                }
                continue;
            } elseif ($version < $upgrade_version) {
                $upgrades[] = $upgrade_file;
            } else {
                // all of the upgrades before the epoch have been run except one...
                $processed_upgrades[] = $upgrade_file;
            }
        }
    } else {
        // add any upgrades that haven't been run to the upgrades list
        $upgrades = elgg_get_unprocessed_upgrades($upgrade_files, $processed_upgrades);
    }
    // Sort and execute
    sort($upgrades);
    foreach ($upgrades as $upgrade) {
        $upgrade_version = elgg_get_upgrade_file_version($upgrade);
        $success = true;
        // hide all errors.
        if ($quiet) {
            // hide include errors as well as any exceptions that might happen
            try {
                if (!@(include "{$upgrade_path}/{$upgrade}")) {
                    $success = false;
                    error_log($e->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;
}