+ plugin_sandbox_scrape( $plugin );
+ do_action('activate_' . $plugin);
+ exit;
+ break;
+ case 'deactivate':
+ if ( ! current_user_can('activate_plugins') )
+ wp_die(__('You do not have sufficient permissions to deactivate plugins for this site.'));
+
+ check_admin_referer('deactivate-plugin_' . $plugin);
+ deactivate_plugins($plugin);
+ update_option('recently_activated', array($plugin => time()) + (array)get_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" ) . "' />";
+ else
+ wp_redirect("plugins.php?deactivate=true&plugin_status=$status&paged=$page");
+ exit;
+ break;
+ 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-manage-plugins');
+
+ $plugins = isset( $_POST['checked'] ) ? (array) $_POST['checked'] : array();
+ $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 site.'));
+
+ check_admin_referer('bulk-manage-plugins');
+
+ //$_POST = from the plugin form; $_GET = from the FTP details screen.
+ $plugins = isset( $_REQUEST['checked'] ) ? (array) $_REQUEST['checked'] : array();
+ $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">
+ <?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;
+ $plugin_info[ $plugin ]['is_uninstallable'] = is_uninstallable_plugin( $plugin );
+ }
+ } 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)) ) {
+ foreach( $folder_plugins as $plugin_file => $data ) {
+ $plugin_info[ $plugin_file ] = $data;
+ $plugin_info[ $plugin_file ]['is_uninstallable'] = is_uninstallable_plugin( $plugin );
+ }
+ }
+ }
+ }
+ screen_icon();
+ $plugins_to_delete = count( $plugin_info );
+ echo '<h2>' . _n( 'Delete Plugin', 'Delete Plugins', $plugins_to_delete ) . '</h2>';
+ ?>
+ <p><?php echo _n( 'You are about to remove the following plugin:', 'You are about to remove the following plugins:', $plugins_to_delete ); ?></p>
+ <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( __( '<strong>%1$s</strong> by <em>%2$s</em> (will also <strong>delete its data</strong>)' ), esc_html($plugin['Name']), esc_html($plugin['Author']) ), '</li>';
+ $data_to_delete = true;
+ } else {
+ /* translators: 1: plugin name, 2: plugin author */
+ echo '<li>', sprintf( __('<strong>%1$s</strong> by <em>%2$s</em>' ), esc_html($plugin['Name']), esc_html($plugin['Author']) ), '</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-manage-plugins') ?>
+ <input type="submit" name="submit" value="<?php $data_to_delete ? esc_attr_e('Yes, Delete these files and data') : 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>
+
+ <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>
+ <div id="files-list" style="display:none;">
+ <ul class="code">
+ <?php
+ foreach ( (array)$files_to_delete as $file )
+ echo '<li>' . esc_html(str_replace(WP_PLUGIN_DIR, '', $file)) . '</li>';
+ ?>
+ </ul>
+ </div>
+ </div>
+ <?php
+ require_once('./admin-footer.php');
+ exit;
+ } //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("plugins.php?deleted=true&plugin_status=$status&paged=$page");
+ exit;
+ break;
+ case 'clear-recent-list':
+ update_option('recently_activated', array());
+ break;