WordPress.org

Make WordPress Core

Ticket #6262: 6262.2.diff

File 6262.2.diff, 5.9 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); 
     
    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