WordPress.org

Make WordPress Core

Ticket #6262: 6262.diff

File 6262.diff, 5.6 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);
     
    109111                return null;
    110112}
    111113
    112 function deactivate_plugins($plugins) {
     114function deactivate_plugins($plugins, $silent= false) {
    113115        $current = get_option('active_plugins');
    114116
    115117        if ( !is_array($plugins) )
     
    120122                if( false === $item)
    121123                        continue;
    122124                array_splice($current, $item, 1 ); // Array-fu!
    123                 do_action('deactivate_' . trim( $plugin ));
     125                if ( ! $silent )
     126                        do_action('deactivate_' . trim( $plugin ));
    124127        }
    125128
    126129        update_option('active_plugins', $current);
  • wp-admin/includes/update.php

     
    191191        // Once installed, delete the package
    192192        unlink($file);
    193193
     194        //Deactivate the plugin
     195        apply_filters('deactivate_plugin', __('Deactivating the plugin'));
     196        deactivate_plugins($plugin, true);
     197
    194198        // Remove the existing plugin.
    195199        apply_filters('update_feedback', __('Removing the old version of the plugin'));
    196200        $plugin_dir = dirname($base . PLUGINDIR . "/$plugin");
     
    219223
    220224        // Force refresh of plugin update information
    221225        delete_option('update_plugins');
     226       
     227        //Return the new plugin file.
     228        if( ! preg_match('!/([a-z0-9\-]+)/?$!i', $working_dir, $mat) )
     229                return false;
     230        $plugin = get_plugins('/' . $mat[1]); //Pass it with a leading slash
     231        $list = array_keys($plugin);
     232        return $mat[1] . '/' . $list[0]; //Pass it without a leading slash.
    222233}
    223234
    224235?>
     236 No newline at end of file
  • wp-admin/update.php

     
    8282                else
    8383                        $message = $message->get_error_message();
    8484        }
    85         echo "<p>$message</p>";
     85        echo "<p>$message</p>\n";
    8686}
    8787
    8888function do_plugin_upgrade($plugin) {
     
    9191        $url = wp_nonce_url("update.php?action=upgrade-plugin&plugin=$plugin", "upgrade-plugin_$plugin");
    9292        if ( false === ($credentials = request_filesystem_credentials($url)) )
    9393                return;
    94                
     94
    9595        if( ! WP_Filesystem($credentials) ){
    9696                request_filesystem_credentials($url, '', true); //Failed to connect, Error and request again
    9797                return;
    9898        }
    99                
     99
    100100        echo '<div class="wrap">';
    101101        echo '<h2>' . __('Upgrade Plugin') . '</h2>';
    102102        if ( $wp_filesystem->errors->get_error_code() ) {
     
    106106                return;
    107107        }
    108108
     109        //Todo: is_plugin_active() wrapper?
     110        $was_activated = in_array($plugin, get_option('active_plugins'));
     111
    109112        $result = wp_update_plugin($plugin, 'show_message');
    110113
    111         if ( is_wp_error($result) )
     114        if ( is_wp_error($result) ){
    112115                show_message($result);
    113         else
    114                 echo __('Plugin upgraded successfully');
     116        } else {
     117                //Result is the new plugin file relative to PLUGINDIR
     118                show_message(__('Plugin upgraded successfully'));       
     119                if( $result && $was_activated ){
     120                        show_message(__('Attempting reactivation of the plugin'));
     121                        echo '<iframe style="border:0" width="100%" height="170px" src="' . wp_nonce_url('update.php?action=activate-plugin&plugin=' . $result, 'activate-plugin_' . $result) .'"></iframe>';
     122                }
     123        }
    115124        echo '</div>';
    116125}
    117126
    118127if ( isset($_GET['action']) ) {
    119         if ( isset($_GET['plugin']) )
    120                 $plugin = trim($_GET['plugin']);
     128        $plugin = isset($_GET['plugin']) ? trim($_GET['plugin']) : '';
    121129
    122130        if ( 'upgrade-plugin' == $_GET['action'] ) {
    123131                check_admin_referer('upgrade-plugin_' . $plugin);
     
    126134                require_once('admin-header.php');
    127135                do_plugin_upgrade($plugin);
    128136                include('admin-footer.php');
     137        } elseif ('activate-plugin' == $_GET['action'] ) {
     138                check_admin_referer('activate-plugin_' . $plugin);
     139                if( ! isset($_GET['failure']) && ! isset($_GET['success']) ) {
     140                        wp_redirect( 'update.php?action=activate-plugin&failure=true&plugin=' . $plugin . '&_wpnonce=' . $_GET['_wpnonce'] );
     141                        activate_plugin($plugin);
     142                        wp_redirect( 'update.php?action=activate-plugin&success=true&plugin=' . $plugin . '&_wpnonce=' . $_GET['_wpnonce'] );
     143                        die();
     144                }
     145                        ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     146<html xmlns="http://www.w3.org/1999/xhtml" <?php do_action('admin_xml_ns'); ?> <?php language_attributes(); ?>>
     147<head>
     148<meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php echo get_option('blog_charset'); ?>" />
     149<title><?php bloginfo('name') ?> &rsaquo; <?php _e('Plugin Reactivation'); ?> &#8212; <?php _e('WordPress'); ?></title>
     150<?php
     151wp_admin_css( 'css/global' );
     152wp_admin_css( 'css/colors' );
     153?>
     154</head>
     155<body>
     156<?php
     157                if( isset($_GET['success']) )
     158                        echo '<p>' . __('Plugin reactivated successfully.') . '</p>';
     159
     160                if( isset($_GET['failure']) ){
     161                        echo '<p>' . __('Plugin failed to reactivate due to a fatal error.') . '</p>';
     162                        error_reporting( E_ALL ^ E_NOTICE );
     163                        @ini_set('display_errors', true); //Ensure that Fatal errors are displayed.
     164                        include(ABSPATH . PLUGINDIR . '/' . $plugin);
     165                }
     166                echo "</body></html>";
    129167        }
    130168}
    131169