Ejemplo n.º 1
0
/**
 * Get a list of files and folders that must be ignored/removed on upgrade
 *
 * @param string Type of action: 'ignore', 'remove', 'softmove', 'forcemove'
 *                               'unknown' - Stores all unknown actions
 *                               'incorrect' - Stores all incorrect actions
 * @return array|string List of files and folders | Error message
 */
function get_upgrade_config($action)
{
    global $conf_path, $upgrade_policy_config;
    if (!isset($upgrade_policy_config)) {
        // Init global array first time
        $upgrade_policy_config = array();
    } elseif (is_string($upgrade_policy_config)) {
        // Return error about config file
        return $upgrade_policy_config;
    }
    if (isset($upgrade_policy_config[$action])) {
        // The config files were already initialized before, Don't make it twice
        return $upgrade_policy_config[$action];
    }
    if (!check_upgrade_config()) {
        // The upgrade config file is NOT mandatory
        // Return just an empty array without error text
        // Error message is displayed on top page by $Messages object
        return $upgrade_policy_config;
    }
    $config_handle = @fopen($conf_path . 'upgrade_policy.conf', 'r');
    if (!$config_handle) {
        // No permissions to open file
        $upgrade_policy_config = sprintf(T_('No permission to open the %s file.'), '<code>upgrade_policy.conf</code>');
        return $upgrade_policy_config;
    }
    // Get content from config file
    $config_content = '';
    while (!feof($config_handle)) {
        $config_content .= fgets($config_handle, 4096);
    }
    fclose($config_handle);
    if (empty($config_content)) {
        // Config file is empty for required action
        $upgrade_policy_config = sprintf(T_('The %s file is empty.'), '<code>upgrade_policy.conf</code>');
        return $upgrade_policy_config;
    }
    // Only these actions are available in the upgrade_policy.conf
    $available_actions = array('ignore', 'remove', 'softmove', 'forcemove');
    $all_actions = array_merge($available_actions, array('unknown', 'incorrect'));
    foreach ($all_actions as $available_action) {
        // Init array for all actions only first time
        if (!isset($upgrade_policy_config[$available_action])) {
            $upgrade_policy_config[$available_action] = array();
        }
    }
    $config_content = str_replace("\r", '', $config_content);
    $config_content = explode("\n", $config_content);
    foreach ($config_content as $config_line) {
        if (substr($config_line, 0, 1) == ';') {
            // This line is comment text, Skip it
            continue;
        }
        $config_line = trim($config_line);
        $config_line_params = explode(' ', $config_line);
        $line_action = $config_line_params[0];
        if (in_array($line_action, $available_actions)) {
            // This line has an available action
            if (empty($config_line_params[1])) {
                // Incorrect command
                $upgrade_policy_config['incorrect'][] = $config_line;
                continue;
            }
            if ($line_action == 'softmove' || $line_action == 'forcemove') {
                // These actions have two params
                if (empty($config_line_params[1]) || empty($config_line_params[2])) {
                    // Incorrect command
                    $upgrade_policy_config['incorrect'][] = $config_line;
                    continue;
                }
                $upgrade_policy_config[$line_action][$config_line_params[1]] = $config_line_params[2];
            } else {
                // Actions 'ignore' & 'remove' have only one param
                $upgrade_policy_config[$line_action][] = $config_line_params[1];
            }
        } elseif (!empty($line_action)) {
            // Also save all unknown actions to display error
            $upgrade_policy_config['unknown'][] = $config_line;
        }
    }
    return $upgrade_policy_config[$action];
}
Ejemplo n.º 2
0
global $current_User;
/**
 * @vars string paths
 */
global $basepath, $upgrade_path, $install_path;
// Check minimum permission:
$current_User->check_perm('perm_maintenance', 'upgrade', true);
// Used in the upgrade process
$script_start_time = $servertimenow;
$tab = param('tab', 'string', '', true);
// Set options path:
$AdminUI->set_path('options', 'misc', 'upgrade' . $tab);
// Get action parameter from request:
param_action();
// Display message if the upgrade config file doesn't exist
check_upgrade_config(true);
$AdminUI->breadcrumbpath_init(false);
// fp> I'm playing with the idea of keeping the current blog in the path here...
$AdminUI->breadcrumbpath_add(T_('System'), '?ctrl=system');
$AdminUI->breadcrumbpath_add(T_('Maintenance'), '?ctrl=tools');
if ($tab == 'svn') {
    $AdminUI->breadcrumbpath_add(T_('Upgrade from SVN'), '?ctrl=upgrade&amp;tab=' . $tab);
} else {
    $AdminUI->breadcrumbpath_add(T_('Auto Upgrade'), '?ctrl=upgrade');
}
// Display <html><head>...</head> section! (Note: should be done early if actions do not redirect)
$AdminUI->disp_html_head();
// Display title, menu, messages, etc. (Note: messages MUST be displayed AFTER the actions)
$AdminUI->disp_body_top();
$AdminUI->disp_payload_begin();
echo '<h2 class="red">WARNING: EXPERIMENTAL FEATURE!</h2>';