-if ( isset($_GET['action']) ) {
- if ( isset($_GET['plugin']) )
- $plugin = trim($_GET['plugin']);
-
- if ( 'activate' == $_GET['action'] ) {
- check_admin_referer('activate-plugin_' . $_GET['plugin']);
- $result = activate_plugin($_GET['plugin'], 'plugins.php?error=true&plugin=' . $plugin);
- if ( is_wp_error( $result ) )
- wp_die( $result->get_error_message() );
- wp_redirect('plugins.php?activate=true'); // overrides the ?error=true one above
- } elseif ( 'error_scrape' == $_GET['action'] ) {
- 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(ABSPATH . PLUGINDIR . '/' . $plugin);
- } elseif ( 'deactivate' == $_GET['action'] ) {
- check_admin_referer('deactivate-plugin_' . $_GET['plugin']);
- deactivate_plugins($_GET['plugin']);
- wp_redirect('plugins.php?deactivate=true');
- } elseif ( 'deactivate-all' == $_GET['action'] ) {
- check_admin_referer('deactivate-all');
- deactivate_all_plugins();
- wp_redirect('plugins.php?deactivate-all=true');
- } elseif ('reactivate-all' == $_GET['action']) {
- check_admin_referer('reactivate-all');
- reactivate_all_plugins('plugins.php?errors=true');
- wp_redirect('plugins.php?reactivate-all=true'); // overrides the ?error=true one above
- }
+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'] : '';
+
+$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&plugin_status=$status&paged=$page"); // overrides the ?error=true one above
+ exit;
+ break;
+ case 'activate-selected':
+ check_admin_referer('bulk-manage-plugins');
+
+ $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 ( $plugins as $plugin => $time)
+ if ( isset($recent[ $plugin ]) )
+ unset($recent[ $plugin ]);
+
+ 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);
+ do_action('activate_' . $plugin);
+ exit;
+ break;
+ case 'deactivate':
+ 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&plugin_status=$status&paged=$page");
+ exit;
+ break;
+ case 'deactivate-selected':
+ check_admin_referer('bulk-manage-plugins');
+
+ $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 ( $plugins as $plugin )
+ $deactivated[ $plugin ] = time();
+
+ update_option('recently_activated', $deactivated + (array)get_option('recently_activated'));
+ wp_redirect("plugins.php?deactivate-multi=true&plugin_status=$status&paged=$page");
+ exit;
+ break;
+ case 'delete-selected':
+ if ( ! current_user_can('delete_plugins') )
+ wp_die(__('You do not have sufficient permissions to delete plugins for this blog.'));
+
+ check_admin_referer('bulk-manage-plugins');
+
+ $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');
+
+ $parent_file = 'plugins.php';
+
+ if ( ! isset($_REQUEST['verify-delete']) ) {
+ wp_enqueue_script('jquery');
+ require_once('admin-header.php');
+ ?>
+ <div class="wrap">
+ <h2><?php _e('Delete Plugin(s)'); ?></h2>
+ <?php
+ $files_to_delete = $plugin_info = array();
+ foreach ( (array) $plugins as $plugin ) {
+ if ( '.' == dirname($plugin) ) {
+ $files_to_delete[] = WP_PLUGIN_DIR . '/' . $plugin;
+ if( $data = get_plugin_data(WP_PLUGIN_DIR . '/' . $plugin) )
+ $plugin_info[ $plugin ] = $data;
+ } else {
+ //Locate all the files in that folder:
+ $files = list_files( WP_PLUGIN_DIR . '/' . dirname($plugin) );
+ if( $files ) {
+ $files_to_delete = array_merge($files_to_delete, $files);
+ }
+ //Get plugins list from that folder
+ if ( $folder_plugins = get_plugins( '/' . dirname($plugin)) )
+ $plugin_info = array_merge($plugin_info, $folder_plugins);
+ }
+ }
+ ?>
+ <p><?php _e('Deleting the selected plugins will remove the following plugin(s) and their files:'); ?></p>
+ <ul class="ul-disc">
+ <?php
+ foreach ( $plugin_info as $plugin )
+ echo '<li>', sprintf(__('<strong>%s</strong> by <em>%s</em>'), $plugin['Name'], $plugin['Author']), '</li>';
+ ?>
+ </ul>
+ <p><?php _e('Are you sure you wish to delete these files?') ?></p>
+ <form method="post" action="<?php echo esc_url($_SERVER['REQUEST_URI']); ?>" style="display:inline;">
+ <input type="hidden" name="verify-delete" value="1" />
+ <input type="hidden" name="action" value="delete-selected" />
+ <?php
+ foreach ( (array)$plugins as $plugin )
+ echo '<input type="hidden" name="checked[]" value="' . esc_attr($plugin) . '" />';
+ ?>
+ <?php wp_nonce_field('bulk-manage-plugins') ?>
+ <input type="submit" name="submit" value="<?php esc_attr_e('Yes, Delete these files') ?>" class="button" />
+ </form>
+ <form method="post" action="<?php echo esc_url(wp_get_referer()); ?>" style="display:inline;">
+ <input type="submit" name="submit" value="<?php esc_attr_e('No, Return me to the plugin list') ?>" class="button" />
+ </form>