+ if ( ! is_network_admin() ) {
+ update_option( 'recently_activated', array( $plugin => time() ) + (array) get_option( 'recently_activated' ) );
+ } else {
+ update_site_option( 'recently_activated', array( $plugin => time() ) + (array) get_site_option( 'recently_activated' ) );
+ }
+
+ if ( headers_sent() )
+ echo "<meta http-equiv='refresh' content='" . esc_attr( "0;url=plugins.php?deactivate=true&plugin_status=$status&paged=$page&s=$s" ) . "' />";
+ else
+ wp_redirect( self_admin_url("plugins.php?deactivate=true&plugin_status=$status&paged=$page&s=$s") );
+ exit;
+
+ case 'deactivate-selected':
+ if ( ! current_user_can('activate_plugins') )
+ wp_die(__('You do not have sufficient permissions to deactivate plugins for this site.'));
+
+ check_admin_referer('bulk-plugins');
+
+ $plugins = isset( $_POST['checked'] ) ? (array) $_POST['checked'] : array();
+ // Do not deactivate plugins which are already deactivated.
+ if ( is_network_admin() ) {
+ $plugins = array_filter( $plugins, 'is_plugin_active_for_network' );
+ } else {
+ $plugins = array_filter( $plugins, 'is_plugin_active' );
+ $plugins = array_diff( $plugins, array_filter( $plugins, 'is_plugin_active_for_network' ) );
+ }
+ if ( empty($plugins) ) {
+ wp_redirect( self_admin_url("plugins.php?plugin_status=$status&paged=$page&s=$s") );
+ exit;
+ }
+
+ deactivate_plugins( $plugins, false, is_network_admin() );
+
+ $deactivated = array();
+ foreach ( $plugins as $plugin ) {
+ $deactivated[ $plugin ] = time();
+ }
+
+ if ( ! is_network_admin() ) {
+ update_option( 'recently_activated', $deactivated + (array) get_option( 'recently_activated' ) );
+ } else {
+ update_site_option( 'recently_activated', $deactivated + (array) get_site_option( 'recently_activated' ) );
+ }
+
+ wp_redirect( self_admin_url("plugins.php?deactivate-multi=true&plugin_status=$status&paged=$page&s=$s") );
+ exit;
+
+ case 'delete-selected':
+ if ( ! current_user_can('delete_plugins') ) {
+ wp_die(__('You do not have sufficient permissions to delete plugins for this site.'));
+ }
+
+ check_admin_referer('bulk-plugins');
+
+ //$_POST = from the plugin form; $_GET = from the FTP details screen.
+ $plugins = isset( $_REQUEST['checked'] ) ? (array) $_REQUEST['checked'] : array();
+ if ( empty( $plugins ) ) {
+ wp_redirect( self_admin_url("plugins.php?plugin_status=$status&paged=$page&s=$s") );
+ exit;
+ }
+
+ $plugins = array_filter($plugins, 'is_plugin_inactive'); // Do not allow to delete Activated plugins.
+ if ( empty( $plugins ) ) {
+ wp_redirect( self_admin_url( "plugins.php?error=true&main=true&plugin_status=$status&paged=$page&s=$s" ) );
+ exit;
+ }
+
+ include(ABSPATH . 'wp-admin/update.php');
+
+ $parent_file = 'plugins.php';
+
+ if ( ! isset($_REQUEST['verify-delete']) ) {
+ wp_enqueue_script('jquery');
+ require_once(ABSPATH . 'wp-admin/admin-header.php');
+ ?>
+ <div class="wrap">
+ <?php
+ $plugin_info = array();
+ $have_non_network_plugins = false;
+ foreach ( (array) $plugins as $plugin ) {
+ $plugin_slug = dirname( $plugin );
+
+ if ( '.' == $plugin_slug ) {
+ if ( $data = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin ) ) {
+ $plugin_info[ $plugin ] = $data;
+ $plugin_info[ $plugin ]['is_uninstallable'] = is_uninstallable_plugin( $plugin );
+ if ( ! $plugin_info[ $plugin ]['Network'] ) {
+ $have_non_network_plugins = true;
+ }
+ }
+ } else {
+ // Get plugins list from that folder.
+ if ( $folder_plugins = get_plugins( '/' . $plugin_slug ) ) {
+ foreach ( $folder_plugins as $plugin_file => $data ) {
+ $plugin_info[ $plugin_file ] = _get_plugin_data_markup_translate( $plugin_file, $data );
+ $plugin_info[ $plugin_file ]['is_uninstallable'] = is_uninstallable_plugin( $plugin );
+ if ( ! $plugin_info[ $plugin_file ]['Network'] ) {
+ $have_non_network_plugins = true;
+ }
+ }
+ }
+ }
+ }
+ $plugins_to_delete = count( $plugin_info );
+ ?>
+ <?php if ( 1 == $plugins_to_delete ) : ?>
+ <h1><?php _e( 'Delete Plugin' ); ?></h1>
+ <?php if ( $have_non_network_plugins && is_network_admin() ) : ?>
+ <div class="error"><p><strong><?php _e( 'Caution:' ); ?></strong> <?php _e( 'This plugin may be active on other sites in the network.' ); ?></p></div>
+ <?php endif; ?>
+ <p><?php _e( 'You are about to remove the following plugin:' ); ?></p>
+ <?php else: ?>
+ <h1><?php _e( 'Delete Plugins' ); ?></h1>
+ <?php if ( $have_non_network_plugins && is_network_admin() ) : ?>
+ <div class="error"><p><strong><?php _e( 'Caution:' ); ?></strong> <?php _e( 'These plugins may be active on other sites in the network.' ); ?></p></div>
+ <?php endif; ?>
+ <p><?php _e( 'You are about to remove the following plugins:' ); ?></p>
+ <?php endif; ?>
+ <ul class="ul-disc">
+ <?php
+ $data_to_delete = false;
+ foreach ( $plugin_info as $plugin ) {
+ if ( $plugin['is_uninstallable'] ) {
+ /* translators: 1: plugin name, 2: plugin author */
+ echo '<li>', sprintf( __( '%1$s by %2$s (will also <strong>delete its data</strong>)' ), '<strong>' . $plugin['Name'] . '</strong>', '<em>' . $plugin['AuthorName'] . '</em>' ), '</li>';
+ $data_to_delete = true;
+ } else {
+ /* translators: 1: plugin name, 2: plugin author */
+ echo '<li>', sprintf( _x('%1$s by %2$s', 'plugin' ), '<strong>' . $plugin['Name'] . '</strong>', '<em>' . $plugin['AuthorName'] ) . '</em>', '</li>';
+ }
+ }
+ ?>
+ </ul>
+ <p><?php
+ if ( $data_to_delete )
+ _e('Are you sure you wish to delete these files and data?');
+ else
+ _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-plugins') ?>
+ <?php submit_button( $data_to_delete ? __( 'Yes, delete these files and data' ) : __( 'Yes, delete these files' ), 'button', 'submit', false ); ?>
+ </form>
+ <?php
+ $referer = wp_get_referer();
+ ?>
+ <form method="post" action="<?php echo $referer ? esc_url( $referer ) : ''; ?>" style="display:inline;">
+ <?php submit_button( __( 'No, return me to the plugin list' ), 'button', 'submit', false ); ?>
+ </form>
+ </div>
+ <?php
+ require_once(ABSPATH . 'wp-admin/admin-footer.php');
+ exit;
+ } else {
+ $plugins_to_delete = count( $plugins );
+ } // endif verify-delete
+
+ $delete_result = delete_plugins( $plugins );
+
+ set_transient('plugins_delete_result_' . $user_ID, $delete_result); //Store the result in a cache rather than a URL param due to object type & length
+ wp_redirect( self_admin_url("plugins.php?deleted=$plugins_to_delete&plugin_status=$status&paged=$page&s=$s") );
+ exit;
+
+ case 'clear-recent-list':
+ if ( ! is_network_admin() ) {
+ update_option( 'recently_activated', array() );
+ } else {
+ update_site_option( 'recently_activated', array() );
+ }
+ break;