-require_once('admin.php');
-
-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
- }
+/**
+ * Plugins administration panel.
+ *
+ * @package WordPress
+ * @subpackage Administration
+ */
+
+/** WordPress Administration Bootstrap */
+require_once( dirname( __FILE__ ) . '/admin.php' );
+
+if ( ! current_user_can('activate_plugins') )
+ wp_die( __( 'You do not have sufficient permissions to manage plugins for this site.' ) );
+
+$wp_list_table = _get_list_table('WP_Plugins_List_Table');
+$pagenum = $wp_list_table->get_pagenum();
+
+$action = $wp_list_table->current_action();
+
+$plugin = isset($_REQUEST['plugin']) ? $_REQUEST['plugin'] : '';
+$s = isset($_REQUEST['s']) ? urlencode($_REQUEST['s']) : '';
+
+// 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']);
+
+wp_enqueue_script( 'updates' );
+
+if ( $action ) {
+
+ switch ( $action ) {
+ case 'activate':
+ if ( ! current_user_can('activate_plugins') )
+ wp_die(__('You do not have sufficient permissions to activate plugins for this site.'));
+
+ if ( is_multisite() && ! is_network_admin() && is_network_only_plugin( $plugin ) ) {
+ wp_redirect( self_admin_url("plugins.php?plugin_status=$status&paged=$page&s=$s") );
+ exit;
+ }
+
+ check_admin_referer('activate-plugin_' . $plugin);
+
+ $result = activate_plugin($plugin, self_admin_url('plugins.php?error=true&plugin=' . $plugin), is_network_admin() );
+ if ( is_wp_error( $result ) ) {
+ if ( 'unexpected_output' == $result->get_error_code() ) {
+ $redirect = self_admin_url('plugins.php?error=true&charsout=' . strlen($result->get_error_data()) . '&plugin=' . $plugin . "&plugin_status=$status&paged=$page&s=$s");
+ wp_redirect(add_query_arg('_error_nonce', wp_create_nonce('plugin-activation-error_' . $plugin), $redirect));
+ exit;
+ } else {
+ wp_die($result);
+ }
+ }
+
+ if ( ! is_network_admin() ) {
+ $recent = (array) get_option( 'recently_activated' );
+ unset( $recent[ $plugin ] );
+ update_option( 'recently_activated', $recent );
+ }
+
+ if ( isset($_GET['from']) && 'import' == $_GET['from'] ) {
+ wp_redirect( self_admin_url("import.php?import=" . str_replace('-importer', '', dirname($plugin))) ); // overrides the ?error=true one above and redirects to the Imports page, stripping the -importer suffix
+ } else {
+ wp_redirect( self_admin_url("plugins.php?activate=true&plugin_status=$status&paged=$page&s=$s") ); // overrides the ?error=true one above
+ }
+ exit;
+
+ case 'activate-selected':
+ if ( ! current_user_can('activate_plugins') )
+ wp_die(__('You do not have sufficient permissions to activate plugins for this site.'));
+
+ check_admin_referer('bulk-plugins');
+
+ $plugins = isset( $_POST['checked'] ) ? (array) $_POST['checked'] : array();
+
+ if ( is_network_admin() ) {
+ foreach ( $plugins as $i => $plugin ) {
+ // Only activate plugins which are not already network activated.
+ if ( is_plugin_active_for_network( $plugin ) ) {
+ unset( $plugins[ $i ] );
+ }
+ }
+ } else {
+ foreach ( $plugins as $i => $plugin ) {
+ // Only activate plugins which are not already active and are not network-only when on Multisite.
+ if ( is_plugin_active( $plugin ) || ( is_multisite() && is_network_only_plugin( $plugin ) ) ) {
+ unset( $plugins[ $i ] );
+ }
+ }
+ }
+
+ if ( empty($plugins) ) {
+ wp_redirect( self_admin_url("plugins.php?plugin_status=$status&paged=$page&s=$s") );
+ exit;
+ }
+
+ activate_plugins($plugins, self_admin_url('plugins.php?error=true'), is_network_admin() );
+
+ if ( ! is_network_admin() ) {
+ $recent = (array) get_option('recently_activated' );
+ foreach ( $plugins as $plugin )
+ unset( $recent[ $plugin ] );
+ update_option( 'recently_activated', $recent );
+ }
+
+ wp_redirect( self_admin_url("plugins.php?activate-multi=true&plugin_status=$status&paged=$page&s=$s") );
+ exit;
+
+ case 'update-selected' :
+
+ check_admin_referer( 'bulk-plugins' );
+
+ if ( isset( $_GET['plugins'] ) )
+ $plugins = explode( ',', $_GET['plugins'] );
+ elseif ( isset( $_POST['checked'] ) )
+ $plugins = (array) $_POST['checked'];
+ else
+ $plugins = array();
+
+ $title = __( 'Update Plugins' );
+ $parent_file = 'plugins.php';
+
+ wp_enqueue_script( 'updates' );
+ require_once(ABSPATH . 'wp-admin/admin-header.php');
+
+ echo '<div class="wrap">';
+ echo '<h1>' . esc_html( $title ) . '</h1>';
+
+ $url = self_admin_url('update.php?action=update-selected&plugins=' . urlencode( join(',', $plugins) ));
+ $url = wp_nonce_url($url, 'bulk-update-plugins');
+
+ echo "<iframe src='$url' style='width: 100%; height:100%; min-height:850px;'></iframe>";
+ echo '</div>';
+ require_once(ABSPATH . 'wp-admin/admin-footer.php');
+ exit;
+
+ case 'error_scrape':
+ if ( ! current_user_can('activate_plugins') )
+ wp_die(__('You do not have sufficient permissions to activate plugins for this site.'));
+
+ check_admin_referer('plugin-activation-error_' . $plugin);
+
+ $valid = validate_plugin($plugin);
+ if ( is_wp_error($valid) )
+ wp_die($valid);
+
+ if ( ! WP_DEBUG ) {
+ error_reporting( E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_ERROR | E_WARNING | E_PARSE | E_USER_ERROR | E_USER_WARNING | E_RECOVERABLE_ERROR );
+ }
+
+ @ini_set('display_errors', true); //Ensure that Fatal errors are displayed.
+ // Go back to "sandbox" scope so we get the same errors as before
+ /**
+ * @param string $plugin
+ */
+ function plugin_sandbox_scrape( $plugin ) {
+ wp_register_plugin_realpath( WP_PLUGIN_DIR . '/' . $plugin );
+ include( WP_PLUGIN_DIR . '/' . $plugin );
+ }
+ plugin_sandbox_scrape( $plugin );
+ /** This action is documented in wp-admin/includes/plugin.php */
+ do_action( "activate_{$plugin}" );
+ exit;
+
+ 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);
+
+ if ( ! is_network_admin() && is_plugin_active_for_network( $plugin ) ) {
+ wp_redirect( self_admin_url("plugins.php?plugin_status=$status&paged=$page&s=$s") );
+ exit;
+ }
+
+ deactivate_plugins( $plugin, false, is_network_admin() );
+ if ( ! is_network_admin() )
+ 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&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() );