/** * 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]; }
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&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>';