Make WordPress Core


Ignore:
Timestamp:
06/04/2008 06:09:31 PM (18 years ago)
Author:
ryan
Message:

Bulk delete/activate/deactivate for plugins. Split plugins into active and available lists. Props DD32. see #7091

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-admin/includes/plugin.php

    r7999 r8049  
    133133}
    134134
    135 function deactivate_all_plugins() {
    136     $current = get_option('active_plugins');
    137     if ( empty($current) )
    138         return;
    139 
    140     deactivate_plugins($current);
    141 
    142     update_option('deactivated_plugins', $current);
    143 }
    144 
    145 function reactivate_all_plugins($redirect = '') {
    146     $plugins = get_option('deactivated_plugins');
    147 
    148     if ( empty($plugins) )
    149         return;
    150 
    151     if ( !empty($redirect) )
    152         wp_redirect(add_query_arg('_error_nonce', wp_create_nonce('plugin-activation-error_' . $plugin), $redirect));
     135//Replaces reactivate_all_plugins() / deactivate_all_plugins()  = 'deactivated_plugins' is now useless
     136function activate_plugins($plugins, $redirect = '') {
     137    if ( !is_array($plugins) )
     138        $plugins = array($plugins);
    153139
    154140    $errors = array();
    155141    foreach ( (array) $plugins as $plugin ) {
    156         $result = activate_plugin($plugin);
     142        if ( !empty($redirect) )
     143            $redirect = add_query_arg('plugin', $plugin, $redirect);
     144        $result = activate_plugin($plugin, $redirect);
    157145        if ( is_wp_error($result) )
    158146            $errors[$plugin] = $result;
    159147    }
    160148
    161     delete_option('deactivated_plugins');
    162 
    163149    if ( !empty($errors) )
    164150        return new WP_Error('plugins_invalid', __('One of the plugins is invalid.'), $errors);
    165151
     152    return true;
     153}
     154
     155function delete_plugins($plugins, $redirect = '' ) {
     156    global $wp_filesystem;
     157
     158    if( empty($plugins) )
     159        return false;
     160
     161    $checked = array();
     162    foreach( $plugins as $plugin )
     163        $checked[] = 'checked[]=' . $plugin;
     164
     165    ob_start();
     166    $url = wp_nonce_url('plugins.php?action=delete-selected&' . implode('&', $checked), 'mass-manage-plugins');
     167    if ( false === ($credentials = request_filesystem_credentials($url)) ) {
     168        $data = ob_get_contents();
     169        ob_end_clean();
     170        if( ! empty($data) ){
     171            include_once( ABSPATH . 'wp-admin/admin-header.php');
     172            echo $data;
     173            include( ABSPATH . 'wp-admin/admin-footer.php');
     174            exit;
     175        }
     176        return;
     177    }
     178
     179    if ( ! WP_Filesystem($credentials) ) {
     180        request_filesystem_credentials($url, '', true); //Failed to connect, Error and request again
     181        $data = ob_get_contents();
     182        ob_end_clean();
     183        if( ! empty($data) ){
     184            include_once( ABSPATH . 'wp-admin/admin-header.php');
     185            echo $data;
     186            include( ABSPATH . 'wp-admin/admin-footer.php');
     187            exit;
     188        }
     189        return;
     190    }
     191
     192    if ( $wp_filesystem->errors->get_error_code() ) {
     193        return $wp_filesystem->errors;
     194    }
     195
     196    if ( ! is_object($wp_filesystem) )
     197        return new WP_Error('fs_unavailable', __('Could not access filesystem.'));
     198
     199    if ( $wp_filesystem->errors->get_error_code() )
     200        return new WP_Error('fs_error', __('Filesystem error'), $wp_filesystem->errors);
     201
     202    //Get the base plugin folder
     203    $plugins_dir = $wp_filesystem->wp_plugins_dir();
     204    if ( empty($plugins_dir) )
     205        return new WP_Error('fs_no_plugins_dir', __('Unable to locate WordPress Plugin directory.'));
     206   
     207    $plugins_dir = trailingslashit( $plugins_dir );
     208
     209    $errors = array();
     210
     211    foreach( $plugins as $plugin_file ) {
     212        $this_plugin_dir = trailingslashit( dirname($plugins_dir . $plugin_file) );
     213        // If plugin is in its own directory, recursively delete the directory.
     214        if ( strpos($plugin_file, '/') && $this_plugin_dir != $plugins_dir ) //base check on if plugin includes directory seperator AND that its not the root plugin folder
     215            $deleted = $wp_filesystem->delete($this_plugin_dir, true);
     216        else
     217            $deleted = $wp_filesystem->delete($plugins_dir . $plugin_file);
     218   
     219        if ( ! $deleted )
     220            $errors[] = $plugin_file;
     221    }
     222   
     223    if( ! empty($errors) )
     224        return new WP_Error('could_not_remove_plugin', sprintf(__('Could not fully remove the plugin(s) %s'), implode(', ', $errors)) );
     225   
    166226    return true;
    167227}
Note: See TracChangeset for help on using the changeset viewer.