X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/bf5c68485ef07868ad0a91168ecd0092af7661ae..1132430022383fdf47fa6cb9377300fd885297aa:/wp-admin/plugins.php diff --git a/wp-admin/plugins.php b/wp-admin/plugins.php index d339899b..afc83bb4 100644 --- a/wp-admin/plugins.php +++ b/wp-admin/plugins.php @@ -7,16 +7,9 @@ */ /** WordPress Administration Bootstrap */ -require_once('./admin.php'); +require_once( dirname( __FILE__ ) . '/admin.php' ); -if ( is_multisite() ) { - $menu_perms = get_site_option( 'menu_items', array() ); - - if ( empty( $menu_perms['plugins'] ) && ! is_super_admin() ) - wp_die( __( 'Cheatin’ uh?' ) ); -} - -if ( !current_user_can('activate_plugins') ) +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'); @@ -31,18 +24,20 @@ $s = isset($_REQUEST['s']) ? urlencode($_REQUEST['s']) : ''; $_SERVER['REQUEST_URI'] = remove_query_arg(array('error', 'deleted', 'activate', 'activate-multi', 'deactivate', 'deactivate-multi', '_error_nonce'), $_SERVER['REQUEST_URI']); if ( $action ) { - $network_wide = false; - if ( ( isset( $_GET['networkwide'] ) || 'network-activate-selected' == $action ) && is_multisite() && current_user_can( 'manage_network_plugins' ) ) - $network_wide = true; 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), $network_wide); + $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"); @@ -53,20 +48,20 @@ if ( $action ) { } } - $recent = (array)get_option('recently_activated'); - if ( isset($recent[ $plugin ]) ) { - unset($recent[ $plugin ]); - update_option('recently_activated', $recent); + 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; - break; + case 'activate-selected': - case 'network-activate-selected': if ( ! current_user_can('activate_plugins') ) wp_die(__('You do not have sufficient permissions to activate plugins for this site.')); @@ -74,29 +69,39 @@ if ( $action ) { $plugins = isset( $_POST['checked'] ) ? (array) $_POST['checked'] : array(); - // Only activate plugins which are not already active. - $check = $network_wide ? 'is_plugin_active_for_network' : 'is_plugin_active'; - foreach ( $plugins as $i => $plugin ) - if ( $check( $plugin ) ) - unset( $plugins[ $i ] ); + 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'), $network_wide); - - $recent = (array)get_option('recently_activated'); - foreach ( $plugins as $plugin => $time) - if ( isset($recent[ $plugin ]) ) - unset($recent[ $plugin ]); + activate_plugins($plugins, self_admin_url('plugins.php?error=true'), is_network_admin() ); - update_option('recently_activated', $recent); + 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; - break; + case 'update-selected' : check_admin_referer( 'bulk-plugins' ); @@ -111,13 +116,12 @@ if ( $action ) { $title = __( 'Update Plugins' ); $parent_file = 'plugins.php'; + wp_enqueue_script( 'updates' ); require_once(ABSPATH . 'wp-admin/admin-header.php'); echo '
'; - screen_icon(); echo '

' . esc_html( $title ) . '

'; - $url = self_admin_url('update.php?action=update-selected&plugins=' . urlencode( join(',', $plugins) )); $url = wp_nonce_url($url, 'bulk-update-plugins'); @@ -125,7 +129,7 @@ if ( $action ) { echo '
'; require_once(ABSPATH . 'wp-admin/admin-footer.php'); exit; - break; + case 'error_scrape': if ( ! current_user_can('activate_plugins') ) wp_die(__('You do not have sufficient permissions to activate plugins for this site.')); @@ -143,29 +147,34 @@ if ( $action ) { @ini_set('display_errors', true); //Ensure that Fatal errors are displayed. // Go back to "sandbox" scope so we get the same errors as before function plugin_sandbox_scrape( $plugin ) { + wp_register_plugin_realpath( WP_PLUGIN_DIR . '/' . $plugin ); include( WP_PLUGIN_DIR . '/' . $plugin ); } plugin_sandbox_scrape( $plugin ); - do_action('activate_' . $plugin); + /** This action is documented in wp-admin/includes/plugin.php */ + 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); + 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); - update_option('recently_activated', array($plugin => time()) + (array)get_option('recently_activated')); + + 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 ""; else wp_redirect( self_admin_url("plugins.php?deactivate=true&plugin_status=$status&paged=$page&s=$s") ); 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.')); @@ -185,19 +194,22 @@ if ( $action ) { exit; } - deactivate_plugins($plugins); + deactivate_plugins( $plugins, false, is_network_admin() ); - $deactivated = array(); - foreach ( $plugins as $plugin ) - $deactivated[ $plugin ] = time(); + if ( ! is_network_admin() ) { + $deactivated = array(); + foreach ( $plugins as $plugin ) + $deactivated[ $plugin ] = time(); + update_option( 'recently_activated', $deactivated + (array) get_option( 'recently_activated' ) ); + } - update_option('recently_activated', $deactivated + (array)get_option('recently_activated')); wp_redirect( self_admin_url("plugins.php?deactivate-multi=true&plugin_status=$status&paged=$page&s=$s") ); exit; - break; + case 'delete-selected': - if ( ! current_user_can('delete_plugins') ) + 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'); @@ -226,33 +238,48 @@ if ( $action ) { $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'] ) + if ( ! $plugin_info[ $plugin_file ]['Network'] ) { $have_non_network_plugins = true; + } + } + } + + // Add translation files. + if ( ! empty( $plugin_translations[ $plugin_slug ] ) ) { + $translations = $plugin_translations[ $plugin_slug ]; + + foreach ( $translations as $translation => $data ) { + $files_to_delete[] = $plugin_slug . '-' . $translation . '.po'; + $files_to_delete[] = $plugin_slug . '-' . $translation . '.mo'; } } } } - screen_icon(); $plugins_to_delete = count( $plugin_info ); echo '

' . _n( 'Delete Plugin', 'Delete Plugins', $plugins_to_delete ) . '

'; ?> @@ -285,8 +312,9 @@ if ( $action ) { '; + foreach ( (array) $plugins as $plugin ) { + echo ''; + } ?> @@ -299,8 +327,9 @@ if ( $action ) { @@ -314,9 +343,10 @@ if ( $action ) { 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=true&plugin_status=$status&paged=$page&s=$s") ); exit; - break; + case 'clear-recent-list': - update_option('recently_activated', array()); + if ( ! is_network_admin() ) + update_option( 'recently_activated', array() ); break; } } @@ -333,7 +363,7 @@ get_current_screen()->add_help_tab( array( 'title' => __('Overview'), 'content' => '

' . __('Plugins extend and expand the functionality of WordPress. Once a plugin is installed, you may activate it or deactivate it here.') . '

' . - '

' . sprintf(__('You can find additional plugins for your site by using the Plugin Browser/Installer functionality or by browsing the WordPress Plugin Directory directly and installing new plugins manually. To manually install a plugin you generally just need to upload the plugin file into your /wp-content/plugins directory. Once a plugin has been installed, you can activate it here.'), 'plugin-install.php', 'http://wordpress.org/extend/plugins/') . '

' + '

' . sprintf(__('You can find additional plugins for your site by using the Plugin Browser/Installer functionality or by browsing the WordPress Plugin Directory directly and installing new plugins manually. To manually install a plugin you generally just need to upload the plugin file into your /wp-content/plugins directory. Once a plugin has been installed, you can activate it here.'), 'plugin-install.php', 'https://wordpress.org/plugins/') . '

' ) ); get_current_screen()->add_help_tab( array( 'id' => 'compatibility-problems', @@ -346,7 +376,7 @@ get_current_screen()->add_help_tab( array( get_current_screen()->set_help_sidebar( '

' . __('For more information:') . '

' . '

' . __('Documentation on Managing Plugins') . '

' . - '

' . __('Support Forums') . '

' + '

' . __('Support Forums') . '

' ); $title = __('Plugins'); @@ -365,11 +395,11 @@ if ( !empty($invalid) ) if ( isset( $_GET['main'] ) ) $errmsg = __( 'You cannot delete a plugin while it is active on the main site.' ); elseif ( isset($_GET['charsout']) ) - $errmsg = sprintf(__('The plugin generated %d characters of unexpected output during activation. If you notice “headers already sent” messages, problems with syndication feeds or other issues, try deactivating or removing this plugin.'), $_GET['charsout']); + $errmsg = sprintf(__('The plugin generated %d characters of unexpected output during activation. If you notice “headers already sent” messages, problems with syndication feeds or other issues, try deactivating or removing this plugin.'), $_GET['charsout']); else $errmsg = __('Plugin could not be activated because it triggered a fatal error.'); ?> -

+

@@ -378,11 +408,12 @@ if ( !empty($invalid) ) ?>
-

get_error_message() ); ?>

+

get_error_message() ); ?>

deleted.'); ?>

@@ -399,16 +430,29 @@ if ( !empty($invalid) )
-

- + ' . __('Search results for “%s”') . '', esc_html( $s ) ); ?>

- + views(); ?>