WordPress.org

Make WordPress Core

Ticket #9838: 9838.4.diff

File 9838.4.diff, 5.6 KB (added by dd32, 5 years ago)
  • wp-admin/plugins.php

     
    1111 
    1212if ( isset($_POST['clear-recent-list']) ) 
    1313        $action = 'clear-recent-list'; 
    14 elseif ( isset($_REQUEST['action']) ) 
     14elseif ( !empty($_REQUEST['action']) ) 
    1515        $action = $_REQUEST['action']; 
     16elseif ( !empty($_REQUEST['action2']) ) 
     17        $action = $_REQUEST['action2']; 
    1618else 
    1719        $action = false; 
    1820 
     
    3638        switch ( $action ) { 
    3739                case 'activate': 
    3840                        check_admin_referer('activate-plugin_' . $plugin); 
     41 
    3942                        $result = activate_plugin($plugin, 'plugins.php?error=true&plugin=' . $plugin); 
    4043                        if ( is_wp_error( $result ) ) 
    4144                                wp_die($result); 
     45 
    4246                        $recent = (array)get_option('recently_activated'); 
    4347                        if ( isset($recent[ $plugin ]) ) { 
    4448                                unset($recent[ $plugin ]); 
    4549                                update_option('recently_activated', $recent); 
    4650                        } 
     51 
    4752                        wp_redirect("plugins.php?activate=true&plugin_status=$status&paged=$page"); // overrides the ?error=true one above 
    4853                        exit; 
    4954                        break; 
    5055                case 'activate-selected': 
    5156                        check_admin_referer('bulk-manage-plugins'); 
    52                         activate_plugins($_POST['checked'], 'plugins.php?error=true'); 
    5357 
     58                        $plugins = $_POST['checked']; 
     59                        $plugins = array_filter($plugins, create_function('$plugin', 'return !is_plugin_active($plugin);') ); //Only activate plugins which are not already active. 
     60                        if ( empty($plugins) ) { 
     61                                wp_redirect("plugins.php?plugin_status=$status&paged=$page"); 
     62                                exit; 
     63                        } 
     64 
     65                        activate_plugins($plugins, 'plugins.php?error=true'); 
     66 
    5467                        $recent = (array)get_option('recently_activated'); 
    5568                        foreach( (array)$_POST['checked'] as $plugin => $time) { 
    5669                                if ( isset($recent[ $plugin ]) ) 
    5770                                        unset($recent[ $plugin ]); 
    5871                        } 
     72 
    5973                        if( $recent != get_option('recently_activated') ) //If array changed, update it. 
    6074                                update_option('recently_activated', $recent); 
    6175 
     
    6478                        break; 
    6579                case 'error_scrape': 
    6680                        check_admin_referer('plugin-activation-error_' . $plugin); 
     81 
    6782                        $valid = validate_plugin($plugin); 
    6883                        if ( is_wp_error($valid) ) 
    6984                                wp_die($valid); 
     85 
    7086                        error_reporting( E_ALL ^ E_NOTICE ); 
    7187                        @ini_set('display_errors', true); //Ensure that Fatal errors are displayed. 
    7288                        include(WP_PLUGIN_DIR . '/' . $plugin); 
     
    8298                        break; 
    8399                case 'deactivate-selected': 
    84100                        check_admin_referer('bulk-manage-plugins'); 
    85                         deactivate_plugins($_POST['checked']); 
     101 
     102                        $plugins = (array)$_POST['checked']; 
     103                        $plugins = array_filter($plugins, 'is_plugin_active'); //Do not deactivate plugins which are already deactivated. 
     104                        if ( empty($plugins) ) { 
     105                                wp_redirect("plugins.php?plugin_status=$status&paged=$page"); 
     106                                exit; 
     107                        } 
     108 
     109                        deactivate_plugins($plugins); 
     110 
    86111                        $deactivated = array(); 
    87                         foreach ( (array)$_POST['checked'] as $plugin ) 
     112                        foreach ( $plugins as $plugin ) 
    88113                                $deactivated[ $plugin ] = time(); 
     114 
    89115                        update_option('recently_activated', $deactivated + (array)get_option('recently_activated')); 
    90116                        wp_redirect("plugins.php?deactivate-multi=true&plugin_status=$status&paged=$page"); 
    91117                        exit; 
     
    96122 
    97123                        check_admin_referer('bulk-manage-plugins'); 
    98124 
    99                         $plugins = $_REQUEST['checked']; //$_POST = from the plugin form; $_GET = from the FTP details screen. 
     125                        $plugins = (array)$_REQUEST['checked']; //$_POST = from the plugin form; $_GET = from the FTP details screen. 
     126                        $plugins = array_filter($plugins, create_function('$plugin', 'return !is_plugin_active($plugin);') ); //Do not allow to delete Activated plugins. 
     127                        if ( empty($plugins) ) { 
     128                                wp_redirect("plugins.php?plugin_status=$status&paged=$page"); 
     129                                exit; 
     130                        } 
     131                                 
    100132                        include(ABSPATH . 'wp-admin/update.php'); 
    101133 
    102134                        $parent_file = 'plugins.php'; 
     
    363395 
    364396                if ( $is_active ) 
    365397                        $actions[] = '<a href="' . wp_nonce_url('plugins.php?action=deactivate&amp;plugin=' . $plugin_file . '&amp;plugin_status=' . $context . '&amp;paged=' . $page, 'deactivate-plugin_' . $plugin_file) . '" title="' . __('Deactivate this plugin') . '">' . __('Deactivate') . '</a>'; 
    366                 else //Inactive or Recently deactivated 
     398                else 
    367399                        $actions[] = '<a href="' . wp_nonce_url('plugins.php?action=activate&amp;plugin=' . $plugin_file . '&amp;plugin_status=' . $context . '&amp;paged=' . $page, 'activate-plugin_' . $plugin_file) . '" title="' . __('Activate this plugin') . '" class="edit">' . __('Activate') . '</a>'; 
    368400 
    369401                if ( current_user_can('edit_plugins') && is_writable(WP_PLUGIN_DIR . '/' . $plugin_file) ) 
     
    385417        <tr class='$class second'> 
    386418                <td></td> 
    387419                <td class='plugin-title'>"; 
    388                 $i = 0; 
    389420                echo '<div class="row-actions-visible">'; 
    390421                foreach ( $actions as $action => $link ) { 
    391                         ++$i; 
    392                         ( $i == $action_count ) ? $sep = '' : $sep = ' | '; 
     422                        $sep = end($actions) == $link ? '' : ' | '; 
    393423                        echo "<span class='$action'>$link$sep</span>"; 
    394424                } 
    395425                echo "</div></td> 
     
    425455 * 
    426456 * @param string $context 
    427457 */ 
    428 function print_plugin_actions($context) { 
     458function print_plugin_actions($context, $field_name = 'action' ) { 
     459         
    429460?> 
    430461        <div class="alignleft actions"> 
    431                 <select name="action"> 
     462                <select name="<?php echo $field_name ?>"> 
    432463                        <option value="" selected="selected"><?php _e('Bulk Actions'); ?></option> 
    433464        <?php if ( 'active' != $context ) : ?> 
    434465                        <option value="activate-selected"><?php _e('Activate'); ?></option> 
     
    512543<?php 
    513544if ( $page_links ) 
    514545        echo "<div class='tablenav-pages'>$page_links_text</div>"; 
     546 
     547print_plugin_actions($status, "action2"); 
    515548?> 
    516 <div class="alignleft actions"> 
    517 <!-- TODO lower bulk actions. --> 
    518549</div> 
    519 </div> 
    520550</form> 
    521551 
    522552<?php if ( empty($all_plugins) ) : ?>