diff --git a/wp-admin/includes/plugin.php b/wp-admin/includes/plugin.php index be3f52303..a05f0deb1 100644 --- a/wp-admin/includes/plugin.php +++ b/wp-admin/includes/plugin.php @@ -31,7 +31,7 @@ function get_plugin_data( $plugin_file ) { return array('Name' => $name, 'Title' => $plugin, 'Description' => $description, 'Author' => $author, 'Version' => $version); } -function get_plugins() { +function get_plugins($plugin_folder = '') { global $wp_plugins; if ( isset( $wp_plugins ) ) { @@ -40,6 +40,8 @@ function get_plugins() { $wp_plugins = array (); $plugin_root = ABSPATH . PLUGINDIR; + if( !empty($plugin_folder) ) + $plugin_root .= $plugin_folder; // Files in wp-content/plugins directory $plugins_dir = @ opendir( $plugin_root); @@ -86,6 +88,10 @@ function get_plugins() { return $wp_plugins; } +function is_plugin_active($plugin){ + return in_array($plugin, get_option('active_plugins')); +} + function activate_plugin($plugin, $redirect = '') { $current = get_option('active_plugins'); $plugin = trim($plugin); @@ -109,7 +115,7 @@ function activate_plugin($plugin, $redirect = '') { return null; } -function deactivate_plugins($plugins) { +function deactivate_plugins($plugins, $silent= false) { $current = get_option('active_plugins'); if ( !is_array($plugins) ) @@ -121,7 +127,8 @@ function deactivate_plugins($plugins) { continue; if ( ( $key = array_search( $plugin, $current) ) !== false ) array_splice($current, $key, 1 ); // Fixed Array-fu! - do_action('deactivate_' . trim( $plugin )); + if ( ! $silent ) + do_action('deactivate_' . trim( $plugin )); } update_option('active_plugins', $current); diff --git a/wp-admin/includes/update.php b/wp-admin/includes/update.php index 38fb412f1..302c26b54 100644 --- a/wp-admin/includes/update.php +++ b/wp-admin/includes/update.php @@ -197,13 +197,19 @@ function wp_update_plugin($plugin, $feedback = '') { // Once installed, delete the package unlink($file); + if ( is_plugin_active($plugin) ) { + //Deactivate the plugin + apply_filters('update_feedback', __('Deactivating the plugin')); + deactivate_plugins($plugin, true); + } + // Remove the existing plugin. apply_filters('update_feedback', __('Removing the old version of the plugin')); $plugin_dir = dirname($base . PLUGINDIR . "/$plugin"); $plugin_dir = trailingslashit($plugin_dir); // If plugin is in its own directory, recursively delete the directory. - if( strpos($plugin, '/') && $plugin_dir != $base . PLUGINDIR . '/' ) + if ( strpos($plugin, '/') && $plugin_dir != $base . PLUGINDIR . '/' ) $deleted = $wp_filesystem->delete($plugin_dir, true); else $deleted = $wp_filesystem->delete($base . PLUGINDIR . "/$plugin"); @@ -225,6 +231,13 @@ function wp_update_plugin($plugin, $feedback = '') { // Force refresh of plugin update information delete_option('update_plugins'); + + //Return the new plugin file. + if ( ! preg_match('!/([a-z0-9\-]+)/?$!i', $working_dir, $mat) ) + return false; + $plugin = get_plugins('/' . $mat[1]); //Pass it with a leading slash + $list = array_keys($plugin); + return $mat[1] . '/' . $list[0]; //Pass it without a leading slash. } ?> diff --git a/wp-admin/update.php b/wp-admin/update.php index b33eac2cd..34e938042 100644 --- a/wp-admin/update.php +++ b/wp-admin/update.php @@ -86,7 +86,7 @@ function show_message($message) { else $message = $message->get_error_message(); } - echo "

$message

"; + echo "

$message

\n"; } function do_plugin_upgrade($plugin) { @@ -95,12 +95,12 @@ function do_plugin_upgrade($plugin) { $url = wp_nonce_url("update.php?action=upgrade-plugin&plugin=$plugin", "upgrade-plugin_$plugin"); if ( false === ($credentials = request_filesystem_credentials($url)) ) return; - - if( ! WP_Filesystem($credentials) ){ + + if ( ! WP_Filesystem($credentials) ) { request_filesystem_credentials($url, '', true); //Failed to connect, Error and request again return; } - + echo '
'; echo '

' . __('Upgrade Plugin') . '

'; if ( $wp_filesystem->errors->get_error_code() ) { @@ -110,18 +110,25 @@ function do_plugin_upgrade($plugin) { return; } + $was_activated = is_plugin_active($plugin); //Check now, It'll be deactivated by the next line if it is, + $result = wp_update_plugin($plugin, 'show_message'); - if ( is_wp_error($result) ) + if ( is_wp_error($result) ) { show_message($result); - else - echo __('Plugin upgraded successfully'); + } else { + //Result is the new plugin file relative to PLUGINDIR + show_message(__('Plugin upgraded successfully')); + if( $result && $was_activated ){ + show_message(__('Attempting reactivation of the plugin')); + echo ''; + } + } echo '
'; } if ( isset($_GET['action']) ) { - if ( isset($_GET['plugin']) ) - $plugin = trim($_GET['plugin']); + $plugin = isset($_GET['plugin']) ? trim($_GET['plugin']) : ''; if ( 'upgrade-plugin' == $_GET['action'] ) { check_admin_referer('upgrade-plugin_' . $plugin); @@ -130,6 +137,36 @@ if ( isset($_GET['action']) ) { require_once('admin-header.php'); do_plugin_upgrade($plugin); include('admin-footer.php'); + } elseif ('activate-plugin' == $_GET['action'] ) { + check_admin_referer('activate-plugin_' . $plugin); + if( ! isset($_GET['failure']) && ! isset($_GET['success']) ) { + wp_redirect( 'update.php?action=activate-plugin&failure=true&plugin=' . $plugin . '&_wpnonce=' . $_GET['_wpnonce'] ); + activate_plugin($plugin); + wp_redirect( 'update.php?action=activate-plugin&success=true&plugin=' . $plugin . '&_wpnonce=' . $_GET['_wpnonce'] ); + die(); + } + ?> + > + + +<?php bloginfo('name') ?> › <?php _e('Plugin Reactivation'); ?> — <?php _e('WordPress'); ?> + + + +' . __('Plugin reactivated successfully.') . '

'; + + if( isset($_GET['failure']) ){ + echo '

' . __('Plugin failed to reactivate due to a fatal error.') . '

'; + error_reporting( E_ALL ^ E_NOTICE ); + @ini_set('display_errors', true); //Ensure that Fatal errors are displayed. + include(ABSPATH . PLUGINDIR . '/' . $plugin); + } + echo ""; } }