WordPress.org

Make WordPress Core

Ticket #7091: 7091.2.diff

File 7091.2.diff, 8.2 KB (added by DD32, 6 years ago)
  • wp-admin/includes/file.php

     
    4141 
    4242        return $real_file; 
    4343} 
     44//$folder = Full path to folder 
     45//$levels = Levels of folders to follow, Default: 100 (PHP Loop limit) 
     46function list_files( $folder = '', $levels = 100 ) { 
     47        if( empty($folder) ) 
     48                return false; 
    4449 
     50        if( ! $levels ) 
     51                return false; 
     52 
     53        $files = array(); 
     54        if ( $dir = @opendir( $folder ) ) { 
     55                while (($file = readdir( $dir ) ) !== false ) { 
     56                        if ( in_array($file, array('.', '..') ) ) 
     57                                continue; 
     58                        if ( is_dir( $folder . '/' . $file ) ) { 
     59                                $files2 = list_files( $folder . '/' . $file, $levels - 1); 
     60                                if( $files2 ) 
     61                                        $files = array_merge($files, $files2 ); 
     62                                else 
     63                                        $files[] = $folder . '/' . $file . '/'; 
     64                        } else { 
     65                                $files[] = $folder . '/' . $file; 
     66                        } 
     67                } 
     68        } 
     69        @closedir( $dir ); 
     70        return $files; 
     71} 
     72 
    4573function get_temp_dir() { 
    4674        if ( defined('WP_TEMP_DIR') ) 
    4775                return trailingslashit(WP_TEMP_DIR); 
  • wp-admin/includes/plugin.php

     
    136136        update_option('active_plugins', $current); 
    137137} 
    138138 
    139 //Replaces reactivate_all_plugins() / deactivate_all_plugins()  = 'deactivated_plugins' is now useless 
    140139function activate_plugins($plugins, $redirect = '') { 
    141140        if ( !is_array($plugins) ) 
    142141                $plugins = array($plugins); 
     
    167166                $checked[] = 'checked[]=' . $plugin; 
    168167 
    169168        ob_start(); 
    170         $url = wp_nonce_url('plugins.php?action=delete-selected&' . implode('&', $checked), 'mass-manage-plugins'); 
     169        $url = wp_nonce_url('plugins.php?action=delete-selected&verify-delete=1&' . implode('&', $checked), 'bulk-manage-plugins'); 
    171170        if ( false === ($credentials = request_filesystem_credentials($url)) ) { 
    172171                $data = ob_get_contents(); 
    173172                ob_end_clean(); 
     
    243242        // If a plugin file does not exist, remove it from the list of active 
    244243        // plugins. 
    245244        foreach ( $check_plugins as $check_plugin ) { 
    246                 if ( !file_exists(WP_PLUGIN_DIR . '/' . $check_plugin) ) { 
    247                         $current = get_option('active_plugins'); 
    248                         $key = array_search($check_plugin, $current); 
    249                         if ( false !== $key && NULL !== $key ) { 
    250                                 unset($current[$key]); 
    251                                 update_option('active_plugins', $current); 
    252                         } 
     245                $result = validate_plugin($check_plugin); 
     246                if ( is_wp_error( $result ) ) { 
     247                        deactivate_plugins( $check_plugin, true); 
    253248                } 
    254249        } 
    255250} 
  • wp-admin/plugins.php

     
    3030                        exit; 
    3131                        break; 
    3232                case 'activate-selected': 
    33                         check_admin_referer('mass-manage-plugins'); 
     33                        check_admin_referer('bulk-manage-plugins'); 
    3434                        activate_plugins($_POST['checked'], 'plugins.php?error=true'); 
    3535 
    3636                        $recent = (array)get_option('recently_activated'); 
     
    6262                        exit; 
    6363                        break; 
    6464                case 'deactivate-selected': 
    65                         check_admin_referer('mass-manage-plugins'); 
     65                        check_admin_referer('bulk-manage-plugins'); 
    6666                        deactivate_plugins($_POST['checked']); 
    6767                        $deactivated = array(); 
    6868                        foreach( (array)$_POST['checked'] as $plugin ) 
     
    7474                case 'delete-selected': 
    7575                        if( ! current_user_can('delete_plugins') ) 
    7676                                wp_die(__('You do not have sufficient permissions to delete plugins for this blog.')); 
    77                         check_admin_referer('mass-manage-plugins'); 
    78                         $plugins = $_REQUEST['checked']; 
     77                         
     78                        check_admin_referer('bulk-manage-plugins'); 
     79                         
     80                        $plugins = $_REQUEST['checked']; //$_POST = from the plugin form; $_GET = from the FTP details screen. 
    7981                        include(ABSPATH . 'wp-admin/update.php'); 
    8082 
    8183                        $title = __('Delete Plugin'); 
    8284                        $parent_file = 'plugins.php'; 
     85                         
     86                        if( ! isset($_REQUEST['verify-delete']) ) { 
     87                                wp_enqueue_script('jquery'); 
     88                                require_once('admin-header.php'); 
     89                                ?> 
     90                        <div class="wrap"> 
     91                                <h2><?php _e('Delete Plugin(s)'); ?></h2>                
     92                                <?php 
     93                                        $files_to_delete = $plugin_info = array(); 
     94                                        foreach( (array) $plugins as $plugin ) { 
     95                                                if( '.' == dirname($plugin) ) { 
     96                                                        $files_to_delete[] = WP_PLUGIN_DIR . '/' . $plugin; 
     97                                                        if( $data = get_plugin_data(WP_PLUGIN_DIR . '/' . $plugin) ) 
     98                                                                $plugin_info[ $plugin ] = $data; 
     99                                                } else { 
     100                                                        //Locate all the files in that folder: 
     101                                                        $files = list_files( WP_PLUGIN_DIR . '/' . dirname($plugin) ); 
     102                                                        if( $files ) { 
     103                                                                $files_to_delete = array_merge($files_to_delete, $files); 
     104                                                        } 
     105                                                        //Get plugins list from that folder 
     106                                                        if ( $folder_plugins = get_plugins( '/' . dirname($plugin)) ) 
     107                                                                $plugin_info = array_merge($plugin_info, $folder_plugins); 
     108                                                } 
     109                                        } 
     110                                ?> 
     111                                <p><?php _e('Deleting the selected plugins will remove the following plugin(s) and their files:'); ?></p> 
     112                                <p> 
     113                                        <ul> 
     114                                                <?php  
     115                                                foreach( $plugin_info as $plugin ) 
     116                                                        echo '<li>', $plugin['Title'], ' ', __('By'), ' ', $plugin['Author'], '</li>'; 
     117                                                ?> 
     118                                        </ul> 
     119                                </p> 
     120                                <p><?php _e('Are you sure you wish to delete these files?') ?></p> 
     121                                <form method="post" action="<?php echo clean_url($_SERVER['REQUEST_URI']); ?>" style="display:inline;"> 
     122                                        <input type="hidden" name="verify-delete" value="1" /> 
     123                                        <input type="hidden" name="delete-selected" value="1" /> 
     124                                        <?php 
     125                                                foreach( (array)$plugins as $plugin ) { 
     126                                                        $plugin = attribute_escape($plugin); 
     127                                                        echo "<input type='hidden' name='checked[]' value='$plugin' />"; 
     128                                                } 
     129                                        ?> 
     130                                        <?php wp_nonce_field('bulk-manage-plugins') ?> 
     131                                        <input type="submit" name="submit" value="<?php _e('Yes, Delete these files') ?>" class="button" /> 
     132                                </form> 
     133                                <form method="post" action="<?php echo clean_url(wp_get_referer()); ?>" style="display:inline;"> 
     134                                        <input type="submit" name="submit" value="<?php _e('No, Return me to the plugin list') ?>" class="button" /> 
     135                                </form> 
    83136 
     137                                <p><a href="#" onclick="jQuery('#files-list').toggle(); return false;"><?php _e('Click to view entire list of files which will be deleted'); ?></a></p> 
     138                                <div id="files-list" style="display:none;"> 
     139                                        <ul> 
     140                                        <?php 
     141                                                foreach( (array)$files_to_delete as $file ) { 
     142                                                        $file = str_replace(ABSPATH, '', $file); 
     143                                                        echo "<li>$file</li>"; 
     144                                                } 
     145                                        ?> 
     146                                        </ul> 
     147                                </div>                           
     148                        </div> 
     149                                <?php 
     150                                require_once('admin-footer.php'); 
     151                                exit; 
     152                        } 
    84153                        $delete_result = delete_plugins($plugins); 
    85154 
    86155                        wp_cache_delete('plugins', 'plugins'); 
    87156 
    88157                        break; 
    89                 default: 
    90                         var_dump("Unknown Action $action"); 
    91158        } 
    92159} 
    93160 
     
    224291 
    225292<h3 id="currently-active"><?php _e('Currently Active Plugins') ?></h3> 
    226293<form method="post" action="<?php echo admin_url('plugins.php') ?>"> 
    227 <?php wp_nonce_field('mass-manage-plugins') ?> 
     294<?php wp_nonce_field('bulk-manage-plugins') ?> 
    228295 
    229296<div class="tablenav"> 
    230297        <div class="alignleft"> 
     
    240307<?php if ( ! empty($recent_plugins) ) : ?> 
    241308<h3 id="recent-plugins"><?php _e('Recently Active Plugins') ?></h3> 
    242309<form method="post" action="<?php echo admin_url('plugins.php') ?>"> 
    243 <?php wp_nonce_field('mass-manage-plugins') ?> 
     310<?php wp_nonce_field('bulk-manage-plugins') ?> 
    244311 
    245312<div class="tablenav"> 
    246313        <div class="alignleft"> 
     
    257324 
    258325<h3 id="available-plugins"><?php _e('Available Plugins') ?></h3> 
    259326<form method="post" action="<?php echo admin_url('plugins.php') ?>"> 
    260 <?php wp_nonce_field('mass-manage-plugins') ?> 
     327<?php wp_nonce_field('bulk-manage-plugins') ?> 
    261328 
     329<?php if ( ! empty($available_plugins) ) : ?> 
    262330<div class="tablenav"> 
    263331        <div class="alignleft"> 
    264332                <input type="submit" name="activate-selected" value="<?php _e('Activate') ?>" class="button-secondary" /> 
     
    270338<br class="clear" /> 
    271339<?php print_plugins_table($available_plugins, 'available') ?> 
    272340</form> 
     341<?php endif; ?> 
    273342 
    274343<h2><?php _e('Get More Plugins'); ?></h2> 
    275344<p><?php _e('You can find additional plugins for your site in the <a href="http://wordpress.org/extend/plugins/">WordPress plugin directory</a>.'); ?></p>