X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/11be8dc178e77d0b46189bbd8e33a216a9b90942..d3b1ea255664edd2deef17f900a655613d20820d:/wp-admin/plugins.php diff --git a/wp-admin/plugins.php b/wp-admin/plugins.php index ab704919..5a22807e 100644 --- a/wp-admin/plugins.php +++ b/wp-admin/plugins.php @@ -9,54 +9,78 @@ /** WordPress Administration Bootstrap */ require_once('admin.php'); -$action = ''; -foreach( array('activate-selected', 'deactivate-selected', 'delete-selected', 'clear-recent-list') as $action_key ) { - if( isset($_POST[$action_key]) ) { - $action = $action_key; - break; - } -} - -if( isset($_REQUEST['action']) && !empty($_REQUEST['action']) ) +if ( isset($_POST['clear-recent-list']) ) + $action = 'clear-recent-list'; +elseif ( !empty($_REQUEST['action']) ) $action = $_REQUEST['action']; +elseif ( !empty($_REQUEST['action2']) ) + $action = $_REQUEST['action2']; +else + $action = false; $plugin = isset($_REQUEST['plugin']) ? $_REQUEST['plugin'] : ''; -if( !empty($action) ) { - switch( $action ) { +$default_status = get_user_option('plugins_last_view'); +if ( empty($default_status) ) + $default_status = 'all'; +$status = isset($_REQUEST['plugin_status']) ? $_REQUEST['plugin_status'] : $default_status; +if ( !in_array($status, array('all', 'active', 'inactive', 'recent', 'upgrade', 'search')) ) + $status = 'all'; +if ( $status != $default_status && 'search' != $status ) + update_usermeta($current_user->ID, 'plugins_last_view', $status); + +$page = isset($_REQUEST['paged']) ? $_REQUEST['paged'] : 1; + +//Clean up request URI from temporary args for screen options/paging uri's to work as expected. +$_SERVER['REQUEST_URI'] = remove_query_arg(array('error', 'deleted', 'activate', 'activate-multi', 'deactivate', 'deactivate-multi', '_error_nonce'), $_SERVER['REQUEST_URI']); + +if ( !empty($action) ) { + switch ( $action ) { case 'activate': check_admin_referer('activate-plugin_' . $plugin); + $result = activate_plugin($plugin, 'plugins.php?error=true&plugin=' . $plugin); if ( is_wp_error( $result ) ) wp_die($result); + $recent = (array)get_option('recently_activated'); if ( isset($recent[ $plugin ]) ) { unset($recent[ $plugin ]); update_option('recently_activated', $recent); } - wp_redirect('plugins.php?activate=true'); // overrides the ?error=true one above + + wp_redirect("plugins.php?activate=true&plugin_status=$status&paged=$page"); // overrides the ?error=true one above exit; break; case 'activate-selected': check_admin_referer('bulk-manage-plugins'); - activate_plugins($_POST['checked'], 'plugins.php?error=true'); + + $plugins = (array) $_POST['checked']; + $plugins = array_filter($plugins, create_function('$plugin', 'return !is_plugin_active($plugin);') ); //Only activate plugins which are not already active. + if ( empty($plugins) ) { + wp_redirect("plugins.php?plugin_status=$status&paged=$page"); + exit; + } + + activate_plugins($plugins, 'plugins.php?error=true'); $recent = (array)get_option('recently_activated'); - foreach( (array)$_POST['checked'] as $plugin => $time) { + foreach ( $plugins as $plugin => $time) if ( isset($recent[ $plugin ]) ) unset($recent[ $plugin ]); - } - if( $recent != get_option('recently_activated') ) //If array changed, update it. - update_option('recently_activated', $recent); - wp_redirect('plugins.php?activate-multi=true'); + update_option('recently_activated', $recent); + + wp_redirect("plugins.php?activate-multi=true&plugin_status=$status&paged=$page"); exit; break; case 'error_scrape': check_admin_referer('plugin-activation-error_' . $plugin); + $valid = validate_plugin($plugin); if ( is_wp_error($valid) ) wp_die($valid); + error_reporting( E_ALL ^ E_NOTICE ); @ini_set('display_errors', true); //Ensure that Fatal errors are displayed. include(WP_PLUGIN_DIR . '/' . $plugin); @@ -67,17 +91,27 @@ if( !empty($action) ) { check_admin_referer('deactivate-plugin_' . $plugin); deactivate_plugins($plugin); update_option('recently_activated', array($plugin => time()) + (array)get_option('recently_activated')); - wp_redirect('plugins.php?deactivate=true'); + wp_redirect("plugins.php?deactivate=true&plugin_status=$status&paged=$page"); exit; break; case 'deactivate-selected': check_admin_referer('bulk-manage-plugins'); - deactivate_plugins($_POST['checked']); + + $plugins = (array) $_POST['checked']; + $plugins = array_filter($plugins, 'is_plugin_active'); //Do not deactivate plugins which are already deactivated. + if ( empty($plugins) ) { + wp_redirect("plugins.php?plugin_status=$status&paged=$page"); + exit; + } + + deactivate_plugins($plugins); + $deactivated = array(); - foreach ( (array)$_POST['checked'] as $plugin ) + foreach ( $plugins as $plugin ) $deactivated[ $plugin ] = time(); + update_option('recently_activated', $deactivated + (array)get_option('recently_activated')); - wp_redirect('plugins.php?deactivate-multi=true'); + wp_redirect("plugins.php?deactivate-multi=true&plugin_status=$status&paged=$page"); exit; break; case 'delete-selected': @@ -86,10 +120,15 @@ if( !empty($action) ) { check_admin_referer('bulk-manage-plugins'); - $plugins = $_REQUEST['checked']; //$_POST = from the plugin form; $_GET = from the FTP details screen. + $plugins = (array) $_REQUEST['checked']; //$_POST = from the plugin form; $_GET = from the FTP details screen. + $plugins = array_filter($plugins, create_function('$plugin', 'return !is_plugin_active($plugin);') ); //Do not allow to delete Activated plugins. + if ( empty($plugins) ) { + wp_redirect("plugins.php?plugin_status=$status&paged=$page"); + exit; + } + include(ABSPATH . 'wp-admin/update.php'); - $title = __('Delete Plugin'); $parent_file = 'plugins.php'; if ( ! isset($_REQUEST['verify-delete']) ) { @@ -118,30 +157,30 @@ if( !empty($action) ) { } ?>

-