WordPress.org

Make WordPress Core

Ticket #6262: 6262.2.diff

File 6262.2.diff, 5.9 KB (added by DD32, 10 years ago)
  • wp-admin/includes/plugin.php

     
    3131        return array('Name' => $name, 'Title' => $plugin, 'Description' => $description, 'Author' => $author, 'Version' => $version);
    3232}
    3333
    34 function get_plugins() {
     34function get_plugins($plugin_folder = '') {
    3535        global $wp_plugins;
    3636
    3737        if ( isset( $wp_plugins ) ) {
     
    4040
    4141        $wp_plugins = array ();
    4242        $plugin_root = ABSPATH . PLUGINDIR;
     43        if( !empty($plugin_folder) )
     44                $plugin_root .= $plugin_folder;
    4345
    4446        // Files in wp-content/plugins directory
    4547        $plugins_dir = @ opendir( $plugin_root);
     
    8688        return $wp_plugins;
    8789}
    8890
     91function is_plugin_active($plugin){
     92        return in_array($plugin, get_option('active_plugins'));
     93}
     94
    8995function activate_plugin($plugin, $redirect = '') {
    9096                $current = get_option('active_plugins');
    9197                $plugin = trim($plugin);
     
    109115                return null;
    110116}
    111117
    112 function deactivate_plugins($plugins) {
     118function deactivate_plugins($plugins, $silent= false) {
    113119        $current = get_option('active_plugins');
    114120
    115121        if ( !is_array($plugins) )
     
    121127                        continue;
    122128                if ( ( $key = array_search( $plugin, $current) ) !== false )
    123129                        array_splice($current, $key, 1 ); // Fixed Array-fu!
    124                 do_action('deactivate_' . trim( $plugin ));
     130                if ( ! $silent )
     131                        do_action('deactivate_' . trim( $plugin ));
    125132        }
    126133
    127134        update_option('active_plugins', $current);
  • wp-admin/includes/update.php

     
    197197        // Once installed, delete the package
    198198        unlink($file);
    199199
     200        if( is_plugin_active($plugin) ){
     201                //Deactivate the plugin
     202                apply_filters('update_feedback', __('Deactivating the plugin'));
     203                deactivate_plugins($plugin, true);
     204        }
     205
    200206        // Remove the existing plugin.
    201207        apply_filters('update_feedback', __('Removing the old version of the plugin'));
    202208        $plugin_dir = dirname($base . PLUGINDIR . "/$plugin");
     
    225231
    226232        // Force refresh of plugin update information
    227233        delete_option('update_plugins');
     234       
     235        //Return the new plugin file.
     236        if( ! preg_match('!/([a-z0-9\-]+)/?$!i', $working_dir, $mat) )
     237                return false;
     238        $plugin = get_plugins('/' . $mat[1]); //Pass it with a leading slash
     239        $list = array_keys($plugin);
     240        return $mat[1] . '/' . $list[0]; //Pass it without a leading slash.
    228241}
    229242
    230243?>
  • wp-admin/update.php

     
    8686                else
    8787                        $message = $message->get_error_message();
    8888        }
    89         echo "<p>$message</p>";
     89        echo "<p>$message</p>\n";
    9090}
    9191
    9292function do_plugin_upgrade($plugin) {
     
    9595        $url = wp_nonce_url("update.php?action=upgrade-plugin&plugin=$plugin", "upgrade-plugin_$plugin");
    9696        if ( false === ($credentials = request_filesystem_credentials($url)) )
    9797                return;
    98                
     98
    9999        if( ! WP_Filesystem($credentials) ){
    100100                request_filesystem_credentials($url, '', true); //Failed to connect, Error and request again
    101101                return;
    102102        }
    103                
     103
    104104        echo '<div class="wrap">';
    105105        echo '<h2>' . __('Upgrade Plugin') . '</h2>';
    106106        if ( $wp_filesystem->errors->get_error_code() ) {
     
    110110                return;
    111111        }
    112112
     113        $was_activated = is_plugin_active($plugin); //Check now, It'll be deactivated by the next line if it is,
     114
    113115        $result = wp_update_plugin($plugin, 'show_message');
    114116
    115         if ( is_wp_error($result) )
     117        if ( is_wp_error($result) ){
    116118                show_message($result);
    117         else
    118                 echo __('Plugin upgraded successfully');
     119        } else {
     120                //Result is the new plugin file relative to PLUGINDIR
     121                show_message(__('Plugin upgraded successfully'));       
     122                if( $result && $was_activated ){
     123                        show_message(__('Attempting reactivation of the plugin'));
     124                        echo '<iframe style="border:0" width="100%" height="170px" src="' . wp_nonce_url('update.php?action=activate-plugin&plugin=' . $result, 'activate-plugin_' . $result) .'"></iframe>';
     125                }
     126        }
    119127        echo '</div>';
    120128}
    121129
    122130if ( isset($_GET['action']) ) {
    123         if ( isset($_GET['plugin']) )
    124                 $plugin = trim($_GET['plugin']);
     131        $plugin = isset($_GET['plugin']) ? trim($_GET['plugin']) : '';
    125132
    126133        if ( 'upgrade-plugin' == $_GET['action'] ) {
    127134                check_admin_referer('upgrade-plugin_' . $plugin);
     
    130137                require_once('admin-header.php');
    131138                do_plugin_upgrade($plugin);
    132139                include('admin-footer.php');
     140        } elseif ('activate-plugin' == $_GET['action'] ) {
     141                check_admin_referer('activate-plugin_' . $plugin);
     142                if( ! isset($_GET['failure']) && ! isset($_GET['success']) ) {
     143                        wp_redirect( 'update.php?action=activate-plugin&failure=true&plugin=' . $plugin . '&_wpnonce=' . $_GET['_wpnonce'] );
     144                        activate_plugin($plugin);
     145                        wp_redirect( 'update.php?action=activate-plugin&success=true&plugin=' . $plugin . '&_wpnonce=' . $_GET['_wpnonce'] );
     146                        die();
     147                }
     148                        ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     149<html xmlns="http://www.w3.org/1999/xhtml" <?php do_action('admin_xml_ns'); ?> <?php language_attributes(); ?>>
     150<head>
     151<meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php echo get_option('blog_charset'); ?>" />
     152<title><?php bloginfo('name') ?> &rsaquo; <?php _e('Plugin Reactivation'); ?> &#8212; <?php _e('WordPress'); ?></title>
     153<?php
     154wp_admin_css( 'css/global' );
     155wp_admin_css( 'css/colors' );
     156?>
     157</head>
     158<body>
     159<?php
     160                if( isset($_GET['success']) )
     161                        echo '<p>' . __('Plugin reactivated successfully.') . '</p>';
     162
     163                if( isset($_GET['failure']) ){
     164                        echo '<p>' . __('Plugin failed to reactivate due to a fatal error.') . '</p>';
     165                        error_reporting( E_ALL ^ E_NOTICE );
     166                        @ini_set('display_errors', true); //Ensure that Fatal errors are displayed.
     167                        include(ABSPATH . PLUGINDIR . '/' . $plugin);
     168                }
     169                echo "</body></html>";
    133170        }
    134171}
    135172