WordPress.org

Make WordPress Core

Ticket #6262: 6262.diff

File 6262.diff, 5.6 KB (added by DD32, 7 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