public function do_core_upgrade($params) { $required_fields = array('upgrade_id', 'locale', 'version'); $errors = array(); foreach ($required_fields as $field) { if (!isset($params[$field])) { $errors[] = "The '{$field}' field is missing."; } } if (empty($errors)) { require_once $GLOBALS['ithemes_updater_path'] . '/functions.php'; $updates = Ithemes_Sync_Functions::get_update_details(array('verbose' => true, 'force_refresh' => array('core'))); if (empty($updates['core'])) { $errors[] = 'No core updates are currently available.'; } else { if (empty($updates['core'][$params['upgrade_id']])) { $errors[] = 'Unable to find an availble upgrade matching the requested upgrade_id.'; } else { if ($params['locale'] != $updates['core'][$params['upgrade_id']]->locale) { $errors[] = 'The requested upgrade does not match the requested locale.'; } else { if (isset($updates['core'][$params['upgrade_id']]->version) && $params['version'] != $updates['core'][$params['upgrade_id']]->version) { $errors[] = 'The requested upgrade does not match the requested version.'; } else { if (isset($updates['core'][$params['upgrade_id']]->current) && $params['version'] != $updates['core'][$params['upgrade_id']]->current) { $errors[] = 'The requested upgrade does not match the requested version.'; } } } } } } if (!empty($errors)) { return array('errors' => $errors); } Ithemes_Sync_Functions::set_time_limit(300); $original_version = Ithemes_Sync_Functions::get_wordpress_version(); require_once ABSPATH . 'wp-admin/includes/file.php'; require_once ABSPATH . 'wp-admin/includes/update.php'; require_once ABSPATH . 'wp-admin/includes/misc.php'; $upgrader = new Core_Upgrader($this->skin); $result = $upgrader->upgrade($updates['core'][$params['upgrade_id']]); Ithemes_Sync_Functions::refresh_core_updates(); if (is_wp_error($result)) { return array('errors' => array($result->get_error_code() => $result->get_error_message())); } $current_version = Ithemes_Sync_Functions::get_wordpress_version(); $current_updates = Ithemes_Sync_Functions::get_update_details(array('force_refresh' => array('core'))); $current_update_version = false; foreach ($current_updates['core'] as $index => $update) { if (version_compare($update->version, $current_update_version, '>')) { $current_update_version = $update->version; } } $response = array('wordpress_response' => $result, 'original_version' => $original_version, 'current_version' => $current_version, 'current_update_version' => $current_update_version, 'original_update_version' => $updates['core'][$params['upgrade_id']]->version); if (is_multisite()) { // Based on the upgrade action of wp-admin/network/upgrade.php $wp_db_version = Ithemes_Sync_Functions::get_wordpress_db_version(); update_site_option('wpmu_upgrade_site', $wp_db_version); global $wpdb; $blogs = $wpdb->get_results("SELECT * FROM {$wpdb->blogs} WHERE site_id = '{$wpdb->siteid}' AND spam = '0' AND deleted = '0' AND archived = '0'", ARRAY_A); $response['network_upgrade'] = true; foreach ((array) $blogs as $details) { switch_to_blog($details['blog_id']); $siteurl = site_url(); $upgrade_url = admin_url('upgrade.php?step=upgrade_db'); restore_current_blog(); $result = wp_remote_get($upgrade_url, array('timeout' => 120, 'httpversion' => '1.1')); if (is_wp_error($result)) { $response['network_upgrade'] = false; $response['errors'][] = 'Unable to successfully upgrade the network. You may need to visit the network admin dashboard to manually upgrade the network.'; break; } do_action('after_mu_upgrade', $result); do_action('wpmu_upgrade_site', $details['blog_id']); } } if ($current_version == $params['version']) { $response['success'] = true; } return $response; }