本文整理汇总了PHP中Plugin_Upgrader::bulk_upgrade方法的典型用法代码示例。如果您正苦于以下问题:PHP Plugin_Upgrader::bulk_upgrade方法的具体用法?PHP Plugin_Upgrader::bulk_upgrade怎么用?PHP Plugin_Upgrader::bulk_upgrade使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Plugin_Upgrader
的用法示例。
在下文中一共展示了Plugin_Upgrader::bulk_upgrade方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: bruteprotect_bulk_update_plugins
/**
* Updates the given list of plugins.
*
* Accepts an array of plugin paths such as 'bruteprotect/bruteprotect.php'
* Returns a detailed array showing the status of each plugin and a log of messages output during the process
*
* @param array $plugins
* @return array
*/
function bruteprotect_bulk_update_plugins($plugins)
{
$skin = new Automatic_Upgrader_Skin();
$upgrader = new Plugin_Upgrader($skin);
$results = $upgrader->bulk_upgrade($plugins);
$messages = $upgrader->skin->get_upgrade_messages();
$o['results'] = $results;
$o['messages'] = $messages;
return $o;
}
示例2: iframe_intercept
public function iframe_intercept($current_screen)
{
if ($current_screen->base !== 'mailpoet_page_wysija_config') {
return;
}
if (!isset($_GET['action']) || $_GET['action'] !== 'packager-switch') {
return;
}
// Verify if it's has been created within the last 12 hours (nonce)
if (wp_verify_nonce($_GET['_wpnonce'], $_GET['action']) !== 1) {
return;
}
// Require the Updater classes
include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
$to = isset($_GET['stable']) && $_GET['stable'] ? 'stable' : 'beta';
add_filter('pre_site_transient_update_plugins', array($this, 'pre_site_transient_update_plugins'));
$plugins = array();
// Check for the action, it might be upgrading or installing
$action = 'upgrade';
if (isset($_GET['_mp_action']) && in_array($_GET['_mp_action'], array('upgrade', 'install'))) {
$action = strtolower($_GET['_mp_action']);
}
foreach (self::$plugins as $k => $plugin) {
if (is_plugin_active($plugin)) {
$plugins[] = $plugin;
}
}
// Ajust the Padding/margin of the iFrame
define('IFRAME_REQUEST', true);
echo "<div style='margin: 0 20px;'>";
// Thats how WordPress calls for an iFrame page
wp_enqueue_script('jquery');
iframe_header();
if ($action === 'upgrade') {
$upgrader = new Plugin_Upgrader(new Bulk_Plugin_Upgrader_Skin(compact('nonce', 'url')));
$upgrader->bulk_upgrade($plugins);
} elseif ($action === 'install') {
// If the action is install, it will only happen if it's the Premium
$upgrader = new Plugin_Upgrader(new Plugin_Installer_Skin());
$result = $upgrader->install(self::get_url(self::$plugins[1], WYSIJA::is_beta(), 'zip'));
}
iframe_footer();
echo "</div>";
remove_filter('pre_site_transient_update_plugins', array($this, 'pre_site_transient_update_plugins'));
$model_config = WYSIJA::get('config', 'model');
$model_config->save(array('beta_mode' => $to === 'stable' ? false : true));
set_site_transient('update_plugins', '');
exit;
}
示例3: bulk_upgrade
/**
* Handle a bulk upgrade request.
*
* @since 2.5.0
*
* @see Plugin_Upgrader::bulk_upgrade()
*
* @param array $plugins The local WP file_path's of the plugins which should be upgraded.
* @param array $args Arbitrary passed extra arguments.
* @return string|bool Install confirmation messages on success, false on failure.
*/
public function bulk_upgrade($plugins, $args = array())
{
add_filter('upgrader_post_install', array($this, 'auto_activate'), 10);
$result = parent::bulk_upgrade($plugins, $args);
remove_filter('upgrader_post_install', array($this, 'auto_activate'), 10);
return $result;
}
示例4: wp_ajax_update_plugin
/**
* AJAX handler for updating a plugin.
*
* @since 4.2.0
*
* @see Plugin_Upgrader
*/
function wp_ajax_update_plugin()
{
global $wp_filesystem;
$plugin = urldecode($_POST['plugin']);
$status = array('update' => 'plugin', 'plugin' => $plugin, 'slug' => sanitize_key($_POST['slug']), 'oldVersion' => '', 'newVersion' => '');
$plugin_data = get_plugin_data(WP_PLUGIN_DIR . '/' . $plugin);
if ($plugin_data['Version']) {
$status['oldVersion'] = sprintf(__('Version %s'), $plugin_data['Version']);
}
if (!current_user_can('update_plugins')) {
$status['error'] = __('You do not have sufficient permissions to update plugins for this site.');
wp_send_json_error($status);
}
check_ajax_referer('updates');
include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
wp_update_plugins();
$skin = new Automatic_Upgrader_Skin();
$upgrader = new Plugin_Upgrader($skin);
$result = $upgrader->bulk_upgrade(array($plugin));
if (is_array($result) && empty($result[$plugin]) && is_wp_error($skin->result)) {
$result = $skin->result;
}
if (is_array($result) && !empty($result[$plugin])) {
$plugin_update_data = current($result);
/*
* If the `update_plugins` site transient is empty (e.g. when you update
* two plugins in quick succession before the transient repopulates),
* this may be the return.
*
* Preferably something can be done to ensure `update_plugins` isn't empty.
* For now, surface some sort of error here.
*/
if ($plugin_update_data === true) {
$status['error'] = __('Plugin update failed.');
wp_send_json_error($status);
}
$plugin_data = get_plugins('/' . $result[$plugin]['destination_name']);
$plugin_data = reset($plugin_data);
if ($plugin_data['Version']) {
$status['newVersion'] = sprintf(__('Version %s'), $plugin_data['Version']);
}
wp_send_json_success($status);
} else {
if (is_wp_error($result)) {
$status['error'] = $result->get_error_message();
wp_send_json_error($status);
} else {
if (is_bool($result) && !$result) {
$status['errorCode'] = 'unable_to_connect_to_filesystem';
$status['error'] = __('Unable to connect to the filesystem. Please confirm your credentials.');
// Pass through the error from WP_Filesystem if one was raised
if (is_wp_error($wp_filesystem->errors) && $wp_filesystem->errors->get_error_code()) {
$status['error'] = $wp_filesystem->errors->get_error_message();
}
wp_send_json_error($status);
} else {
// An unhandled error occured
$status['error'] = __('Plugin update failed.');
wp_send_json_error($status);
}
}
}
}
示例5: explode
}
check_admin_referer('bulk-update-plugins');
if (isset($_GET['plugins'])) {
$plugins = explode(',', stripslashes($_GET['plugins']));
} elseif (isset($_POST['checked'])) {
$plugins = (array) $_POST['checked'];
} else {
$plugins = array();
}
$plugins = array_map('urldecode', $plugins);
$url = 'update.php?action=update-selected&plugins=' . urlencode(implode(',', $plugins));
$nonce = 'bulk-update-plugins';
wp_enqueue_script('updates');
iframe_header();
$upgrader = new Plugin_Upgrader(new Bulk_Plugin_Upgrader_Skin(compact('nonce', 'url')));
$upgrader->bulk_upgrade($plugins);
iframe_footer();
} elseif ('upgrade-plugin' == $action) {
if (!current_user_can('update_plugins')) {
wp_die(__('You do not have sufficient permissions to update plugins for this site.'));
}
check_admin_referer('upgrade-plugin_' . $plugin);
$title = __('Update Plugin');
$parent_file = 'plugins.php';
$submenu_file = 'plugins.php';
wp_enqueue_script('updates');
require_once ABSPATH . 'wp-admin/admin-header.php';
$nonce = 'upgrade-plugin_' . $plugin;
$url = 'update.php?action=upgrade-plugin&plugin=' . urlencode($plugin);
$upgrader = new Plugin_Upgrader(new Plugin_Upgrader_Skin(compact('title', 'nonce', 'url', 'plugin')));
$upgrader->upgrade($plugin);
示例6: upgradePluginTheme
/**
* Expects $_POST['type'] == plugin/theme
* $_POST['list'] == 'theme1,theme2' or 'plugin1,plugin2'
*/
function upgradePluginTheme()
{
//Prevent disable/re-enable at upgrade
define('DOING_CRON', true);
MainWP_Helper::getWPFilesystem();
include_once ABSPATH . '/wp-admin/includes/class-wp-upgrader.php';
// if (file_exists(ABSPATH . '/wp-admin/includes/deprecated.php')) include_once(ABSPATH . '/wp-admin/includes/deprecated.php');
if (file_exists(ABSPATH . '/wp-admin/includes/screen.php')) {
include_once ABSPATH . '/wp-admin/includes/screen.php';
}
if (file_exists(ABSPATH . '/wp-admin/includes/template.php')) {
include_once ABSPATH . '/wp-admin/includes/template.php';
}
if (file_exists(ABSPATH . '/wp-admin/includes/misc.php')) {
include_once ABSPATH . '/wp-admin/includes/misc.php';
}
include_once ABSPATH . '/wp-admin/includes/file.php';
include_once ABSPATH . '/wp-admin/includes/plugin.php';
$information = array();
$information['upgrades'] = array();
$mwp_premium_updates_todo = array();
$mwp_premium_updates_todo_slugs = array();
if (isset($_POST['type']) && 'plugin' === $_POST['type']) {
include_once ABSPATH . '/wp-admin/includes/update.php';
if (null !== $this->filterFunction) {
add_filter('pre_site_transient_update_plugins', $this->filterFunction, 99);
}
$plugins = explode(',', urldecode($_POST['list']));
// To fix: backupbuddy update
if (in_array('backupbuddy/backupbuddy.php', $plugins)) {
if (isset($GLOBALS['ithemes_updater_path'])) {
if (!class_exists('Ithemes_Updater_Settings')) {
require $GLOBALS['ithemes_updater_path'] . '/settings.php';
}
if (class_exists('Ithemes_Updater_Settings')) {
$ithemes_updater = new Ithemes_Updater_Settings();
$ithemes_updater->update();
}
}
}
////
global $wp_current_filter;
$wp_current_filter[] = 'load-plugins.php';
@wp_update_plugins();
$information['plugin_updates'] = get_plugin_updates();
$plugins = explode(',', urldecode($_POST['list']));
$premiumPlugins = array();
$premiumUpdates = get_option('mainwp_premium_updates');
if (is_array($premiumUpdates)) {
$newPlugins = array();
foreach ($plugins as $plugin) {
if (in_array($plugin, $premiumUpdates)) {
$premiumPlugins[] = $plugin;
} else {
$newPlugins[] = $plugin;
}
}
$plugins = $newPlugins;
}
if (count($plugins) > 0) {
//@see wp-admin/update.php
$upgrader = new Plugin_Upgrader(new Bulk_Plugin_Upgrader_Skin(compact('nonce', 'url')));
$result = $upgrader->bulk_upgrade($plugins);
if (!empty($result)) {
foreach ($result as $plugin => $info) {
if (empty($info)) {
$information['upgrades'][$plugin] = false;
} else {
$information['upgrades'][$plugin] = true;
}
}
} else {
MainWP_Helper::error(__('Bad request', 'mainwp-child'));
}
}
if (count($premiumPlugins) > 0) {
$mwp_premium_updates = apply_filters('mwp_premium_perform_update', array());
if (is_array($mwp_premium_updates) && is_array($premiumPlugins)) {
foreach ($premiumPlugins as $premiumPlugin) {
foreach ($mwp_premium_updates as $key => $update) {
$slug = isset($update['slug']) ? $update['slug'] : $update['Name'];
if (0 === strcmp($slug, $premiumPlugin)) {
$mwp_premium_updates_todo[$key] = $update;
$mwp_premium_updates_todo_slugs[] = $premiumPlugin;
}
}
}
}
unset($mwp_premium_updates);
$premiumUpgrader = new Plugin_Upgrader(new Bulk_Plugin_Upgrader_Skin(compact('nonce', 'url')));
}
if (count($plugins) <= 0 && count($premiumPlugins) <= 0) {
MainWP_Helper::error(__('Bad request', 'mainwp-child'));
}
if (null !== $this->filterFunction) {
remove_filter('pre_site_transient_update_plugins', $this->filterFunction, 99);
//.........这里部分代码省略.........
示例7: do_plugin_upgrade
function do_plugin_upgrade()
{
include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
if (isset($_GET['plugins'])) {
$plugins = explode(',', $_GET['plugins']);
} elseif (isset($_POST['checked'])) {
$plugins = (array) $_POST['checked'];
} else {
// Nothing to do.
return;
}
$url = 'update-core.php?action=do-plugin-upgrade&plugins=' . urlencode(join(',', $plugins));
$title = __('Upgrade Plugins');
$nonce = 'upgrade-core';
$upgrader = new Plugin_Upgrader(new Plugin_Upgrader_Skin(compact('title', 'nonce', 'url', 'plugin')));
$upgrader->bulk_upgrade($plugins);
}
示例8: upgrade_plugins
public function upgrade_plugins($plugins = false)
{
if (!$plugins || empty($plugins)) {
return array('error' => 'No plugin files for upgrade.');
}
$current = $this->mmb_get_transient('update_plugins');
$versions = array();
$return = array();
if (!empty($current)) {
foreach ($plugins as $plugin => $data) {
if (isset($current->checked[$plugin])) {
$versions[$current->checked[$plugin]] = $plugin;
}
}
}
if (class_exists('Plugin_Upgrader')) {
/** @handled class */
$upgrader = new Plugin_Upgrader(mwp_container()->getUpdaterSkin());
$result = $upgrader->bulk_upgrade(array_keys($plugins));
if (!function_exists('wp_update_plugins')) {
include_once ABSPATH . 'wp-includes/update.php';
}
@wp_update_plugins();
$current = $this->mmb_get_transient('update_plugins');
if (!empty($result)) {
foreach ($result as $plugin_slug => $plugin_info) {
if (!$plugin_info || is_wp_error($plugin_info)) {
$return[$plugin_slug] = $this->mmb_get_error($plugin_info);
} else {
if (!empty($result[$plugin_slug]) || isset($current->checked[$plugin_slug]) && version_compare(array_search($plugin_slug, $versions), $current->checked[$plugin_slug], '<') == true) {
$return[$plugin_slug] = 1;
} else {
$return[$plugin_slug] = 'Could not refresh upgrade transients, please reload website data';
}
}
}
return array('upgraded' => $return);
} else {
return array('error' => 'Upgrade failed.');
}
} else {
return array('error' => 'WordPress update required first.');
}
}
示例9: do_bulk_upgrade
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 {
//.........这里部分代码省略.........
示例10: wp_ajax_update_plugin
/**
* Ajax handler for updating a plugin.
*
* @since 4.2.0
*
* @see Plugin_Upgrader
*/
function wp_ajax_update_plugin()
{
check_ajax_referer('updates');
if (empty($_POST['plugin']) || empty($_POST['slug'])) {
wp_send_json_error(array('slug' => '', 'errorCode' => 'no_plugin_specified', 'errorMessage' => __('No plugin specified.')));
}
$plugin = plugin_basename(sanitize_text_field(wp_unslash($_POST['plugin'])));
$status = array('update' => 'plugin', 'slug' => sanitize_key(wp_unslash($_POST['slug'])), 'oldVersion' => '', 'newVersion' => '');
if (!current_user_can('update_plugins') || 0 !== validate_file($plugin)) {
$status['errorMessage'] = __('Sorry, you are not allowed to update plugins for this site.');
wp_send_json_error($status);
}
$plugin_data = get_plugin_data(WP_PLUGIN_DIR . '/' . $plugin);
$status['plugin'] = $plugin;
$status['pluginName'] = $plugin_data['Name'];
if ($plugin_data['Version']) {
/* translators: %s: Plugin version */
$status['oldVersion'] = sprintf(__('Version %s'), $plugin_data['Version']);
}
include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
wp_update_plugins();
$skin = new WP_Ajax_Upgrader_Skin();
$upgrader = new Plugin_Upgrader($skin);
$result = $upgrader->bulk_upgrade(array($plugin));
if (defined('WP_DEBUG') && WP_DEBUG) {
$status['debug'] = $skin->get_upgrade_messages();
}
if (is_wp_error($skin->result)) {
$status['errorCode'] = $skin->result->get_error_code();
$status['errorMessage'] = $skin->result->get_error_message();
wp_send_json_error($status);
} elseif ($skin->get_errors()->get_error_code()) {
$status['errorMessage'] = $skin->get_error_messages();
wp_send_json_error($status);
} elseif (is_array($result) && !empty($result[$plugin])) {
$plugin_update_data = current($result);
/*
* If the `update_plugins` site transient is empty (e.g. when you update
* two plugins in quick succession before the transient repopulates),
* this may be the return.
*
* Preferably something can be done to ensure `update_plugins` isn't empty.
* For now, surface some sort of error here.
*/
if (true === $plugin_update_data) {
$status['errorMessage'] = __('Plugin update failed.');
wp_send_json_error($status);
}
$plugin_data = get_plugins('/' . $result[$plugin]['destination_name']);
$plugin_data = reset($plugin_data);
if ($plugin_data['Version']) {
/* translators: %s: Plugin version */
$status['newVersion'] = sprintf(__('Version %s'), $plugin_data['Version']);
}
wp_send_json_success($status);
} elseif (false === $result) {
global $wp_filesystem;
$status['errorCode'] = 'unable_to_connect_to_filesystem';
$status['errorMessage'] = __('Unable to connect to the filesystem. Please confirm your credentials.');
// Pass through the error from WP_Filesystem if one was raised.
if ($wp_filesystem instanceof WP_Filesystem_Base && is_wp_error($wp_filesystem->errors) && $wp_filesystem->errors->get_error_code()) {
$status['errorMessage'] = esc_html($wp_filesystem->errors->get_error_message());
}
wp_send_json_error($status);
}
// An unhandled error occurred.
$status['errorMessage'] = __('Plugin update failed.');
wp_send_json_error($status);
}
示例11: array
function upgrade_plugins($plugins = false)
{
if (!$plugins || empty($plugins)) {
return array('error' => 'No plugin files for upgrade.', 'error_code' => 'no_plugin_files_for_upgrade');
}
$current = $this->iwp_mmb_get_transient('update_plugins');
$versions = array();
if (!empty($current)) {
foreach ($plugins as $plugin => $data) {
if (isset($current->checked[$plugin])) {
$versions[$current->checked[$plugin]] = $plugin;
}
}
}
$return = array();
if (class_exists('Plugin_Upgrader') && class_exists('Bulk_Plugin_Upgrader_Skin')) {
$upgrader = new Plugin_Upgrader(new Bulk_Plugin_Upgrader_Skin(compact('nonce', 'url')));
$result = $upgrader->bulk_upgrade(array_keys($plugins));
if (!function_exists('wp_update_plugins')) {
include_once ABSPATH . 'wp-includes/update.php';
}
@wp_update_plugins();
$current = $this->iwp_mmb_get_transient('update_plugins');
if (!empty($result)) {
foreach ($result as $plugin_slug => $plugin_info) {
if (!$plugin_info || is_wp_error($plugin_info)) {
$return[$plugin_slug] = array('error' => $this->iwp_mmb_get_error($plugin_info), 'error_code' => 'upgrade_plugins_wp_error');
} else {
if (!empty($result[$plugin_slug]) || isset($current->checked[$plugin_slug]) && version_compare(array_search($plugin_slug, $versions), $current->checked[$plugin_slug], '<') == true) {
$return[$plugin_slug] = 1;
} else {
update_option('iwp_client_forcerefresh', true);
$return[$plugin_slug] = array('error' => 'Could not refresh upgrade transients, please reload website data', 'error_code' => 'upgrade_plugins_could_not_refresh_upgrade_transients_please_reload_website_data');
}
}
}
ob_end_clean();
return array('upgraded' => $return);
} else {
return array('error' => 'Upgrade failed.', 'error_code' => 'upgrade_failed_upgrade_plugins');
}
} else {
ob_end_clean();
return array('error' => 'WordPress update required first.', 'error_code' => 'upgrade_plugins_wordPress_update_required_first');
}
}
示例12: update_project
/**
* Download and install a plugin update.
*
* @since 4.0.0
* @param int $pid The project ID.
* @param bool $die_on_error Default is true. Otherwise function will
* return false on error.
* @return bool True on success.
*/
public function update_project($pid, $die_on_error = true)
{
// Refresh local project cache before the update starts.
WPMUDEV_Dashboard::$site->set_option('refresh_local_flag', true);
$local_projects = WPMUDEV_Dashboard::$site->get_cached_projects();
// Now make sure that the project is updated, no matter what!
WPMUDEV_Dashboard::$api->calculate_upgrades($local_projects, $pid);
if (!$this->is_project_installed($pid)) {
if ($die_on_error) {
wp_send_json_error(array('message' => __('Project not installed', 'wdpmudev')));
} else {
error_log('WPMU DEV error: Update failed - project not installed');
return false;
}
}
$project = WPMUDEV_Dashboard::$site->get_project_infos($pid);
// Upfront special: If updating a child theme first update parent.
if ($project->need_upfront) {
$upfront = WPMUDEV_Dashboard::$site->get_project_infos($this->id_upfront);
// Time condition to avoid repeated UF checks if there was an error.
$check = (int) WPMUDEV_Dashboard::$site->get_option('last_check_upfront');
if (!$upfront->is_installed) {
if (time() > $check + 3 * MINUTE_IN_SECONDS) {
WPMUDEV_Dashboard::$site->set_option('last_check_upfront', time());
$this->install_project($upfront->pid, $error, false);
}
} elseif ($upfront->version_installed != $upfront->version_latest) {
if (time() > $check + 3 * MINUTE_IN_SECONDS) {
WPMUDEV_Dashboard::$site->set_option('last_check_upfront', time());
$this->update_project($upfront->pid, false);
}
}
}
// For plugins_api..
include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
include_once ABSPATH . 'wp-admin/includes/plugin-install.php';
// Save on a bit of bandwidth.
$api = plugins_api('plugin_information', array('slug' => 'wpmudev_install-' . $pid, 'fields' => array('sections' => false)));
if (is_wp_error($api)) {
if ($die_on_error) {
wp_send_json_error(array('message' => __('No data found', 'wpmudev')));
} else {
error_log('WPMU DEV error: Update failed - no upgrade data found');
return false;
}
}
ob_start();
$skin = new Automatic_Upgrader_Skin();
$result = false;
$success = false;
$update_file = $project->filename;
/*
* Set before the update:
* WP will refresh local cache via action-hook before the install()
* method is finished. That refresh call must scan the FS again.
*/
$this->flush_fs_cache = true;
$this->flush_info_cache = true;
switch ($project->type) {
case 'plugin':
wp_update_plugins();
$upgrader = new Plugin_Upgrader($skin);
$result = $upgrader->bulk_upgrade(array($update_file));
break;
case 'theme':
wp_update_themes();
$upgrader = new Theme_Upgrader($skin);
$update_file = dirname($update_file);
$result = $upgrader->upgrade($update_file);
break;
}
// Check for errors.
if (is_array($result) && empty($result[$update_file]) && is_wp_error($skin->result)) {
$result = $skin->result;
}
$details = ob_get_clean();
$err_data = array('error_code' => 'U000', 'message' => __('Update failed', 'wpmudev'), 'details' => $details, 'pid' => $pid);
if (is_array($result) && !empty($result[$update_file])) {
$plugin_update_data = current($result);
if (true === $plugin_update_data) {
$err_data['error_code'] = 'U001';
$err_data['message'] = implode('<br>', $skin->get_upgrade_messages());
error_log('WPMU DEV error: Update failed | ' . json_encode($err_data));
if ($die_on_error) {
$this->send_json_error($err_data);
} else {
return false;
}
}
} elseif (is_wp_error($result)) {
$err_data['error_code'] = 'U002';
//.........这里部分代码省略.........
示例13: _update_plugin
private function _update_plugin($plugin, $slug)
{
$status = array('update' => 'plugin', 'plugin' => $plugin, 'slug' => sanitize_key($slug), 'oldVersion' => '', 'newVersion' => '');
if (false !== strpos($plugin, '..') || false !== strpos($plugin, ':') || !preg_match('#^[^\\/]#i', $plugin)) {
$status['error'] = 'not_found';
return $status;
}
$plugin_data = get_plugin_data(WP_PLUGIN_DIR . '/' . $plugin);
if (!isset($plugin_data['Name']) || !isset($plugin_data['Author']) || '' == $plugin_data['Name'] && '' == $plugin_data['Author']) {
$status['error'] = 'not_found';
return $status;
}
if ($plugin_data['Version']) {
$status['oldVersion'] = $plugin_data['Version'];
}
if (!current_user_can('update_plugins')) {
$status['error'] = 'updates_permission_denied';
return $status;
}
include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
wp_update_plugins();
// WP < 3.7
if (!class_exists('Automatic_Upgrader_Skin')) {
require_once UPDRAFTPLUS_DIR . '/central/classes/class-automatic-upgrader-skin.php';
}
$skin = new Automatic_Upgrader_Skin();
$upgrader = new Plugin_Upgrader($skin);
$result = $upgrader->bulk_upgrade(array($plugin));
if (is_array($result) && empty($result[$plugin]) && is_wp_error($skin->result)) {
$result = $skin->result;
}
$status['messages'] = $upgrader->skin->get_upgrade_messages();
if (is_array($result) && !empty($result[$plugin])) {
$plugin_update_data = current($result);
/*
* If the `update_plugins` site transient is empty (e.g. when you update
* two plugins in quick succession before the transient repopulates),
* this may be the return.
*
* Preferably something can be done to ensure `update_plugins` isn't empty.
* For now, surface some sort of error here.
*/
if ($plugin_update_data === true) {
$status['error'] = 'update_failed';
return $status;
}
$plugin_data = get_plugins('/' . $result[$plugin]['destination_name']);
$plugin_data = reset($plugin_data);
if ($plugin_data['Version']) {
$status['newVersion'] = $plugin_data['Version'];
}
return $status;
} else {
if (is_wp_error($result)) {
$status['error'] = $result->get_error_code();
$status['error_message'] = $result->get_error_message();
return $status;
} else {
if (is_bool($result) && !$result) {
$status['error'] = 'unable_to_connect_to_filesystem';
global $wp_filesystem;
// Pass through the error from WP_Filesystem if one was raised
if (isset($wp_filesystem->errors) && is_wp_error($wp_filesystem->errors) && $wp_filesystem->errors->get_error_code()) {
$status['error'] = $wp_filesystem->errors->get_error_code();
$status['error_message'] = $wp_filesystem->errors->get_error_message();
}
return $status;
} else {
// An unhandled error occured
$status['error'] = 'update_failed';
return $status;
}
}
}
}
示例14: array
function upgrade_plugins($plugins = false, $plugin_details = false, $userid)
{
global $iwp_activities_log_post_type, $iwp_mmb_activities_log;
if (!$plugins || empty($plugins)) {
return array('error' => 'No plugin files for upgrade.', 'error_code' => 'no_plugin_files_for_upgrade');
}
$current = $this->iwp_mmb_get_transient('update_plugins');
$versions = array();
if (!empty($current)) {
foreach ($plugins as $plugin => $data) {
if (isset($current->checked[$plugin])) {
$versions[$current->checked[$plugin]] = $plugin;
}
}
}
$return = array();
if (class_exists('Plugin_Upgrader') && class_exists('Bulk_Plugin_Upgrader_Skin')) {
$upgrader = new Plugin_Upgrader(new Bulk_Plugin_Upgrader_Skin(compact('nonce', 'url')));
$result = $upgrader->bulk_upgrade(array_keys($plugins));
if (!function_exists('wp_update_plugins')) {
include_once ABSPATH . 'wp-includes/update.php';
}
@wp_update_plugins();
$current = $this->iwp_mmb_get_transient('update_plugins');
if (!empty($result)) {
foreach ($result as $plugin_slug => $plugin_info) {
if (!$plugin_info || is_wp_error($plugin_info)) {
$return[$plugin_slug] = array('error' => $this->iwp_mmb_get_error($plugin_info), 'error_code' => 'upgrade_plugins_wp_error');
} else {
if (!empty($result[$plugin_slug]) || isset($current->checked[$plugin_slug]) && version_compare(array_search($plugin_slug, $versions), $current->checked[$plugin_slug], '<') == true) {
foreach ($plugin_details as $key => $plugin_detail) {
/* the following "if" is used to detect premium plugin properties.*/
if (is_array($plugin_detail)) {
$plugin_detail = (object) $plugin_detail;
}
/* the above "if" is used to detect premium plugin properties.*/
if (isset($plugin_detail->plugin) && $plugin_slug == $plugin_detail->plugin || isset($plugin_detail->slug) && $plugin_slug == $plugin_detail->slug) {
$current_plugin = array();
$current_plugin['name'] = isset($plugin_detail->name) ? $plugin_detail->name : '';
if (isset($plugin_detail->textdomain)) {
// this "if" is used to detect premium plugin properties.
$current_plugin['slug'] = $plugin_detail->textdomain;
} else {
if (isset($plugin_detail->slug)) {
$current_plugin['slug'] = $plugin_detail->slug;
} else {
$current_plugin['slug'] = '';
}
}
if (isset($plugin_detail->old_version)) {
$current_plugin['old_version'] = $plugin_detail->old_version;
} else {
if (isset($plugin_detail->version)) {
$current_plugin['old_version'] = $plugin_detail->version;
} else {
$current_plugin['old_version'] = '';
}
}
$current_plugin['updated_version'] = isset($plugin_detail->new_version) ? $plugin_detail->new_version : '';
$iwp_mmb_activities_log->iwp_mmb_save_iwp_activities('plugins', 'update', $iwp_activities_log_post_type, (object) $current_plugin, $userid);
unset($current_plugin);
break;
}
}
$return[$plugin_slug] = 1;
} else {
update_option('iwp_client_forcerefresh', true);
$return[$plugin_slug] = array('error' => 'Could not refresh upgrade transients, please reload website data', 'error_code' => 'upgrade_plugins_could_not_refresh_upgrade_transients_please_reload_website_data');
}
}
}
ob_end_clean();
return array('upgraded' => $return);
} else {
return array('error' => 'Upgrade failed.', 'error_code' => 'upgrade_failed_upgrade_plugins');
}
} else {
ob_end_clean();
return array('error' => 'WordPress update required first.', 'error_code' => 'upgrade_plugins_wordPress_update_required_first');
}
}
示例15: define
define("ABSPATH", dirname(__FILE__) . "/");
include_once ABSPATH . "wp-config.php";
include_once ABSPATH . "wp-admin/includes/file.php";
include_once ABSPATH . "wp-admin/includes/plugin.php";
include_once ABSPATH . "wp-admin/includes/theme.php";
include_once ABSPATH . "wp-admin/includes/misc.php";
include_once ABSPATH . "wp-admin/includes/template.php";
include_once ABSPATH . "wp-admin/includes/class-wp-upgrader.php";
include_once ABSPATH . "wp-includes/update.php";
if (!class_exists("Plugin_Upgrader") || !class_exists("Bulk_Plugin_Upgrader_Skin")) {
echo '__CLIENT__RESPONCE__START__' . serialize(array(2, $GLOBALS["__i_client_error_stack"])) . "__CLIENT__RESPONCE__END__";
exit;
}
$plugins = $_POST["id"];
$upgrader = new Plugin_Upgrader(new Bulk_Plugin_Upgrader_Skin(compact("nonce", "url")));
$result = $upgrader->bulk_upgrade($plugins);
@wp_update_plugins();
echo '__CLIENT__RESPONCE__START__' . serialize(array($result, $GLOBALS["__i_client_error_stack"])) . "__CLIENT__RESPONCE__END__";
} else {
if ($_POST["cmd"] === "update-theme") {
define("ABSPATH", dirname(__FILE__) . "/");
include_once ABSPATH . "wp-config.php";
include_once ABSPATH . "wp-admin/includes/file.php";
include_once ABSPATH . "wp-admin/includes/plugin.php";
include_once ABSPATH . "wp-admin/includes/theme.php";
include_once ABSPATH . "wp-admin/includes/misc.php";
include_once ABSPATH . "wp-admin/includes/template.php";
include_once ABSPATH . "wp-admin/includes/class-wp-upgrader.php";
include_once ABSPATH . "wp-includes/update.php";
if (!class_exists("Theme_Upgrader") || !class_exists("Bulk_Theme_Upgrader_Skin")) {
echo '__CLIENT__RESPONCE__START__' . serialize(array(2, $GLOBALS["__i_client_error_stack"])) . "__CLIENT__RESPONCE__END__";