]> scripts.mit.edu Git - autoinstalls/wordpress.git/blobdiff - wp-admin/plugins.php
WordPress 4.1-scripts
[autoinstalls/wordpress.git] / wp-admin / plugins.php
index d339899bb21720b407e5356d7646ad54c2860edf..afc83bb4259268c8910f7a29e367d7c850d796c4 100644 (file)
@@ -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 '<div class="wrap">';
-                       screen_icon();
                        echo '<h2>' . esc_html( $title ) . '</h2>';
 
-
                        $url = self_admin_url('update.php?action=update-selected&amp;plugins=' . urlencode( join(',', $plugins) ));
                        $url = wp_nonce_url($url, 'bulk-update-plugins');
 
@@ -125,7 +129,7 @@ if ( $action ) {
                        echo '</div>';
                        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 "<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;
-                       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 ) {
                                <?php
                                        $files_to_delete = $plugin_info = array();
                                        $have_non_network_plugins = false;
+                                       $plugin_translations = wp_get_installed_translations( 'plugins' );
                                        foreach ( (array) $plugins as $plugin ) {
-                                               if ( '.' == dirname($plugin) ) {
+                                               $plugin_slug = dirname( $plugin );
+
+                                               if ( '.' == $plugin_slug ) {
                                                        $files_to_delete[] = WP_PLUGIN_DIR . '/' . $plugin;
-                                                       if( $data = get_plugin_data(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 );
-                                                               if ( ! $plugin_info[ $plugin ]['Network'] )
+                                                               if ( ! $plugin_info[ $plugin ]['Network'] ) {
                                                                        $have_non_network_plugins = true;
+                                                               }
                                                        }
                                                } else {
-                                                       // Locate all the files in that folder
-                                                       $files = list_files( WP_PLUGIN_DIR . '/' . dirname($plugin) );
+                                                       // Locate all the files in that folder.
+                                                       $files = list_files( WP_PLUGIN_DIR . '/' . $plugin_slug );
                                                        if ( $files ) {
-                                                               $files_to_delete = array_merge($files_to_delete, $files);
+                                                               $files_to_delete = array_merge( $files_to_delete, $files );
                                                        }
-                                                       // Get plugins list from that folder
-                                                       if ( $folder_plugins = get_plugins( '/' . dirname($plugin)) ) {
+
+                                                       // 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'] )
+                                                                       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 '<h2>' . _n( 'Delete Plugin', 'Delete Plugins', $plugins_to_delete ) . '</h2>';
                                ?>
@@ -285,8 +312,9 @@ if ( $action ) {
                                        <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) . '" />';
+                                               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 ); ?>
@@ -299,8 +327,9 @@ if ( $action ) {
                                <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>';
+                                               foreach ( (array) $files_to_delete as $file ) {
+                                                       echo '<li>' . esc_html( str_replace( WP_PLUGIN_DIR, '', $file ) ) . '</li>';
+                                               }
                                        ?>
                                        </ul>
                                </div>
@@ -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'      =>
        '<p>' . __('Plugins extend and expand the functionality of WordPress. Once a plugin is installed, you may activate it or deactivate it here.') . '</p>' .
-       '<p>' . sprintf(__('You can find additional plugins for your site by using the <a href="%1$s">Plugin Browser/Installer</a> functionality or by browsing the <a href="%2$s" target="_blank">WordPress Plugin Directory</a> directly and installing new plugins manually. To manually install a plugin you generally just need to upload the plugin file into your <code>/wp-content/plugins</code> directory. Once a plugin has been installed, you can activate it here.'), 'plugin-install.php', 'http://wordpress.org/extend/plugins/') . '</p>'
+       '<p>' . sprintf(__('You can find additional plugins for your site by using the <a href="%1$s">Plugin Browser/Installer</a> functionality or by browsing the <a href="%2$s" target="_blank">WordPress Plugin Directory</a> directly and installing new plugins manually. To manually install a plugin you generally just need to upload the plugin file into your <code>/wp-content/plugins</code> directory. Once a plugin has been installed, you can activate it here.'), 'plugin-install.php', 'https://wordpress.org/plugins/') . '</p>'
 ) );
 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(
        '<p><strong>' . __('For more information:') . '</strong></p>' .
        '<p>' . __('<a href="http://codex.wordpress.org/Managing_Plugins#Plugin_Management" target="_blank">Documentation on Managing Plugins</a>') . '</p>' .
-       '<p>' . __('<a href="http://wordpress.org/support/" target="_blank">Support Forums</a>') . '</p>'
+       '<p>' . __('<a href="https://wordpress.org/support/" target="_blank">Support Forums</a>') . '</p>'
 );
 
 $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 <strong>unexpected output</strong> during activation.  If you notice &#8220;headers already sent&#8221; messages, problems with syndication feeds or other issues, try deactivating or removing this plugin.'), $_GET['charsout']);
+               $errmsg = sprintf(__('The plugin generated %d characters of <strong>unexpected output</strong> during activation. If you notice &#8220;headers already sent&#8221; 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 <strong>fatal error</strong>.');
        ?>
-       <div id="message" class="updated"><p><?php echo $errmsg; ?></p>
+       <div id="message" class="error"><p><?php echo $errmsg; ?></p>
        <?php
                if ( !isset( $_GET['main'] ) && !isset($_GET['charsout']) && wp_verify_nonce($_GET['_error_nonce'], 'plugin-activation-error_' . $plugin) ) { ?>
        <iframe style="border:0" width="100%" height="70px" src="<?php echo 'plugins.php?action=error_scrape&amp;plugin=' . esc_attr($plugin) . '&amp;_wpnonce=' . esc_attr($_GET['_error_nonce']); ?>"></iframe>
@@ -378,11 +408,12 @@ if ( !empty($invalid) )
        ?>
        </div>
 <?php elseif ( isset($_GET['deleted']) ) :
-               $delete_result = get_transient('plugins_delete_result_'.$user_ID);
-               delete_transient('plugins_delete_result'); //Delete it once we're done.
+               $delete_result = get_transient( 'plugins_delete_result_' . $user_ID );
+               // Delete it once we're done.
+               delete_transient( 'plugins_delete_result_' . $user_ID );
 
                if ( is_wp_error($delete_result) ) : ?>
-               <div id="message" class="updated"><p><?php printf( __('Plugin could not be deleted due to an error: %s'), $delete_result->get_error_message() ); ?></p></div>
+               <div id="message" class="error"><p><?php printf( __('Plugin could not be deleted due to an error: %s'), $delete_result->get_error_message() ); ?></p></div>
                <?php else : ?>
                <div id="message" class="updated"><p><?php _e('The selected plugins have been <strong>deleted</strong>.'); ?></p></div>
                <?php endif; ?>
@@ -399,16 +430,29 @@ if ( !empty($invalid) )
 <?php endif; ?>
 
 <div class="wrap">
-<?php screen_icon(); ?>
 <h2><?php echo esc_html( $title );
 if ( ( ! is_multisite() || is_network_admin() ) && current_user_can('install_plugins') ) { ?>
-<a href="<?php echo self_admin_url( 'plugin-install.php' ); ?>" class="add-new-h2"><?php echo esc_html_x('Add New', 'plugin'); ?></a>
+ <a href="<?php echo self_admin_url( 'plugin-install.php' ); ?>" class="add-new-h2"><?php echo esc_html_x('Add New', 'plugin'); ?></a>
 <?php }
 if ( $s )
        printf( '<span class="subtitle">' . __('Search results for &#8220;%s&#8221;') . '</span>', esc_html( $s ) ); ?>
 </h2>
 
-<?php do_action( 'pre_current_active_plugins', $plugins['all'] ) ?>
+<?php
+/**
+ * Fires before the plugins list table is rendered.
+ *
+ * This hook also fires before the plugins list table is rendered in the Network Admin.
+ *
+ * Please note: The 'active' portion of the hook name does not refer to whether the current
+ * view is for active plugins, but rather all plugins actively-installed.
+ *
+ * @since 3.0.0
+ *
+ * @param array $plugins_all An array containing all installed plugins.
+ */
+do_action( 'pre_current_active_plugins', $plugins['all'] );
+?>
 
 <?php $wp_list_table->views(); ?>