public function run($arguments) { $arguments = Ithemes_Sync_Functions::merge_defaults($arguments, $this->default_arguments); return Ithemes_Sync_Functions::get_update_details($arguments); }
private function do_bulk_upgrade($packages, $type) { if (!in_array($type, array('plugin', 'theme'))) { return new WP_Error('unrecognized-bulk-upgrade-type', "An unrecognized type ({$type}) was passed to do_bulk_upgrade()."); } Ithemes_Sync_Functions::set_time_limit(300); $original_versions = array(); foreach ($packages as $package) { if ('plugin' === $type) { $file_data = Ithemes_Sync_Functions::get_file_data(WP_PLUGIN_DIR . "/{$package}"); } else { $file_data = Ithemes_Sync_Functions::get_file_data(WP_CONTENT_DIR . "/themes/{$package}/style.css"); } $original_versions[$package] = $file_data['version']; } require_once ABSPATH . 'wp-admin/includes/file.php'; require_once ABSPATH . 'wp-admin/includes/plugin.php'; require_once ABSPATH . 'wp-admin/includes/misc.php'; if ('plugin' === $type) { $upgrader = new Plugin_Upgrader($this->skin); $result = $upgrader->bulk_upgrade($packages); Ithemes_Sync_Functions::refresh_plugin_updates(); } else { $upgrader = new Theme_Upgrader($this->skin); $result = $upgrader->bulk_upgrade($packages); Ithemes_Sync_Functions::refresh_theme_updates(); } if (is_wp_error($result)) { return array('errors' => array($result->get_error_code() => $result->get_error_message())); } else { if (false === $result) { if ('plugin' === $type) { $result = $upgrader->fs_connect(array(WP_CONTENT_DIR, WP_PLUGIN_DIR)); } else { $result = $upgrader->fs_connect(array(WP_CONTENT_DIR)); } if (is_wp_error($result)) { return array('errors' => array($result->get_error_code() => $result->get_error_message())); } else { return array('errors' => array('non-connected-filesystem' => 'Unable to update due to a non-connected filesystem.')); } } } $update_details = Ithemes_Sync_Functions::get_update_details(array('verbose' => true)); $response = array(); $update_index = "{$type}s"; foreach ($result as $package => $info) { if (false === $info) { $response[$package]['errors']['non-connected-filesystem'] = 'Unable to update due to a non-connected filesystem.'; } else { if (is_wp_error($info)) { $response[$package]['errors'][$info->get_error_code()] = $info->get_error_message(); } else { $response[$package]['wordpress_response'] = $info; if ('plugin' === $type) { $file_data = Ithemes_Sync_Functions::get_file_data(WP_PLUGIN_DIR . "/{$package}"); } else { $file_data = Ithemes_Sync_Functions::get_file_data(WP_CONTENT_DIR . "/themes/{$package}/style.css"); } $response[$package]['current_version'] = $file_data['version']; if (isset($original_versions[$package])) { $response[$package]['original_version'] = $original_versions[$package]; } if (isset($update_details[$update_index][$package])) { if ('plugin' === $type && isset($update_details[$update_index][$package]->new_version)) { $response[$package]['current_update_version'] = $update_details[$update_index][$package]->new_version; } else { if ('theme' === $type && isset($update_details[$update_index][$package]['new_version'])) { $response[$package]['current_update_version'] = $update_details[$update_index][$package]['new_version']; } } } if (isset($this->original_update_details[$update_index][$package])) { if ('plugin' === $type && isset($this->original_update_details[$update_index][$package]->new_version)) { $response[$package]['original_update_version'] = $this->original_update_details[$update_index][$package]->new_version; } else { if ('theme' === $type && isset($this->original_update_details[$update_index][$package]['new_version'])) { $response[$package]['original_update_version'] = $this->original_update_details[$update_index][$package]['new_version']; } } } if ('plugin' === $type) { $removed_old_update_data = $GLOBALS['ithemes_sync_request_handler']->remove_old_update_plugins_data($package); if (!is_null($removed_old_update_data)) { $response[$package]['removed_old_update_data'] = $removed_old_update_data; } } if (!isset($response[$package]['original_update_version'])) { $response[$package]['errors']['no-update'] = 'No update was available.'; } else { if (version_compare($response[$package]['current_version'], $response[$package]['original_update_version'], '>=')) { $response[$package]['success'] = 1; if (isset($response[$package]['current_update_version'])) { if (version_compare($response[$package]['current_version'], $response[$package]['current_update_version'], '>=')) { $response[$package]['errors']['old-update-remains-available'] = 'The original update is still listed despite the update working properly.'; } else { $response[$package]['errors']['new-update-available'] = 'An update is available.'; } } } else { $response[$package]['errors']['unknown-error'] = 'An unknown error prevented the update from completing successfully.'; } } } } } return $response; }