<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" /><style type="text/css"><!--
#msg dl { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fc0 solid; padding: 6px; }
#msg ul, pre { overflow: auto; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<title>[15746] trunk: First pass of user admin.</title>
</head>
<body>

<div id="msg">
<dl>
<dt>Revision</dt> <dd><a href="http://trac.wordpress.org/changeset/15746">15746</a></dd>
<dt>Author</dt> <dd>ryan</dd>
<dt>Date</dt> <dd>2010-10-07 19:34:18 +0000 (Thu, 07 Oct 2010)</dd>
</dl>

<h3>Log Message</h3>
<pre>First pass of user admin. Network admin and screen cleanups. see <a href="http://trac.wordpress.org/ticket/14696">#14696</a></pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkwpadminadminphp">trunk/wp-admin/admin.php</a></li>
<li><a href="#trunkwpadmineditcommentsphp">trunk/wp-admin/edit-comments.php</a></li>
<li><a href="#trunkwpadmineditformadvancedphp">trunk/wp-admin/edit-form-advanced.php</a></li>
<li><a href="#trunkwpadmineditlinkformphp">trunk/wp-admin/edit-link-form.php</a></li>
<li><a href="#trunkwpadminedittagsphp">trunk/wp-admin/edit-tags.php</a></li>
<li><a href="#trunkwpadmineditphp">trunk/wp-admin/edit.php</a></li>
<li><a href="#trunkwpadminincludesdashboardphp">trunk/wp-admin/includes/dashboard.php</a></li>
<li><a href="#trunkwpadminincludesdefaultlisttablesphp">trunk/wp-admin/includes/default-list-tables.php</a></li>
<li><a href="#trunkwpadminincludesmenuphp">trunk/wp-admin/includes/menu.php</a></li>
<li><a href="#trunkwpadminincludesmiscphp">trunk/wp-admin/includes/misc.php</a></li>
<li><a href="#trunkwpadminincludesmsphp">trunk/wp-admin/includes/ms.php</a></li>
<li><a href="#trunkwpadminincludestemplatephp">trunk/wp-admin/includes/template.php</a></li>
<li><a href="#trunkwpadminindexextraphp">trunk/wp-admin/index-extra.php</a></li>
<li><a href="#trunkwpadminindexphp">trunk/wp-admin/index.php</a></li>
<li><a href="#trunkwpadminjsdashboarddevjs">trunk/wp-admin/js/dashboard.dev.js</a></li>
<li><a href="#trunkwpadminjsdashboardjs">trunk/wp-admin/js/dashboard.js</a></li>
<li><a href="#trunkwpadminmenuphp">trunk/wp-admin/menu.php</a></li>
<li><a href="#trunkwpadminnetworkeditphp">trunk/wp-admin/network/edit.php</a></li>
<li><a href="#trunkwpadminnetworksettingsphp">trunk/wp-admin/network/settings.php</a></li>
<li><a href="#trunkwpadminnetworksitesphp">trunk/wp-admin/network/sites.php</a></li>
<li><a href="#trunkwpadminnetworkupgradephp">trunk/wp-admin/network/upgrade.php</a></li>
<li><a href="#trunkwpadminnetworkusersphp">trunk/wp-admin/network/users.php</a></li>
<li><a href="#trunkwpadminpluginsphp">trunk/wp-admin/plugins.php</a></li>
<li><a href="#trunkwpadminuploadphp">trunk/wp-admin/upload.php</a></li>
<li><a href="#trunkwpadminusereditphp">trunk/wp-admin/user-edit.php</a></li>
<li><a href="#trunkwpadminusersphp">trunk/wp-admin/users.php</a></li>
<li><a href="#trunkwpincludesadminbaradminbarclassphp">trunk/wp-includes/admin-bar/admin-bar-class.php</a></li>
<li><a href="#trunkwpincludesadminbarphp">trunk/wp-includes/admin-bar.php</a></li>
<li><a href="#trunkwpincludescapabilitiesphp">trunk/wp-includes/capabilities.php</a></li>
<li><a href="#trunkwpincludesfunctionsphp">trunk/wp-includes/functions.php</a></li>
<li><a href="#trunkwpincludeslinktemplatephp">trunk/wp-includes/link-template.php</a></li>
<li><a href="#trunkwpincludesloadphp">trunk/wp-includes/load.php</a></li>
<li><a href="#trunkwpincludesmsfunctionsphp">trunk/wp-includes/ms-functions.php</a></li>
<li><a href="#trunkwpincludespluggablephp">trunk/wp-includes/pluggable.php</a></li>
<li><a href="#trunkwpincludesvarsphp">trunk/wp-includes/vars.php</a></li>
<li><a href="#trunkwploginphp">trunk/wp-login.php</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li>trunk/wp-admin/user/</li>
<li><a href="#trunkwpadminuseradminphp">trunk/wp-admin/user/admin.php</a></li>
<li><a href="#trunkwpadminuserindexextraphp">trunk/wp-admin/user/index-extra.php</a></li>
<li><a href="#trunkwpadminuserindexphp">trunk/wp-admin/user/index.php</a></li>
<li><a href="#trunkwpadminusermenuphp">trunk/wp-admin/user/menu.php</a></li>
<li><a href="#trunkwpadminuserprofilephp">trunk/wp-admin/user/profile.php</a></li>
<li><a href="#trunkwpadminuserusereditphp">trunk/wp-admin/user/user-edit.php</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkwpadminadminphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/admin.php (15745 => 15746)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/admin.php        2010-10-07 18:14:53 UTC (rev 15745)
+++ trunk/wp-admin/admin.php        2010-10-07 19:34:18 UTC (rev 15746)
</span><span class="lines">@@ -11,11 +11,16 @@
</span><span class="cx">  *
</span><span class="cx">  * @since unknown
</span><span class="cx">  */
</span><del>-if ( !defined('WP_ADMIN') )
</del><ins>+if ( ! defined('WP_ADMIN') )
</ins><span class="cx">         define('WP_ADMIN', TRUE);
</span><span class="cx"> 
</span><del>-if ( !defined('WP_NETWORK_ADMIN') ) {
</del><ins>+if ( ! defined('WP_NETWORK_ADMIN') )
</ins><span class="cx">         define('WP_NETWORK_ADMIN', FALSE);
</span><ins>+
+if ( ! defined('WP_USER_ADMIN') )
+        define('WP_USER_ADMIN', FALSE);
+
+if ( ! WP_NETWORK_ADMIN &amp;&amp; ! WP_USER_ADMIN ) {
</ins><span class="cx">         define('WP_BLOG_ADMIN', TRUE);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -97,6 +102,8 @@
</span><span class="cx"> 
</span><span class="cx"> if ( WP_NETWORK_ADMIN )
</span><span class="cx">         require(ABSPATH . 'wp-admin/network/menu.php');
</span><ins>+elseif ( WP_USER_ADMIN )
+        require(ABSPATH . 'wp-admin/user/menu.php');
</ins><span class="cx"> else
</span><span class="cx">         require(ABSPATH . 'wp-admin/menu.php');
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkwpadmineditcommentsphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/edit-comments.php (15745 => 15746)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/edit-comments.php        2010-10-07 18:14:53 UTC (rev 15745)
+++ trunk/wp-admin/edit-comments.php        2010-10-07 19:34:18 UTC (rev 15746)
</span><span class="lines">@@ -105,6 +105,8 @@
</span><span class="cx"> else
</span><span class="cx">         $title = __('Comments');
</span><span class="cx"> 
</span><ins>+add_screen_option( 'per_page', array('label' =&gt; _x( 'Comments', 'comments per page (screen options)' )) );
+
</ins><span class="cx"> add_contextual_help( $current_screen, '&lt;p&gt;' . __('You can manage comments made on your site similar to the way you manage Posts and other content. This screen is customizable in the same ways as other management screens, and you can act on comments using the on-hover action links or the Bulk Actions.') . '&lt;/p&gt;' .
</span><span class="cx">         '&lt;p&gt;' . __('A yellow row means the comment is waiting for you to moderate it.') . '&lt;/p&gt;' .
</span><span class="cx">         '&lt;p&gt;' . __('In the Author column, in addition to the author&amp;#8217;s name, email address, and blog URL, the commenter&amp;#8217;s IP address is shown. Clicking on this link will show you all the comments made from this IP address.') . '&lt;/p&gt;' .
</span></span></pre></div>
<a id="trunkwpadmineditformadvancedphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/edit-form-advanced.php (15745 => 15746)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/edit-form-advanced.php        2010-10-07 18:14:53 UTC (rev 15745)
+++ trunk/wp-admin/edit-form-advanced.php        2010-10-07 19:34:18 UTC (rev 15746)
</span><span class="lines">@@ -163,6 +163,8 @@
</span><span class="cx"> do_action('do_meta_boxes', $post_type, 'advanced', $post);
</span><span class="cx"> do_action('do_meta_boxes', $post_type, 'side', $post);
</span><span class="cx"> 
</span><ins>+add_screen_option('layout_columns', array('max' =&gt; 2) );
+
</ins><span class="cx"> if ( 'post' == $post_type ) {
</span><span class="cx">         add_contextual_help($current_screen,
</span><span class="cx">         '&lt;p&gt;' . __('The title field and the big Post Editing Area are fixed in place, but you can reposition all the other boxes that allow you to add metadata to your post using drag and drop, and can minimize or expand them by clicking the title bar of the box. You can also hide any of the boxes by using the Screen Options tab, where you can also choose a 1- or 2-column layout for this screen.') . '&lt;/p&gt;' .
</span></span></pre></div>
<a id="trunkwpadmineditlinkformphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/edit-link-form.php (15745 => 15746)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/edit-link-form.php        2010-10-07 18:14:53 UTC (rev 15745)
+++ trunk/wp-admin/edit-link-form.php        2010-10-07 19:34:18 UTC (rev 15746)
</span><span class="lines">@@ -37,6 +37,8 @@
</span><span class="cx"> do_action('do_meta_boxes', 'link', 'advanced', $link);
</span><span class="cx"> do_action('do_meta_boxes', 'link', 'side', $link);
</span><span class="cx"> 
</span><ins>+add_screen_option('layout_columns', array('max' =&gt; 2) );
+
</ins><span class="cx"> add_contextual_help($current_screen,
</span><span class="cx">         '&lt;p&gt;' . __( 'You can add or edit links on this screen by entering information in each of the boxes. Only the link&amp;#8217;s web address and name (the text you want to display on your site as the link) are required fields.' ) . '&lt;/p&gt;' .
</span><span class="cx">         '&lt;p&gt;' . __( 'The boxes for link name, web address, and description have fixed positions, while the others may be repositioned using drag and drop. You can also hide boxes you don&amp;#8217;t use in the Screen Options tab, or minimize boxes by clicking on the title bar of the box.' ) . '&lt;/p&gt;' .
</span></span></pre></div>
<a id="trunkwpadminedittagsphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/edit-tags.php (15745 => 15746)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/edit-tags.php        2010-10-07 18:14:53 UTC (rev 15745)
+++ trunk/wp-admin/edit-tags.php        2010-10-07 19:34:18 UTC (rev 15746)
</span><span class="lines">@@ -22,6 +22,8 @@
</span><span class="cx">         $submenu_file = &quot;edit-tags.php?taxonomy=$taxonomy&quot;;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+add_screen_option( 'per_page', array('label' =&gt; $title, 'default' =&gt; 20, 'option' =&gt; 'edit_' . $tax-&gt;name . '_per_page') );
+
</ins><span class="cx"> switch ( $wp_list_table-&gt;current_action() ) {
</span><span class="cx"> 
</span><span class="cx"> case 'add-tag':
</span></span></pre></div>
<a id="trunkwpadmineditphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/edit.php (15745 => 15746)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/edit.php        2010-10-07 18:14:53 UTC (rev 15745)
+++ trunk/wp-admin/edit.php        2010-10-07 19:34:18 UTC (rev 15746)
</span><span class="lines">@@ -163,6 +163,8 @@
</span><span class="cx">         );
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+add_screen_option( 'per_page', array('label' =&gt; $title, 'default' =&gt; 20) );
+
</ins><span class="cx"> require_once('./admin-header.php');
</span><span class="cx"> ?&gt;
</span><span class="cx"> &lt;div class=&quot;wrap&quot;&gt;
</span></span></pre></div>
<a id="trunkwpadminincludesdashboardphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/includes/dashboard.php (15745 => 15746)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/includes/dashboard.php        2010-10-07 18:14:53 UTC (rev 15745)
+++ trunk/wp-admin/includes/dashboard.php        2010-10-07 19:34:18 UTC (rev 15746)
</span><span class="lines">@@ -16,6 +16,7 @@
</span><span class="cx"> function wp_dashboard_setup() {
</span><span class="cx">         global $wp_registered_widgets, $wp_registered_widget_controls, $wp_dashboard_control_callbacks;
</span><span class="cx">         $wp_dashboard_control_callbacks = array();
</span><ins>+        $screen = get_current_screen();
</ins><span class="cx"> 
</span><span class="cx">         $update = false;
</span><span class="cx">         $widget_options = get_option( 'dashboard_widget_options' );
</span><span class="lines">@@ -25,42 +26,47 @@
</span><span class="cx">         /* Register Widgets and Controls */
</span><span class="cx"> 
</span><span class="cx">         // Right Now
</span><del>-        wp_add_dashboard_widget( 'dashboard_right_now', __( 'Right Now' ), 'wp_dashboard_right_now' );
</del><ins>+        if ( is_blog_admin() &amp;&amp; current_user_can('edit_posts') )
+                wp_add_dashboard_widget( 'dashboard_right_now', __( 'Right Now' ), 'wp_dashboard_right_now' );
</ins><span class="cx"> 
</span><span class="cx">         // Recent Comments Widget
</span><del>-        if ( !isset( $widget_options['dashboard_recent_comments'] ) || !isset( $widget_options['dashboard_recent_comments']['items'] ) ) {
-                $update = true;
-                $widget_options['dashboard_recent_comments'] = array(
-                        'items' =&gt; 5,
-                );
</del><ins>+        if ( is_blog_admin() &amp;&amp; current_user_can('moderate_comments') ) {
+                if ( !isset( $widget_options['dashboard_recent_comments'] ) || !isset( $widget_options['dashboard_recent_comments']['items'] ) ) {
+                        $update = true;
+                        $widget_options['dashboard_recent_comments'] = array(
+                                'items' =&gt; 5,
+                        );
+                }
+                $recent_comments_title = __( 'Recent Comments' );
+                wp_add_dashboard_widget( 'dashboard_recent_comments', $recent_comments_title, 'wp_dashboard_recent_comments', 'wp_dashboard_recent_comments_control' );
</ins><span class="cx">         }
</span><del>-        $recent_comments_title = __( 'Recent Comments' );
-        wp_add_dashboard_widget( 'dashboard_recent_comments', $recent_comments_title, 'wp_dashboard_recent_comments', 'wp_dashboard_recent_comments_control' );
</del><span class="cx"> 
</span><span class="cx">         // Incoming Links Widget
</span><del>-        if ( !isset( $widget_options['dashboard_incoming_links'] ) || !isset( $widget_options['dashboard_incoming_links']['home'] ) || $widget_options['dashboard_incoming_links']['home'] != get_option('home') ) {
-                $update = true;
-                $num_items = isset($widget_options['dashboard_incoming_links']['items']) ? $widget_options['dashboard_incoming_links']['items'] : 10;
-                $widget_options['dashboard_incoming_links'] = array(
-                        'home' =&gt; get_option('home'),
-                        'link' =&gt; apply_filters( 'dashboard_incoming_links_link', 'http://blogsearch.google.com/blogsearch?scoring=d&amp;partner=wordpress&amp;q=link:' . trailingslashit( get_option('home') ) ),
-                        'url' =&gt; isset($widget_options['dashboard_incoming_links']['url']) ? apply_filters( 'dashboard_incoming_links_feed', $widget_options['dashboard_incoming_links']['url'] ) : apply_filters( 'dashboard_incoming_links_feed', 'http://blogsearch.google.com/blogsearch_feeds?scoring=d&amp;ie=utf-8&amp;num=' . $num_items . '&amp;output=rss&amp;partner=wordpress&amp;q=link:' . trailingslashit( get_option('home') ) ),
-                        'items' =&gt; $num_items,
-                        'show_date' =&gt; isset($widget_options['dashboard_incoming_links']['show_date']) ? $widget_options['dashboard_incoming_links']['show_date'] : false
-                );
</del><ins>+        if ( is_blog_admin() &amp;&amp; current_user_can('publish_posts') ) {
+                if ( !isset( $widget_options['dashboard_incoming_links'] ) || !isset( $widget_options['dashboard_incoming_links']['home'] ) || $widget_options['dashboard_incoming_links']['home'] != get_option('home') ) {
+                        $update = true;
+                        $num_items = isset($widget_options['dashboard_incoming_links']['items']) ? $widget_options['dashboard_incoming_links']['items'] : 10;
+                        $widget_options['dashboard_incoming_links'] = array(
+                                'home' =&gt; get_option('home'),
+                                'link' =&gt; apply_filters( 'dashboard_incoming_links_link', 'http://blogsearch.google.com/blogsearch?scoring=d&amp;partner=wordpress&amp;q=link:' . trailingslashit( get_option('home') ) ),
+                                'url' =&gt; isset($widget_options['dashboard_incoming_links']['url']) ? apply_filters( 'dashboard_incoming_links_feed', $widget_options['dashboard_incoming_links']['url'] ) : apply_filters( 'dashboard_incoming_links_feed', 'http://blogsearch.google.com/blogsearch_feeds?scoring=d&amp;ie=utf-8&amp;num=' . $num_items . '&amp;output=rss&amp;partner=wordpress&amp;q=link:' . trailingslashit( get_option('home') ) ),
+                                'items' =&gt; $num_items,
+                                'show_date' =&gt; isset($widget_options['dashboard_incoming_links']['show_date']) ? $widget_options['dashboard_incoming_links']['show_date'] : false
+                        );
+                }
+                wp_add_dashboard_widget( 'dashboard_incoming_links', __( 'Incoming Links' ), 'wp_dashboard_incoming_links', 'wp_dashboard_incoming_links_control' );
</ins><span class="cx">         }
</span><del>-        wp_add_dashboard_widget( 'dashboard_incoming_links', __( 'Incoming Links' ), 'wp_dashboard_incoming_links', 'wp_dashboard_incoming_links_control' );
</del><span class="cx"> 
</span><span class="cx">         // WP Plugins Widget
</span><del>-        if ( current_user_can( 'install_plugins' ) )
</del><ins>+        if ( is_blog_admin() &amp;&amp; current_user_can( 'install_plugins' ) )
</ins><span class="cx">                 wp_add_dashboard_widget( 'dashboard_plugins', __( 'Plugins' ), 'wp_dashboard_plugins' );
</span><span class="cx"> 
</span><span class="cx">         // QuickPress Widget
</span><del>-        if ( current_user_can('edit_posts') )
</del><ins>+        if ( is_blog_admin() &amp;&amp; current_user_can('edit_posts') )
</ins><span class="cx">                 wp_add_dashboard_widget( 'dashboard_quick_press', __( 'QuickPress' ), 'wp_dashboard_quick_press' );
</span><span class="cx"> 
</span><span class="cx">         // Recent Drafts
</span><del>-        if ( current_user_can('edit_posts') )
</del><ins>+        if ( is_blog_admin() &amp;&amp; current_user_can('edit_posts') )
</ins><span class="cx">                 wp_add_dashboard_widget( 'dashboard_recent_drafts', __('Recent Drafts'), 'wp_dashboard_recent_drafts' );
</span><span class="cx"> 
</span><span class="cx">         // Primary feed (Dev Blog) Widget
</span><span class="lines">@@ -115,28 +121,32 @@
</span><span class="cx">         if ( $update )
</span><span class="cx">                 update_option( 'dashboard_widget_options', $widget_options );
</span><span class="cx"> 
</span><del>-        do_action('do_meta_boxes', 'dashboard', 'normal', '');
-        do_action('do_meta_boxes', 'dashboard', 'side', '');
</del><ins>+        do_action('do_meta_boxes', $screen-&gt;id, 'normal', '');
+        do_action('do_meta_boxes', $screen-&gt;id, 'side', '');
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> function wp_add_dashboard_widget( $widget_id, $widget_name, $callback, $control_callback = null ) {
</span><ins>+        $screen = get_current_screen();
</ins><span class="cx">         global $wp_dashboard_control_callbacks;
</span><span class="cx">         if ( $control_callback &amp;&amp; current_user_can( 'edit_dashboard' ) &amp;&amp; is_callable( $control_callback ) ) {
</span><span class="cx">                 $wp_dashboard_control_callbacks[$widget_id] = $control_callback;
</span><span class="cx">                 if ( isset( $_GET['edit'] ) &amp;&amp; $widget_id == $_GET['edit'] ) {
</span><span class="cx">                         list($url) = explode( '#', add_query_arg( 'edit', false ), 2 );
</span><span class="cx">                         $widget_name .= ' &lt;span class=&quot;postbox-title-action&quot;&gt;&lt;a href=&quot;' . esc_url( $url ) . '&quot;&gt;' . __( 'Cancel' ) . '&lt;/a&gt;&lt;/span&gt;';
</span><del>-                        add_meta_box( $widget_id, $widget_name, '_wp_dashboard_control_callback', 'dashboard', 'normal', 'core' );
</del><ins>+                        add_meta_box( $widget_id, $widget_name, '_wp_dashboard_control_callback', $screen-&gt;id, 'normal', 'core' );
</ins><span class="cx">                         return;
</span><span class="cx">                 }
</span><span class="cx">                 list($url) = explode( '#', add_query_arg( 'edit', $widget_id ), 2 );
</span><span class="cx">                 $widget_name .= ' &lt;span class=&quot;postbox-title-action&quot;&gt;&lt;a href=&quot;' . esc_url( &quot;$url#$widget_id&quot; ) . '&quot; class=&quot;edit-box open-box&quot;&gt;' . __( 'Configure' ) . '&lt;/a&gt;&lt;/span&gt;';
</span><span class="cx">         }
</span><del>-        $side_widgets = array('dashboard_quick_press', 'dashboard_recent_drafts', 'dashboard_primary', 'dashboard_secondary');
</del><ins>+        if ( is_user_admin() )
+                $side_widgets = array();
+        else
+                $side_widgets = array('dashboard_quick_press', 'dashboard_recent_drafts', 'dashboard_primary', 'dashboard_secondary');
</ins><span class="cx">         $location = 'normal';
</span><span class="cx">         if ( in_array($widget_id, $side_widgets) )
</span><span class="cx">                 $location = 'side';
</span><del>-        add_meta_box( $widget_id, $widget_name , $callback, 'dashboard', $location, 'core' );
</del><ins>+        add_meta_box( $widget_id, $widget_name , $callback, $screen-&gt;id, $location, 'core' );
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> function _wp_dashboard_control_callback( $dashboard, $meta_box ) {
</span><span class="lines">@@ -155,6 +165,8 @@
</span><span class="cx"> function wp_dashboard() {
</span><span class="cx">         global $screen_layout_columns;
</span><span class="cx"> 
</span><ins>+        $screen = get_current_screen();
+
</ins><span class="cx">         $hide2 = $hide3 = $hide4 = '';
</span><span class="cx">         switch ( $screen_layout_columns ) {
</span><span class="cx">                 case 4:
</span><span class="lines">@@ -176,16 +188,16 @@
</span><span class="cx"> &lt;div id=&quot;dashboard-widgets&quot; class=&quot;metabox-holder&quot;&gt;
</span><span class="cx"> &lt;?php
</span><span class="cx">         echo &quot;\t&lt;div class='postbox-container' style='$width'&gt;\n&quot;;
</span><del>-        do_meta_boxes( 'dashboard', 'normal', '' );
</del><ins>+        do_meta_boxes( $screen-&gt;id, 'normal', '' );
</ins><span class="cx"> 
</span><span class="cx">         echo &quot;\t&lt;/div&gt;&lt;div class='postbox-container' style='{$hide2}$width'&gt;\n&quot;;
</span><del>-        do_meta_boxes( 'dashboard', 'side', '' );
</del><ins>+        do_meta_boxes( $screen-&gt;id, 'side', '' );
</ins><span class="cx"> 
</span><span class="cx">         echo &quot;\t&lt;/div&gt;&lt;div class='postbox-container' style='{$hide3}$width'&gt;\n&quot;;
</span><del>-        do_meta_boxes( 'dashboard', 'column3', '' );
</del><ins>+        do_meta_boxes( $screen-&gt;id, 'column3', '' );
</ins><span class="cx"> 
</span><span class="cx">         echo &quot;\t&lt;/div&gt;&lt;div class='postbox-container' style='{$hide4}$width'&gt;\n&quot;;
</span><del>-        do_meta_boxes( 'dashboard', 'column4', '' );
</del><ins>+        do_meta_boxes( $screen-&gt;id, 'column4', '' );
</ins><span class="cx"> ?&gt;
</span><span class="cx"> &lt;/div&gt;&lt;/div&gt;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkwpadminincludesdefaultlisttablesphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/includes/default-list-tables.php (15745 => 15746)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/includes/default-list-tables.php        2010-10-07 18:14:53 UTC (rev 15745)
+++ trunk/wp-admin/includes/default-list-tables.php        2010-10-07 19:34:18 UTC (rev 15746)
</span><span class="lines">@@ -2719,7 +2719,7 @@
</span><span class="cx"> 
</span><span class="cx">         function WP_Sites_Table() {
</span><span class="cx">                 parent::WP_List_Table( array(
</span><del>-                        'screen' =&gt; 'ms-sites',
</del><ins>+                        'screen' =&gt; 'sites-network',
</ins><span class="cx">                         'plural' =&gt; 'sites',
</span><span class="cx">                 ) );
</span><span class="cx">         }
</span><span class="lines">@@ -2734,7 +2734,7 @@
</span><span class="cx"> 
</span><span class="cx">                 $mode = ( empty( $_REQUEST['mode'] ) ) ? 'list' : $_REQUEST['mode'];
</span><span class="cx"> 
</span><del>-                $per_page = $this-&gt;get_items_per_page( 'ms_sites_per_page' );
</del><ins>+                $per_page = $this-&gt;get_items_per_page( 'sites_network_per_page' );
</ins><span class="cx"> 
</span><span class="cx">                 $pagenum = $this-&gt;get_pagenum();
</span><span class="cx"> 
</span><span class="lines">@@ -3007,7 +3007,7 @@
</span><span class="cx"> 
</span><span class="cx">         function WP_MS_Users_Table() {
</span><span class="cx">                 parent::WP_List_Table( array(
</span><del>-                        'screen' =&gt; 'ms-users',
</del><ins>+                        'screen' =&gt; 'users-network',
</ins><span class="cx">                 ) );
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="lines">@@ -3024,7 +3024,7 @@
</span><span class="cx"> 
</span><span class="cx">                 $usersearch = isset( $_REQUEST['s'] ) ? $_REQUEST['s'] : '';
</span><span class="cx"> 
</span><del>-                $users_per_page = $this-&gt;get_items_per_page( 'ms_users_per_page' );
</del><ins>+                $users_per_page = $this-&gt;get_items_per_page( 'users_network_per_page' );
</ins><span class="cx"> 
</span><span class="cx">                 $paged = $this-&gt;get_pagenum();
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkwpadminincludesmenuphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/includes/menu.php (15745 => 15746)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/includes/menu.php        2010-10-07 18:14:53 UTC (rev 15745)
+++ trunk/wp-admin/includes/menu.php        2010-10-07 19:34:18 UTC (rev 15746)
</span><span class="lines">@@ -9,6 +9,8 @@
</span><span class="cx"> 
</span><span class="cx"> if ( is_network_admin() )
</span><span class="cx">         do_action('_network_admin_menu');
</span><ins>+elseif ( is_user_admin() )
+        do_action('_user_admin_menu');
</ins><span class="cx"> else
</span><span class="cx">         do_action('_admin_menu');
</span><span class="cx"> 
</span><span class="lines">@@ -89,6 +91,8 @@
</span><span class="cx"> 
</span><span class="cx"> if ( is_network_admin() )
</span><span class="cx">         do_action('network_admin_menu', '');
</span><ins>+elseif ( is_user_admin() )
+        do_action('user_admin_menu', '');
</ins><span class="cx"> else
</span><span class="cx">         do_action('admin_menu', '');
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkwpadminincludesmiscphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/includes/misc.php (15745 => 15746)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/includes/misc.php        2010-10-07 18:14:53 UTC (rev 15745)
+++ trunk/wp-admin/includes/misc.php        2010-10-07 19:34:18 UTC (rev 15746)
</span><span class="lines">@@ -343,9 +343,9 @@
</span><span class="cx"> 
</span><span class="cx">                 switch ( $map_option ) {
</span><span class="cx">                         case 'edit_per_page':
</span><del>-                        case 'ms_sites_per_page':
</del><ins>+                        case 'sites_network_per_page':
</ins><span class="cx">                         case 'users_per_page':
</span><del>-                        case 'ms_users_per_page':
</del><ins>+                        case 'users_network_per_page':
</ins><span class="cx">                         case 'edit_comments_per_page':
</span><span class="cx">                         case 'upload_per_page':
</span><span class="cx">                         case 'edit_tags_per_page':
</span></span></pre></div>
<a id="trunkwpadminincludesmsphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/includes/ms.php (15745 => 15746)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/includes/ms.php        2010-10-07 18:14:53 UTC (rev 15745)
+++ trunk/wp-admin/includes/ms.php        2010-10-07 19:34:18 UTC (rev 15746)
</span><span class="lines">@@ -502,29 +502,14 @@
</span><span class="cx">         $c ++;
</span><span class="cx"> 
</span><span class="cx">         $blog = get_active_blog_for_user( get_current_user_id() );
</span><del>-        $dashboard_blog = get_dashboard_blog();
</del><ins>+
</ins><span class="cx">         if ( is_object( $blog ) ) {
</span><span class="cx">                 wp_redirect( get_admin_url( $blog-&gt;blog_id, '?c=' . $c ) ); // redirect and count to 5, &quot;just in case&quot;
</span><span class="cx">                 exit;
</span><ins>+        } else {
+                wp_redirect( user_admin_url( '?c=' . $c ) ); // redirect and count to 5, &quot;just in case&quot;
</ins><span class="cx">         }
</span><span class="cx"> 
</span><del>-        /*
-           If the user is a member of only 1 blog and the user's primary_blog isn't set to that blog,
-           then update the primary_blog record to match the user's blog
-         */
-        $blogs = get_blogs_of_user( get_current_user_id() );
-
-        if ( !empty( $blogs ) ) {
-                foreach( $blogs as $blogid =&gt; $blog ) {
-                        if ( $blogid != $dashboard_blog-&gt;blog_id &amp;&amp; get_user_meta( get_current_user_id() , 'primary_blog', true ) == $dashboard_blog-&gt;blog_id ) {
-                                update_user_meta( get_current_user_id(), 'primary_blog', $blogid );
-                                continue;
-                        }
-                }
-                $blog = get_blog_details( get_user_meta( get_current_user_id(), 'primary_blog', true ) );
-                        wp_redirect( get_admin_url( $blog-&gt;blog_id, '?c=' . $c ) );
-                exit;
-        }
</del><span class="cx">         wp_die( __( 'You do not have sufficient permissions to access this page.' ) );
</span><span class="cx"> }
</span><span class="cx"> add_action( 'admin_page_access_denied', 'redirect_user_to_blog', 99 );
</span></span></pre></div>
<a id="trunkwpadminincludestemplatephp"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/includes/template.php (15745 => 15746)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/includes/template.php        2010-10-07 18:14:53 UTC (rev 15745)
+++ trunk/wp-admin/includes/template.php        2010-10-07 19:34:18 UTC (rev 15746)
</span><span class="lines">@@ -1390,6 +1390,9 @@
</span><span class="cx">         if ( is_string($screen) )
</span><span class="cx">                 $screen = convert_to_screen($screen);
</span><span class="cx"> 
</span><ins>+        if ( $screen-&gt;is_user )
+                return;
+
</ins><span class="cx">         if ( isset($screen-&gt;post_type) ) {
</span><span class="cx">                 $post_type_object = get_post_type_object($screen-&gt;post_type);
</span><span class="cx">                 if ( 'add' != $screen-&gt;action )
</span><span class="lines">@@ -1635,7 +1638,7 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> function screen_meta($screen) {
</span><del>-        global $wp_meta_boxes, $_wp_contextual_help, $wp_list_table;
</del><ins>+        global $wp_meta_boxes, $_wp_contextual_help, $wp_list_table, $wp_current_screen_options;
</ins><span class="cx"> 
</span><span class="cx">         if ( is_string($screen) )
</span><span class="cx">                 $screen = convert_to_screen($screen);
</span><span class="lines">@@ -1669,9 +1672,12 @@
</span><span class="cx">                         $show_screen = true;
</span><span class="cx">                         break;
</span><span class="cx">         }
</span><del>-        if( ! empty( $settings ) )
</del><ins>+        if ( ! empty( $settings ) )
</ins><span class="cx">                 $show_screen = true;
</span><span class="cx"> 
</span><ins>+        if ( !empty($wp_current_screen_options) )
+                $show_screen = true;
+
</ins><span class="cx"> ?&gt;
</span><span class="cx"> &lt;div id=&quot;screen-meta&quot;&gt;
</span><span class="cx"> &lt;?php if ( $show_screen ) : ?&gt;
</span><span class="lines">@@ -1796,29 +1802,30 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> function screen_layout($screen) {
</span><del>-        global $screen_layout_columns;
</del><ins>+        global $screen_layout_columns, $wp_current_screen_options;
</ins><span class="cx"> 
</span><span class="cx">         if ( is_string($screen) )
</span><span class="cx">                 $screen = convert_to_screen($screen);
</span><span class="cx"> 
</span><del>-        $columns = array('dashboard' =&gt; 4, 'link' =&gt; 2);
</del><ins>+        // Back compat for plugins using the filter instead of add_screen_option()
+        $columns = apply_filters('screen_layout_columns', array(), $screen-&gt;id, $screen);
+        if ( !empty($columns) &amp;&amp; isset($columns[$screen-&gt;id]) )
+                add_screen_option('layout_columns', array('max' =&gt; $columns[$screen-&gt;id]) );
</ins><span class="cx"> 
</span><del>-        // Add custom post types
-        foreach ( get_post_types( array('show_ui' =&gt; true) ) as $post_type )
-                $columns[$post_type] = 2;
-
-        $columns = apply_filters('screen_layout_columns', $columns, $screen-&gt;id, $screen);
-
-        if ( !isset($columns[$screen-&gt;id]) ) {
</del><ins>+        if ( !isset($wp_current_screen_options['layout_columns']) ) {
</ins><span class="cx">                 $screen_layout_columns = 0;
</span><span class="cx">                 return '';
</span><del>-         }
</del><ins>+        }
</ins><span class="cx"> 
</span><span class="cx">         $screen_layout_columns = get_user_option(&quot;screen_layout_$screen-&gt;id&quot;);
</span><del>-        $num = $columns[$screen-&gt;id];
</del><ins>+        $num = $wp_current_screen_options['layout_columns']['max'];
</ins><span class="cx"> 
</span><del>-        if ( ! $screen_layout_columns )
</del><ins>+        if ( ! $screen_layout_columns ) {
+                if ( isset($wp_current_screen_options['layout_columns']['default']) )
+                        $screen_layout_columns = $wp_current_screen_options['layout_columns']['default'];
+                else
</ins><span class="cx">                         $screen_layout_columns = 2;
</span><ins>+        }
</ins><span class="cx"> 
</span><span class="cx">         $i = 1;
</span><span class="cx">         $return = '&lt;h5&gt;' . __('Screen Layout') . &quot;&lt;/h5&gt;\n&lt;div class='columns-prefs'&gt;&quot; . __('Number of Columns:') . &quot;\n&quot;;
</span><span class="lines">@@ -1830,55 +1837,45 @@
</span><span class="cx">         return $return;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+/**
+ * Register and configure an admin screen option
+ *
+ * @since 3.1.0
+ *
+ * @param string $option An option name.
+ * @param mixed $args Option dependent arguments
+ * @return void
+ */
+function add_screen_option( $option, $args = array() ) {
+        global $wp_current_screen_options;
+
+        if ( !isset($wp_current_screen_options) )
+                $wp_current_screen_options = array();
+
+        $wp_current_screen_options[$option] = $args;
+}
+
</ins><span class="cx"> function screen_options($screen) {
</span><ins>+        global $wp_current_screen_options;
+
</ins><span class="cx">         if ( is_string($screen) )
</span><span class="cx">                 $screen = convert_to_screen($screen);
</span><span class="cx"> 
</span><del>-        switch ( $screen-&gt;base ) {
-                case 'edit':
-                case 'edit-pages':
-                        $post_type = 'post';
-                        if ( isset($_GET['post_type']) &amp;&amp; in_array( $_GET['post_type'], get_post_types( array( 'show_ui' =&gt; true ) ) ) )
-                                $post_type = $_GET['post_type'];
-                        $post_type_object = get_post_type_object($post_type);
-                        $per_page_label = $post_type_object-&gt;labels-&gt;name;
-                        break;
-                case 'ms-sites':
-                        $per_page_label = _x( 'Sites', 'sites per page (screen options)' );
-                        break;
-                case 'users':
-                case 'ms-users':
-                        $per_page_label = _x( 'Users', 'users per page (screen options)' );
-                        break;
-                case 'edit-comments':
-                        $per_page_label = _x( 'Comments', 'comments per page (screen options)' );
-                        break;
-                case 'upload':
-                        $per_page_label = _x( 'Media items', 'items per page (screen options)' );
-                        break;
-                case 'edit-tags':
-                        global $tax;
-                        $per_page_label = $tax-&gt;labels-&gt;name;
-                        break;
-                case 'plugins':
-                        $per_page_label = _x( 'Plugins', 'plugins per page (screen options)' );
-                        break;
-                default:
-                        return '';
-        }
</del><ins>+        if ( !isset($wp_current_screen_options['per_page']) )
+                return '';
</ins><span class="cx"> 
</span><del>-        $option = str_replace( '-', '_', &quot;{$screen-&gt;id}_per_page&quot; );
-        if ( 'edit_tags_per_page' == $option ) {
-                if ( 'category' == $tax-&gt;name )
-                        $option = 'categories_per_page';
-                elseif ( 'post_tag' != $tax-&gt;name )
-                        $option = 'edit_' . $tax-&gt;name . '_per_page';
</del><ins>+        $per_page_label = $wp_current_screen_options['per_page']['label'];
+
+        if ( empty($wp_current_screen_options['per_page']['option']) ) {
+                $option = str_replace( '-', '_', &quot;{$screen-&gt;id}_per_page&quot; );
+        } else {
+                $option = $wp_current_screen_options['per_page']['option'];
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         $per_page = (int) get_user_option( $option );
</span><span class="cx">         if ( empty( $per_page ) || $per_page &lt; 1 ) {
</span><del>-                if ( 'plugins' == $screen-&gt;id )
-                        $per_page = 999;
</del><ins>+                if ( isset($wp_current_screen_options['per_page']['default']) )
+                        $per_page = $wp_current_screen_options['per_page']['default'];
</ins><span class="cx">                 else
</span><span class="cx">                         $per_page = 20;
</span><span class="cx">         }
</span><span class="lines">@@ -1998,6 +1995,22 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> /**
</span><ins>+ *  Get the current screen object
+ *
+ *  @since 3.1.0
+ *
+ * @return object Current screen object
+ */
+function get_current_screen() {
+        global $current_screen;
+
+        if ( !isset($current_screen) )
+                return null;
+
+        return $current_screen;
+}
+
+/**
</ins><span class="cx">  * Set the current screen object
</span><span class="cx">  *
</span><span class="cx">  * @since 3.0.0
</span><span class="lines">@@ -2060,6 +2073,15 @@
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         $current_screen-&gt;is_network = is_network_admin() ? true : false;
</span><ins>+        $current_screen-&gt;is_user = is_user_admin() ? true : false;
+        
+        if ( $current_screen-&gt;is_network ) {
+                $current_screen-&gt;base .= '-network';
+                $current_screen-&gt;id .= '-network';
+        } elseif ( $current_screen-&gt;is_user ) {
+                $current_screen-&gt;base .= '-user';
+                $current_screen-&gt;id .= '-user';
+        }
</ins><span class="cx"> 
</span><span class="cx">         $current_screen = apply_filters('current_screen', $current_screen);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkwpadminindexextraphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/index-extra.php (15745 => 15746)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/index-extra.php        2010-10-07 18:14:53 UTC (rev 15745)
+++ trunk/wp-admin/index-extra.php        2010-10-07 19:34:18 UTC (rev 15746)
</span><span class="lines">@@ -10,7 +10,7 @@
</span><span class="cx"> require_once( './admin.php' );
</span><span class="cx"> 
</span><span class="cx"> /** Load WordPress Administration Dashboard API */
</span><del>-require( './includes/dashboard.php' );
</del><ins>+require(ABSPATH . 'wp-admin/includes/dashboard.php' );
</ins><span class="cx"> 
</span><span class="cx"> @header( 'Content-Type: ' . get_option( 'html_type' ) . '; charset=' . get_option( 'blog_charset' ) );
</span><span class="cx"> send_nosniff_header();
</span></span></pre></div>
<a id="trunkwpadminindexphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/index.php (15745 => 15746)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/index.php        2010-10-07 18:14:53 UTC (rev 15745)
+++ trunk/wp-admin/index.php        2010-10-07 19:34:18 UTC (rev 15746)
</span><span class="lines">@@ -24,6 +24,11 @@
</span><span class="cx"> $title = __('Dashboard');
</span><span class="cx"> $parent_file = 'index.php';
</span><span class="cx"> 
</span><ins>+if ( is_user_admin() )
+        add_screen_option('layout_columns', array('max' =&gt; 4, 'default' =&gt; 1) );
+else
+        add_screen_option('layout_columns', array('max' =&gt; 4, 'default' =&gt; 2) );
+
</ins><span class="cx"> add_contextual_help($current_screen,
</span><span class="cx"> 
</span><span class="cx">         '&lt;p&gt;' . __('Welcome to your WordPress Dashboard! You will find helpful tips in the Help tab of each screen to assist you as you get to know the application.') . '&lt;/p&gt;' .
</span><span class="lines">@@ -42,7 +47,7 @@
</span><span class="cx">         '&lt;p&gt;' . __('&lt;a href=&quot;http://wordpress.org/support/&quot; target=&quot;_blank&quot;&gt;Support Forums&lt;/a&gt;') . '&lt;/p&gt;'
</span><span class="cx"> );
</span><span class="cx"> 
</span><del>-require_once('./admin-header.php');
</del><ins>+include (ABSPATH . 'wp-admin/admin-header.php');
</ins><span class="cx"> 
</span><span class="cx"> $today = current_time('mysql', 1);
</span><span class="cx"> ?&gt;
</span></span></pre></div>
<a id="trunkwpadminjsdashboarddevjs"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/js/dashboard.dev.js (15745 => 15746)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/js/dashboard.dev.js        2010-10-07 18:14:53 UTC (rev 15745)
+++ trunk/wp-admin/js/dashboard.dev.js        2010-10-07 19:34:18 UTC (rev 15746)
</span><span class="lines">@@ -42,7 +42,7 @@
</span><span class="cx">         };
</span><span class="cx">         ajaxPopulateWidgets();
</span><span class="cx"> 
</span><del>-        postboxes.add_postbox_toggles('dashboard', { pbshow: ajaxPopulateWidgets } );
</del><ins>+        postboxes.add_postbox_toggles(pagenow, { pbshow: ajaxPopulateWidgets } );
</ins><span class="cx"> 
</span><span class="cx">         /* QuickPress */
</span><span class="cx">         quickPressLoad = function() {
</span></span></pre></div>
<a id="trunkwpadminjsdashboardjs"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/js/dashboard.js (15745 => 15746)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/js/dashboard.js        2010-10-07 18:14:53 UTC (rev 15745)
+++ trunk/wp-admin/js/dashboard.js        2010-10-07 19:34:18 UTC (rev 15746)
</span><span class="lines">@@ -1 +1 @@
</span><del>-var ajaxWidgets,ajaxPopulateWidgets,quickPressLoad;jQuery(document).ready(function(a){ajaxWidgets=[&quot;dashboard_incoming_links&quot;,&quot;dashboard_primary&quot;,&quot;dashboard_secondary&quot;,&quot;dashboard_plugins&quot;,&quot;dashboard_quick_press&quot;];ajaxPopulateWidgets=function(b){show=function(g,c){var f,d=a(&quot;#&quot;+g+&quot; div.inside:visible&quot;).find(&quot;.widget-loading&quot;);if(d.length){f=d.parent();setTimeout(function(){f.load(&quot;index-extra.php?jax=&quot;+g,&quot;&quot;,function(){f.hide().slideDown(&quot;normal&quot;,function(){a(this).css(&quot;display&quot;,&quot;&quot;);if(&quot;dashboard_plugins&quot;==g&amp;&amp;a.isFunction(tb_init)){tb_init(&quot;#dashboard_plugins a.thickbox&quot;)}if(&quot;dashboard_quick_press&quot;==g&amp;&amp;a.isFunction(tb_init)){tb_init(&quot;#dashboard_quick_press a.thickbox&quot;);quickPressLoad()}})})},c*500)}};if(b){b=b.toString();if(a.inArray(b,ajaxWidgets)!=-1){show(b,0)}}else{a.each(ajaxWidgets,function(c){show(this,c)})}};ajaxPopulateWidgets();postboxes.add_postbox_toggles(&quot;dashboard&quot;,{pbshow:ajaxPopulateWidgets});quickPressLoad=function(){var b=a(&quot;#quickpost-action&quot;),c;c=a(&quot;#quick-press&quot;).submit(function(){a(&quot;#dashboard_quick_press #publishing-action img.waiting&quot;).css(&quot;visibility&quot;,&quot;visible&quot;);a('#quick-press .submit input[type=&quot;submit&quot;], #quick-press .submit input[type=&quot;reset&quot;]').attr(&quot;disabled&quot;,&quot;disabled&quot;);if(&quot;post&quot;==b.val()){b.val(&quot;post-quickpress-publish&quot;)}a(&quot;#dashboard_quick_press div.inside&quot;).load(c.attr(&quot;action&quot;),c.serializeArray(),function(){a(&quot;#dashboard_quick_press #publishing-action img.waiting&quot;).css(&quot;visibility&quot;,&quot;hidden&quot;);a('#quick-press .submit input[type=&quot;submit&quot;], #quick-press .submit input[type=&quot;reset&quot;]').attr(&quot;disabled&quot;,&quot;&quot;);a(&quot;#dashboard_quick_press ul&quot;).next(&quot;p&quot;).remove();a(&quot;#dashboard_quick_press ul&quot;).find(&quot;li&quot;).each(function(){a(&quot;#dashboard_recent_drafts ul&quot;).prepend(this)}).end().remove();tb_init(&quot;a.thickbox&quot;);quickPressLoad()});return false});a(&quot;#publish&quot;).click(function(){b.val(&quot;post-quickpress-publish&quot;)})}});
</del><span class="cx">\ No newline at end of file
</span><ins>+var ajaxWidgets,ajaxPopulateWidgets,quickPressLoad;jQuery(document).ready(function(a){ajaxWidgets=[&quot;dashboard_incoming_links&quot;,&quot;dashboard_primary&quot;,&quot;dashboard_secondary&quot;,&quot;dashboard_plugins&quot;,&quot;dashboard_quick_press&quot;];ajaxPopulateWidgets=function(b){show=function(g,c){var f,d=a(&quot;#&quot;+g+&quot; div.inside:visible&quot;).find(&quot;.widget-loading&quot;);if(d.length){f=d.parent();setTimeout(function(){f.load(&quot;index-extra.php?jax=&quot;+g,&quot;&quot;,function(){f.hide().slideDown(&quot;normal&quot;,function(){a(this).css(&quot;display&quot;,&quot;&quot;);if(&quot;dashboard_plugins&quot;==g&amp;&amp;a.isFunction(tb_init)){tb_init(&quot;#dashboard_plugins a.thickbox&quot;)}if(&quot;dashboard_quick_press&quot;==g&amp;&amp;a.isFunction(tb_init)){tb_init(&quot;#dashboard_quick_press a.thickbox&quot;);quickPressLoad()}})})},c*500)}};if(b){b=b.toString();if(a.inArray(b,ajaxWidgets)!=-1){show(b,0)}}else{a.each(ajaxWidgets,function(c){show(this,c)})}};ajaxPopulateWidgets();postboxes.add_postbox_toggles(pagenow,{pbshow:ajaxPopulateWidgets});quickPressLoad=function(){var b=a(&quot;#quickpost-action&quot;),c;c=a(&quot;#quick-press&quot;).submit(function(){a(&quot;#dashboard_quick_press #publishing-action img.waiting&quot;).css(&quot;visibility&quot;,&quot;visible&quot;);a('#quick-press .submit input[type=&quot;submit&quot;], #quick-press .submit input[type=&quot;reset&quot;]').attr(&quot;disabled&quot;,&quot;disabled&quot;);if(&quot;post&quot;==b.val()){b.val(&quot;post-quickpress-publish&quot;)}a(&quot;#dashboard_quick_press div.inside&quot;).load(c.attr(&quot;action&quot;),c.serializeArray(),function(){a(&quot;#dashboard_quick_press #publishing-action img.waiting&quot;).css(&quot;visibility&quot;,&quot;hidden&quot;);a('#quick-press .submit input[type=&quot;submit&quot;], #quick-press .submit input[type=&quot;reset&quot;]').attr(&quot;disabled&quot;,&quot;&quot;);a(&quot;#dashboard_quick_press ul&quot;).next(&quot;p&quot;).remove();a(&quot;#dashboard_quick_press ul&quot;).find(&quot;li&quot;).each(function(){a(&quot;#dashboard_recent_drafts ul&quot;).prepend(this)}).end().remove();tb_init(&quot;a.thickbox&quot;);quickPressLoad()});return false});a(&quot;#publish&quot;).click(function(){b.val(&quot;post-quickpress-publish&quot;)})}});
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkwpadminmenuphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/menu.php (15745 => 15746)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/menu.php        2010-10-07 18:14:53 UTC (rev 15745)
+++ trunk/wp-admin/menu.php        2010-10-07 19:34:18 UTC (rev 15746)
</span><span class="lines">@@ -232,6 +232,6 @@
</span><span class="cx">         'themes' =&gt; 'appearance',
</span><span class="cx">         );
</span><span class="cx"> 
</span><del>-require(ABSPATH . 'wp-admin/includes/menu.php');
</del><ins>+require_once(ABSPATH . 'wp-admin/includes/menu.php');
</ins><span class="cx"> 
</span><span class="cx"> ?&gt;
</span></span></pre></div>
<a id="trunkwpadminnetworkeditphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/network/edit.php (15745 => 15746)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/network/edit.php        2010-10-07 18:14:53 UTC (rev 15745)
+++ trunk/wp-admin/network/edit.php        2010-10-07 19:34:18 UTC (rev 15746)
</span><span class="lines">@@ -52,8 +52,8 @@
</span><span class="cx">                                                 $user_dropdown = &quot;&lt;select name='blog[$val][{$key}]'&gt;&quot;;
</span><span class="cx">                                                 $user_list = '';
</span><span class="cx">                                                 foreach ( $blog_users as $user ) {
</span><del>-                                                        if ( $user-&gt;user_id != $val &amp;&amp; !in_array( $user-&gt;user_id, $allusers ) )
-                                                                $user_list .= &quot;&lt;option value='{$user-&gt;user_id}'&gt;{$user-&gt;user_login}&lt;/option&gt;&quot;;
</del><ins>+                                                        if ( $user-&gt;user_id != $val &amp;&amp; !in_array( $user-&gt;id, $allusers ) )
+                                                                $user_list .= &quot;&lt;option value='{$user-&gt;id}'&gt;{$user-&gt;user_login}&lt;/option&gt;&quot;;
</ins><span class="cx">                                                 }
</span><span class="cx">                                                 if ( '' == $user_list )
</span><span class="cx">                                                         $user_list = $admin_out;
</span><span class="lines">@@ -137,53 +137,8 @@
</span><span class="cx">                 } else {
</span><span class="cx">                         update_site_option( 'banned_email_domains', '' );
</span><span class="cx">                 }
</span><del>-                update_site_option( 'default_user_role', $_POST['default_user_role'] );
-                if ( trim( $_POST['dashboard_blog_orig'] ) == '' )
-                        $_POST['dashboard_blog_orig'] = $current_site-&gt;blog_id;
-                if ( trim( $_POST['dashboard_blog'] ) == '' ) {
-                        $_POST['dashboard_blog'] = $current_site-&gt;blog_id;
-                        $dashboard_blog_id = $current_site-&gt;blog_id;
-                } elseif ( ! preg_match( '/(--|\.)/', $_POST['dashboard_blog'] ) &amp;&amp; preg_match( '|^([a-zA-Z0-9-\.])+$|', $_POST['dashboard_blog'] ) ) {
-                        $dashboard_blog = $_POST['dashboard_blog'];
-                        $blog_details = get_blog_details( $dashboard_blog );
-                        if ( false === $blog_details ) {
-                                if ( is_numeric( $dashboard_blog ) )
-                                        wp_die( __( 'A dashboard site referenced by ID must already exist' ) );
-                                if ( is_subdomain_install() ) {
-                                        $domain = $dashboard_blog . '.' . $current_site-&gt;domain;
-                                        $path = $current_site-&gt;path;
-                                } else {
-                                        $domain = $current_site-&gt;domain;
-                                        $path = trailingslashit( $current_site-&gt;path . $dashboard_blog );
-                                }
-                                $wpdb-&gt;hide_errors();
-                                $dashboard_blog_id = wpmu_create_blog( $domain, $path, __( 'My Dashboard' ), $current_user-&gt;id , array( 'public' =&gt; 0 ), $current_site-&gt;id );
-                                $wpdb-&gt;show_errors();
-                        } else {
-                                $dashboard_blog_id = $blog_details-&gt;blog_id;
-                        }
-                }
-                if ( is_wp_error( $dashboard_blog_id ) )
-                        wp_die( __( 'Problem creating dashboard site: ' ) . $dashboard_blog_id-&gt;get_error_message() );
-                if ( $_POST['dashboard_blog_orig'] != $_POST['dashboard_blog'] ) {
-                        $users = get_users_of_blog( get_site_option( 'dashboard_blog' ) );
-                        $move_users = array();
-                        foreach ( (array)$users as $user ) {
-                                $user_meta_value = unserialize( $user-&gt;meta_value );
-                                if ( is_array( $user_meta_value ) &amp;&amp; array_pop( $var_by_ref = array_keys( $user_meta_value ) ) == 'subscriber' )
-                                        $move_users[] = $user-&gt;user_id;
-                        }
-                        if ( false == empty( $move_users ) ) {
-                                foreach ( (array)$move_users as $user_id ) {
-                                        remove_user_from_blog($user_id, get_site_option( 'dashboard_blog' ) );
-                                        add_user_to_blog( $dashboard_blog_id, $user_id, get_site_option( 'default_user_role', 'subscriber' ) );
-                                        update_user_meta( $user_id, 'primary_blog', $dashboard_blog_id );
-                                }
-                        }
-                }
-                update_site_option( 'dashboard_blog', $dashboard_blog_id );
</del><span class="cx"> 
</span><del>-                $options = array( 'registrationnotification', 'registration', 'add_new_users', 'menu_items', 'mu_media_buttons', 'upload_space_check_disabled', 'blog_upload_space', 'upload_filetypes', 'site_name', 'first_post', 'first_page', 'first_comment', 'first_comment_url', 'first_comment_author', 'welcome_email', 'welcome_user_email', 'fileupload_maxk', 'admin_notice_feed', 'global_terms_enabled' );
</del><ins>+                $options = array( 'registrationnotification', 'registration', 'add_new_users', 'menu_items', 'mu_media_buttons', 'upload_space_check_disabled', 'blog_upload_space', 'upload_filetypes', 'site_name', 'first_post', 'first_page', 'first_comment', 'first_comment_url', 'first_comment_author', 'welcome_email', 'welcome_user_email', 'fileupload_maxk', 'global_terms_enabled' );
</ins><span class="cx">                 $checked_options = array( 'mu_media_buttons' =&gt; array(), 'menu_items' =&gt; array(), 'registrationnotification' =&gt; 'no', 'upload_space_check_disabled' =&gt; 1, 'add_new_users' =&gt; 0 );
</span><span class="cx">                 foreach ( $checked_options as $option_name =&gt; $option_unchecked_value ) {
</span><span class="cx">                         if ( ! isset( $_POST[$option_name] ) )
</span><span class="lines">@@ -255,8 +210,7 @@
</span><span class="cx">                 $id = wpmu_create_blog( $newdomain, $path, $title, $user_id , array( 'public' =&gt; 1 ), $current_site-&gt;id );
</span><span class="cx">                 $wpdb-&gt;show_errors();
</span><span class="cx">                 if ( !is_wp_error( $id ) ) {
</span><del>-                        $dashboard_blog = get_dashboard_blog();
-                        if ( !is_super_admin( $user_id ) &amp;&amp; get_user_option( 'primary_blog', $user_id ) == $dashboard_blog-&gt;blog_id )
</del><ins>+                        if ( !is_super_admin( $user_id ) &amp;&amp; !get_user_option( 'primary_blog', $user_id ) )
</ins><span class="cx">                                 update_user_option( $user_id, 'primary_blog', $id, true );
</span><span class="cx">                         $content_mail = sprintf( __( &quot;New site created by %1s\n\nAddress: http://%2s\nName: %3s&quot;), $current_user-&gt;user_login , $newdomain . $path, stripslashes( $title ) );
</span><span class="cx">                         wp_mail( get_site_option('admin_email'),  sprintf( __( '[%s] New Site Created' ), $current_site-&gt;site_name ), $content_mail, 'From: &quot;Site Admin&quot; &lt;' . get_site_option( 'admin_email' ) . '&gt;' );
</span><span class="lines">@@ -687,11 +641,6 @@
</span><span class="cx">                 else
</span><span class="cx">                         wp_new_user_notification( $user_id, $password );
</span><span class="cx"> 
</span><del>-                if ( get_site_option( 'dashboard_blog' ) == false )
-                        add_user_to_blog( $current_site-&gt;blog_id, $user_id, get_site_option( 'default_user_role', 'subscriber' ) );
-                else
-                        add_user_to_blog( get_site_option( 'dashboard_blog' ), $user_id, get_site_option( 'default_user_role', 'subscriber' ) );
-
</del><span class="cx">                 wp_redirect( add_query_arg( array( 'updated' =&gt; 'true', 'action' =&gt; 'add' ), wp_get_referer() ) );
</span><span class="cx">                 exit();
</span><span class="cx">         break;
</span></span></pre></div>
<a id="trunkwpadminnetworksettingsphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/network/settings.php (15745 => 15746)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/network/settings.php        2010-10-07 18:14:53 UTC (rev 15745)
+++ trunk/wp-admin/network/settings.php        2010-10-07 19:34:18 UTC (rev 15746)
</span><span class="lines">@@ -43,7 +43,7 @@
</span><span class="cx"> ?&gt;
</span><span class="cx"> 
</span><span class="cx"> &lt;div class=&quot;wrap&quot;&gt;
</span><del>-        &lt;?php screen_icon(); ?&gt;
</del><ins>+        &lt;?php screen_icon('options-general'); ?&gt;
</ins><span class="cx">         &lt;h2&gt;&lt;?php _e( 'Network Options' ) ?&gt;&lt;/h2&gt;
</span><span class="cx">         &lt;form method=&quot;post&quot; action=&quot;edit.php?action=siteoptions&quot;&gt;
</span><span class="cx">                 &lt;?php wp_nonce_field( 'siteoptions' ); ?&gt;
</span><span class="lines">@@ -67,44 +67,6 @@
</span><span class="cx">                                 &lt;/td&gt;
</span><span class="cx">                         &lt;/tr&gt;
</span><span class="cx">                 &lt;/table&gt;
</span><del>-                &lt;h3&gt;&lt;?php _e( 'Dashboard Settings' ); ?&gt;&lt;/h3&gt;
-                &lt;table class=&quot;form-table&quot;&gt;
-                        &lt;tr valign=&quot;top&quot;&gt;
-                                &lt;th scope=&quot;row&quot;&gt;&lt;label for=&quot;dashboard_blog&quot;&gt;&lt;?php _e( 'Dashboard Site' ) ?&gt;&lt;/label&gt;&lt;/th&gt;
-                                &lt;td&gt;
-                                        &lt;?php
-                                        if ( $dashboard_blog = get_site_option( 'dashboard_blog' ) ) {
-                                                $details = get_blog_details( $dashboard_blog );
-                                                $blogname = untrailingslashit( sanitize_user( str_replace( '.', '', str_replace( $current_site-&gt;domain . $current_site-&gt;path, '', $details-&gt;domain . $details-&gt;path ) ) ) );
-                                        } else {
-                                                $blogname = '';
-                                        }?&gt;
-                                        &lt;input name=&quot;dashboard_blog_orig&quot; type=&quot;hidden&quot; id=&quot;dashboard_blog_orig&quot; value=&quot;&lt;?php echo esc_attr( $blogname ); ?&gt;&quot; /&gt;
-                                        &lt;input name=&quot;dashboard_blog&quot; type=&quot;text&quot; id=&quot;dashboard_blog&quot; value=&quot;&lt;?php echo esc_attr( $blogname ); ?&gt;&quot; class=&quot;regular-text&quot; /&gt;
-                                        &lt;br /&gt;
-                                        &lt;?php _e( 'Site path (&amp;#8220;dashboard&amp;#8221;, &amp;#8220;control&amp;#8221;, &amp;#8220;manager&amp;#8221;, etc.) or blog ID.&lt;br /&gt;New users are added to this site as the user role defined below if they don&amp;#8217;t have a site. Leave blank for the main site. Users with the Subscriber role on the old site will be moved to the new site if changed. The new site will be created if it does not exist.' ); ?&gt;
-                                &lt;/td&gt;
-                        &lt;/tr&gt;
-                        &lt;tr valign=&quot;top&quot;&gt;
-                                &lt;th scope=&quot;row&quot;&gt;&lt;label for=&quot;default_user_role&quot;&gt;&lt;?php _e( 'Dashboard User Default Role' ) ?&gt;&lt;/label&gt;&lt;/th&gt;
-                                &lt;td&gt;
-                                        &lt;select name=&quot;default_user_role&quot; id=&quot;default_user_role&quot;&gt;&lt;?php
-                                        wp_dropdown_roles( get_site_option( 'default_user_role', 'subscriber' ) );
-                                        ?&gt;
-                                        &lt;/select&gt;
-                                        &lt;br /&gt;
-                                        &lt;?php _e( 'The default role for new users on the Dashboard site. &amp;#8220;Subscriber&amp;#8221; or &amp;#8220;Contributor&amp;#8221; roles are recommended.' ); ?&gt;
-                                &lt;/td&gt;
-                        &lt;/tr&gt;
-                        &lt;tr valign=&quot;top&quot;&gt;
-                                &lt;th scope=&quot;row&quot;&gt;&lt;label for=&quot;admin_notice_feed&quot;&gt;&lt;?php _e( 'Admin Notice Feed' ) ?&gt;&lt;/label&gt;&lt;/th&gt;
-                                &lt;td&gt;&lt;input name=&quot;admin_notice_feed&quot; class=&quot;large-text&quot; type=&quot;text&quot; id=&quot;admin_notice_feed&quot; value=&quot;&lt;?php echo esc_attr( get_site_option( 'admin_notice_feed' ) ) ?&gt;&quot; size=&quot;80&quot; /&gt;&lt;br /&gt;
-                                &lt;?php _e( 'Display the latest post from this RSS or Atom feed on all site dashboards. Leave blank to disable.' ); ?&gt;&lt;br /&gt;
-
-                                &lt;?php if ( get_site_option( 'admin_notice_feed' ) != get_home_url( $current_site-&gt;id, 'feed/' ) )
-                                        echo __( 'A good one to use would be the feed from your main site: ' ) . esc_url( get_home_url( $current_site-&gt;id, 'feed/' ) ) ?&gt;&lt;/td&gt;
-                        &lt;/tr&gt;
-                &lt;/table&gt;
</del><span class="cx">                 &lt;h3&gt;&lt;?php _e( 'Registration Settings' ); ?&gt;&lt;/h3&gt;
</span><span class="cx">                 &lt;table class=&quot;form-table&quot;&gt;
</span><span class="cx">                         &lt;tr valign=&quot;top&quot;&gt;
</span></span></pre></div>
<a id="trunkwpadminnetworksitesphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/network/sites.php (15745 => 15746)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/network/sites.php        2010-10-07 18:14:53 UTC (rev 15745)
+++ trunk/wp-admin/network/sites.php        2010-10-07 19:34:18 UTC (rev 15746)
</span><span class="lines">@@ -18,6 +18,8 @@
</span><span class="cx"> $title = __( 'Sites' );
</span><span class="cx"> $parent_file = 'sites.php';
</span><span class="cx"> 
</span><ins>+add_screen_option( 'per_page', array('label' =&gt; _x( 'Sites', 'sites per page (screen options)' )) );
+
</ins><span class="cx"> if ( isset( $_REQUEST['action'] ) &amp;&amp; 'editblog' == $_REQUEST['action'] ) {
</span><span class="cx">         add_contextual_help($current_screen,
</span><span class="cx">                 '&lt;p&gt;' . __('This extensive list of options has five modules: Site Info, Site Options, allowing Site Themes for this given site, changing user roles and passwords for that site, adding a new user, and Miscellaneous Site Actions (upload size limits).') . '&lt;/p&gt;' .
</span><span class="lines">@@ -109,7 +111,7 @@
</span><span class="cx">                 require_once( '../admin-header.php' );
</span><span class="cx">                 ?&gt;
</span><span class="cx">                 &lt;div class=&quot;wrap&quot;&gt;
</span><del>-                &lt;?php screen_icon(); ?&gt;
</del><ins>+                &lt;?php screen_icon('index'); ?&gt;
</ins><span class="cx">                 &lt;h2&gt;&lt;?php _e( 'Edit Site' ); ?&gt; - &lt;a href=&quot;&lt;?php echo esc_url( get_home_url( $id ) ); ?&gt;&quot;&gt;&lt;?php echo esc_url( get_home_url( $id ) ); ?&gt;&lt;/a&gt;&lt;/h2&gt;
</span><span class="cx">                 &lt;?php echo $msg; ?&gt;
</span><span class="cx">                 &lt;form method=&quot;post&quot; action=&quot;edit.php?action=updateblog&quot;&gt;
</span><span class="lines">@@ -347,7 +349,7 @@
</span><span class="cx">                 ?&gt;
</span><span class="cx"> 
</span><span class="cx">                 &lt;div class=&quot;wrap&quot;&gt;
</span><del>-                &lt;?php screen_icon(); ?&gt;
</del><ins>+                &lt;?php screen_icon('index'); ?&gt;
</ins><span class="cx">                 &lt;h2&gt;&lt;?php _e('Sites') ?&gt;
</span><span class="cx">                 &lt;?php echo $msg; ?&gt;
</span><span class="cx">                 &lt;a href=&quot;#form-add-site&quot; class=&quot;button add-new-h2&quot;&gt;&lt;?php echo esc_html_x( 'Add New', 'sites' ); ?&gt;&lt;/a&gt;
</span></span></pre></div>
<a id="trunkwpadminnetworkupgradephp"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/network/upgrade.php (15745 => 15746)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/network/upgrade.php        2010-10-07 18:14:53 UTC (rev 15745)
+++ trunk/wp-admin/network/upgrade.php        2010-10-07 19:34:18 UTC (rev 15746)
</span><span class="lines">@@ -32,7 +32,7 @@
</span><span class="cx">         wp_die( __( 'You do not have permission to access this page.' ) );
</span><span class="cx"> 
</span><span class="cx"> echo '&lt;div class=&quot;wrap&quot;&gt;';
</span><del>-screen_icon();
</del><ins>+screen_icon('tools');
</ins><span class="cx"> echo '&lt;h2&gt;' . __( 'Update Network' ) . '&lt;/h2&gt;';
</span><span class="cx"> 
</span><span class="cx"> $action = isset($_GET['action']) ? $_GET['action'] : 'show';
</span></span></pre></div>
<a id="trunkwpadminnetworkusersphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/network/users.php (15745 => 15746)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/network/users.php        2010-10-07 18:14:53 UTC (rev 15745)
+++ trunk/wp-admin/network/users.php        2010-10-07 19:34:18 UTC (rev 15746)
</span><span class="lines">@@ -16,6 +16,8 @@
</span><span class="cx"> $title = __( 'Users' );
</span><span class="cx"> $parent_file = 'users.php';
</span><span class="cx"> 
</span><ins>+add_screen_option( 'per_page', array('label' =&gt; _x( 'Users', 'users per page (screen options)' )) );
+
</ins><span class="cx"> add_contextual_help($current_screen,
</span><span class="cx">         '&lt;p&gt;' . __('This table shows all users across the network and the sites to which they are assigned.') . '&lt;/p&gt;' .
</span><span class="cx">         '&lt;p&gt;' . __('Hover over any user on the list to make the edit links appear. The Edit link on the left will take you to his or her Edit User profile page; the Edit link on the right by any site name goes to an Edit Site screen for that site.') . '&lt;/p&gt;' .
</span></span></pre></div>
<a id="trunkwpadminpluginsphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/plugins.php (15745 => 15746)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/plugins.php        2010-10-07 18:14:53 UTC (rev 15745)
+++ trunk/wp-admin/plugins.php        2010-10-07 19:34:18 UTC (rev 15746)
</span><span class="lines">@@ -290,6 +290,8 @@
</span><span class="cx"> wp_enqueue_script('plugin-install');
</span><span class="cx"> add_thickbox();
</span><span class="cx"> 
</span><ins>+add_screen_option( 'per_page', array('label' =&gt; _x( 'Plugins', 'plugins per page (screen options)' ), 'default' =&gt; 999) );
+
</ins><span class="cx"> add_contextual_help($current_screen,
</span><span class="cx">         '&lt;p&gt;' . __('Plugins extend and expand the functionality of WordPress. Once a plugin is installed, you may activate it or deactivate it here.') . '&lt;/p&gt;' .
</span><span class="cx">         '&lt;p&gt;' . sprintf(__('You can find additional plugins for your site by using the &lt;a href=&quot;%1$s&quot;&gt;Plugin Browser/Installer&lt;/a&gt; functionality or by browsing the &lt;a href=&quot;%2$s&quot; target=&quot;_blank&quot;&gt;WordPress Plugin Directory&lt;/a&gt; directly and installing new plugins manually. To manually install a plugin you generally just need to upload the plugin file into your &lt;code&gt;/wp-content/plugins&lt;/code&gt; directory. Once a plugin has been installed, you can activate it here.'), 'plugin-install.php', 'http://wordpress.org/extend/plugins/') . '&lt;/p&gt;' .
</span></span></pre></div>
<a id="trunkwpadminuploadphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/upload.php (15745 => 15746)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/upload.php        2010-10-07 18:14:53 UTC (rev 15745)
+++ trunk/wp-admin/upload.php        2010-10-07 19:34:18 UTC (rev 15746)
</span><span class="lines">@@ -134,6 +134,8 @@
</span><span class="cx"> wp_enqueue_script( 'jquery-ui-draggable' );
</span><span class="cx"> wp_enqueue_script( 'media' );
</span><span class="cx"> 
</span><ins>+add_screen_option( 'per_page', array('label' =&gt; _x( 'Media items', 'items per page (screen options)' )) );
+
</ins><span class="cx"> add_contextual_help( $current_screen,
</span><span class="cx">         '&lt;p&gt;' . __('All the files you&amp;#8217;ve uploaded are listed in the Media Library, with the most recent uploads listed first. You can use the &lt;em&gt;Screen Options&lt;/em&gt; tab to customize the display of this screen.') . '&lt;/p&gt;' .
</span><span class="cx">         '&lt;p&gt;' . __('You can narrow the list by file type/status using the text link filters at the top of the screen. You also can refine the list by date using the dropdown menu above the media table.') . '&lt;/p&gt;' .
</span></span></pre></div>
<a id="trunkwpadminuseradminphp"></a>
<div class="addfile"><h4>Added: trunk/wp-admin/user/admin.php (0 => 15746)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/user/admin.php                                (rev 0)
+++ trunk/wp-admin/user/admin.php        2010-10-07 19:34:18 UTC (rev 15746)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;?php
+
+define('WP_USER_ADMIN', TRUE);
+
+require_once( dirname(dirname(__FILE__)) . '/admin.php');
+
+if ( ! is_main_site() )
+        wp_redirect( user_admin_url() );
+
+?&gt;
</ins><span class="cx">Property changes on: trunk/wp-admin/user/admin.php
</span><span class="cx">___________________________________________________________________
</span><span class="cx">Name: svn:eol-style
</span><span class="cx">   + native
</span></span></pre></div>
<a id="trunkwpadminuserindexextraphp"></a>
<div class="addfile"><h4>Added: trunk/wp-admin/user/index-extra.php (0 => 15746)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/user/index-extra.php                                (rev 0)
+++ trunk/wp-admin/user/index-extra.php        2010-10-07 19:34:18 UTC (rev 15746)
</span><span class="lines">@@ -0,0 +1,5 @@
</span><ins>+&lt;?php
+
+require_once( './admin.php' );
+
+require( '../index-extra.php' );
</ins><span class="cx">Property changes on: trunk/wp-admin/user/index-extra.php
</span><span class="cx">___________________________________________________________________
</span><span class="cx">Name: svn:eol-style
</span><span class="cx">   + native
</span></span></pre></div>
<a id="trunkwpadminuserindexphp"></a>
<div class="addfile"><h4>Added: trunk/wp-admin/user/index.php (0 => 15746)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/user/index.php                                (rev 0)
+++ trunk/wp-admin/user/index.php        2010-10-07 19:34:18 UTC (rev 15746)
</span><span class="lines">@@ -0,0 +1,5 @@
</span><ins>+&lt;?php
+
+require_once( './admin.php' );
+
+require( '../index.php' );
</ins><span class="cx">Property changes on: trunk/wp-admin/user/index.php
</span><span class="cx">___________________________________________________________________
</span><span class="cx">Name: svn:eol-style
</span><span class="cx">   + native
</span></span></pre></div>
<a id="trunkwpadminusermenuphp"></a>
<div class="addfile"><h4>Added: trunk/wp-admin/user/menu.php (0 => 15746)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/user/menu.php                                (rev 0)
+++ trunk/wp-admin/user/menu.php        2010-10-07 19:34:18 UTC (rev 15746)
</span><span class="lines">@@ -0,0 +1,17 @@
</span><ins>+&lt;?php
+
+$menu[0] = array(__('Dashboard'), 'exist', 'index.php', '', 'menu-top menu-top-first menu-icon-dashboard', 'menu-dashboard', 'div');
+
+$menu[4] = array( '', 'exist', 'separator1', '', 'wp-menu-separator' );
+
+$menu[70] = array( __('Profile'), 'exist', 'profile.php', '', 'menu-top menu-icon-users', 'menu-users', 'div' );
+
+$menu[99] = array( '', 'exist', 'separator-last', '', 'wp-menu-separator-last' );
+
+$_wp_real_parent_file['users.php'] = 'profile.php';
+$compat = array();
+$submenu = array();
+
+require_once(ABSPATH . 'wp-admin/includes/menu.php');
+
+?&gt;
</ins><span class="cx">\ No newline at end of file
</span><span class="cx">Property changes on: trunk/wp-admin/user/menu.php
</span><span class="cx">___________________________________________________________________
</span><span class="cx">Name: svn:eol-style
</span><span class="cx">   + native
</span></span></pre></div>
<a id="trunkwpadminuserprofilephp"></a>
<div class="addfile"><h4>Added: trunk/wp-admin/user/profile.php (0 => 15746)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/user/profile.php                                (rev 0)
+++ trunk/wp-admin/user/profile.php        2010-10-07 19:34:18 UTC (rev 15746)
</span><span class="lines">@@ -0,0 +1,5 @@
</span><ins>+&lt;?php
+
+require_once( './admin.php' );
+
+require( '../profile.php' );
</ins><span class="cx">\ No newline at end of file
</span><span class="cx">Property changes on: trunk/wp-admin/user/profile.php
</span><span class="cx">___________________________________________________________________
</span><span class="cx">Name: svn:eol-style
</span><span class="cx">   + native
</span></span></pre></div>
<a id="trunkwpadminuserusereditphp"></a>
<div class="addfile"><h4>Added: trunk/wp-admin/user/user-edit.php (0 => 15746)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/user/user-edit.php                                (rev 0)
+++ trunk/wp-admin/user/user-edit.php        2010-10-07 19:34:18 UTC (rev 15746)
</span><span class="lines">@@ -0,0 +1,5 @@
</span><ins>+&lt;?php
+
+require_once( './admin.php' );
+
+require( '../user-edit.php' );
</ins><span class="cx">\ No newline at end of file
</span><span class="cx">Property changes on: trunk/wp-admin/user/user-edit.php
</span><span class="cx">___________________________________________________________________
</span><span class="cx">Name: svn:eol-style
</span><span class="cx">   + native
</span></span></pre></div>
<a id="trunkwpadminusereditphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/user-edit.php (15745 => 15746)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/user-edit.php        2010-10-07 18:14:53 UTC (rev 15745)
+++ trunk/wp-admin/user-edit.php        2010-10-07 19:34:18 UTC (rev 15746)
</span><span class="lines">@@ -31,8 +31,12 @@
</span><span class="cx">         $submenu_file = 'users.php';
</span><span class="cx"> else
</span><span class="cx">         $submenu_file = 'profile.php';
</span><del>-$parent_file = 'users.php';
</del><span class="cx"> 
</span><ins>+if ( current_user_can('edit_users') &amp;&amp; !is_user_admin() )
+        $parent_file = 'users.php';
+else
+        $parent_file = 'profile.php';
+
</ins><span class="cx"> // contextual help - choose Help on the top right of admin panel to preview this.
</span><span class="cx"> add_contextual_help($current_screen,
</span><span class="cx">     '&lt;p&gt;' . __('Your profile contains information about you (your &amp;#8220;account&amp;#8221;) as well as some personal options related to using WordPress.') . '&lt;/p&gt;' .
</span></span></pre></div>
<a id="trunkwpadminusersphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/users.php (15745 => 15746)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/users.php        2010-10-07 18:14:53 UTC (rev 15745)
+++ trunk/wp-admin/users.php        2010-10-07 19:34:18 UTC (rev 15746)
</span><span class="lines">@@ -18,6 +18,8 @@
</span><span class="cx"> $title = __('Users');
</span><span class="cx"> $parent_file = 'users.php';
</span><span class="cx"> 
</span><ins>+add_screen_option( 'per_page', array('label' =&gt; _x( 'Users', 'users per page (screen options)' )) );
+
</ins><span class="cx"> // contextual help - choose Help on the top right of admin panel to preview this.
</span><span class="cx"> add_contextual_help($current_screen,
</span><span class="cx">     '&lt;p&gt;' . __('This screen lists all the existing users for your site. Each user has one of five defined roles as set by the site admin: Site Administrator, Editor, Author, Contributor, or Subscriber. Users with roles other than Administrator will see fewer options when they are logged in, based on their role.') . '&lt;/p&gt;' .
</span></span></pre></div>
<a id="trunkwpincludesadminbaradminbarclassphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-includes/admin-bar/admin-bar-class.php (15745 => 15746)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-includes/admin-bar/admin-bar-class.php        2010-10-07 18:14:53 UTC (rev 15745)
+++ trunk/wp-includes/admin-bar/admin-bar-class.php        2010-10-07 19:34:18 UTC (rev 15746)
</span><span class="lines">@@ -15,7 +15,7 @@
</span><span class="cx">                 $this-&gt;user-&gt;blogs = get_ordered_blogs_of_user( $current_user-&gt;id );
</span><span class="cx">                 if ( is_multisite() ) {
</span><span class="cx">                         $this-&gt;user-&gt;active_blog = get_active_blog_for_user( $current_user-&gt;id );
</span><del>-                        $this-&gt;user-&gt;domain = ( $this-&gt;user-&gt;active_blog == 'username only' ) ? get_dashboard_blog() : trailingslashit( get_home_url( $this-&gt;user-&gt;active_blog-&gt;blog_id ) );
</del><ins>+                        $this-&gt;user-&gt;domain = empty( $this-&gt;user-&gt;active_blog ) ? user_admin_url() : trailingslashit( get_home_url( $this-&gt;user-&gt;active_blog-&gt;blog_id ) );
</ins><span class="cx">                         $this-&gt;user-&gt;account_domain = $this-&gt;user-&gt;domain;
</span><span class="cx">                 } else {
</span><span class="cx">                         $this-&gt;user-&gt;active_blog = $this-&gt;user-&gt;blogs[$blog_id];
</span></span></pre></div>
<a id="trunkwpincludesadminbarphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-includes/admin-bar.php (15745 => 15746)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-includes/admin-bar.php        2010-10-07 18:14:53 UTC (rev 15745)
+++ trunk/wp-includes/admin-bar.php        2010-10-07 19:34:18 UTC (rev 15746)
</span><span class="lines">@@ -110,14 +110,6 @@
</span><span class="cx">         if ( !is_object( $wp_admin_bar ) )
</span><span class="cx">                 return false;
</span><span class="cx"> 
</span><del>-        /* Remove the global dashboard */
-        if ( is_multisite() ) {
-                foreach ( (array) $wp_admin_bar-&gt;user-&gt;blogs as $key =&gt; $blog ) {
-                        if ( get_dashboard_blog() == $blog-&gt;domain )
-                                unset( $wp_admin_bar-&gt;user-&gt;blogs[$key] );
-                }
-        }
-
</del><span class="cx">         /* Add the 'My Dashboards' menu if the user has more than one blog. */
</span><span class="cx">         if ( count( $wp_admin_bar-&gt;user-&gt;blogs ) &gt; 1 ) {
</span><span class="cx">                 $wp_admin_bar-&gt;add_menu( array( 'id' =&gt; 'my-blogs', 'title' =&gt; __( 'My Blogs' ), 'href' =&gt; $wp_admin_bar-&gt;user-&gt;account_domain ) );
</span></span></pre></div>
<a id="trunkwpincludescapabilitiesphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-includes/capabilities.php (15745 => 15746)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-includes/capabilities.php        2010-10-07 18:14:53 UTC (rev 15745)
+++ trunk/wp-includes/capabilities.php        2010-10-07 19:34:18 UTC (rev 15746)
</span><span class="lines">@@ -737,6 +737,7 @@
</span><span class="cx"> 
</span><span class="cx">                 // Must have ALL requested caps
</span><span class="cx">                 $capabilities = apply_filters( 'user_has_cap', $this-&gt;allcaps, $caps, $args );
</span><ins>+                $capabilities['exist'] = true; // Everyone is allowed to exist
</ins><span class="cx">                 foreach ( (array) $caps as $cap ) {
</span><span class="cx">                         //echo &quot;Checking cap $cap&lt;br /&gt;&quot;;
</span><span class="cx">                         if ( empty( $capabilities[$cap] ) || !$capabilities[$cap] )
</span></span></pre></div>
<a id="trunkwpincludesfunctionsphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-includes/functions.php (15745 => 15746)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-includes/functions.php        2010-10-07 18:14:53 UTC (rev 15745)
+++ trunk/wp-includes/functions.php        2010-10-07 19:34:18 UTC (rev 15746)
</span><span class="lines">@@ -447,7 +447,7 @@
</span><span class="cx">         if ( empty($site_id) )
</span><span class="cx">                 $site_id = $wpdb-&gt;siteid;
</span><span class="cx"> 
</span><del>-        $core_options = array('site_name', 'siteurl', 'active_sitewide_plugins', '_site_transient_timeout_theme_roots', '_site_transient_theme_roots', 'site_admins', 'dashboard_blog', 'can_compress_scripts', 'global_terms_enabled' );
</del><ins>+        $core_options = array('site_name', 'siteurl', 'active_sitewide_plugins', '_site_transient_timeout_theme_roots', '_site_transient_theme_roots', 'site_admins', 'can_compress_scripts', 'global_terms_enabled' );
</ins><span class="cx"> 
</span><span class="cx">         $core_options_in = &quot;'&quot; . implode(&quot;', '&quot;, $core_options) . &quot;'&quot;;
</span><span class="cx">         $options = $wpdb-&gt;get_results( $wpdb-&gt;prepare(&quot;SELECT meta_key, meta_value FROM $wpdb-&gt;sitemeta WHERE meta_key IN ($core_options_in) AND site_id = %d&quot;, $site_id) );
</span></span></pre></div>
<a id="trunkwpincludeslinktemplatephp"></a>
<div class="modfile"><h4>Modified: trunk/wp-includes/link-template.php (15745 => 15746)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-includes/link-template.php        2010-10-07 18:14:53 UTC (rev 15745)
+++ trunk/wp-includes/link-template.php        2010-10-07 19:34:18 UTC (rev 15746)
</span><span class="lines">@@ -2130,6 +2130,25 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> /**
</span><ins>+ * Retrieve the url to the admin area for the current user.
+ *
+ * @package WordPress
+ * @since 3.0.0
+ *
+ * @param string $path Optional path relative to the admin url
+ * @param string $scheme The scheme to use. Default is 'admin', which obeys force_ssl_admin() and is_ssl(). 'http' or 'https' can be passed to force those schemes.
+ * @return string Admin url link with optional path appended
+*/
+function user_admin_url( $path = '', $scheme = 'admin' ) {
+        $url = network_site_url('wp-admin/user/', $scheme);
+
+        if ( !empty($path) &amp;&amp; is_string($path) &amp;&amp; strpos($path, '..') === false )
+                $url .= ltrim($path, '/');
+
+        return apply_filters('user_admin_url', $url, $path);
+}
+
+/**
</ins><span class="cx">  * Retrieve the url to the admin area for either the current blog or the network depending on context.
</span><span class="cx">  *
</span><span class="cx">  * @package WordPress
</span><span class="lines">@@ -2142,6 +2161,8 @@
</span><span class="cx"> function self_admin_url($path = '', $scheme = 'admin') {
</span><span class="cx">         if ( is_network_admin() )
</span><span class="cx">                 return network_admin_url($path, $scheme);
</span><ins>+        elseif ( is_user_admin() )
+                return user_admin_url($path, $scheme);
</ins><span class="cx">         else
</span><span class="cx">                 return admin_url($path, $scheme);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkwpincludesloadphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-includes/load.php (15745 => 15746)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-includes/load.php        2010-10-07 18:14:53 UTC (rev 15745)
+++ trunk/wp-includes/load.php        2010-10-07 19:34:18 UTC (rev 15746)
</span><span class="lines">@@ -621,6 +621,22 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> /**
</span><ins>+ * Whether the current request is for a user admin screen /wp-admin/user/
+ *
+ * Does not inform on whether the user is an admin! Use capability checks to
+ * tell if the user should be accessing a section or not.
+ *
+ * @since 3.1.0
+ *
+ * @return bool True if inside WordPress user administration pages.
+ */
+function is_user_admin() {
+        if ( defined( 'WP_USER_ADMIN' ) )
+                return WP_USER_ADMIN;
+        return false;
+}
+
+/**
</ins><span class="cx">  * Whether Multisite support is enabled
</span><span class="cx">  *
</span><span class="cx">  * @since 3.0.0
</span></span></pre></div>
<a id="trunkwpincludesmsfunctionsphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-includes/ms-functions.php (15745 => 15746)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-includes/ms-functions.php        2010-10-07 18:14:53 UTC (rev 15745)
+++ trunk/wp-includes/ms-functions.php        2010-10-07 19:34:18 UTC (rev 15746)
</span><span class="lines">@@ -59,7 +59,6 @@
</span><span class="cx">  *
</span><span class="cx">  * @since MU 1.0
</span><span class="cx">  * @uses get_blogs_of_user()
</span><del>- * @uses get_dashboard_blog()
</del><span class="cx">  * @uses add_user_to_blog()
</span><span class="cx">  * @uses update_user_meta()
</span><span class="cx">  * @uses wp_cache_delete()
</span><span class="lines">@@ -72,30 +71,29 @@
</span><span class="cx"> function get_active_blog_for_user( $user_id ) {
</span><span class="cx">         global $wpdb;
</span><span class="cx">         $blogs = get_blogs_of_user( $user_id );
</span><del>-        if ( empty( $blogs ) ) {
-                $details = get_dashboard_blog();
-                add_user_to_blog( $details-&gt;blog_id, $user_id, 'subscriber' );
-                update_user_meta( $user_id, 'primary_blog', $details-&gt;blog_id );
-                wp_cache_delete( $user_id, 'users' );
-                return $details;
-        }
</del><ins>+        if ( empty( $blogs ) )
+                return null;
</ins><span class="cx"> 
</span><ins>+        if ( !is_multisite() )
+                return $blogs[$wpdb-&gt;blogid];
+
</ins><span class="cx">         $primary_blog = get_user_meta( $user_id, 'primary_blog', true );
</span><del>-        $details = get_dashboard_blog();
</del><ins>+        $first_blog = current($blogs);
</ins><span class="cx">         if ( $primary_blog ) {
</span><del>-                if ( isset( $blogs[ $primary_blog ] ) == false ) {
-                        add_user_to_blog( $details-&gt;blog_id, $user_id, 'subscriber' );
-                        update_user_meta( $user_id, 'primary_blog', $details-&gt;blog_id );
-                        wp_cache_delete( $user_id, 'users' );
</del><ins>+                if ( ! isset( $blogs[ $primary_blog ] ) ) {
+                        add_user_to_blog( $first_blog-&gt;blog_id, $user_id, 'subscriber' );
+                        update_user_meta( $user_id, 'primary_blog', $first_blog-&gt;blog_id );
+                        $primary = $first_blog;
</ins><span class="cx">                 } else {
</span><del>-                        $details = get_blog_details( $primary_blog );
</del><ins>+                        $primary = get_blog_details( $primary_blog );
</ins><span class="cx">                 }
</span><span class="cx">         } else {
</span><del>-                add_user_to_blog( $details-&gt;blog_id, $user_id, 'subscriber' ); // Add subscriber permission for dashboard blog
-                update_user_meta( $user_id, 'primary_blog', $details-&gt;blog_id );
</del><ins>+                add_user_to_blog( $first_blog-&gt;blog_id, $user_id, 'subscriber' );
+                update_user_meta( $user_id, 'primary_blog', $first_blog-&gt;blog_id );
+                $primary = $first_blog;
</ins><span class="cx">         }
</span><span class="cx"> 
</span><del>-        if ( ( is_object( $details ) == false ) || ( is_object( $details ) &amp;&amp; $details-&gt;archived == 1 || $details-&gt;spam == 1 || $details-&gt;deleted == 1 ) ) {
</del><ins>+        if ( ( ! is_object( $primary ) ) || ( is_object( $primary ) &amp;&amp; $primary-&gt;archived == 1 || $primary-&gt;spam == 1 || $primary-&gt;deleted == 1 ) ) {
</ins><span class="cx">                 $blogs = get_blogs_of_user( $user_id, true ); // if a user's primary blog is shut down, check their other blogs.
</span><span class="cx">                 $ret = false;
</span><span class="cx">                 if ( is_array( $blogs ) &amp;&amp; count( $blogs ) &gt; 0 ) {
</span><span class="lines">@@ -105,30 +103,19 @@
</span><span class="cx">                                 $details = get_blog_details( $blog_id );
</span><span class="cx">                                 if ( is_object( $details ) &amp;&amp; $details-&gt;archived == 0 &amp;&amp; $details-&gt;spam == 0 &amp;&amp; $details-&gt;deleted == 0 ) {
</span><span class="cx">                                         $ret = $blog;
</span><del>-                                        $changed = false;
-                                        if ( get_user_meta( $user_id , 'primary_blog', true ) != $blog_id ) {
</del><ins>+                                        if ( get_user_meta( $user_id , 'primary_blog', true ) != $blog_id )
</ins><span class="cx">                                                 update_user_meta( $user_id, 'primary_blog', $blog_id );
</span><del>-                                                $changed = true;
-                                        }
-                                        if ( !get_user_meta($user_id , 'source_domain', true) ) {
</del><ins>+                                        if ( !get_user_meta($user_id , 'source_domain', true) )
</ins><span class="cx">                                                 update_user_meta( $user_id, 'source_domain', $blog-&gt;domain );
</span><del>-                                                $changed = true;
-                                        }
-                                        if ( $changed )
-                                                wp_cache_delete( $user_id, 'users' );
</del><span class="cx">                                         break;
</span><span class="cx">                                 }
</span><span class="cx">                         }
</span><span class="cx">                 } else {
</span><del>-                        // Should never get here
-                        $dashboard_blog = get_dashboard_blog();
-                        add_user_to_blog( $dashboard_blog-&gt;blog_id, $user_id, 'subscriber' ); // Add subscriber permission for dashboard blog
-                        update_user_meta( $user_id, 'primary_blog', $dashboard_blog-&gt;blog_id );
-                        return $dashboard_blog;
</del><ins>+                        return null;
</ins><span class="cx">                 }
</span><span class="cx">                 return $ret;
</span><span class="cx">         } else {
</span><del>-                return $details;
</del><ins>+                return $primary;
</ins><span class="cx">         }
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -840,13 +827,7 @@
</span><span class="cx">                         return new WP_Error( 'user_already_exists', __( 'That username is already activated.' ), $signup);
</span><span class="cx"> 
</span><span class="cx">                 wpmu_welcome_user_notification($user_id, $password, $meta);
</span><del>-                $user_site = get_site_option( 'dashboard_blog', $current_site-&gt;blog_id );
</del><span class="cx"> 
</span><del>-                if ( $user_site == false )
-                        add_user_to_blog( '1', $user_id, get_site_option( 'default_user_role', 'subscriber' ) );
-                else
-                        add_user_to_blog( $user_site, $user_id, get_site_option( 'default_user_role', 'subscriber' ) );
-
</del><span class="cx">                 add_new_user_to_blog( $user_id, $user_email, $meta );
</span><span class="cx">                 do_action('wpmu_activate_user', $user_id, $password, $meta);
</span><span class="cx">                 return array('user_id' =&gt; $user_id, 'password' =&gt; $password, 'meta' =&gt; $meta);
</span><span class="lines">@@ -926,7 +907,7 @@
</span><span class="cx">         add_option( 'WPLANG', get_site_option( 'WPLANG' ) );
</span><span class="cx">         update_option( 'blog_public', (int)$meta['public'] );
</span><span class="cx"> 
</span><del>-        if ( !is_super_admin() &amp;&amp; get_user_meta( $user_id, 'primary_blog', true ) == get_site_option( 'dashboard_blog', 1 ) )
</del><ins>+        if ( !is_super_admin() &amp;&amp; ! get_user_meta( $user_id, 'primary_blog', true ) )
</ins><span class="cx">                 update_user_meta( $user_id, 'primary_blog', $blog_id );
</span><span class="cx"> 
</span><span class="cx">         restore_current_blog();
</span><span class="lines">@@ -1460,19 +1441,6 @@
</span><span class="cx"> }
</span><span class="cx"> add_action('update_option_blog_public', 'update_blog_public', 10, 2);
</span><span class="cx"> 
</span><del>-/* Redirect all hits to &quot;dashboard&quot; blog to wp-admin/ Dashboard. */
-function redirect_mu_dashboard() {
-        global $current_site, $current_blog;
-
-        $dashboard_blog = get_dashboard_blog();
-        if ( $current_blog-&gt;blog_id == $dashboard_blog-&gt;blog_id &amp;&amp; $dashboard_blog-&gt;blog_id != $current_site-&gt;blog_id ) {
-                $protocol = ( is_ssl() ? 'https://' : 'http://' );
-                wp_redirect( $protocol . $dashboard_blog-&gt;domain . trailingslashit( $dashboard_blog-&gt;path ) . 'wp-admin/' );
-                die();
-        }
-}
-add_action( 'template_redirect', 'redirect_mu_dashboard' );
-
</del><span class="cx"> function get_dashboard_blog() {
</span><span class="cx">         if ( $blog = get_site_option( 'dashboard_blog' ) )
</span><span class="cx">                 return get_blog_details( $blog );
</span></span></pre></div>
<a id="trunkwpincludespluggablephp"></a>
<div class="modfile"><h4>Modified: trunk/wp-includes/pluggable.php (15745 => 15746)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-includes/pluggable.php        2010-10-07 18:14:53 UTC (rev 15745)
+++ trunk/wp-includes/pluggable.php        2010-10-07 19:34:18 UTC (rev 15746)
</span><span class="lines">@@ -81,7 +81,7 @@
</span><span class="cx">                 return;
</span><span class="cx"> 
</span><span class="cx">         if ( ! $user = wp_validate_auth_cookie() ) {
</span><del>-                 if ( is_admin() || empty($_COOKIE[LOGGED_IN_COOKIE]) || !$user = wp_validate_auth_cookie($_COOKIE[LOGGED_IN_COOKIE], 'logged_in') ) {
</del><ins>+                 if ( is_blog_admin() || is_network_admin() || empty($_COOKIE[LOGGED_IN_COOKIE]) || !$user = wp_validate_auth_cookie($_COOKIE[LOGGED_IN_COOKIE], 'logged_in') ) {
</ins><span class="cx">                          wp_set_current_user(0);
</span><span class="cx">                          return false;
</span><span class="cx">                  }
</span><span class="lines">@@ -775,7 +775,12 @@
</span><span class="cx">                 }
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        if ( $user_id = wp_validate_auth_cookie( '', apply_filters( 'auth_redirect_scheme', '' ) ) ) {
</del><ins>+        if ( is_user_admin() )
+                $scheme = 'logged_in';
+        else
+                $scheme = apply_filters( 'auth_redirect_scheme', '' );
+
+        if ( $user_id = wp_validate_auth_cookie( '',  $scheme) ) {
</ins><span class="cx">                 do_action('auth_redirect', $user_id);
</span><span class="cx"> 
</span><span class="cx">                 // If the user wants ssl but the session is not ssl, redirect.
</span></span></pre></div>
<a id="trunkwpincludesvarsphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-includes/vars.php (15745 => 15746)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-includes/vars.php        2010-10-07 18:14:53 UTC (rev 15745)
+++ trunk/wp-includes/vars.php        2010-10-07 19:34:18 UTC (rev 15746)
</span><span class="lines">@@ -15,7 +15,12 @@
</span><span class="cx"> // On which page are we ?
</span><span class="cx"> if ( is_admin() ) {
</span><span class="cx">         // wp-admin pages are checked more carefully
</span><del>-        preg_match('#/wp-admin/?(.*?)$#i', $PHP_SELF, $self_matches);
</del><ins>+        if ( is_network_admin() )
+                preg_match('#/wp-admin/network/?(.*?)$#i', $PHP_SELF, $self_matches);
+        elseif ( is_user_admin() )
+                preg_match('#/wp-admin/user/?(.*?)$#i', $PHP_SELF, $self_matches);
+        else
+                preg_match('#/wp-admin/?(.*?)$#i', $PHP_SELF, $self_matches);
</ins><span class="cx">         $pagenow = $self_matches[1];
</span><span class="cx">         $pagenow = trim($pagenow, '/');
</span><span class="cx">         $pagenow = preg_replace('#\?.*?$#', '', $pagenow);
</span></span></pre></div>
<a id="trunkwploginphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-login.php (15745 => 15746)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-login.php        2010-10-07 18:14:53 UTC (rev 15745)
+++ trunk/wp-login.php        2010-10-07 19:34:18 UTC (rev 15746)
</span><span class="lines">@@ -572,8 +572,13 @@
</span><span class="cx">                         &lt;/div&gt;&lt;/body&gt;&lt;/html&gt;
</span><span class="cx"> &lt;?php                exit;
</span><span class="cx">                 }
</span><del>-                // If the user can't edit posts, send them to their profile.
-                if ( !$user-&gt;has_cap('edit_posts') &amp;&amp; ( empty( $redirect_to ) || $redirect_to == 'wp-admin/' || $redirect_to == admin_url() ) )
</del><ins>+
+                // If the user doesn't belong to a blog, send them to user admin. If the user can't edit posts, send them to their profile.
+                if ( is_multisite() &amp;&amp; !get_active_blog_for_user($user-&gt;id) )
+                        $redirect_to = user_admin_url();
+                elseif ( !is_multisite() &amp;&amp; !$user-&gt;has_cap('read') )
+                        $redirect_to = user_admin_url();
+                elseif ( !$user-&gt;has_cap('edit_posts') &amp;&amp; ( empty( $redirect_to ) || $redirect_to == 'wp-admin/' || $redirect_to == admin_url() ) )
</ins><span class="cx">                         $redirect_to = admin_url('profile.php');
</span><span class="cx">                 wp_safe_redirect($redirect_to);
</span><span class="cx">                 exit();
</span></span></pre>
</div>
</div>

</body>
</html>