Wordpress 3.5
[autoinstalls/wordpress.git] / wp-admin / includes / class-wp-users-list-table.php
index adb8321475528961f8de6e483acd0322453217dc..9ad3c13aeda2481edb59e52c1ce1cfaade816d9f 100644 (file)
@@ -12,17 +12,17 @@ class WP_Users_List_Table extends WP_List_Table {
        var $site_id;
        var $is_site_users;
 
-       function __construct() {
-               $screen = get_current_screen();
-               $this->is_site_users = 'site-users-network' == $screen->id;
-
-               if ( $this->is_site_users )
-                       $this->site_id = isset( $_REQUEST['id'] ) ? intval( $_REQUEST['id'] ) : 0;
-
+       function __construct( $args = array() ) {
                parent::__construct( array(
                        'singular' => 'user',
-                       'plural'   => 'users'
+                       'plural'   => 'users',
+                       'screen'   => isset( $args['screen'] ) ? $args['screen'] : null,
                ) );
+
+               $this->is_site_users = 'site-users-network' == $this->screen->id;
+
+               if ( $this->is_site_users )
+                       $this->site_id = isset( $_REQUEST['id'] ) ? intval( $_REQUEST['id'] ) : 0;
        }
 
        function ajax_user_can() {
@@ -35,7 +35,7 @@ class WP_Users_List_Table extends WP_List_Table {
        function prepare_items() {
                global $role, $usersearch;
 
-               $usersearch = isset( $_REQUEST['s'] ) ? $_REQUEST['s'] : '';
+               $usersearch = isset( $_REQUEST['s'] ) ? trim( $_REQUEST['s'] ) : '';
 
                $role = isset( $_REQUEST['role'] ) ? $_REQUEST['role'] : '';
 
@@ -136,18 +136,20 @@ class WP_Users_List_Table extends WP_List_Table {
        function extra_tablenav( $which ) {
                if ( 'top' != $which )
                        return;
-               if ( ! current_user_can( 'promote_users' ) )
-                       return;
-?>
+       ?>
        <div class="alignleft actions">
+               <?php if ( current_user_can( 'promote_users' ) ) : ?>
                <label class="screen-reader-text" for="new_role"><?php _e( 'Change role to&hellip;' ) ?></label>
                <select name="new_role" id="new_role">
                        <option value=''><?php _e( 'Change role to&hellip;' ) ?></option>
                        <?php wp_dropdown_roles(); ?>
                </select>
-               <?php submit_button( __( 'Change' ), 'secondary', 'changeit', false ); ?>
-       </div>
-<?php
+       <?php
+                       submit_button( __( 'Change' ), 'button', 'changeit', false );
+               endif;
+
+               do_action( 'restrict_manage_users' );
+               echo '</div>';
        }
 
        function current_action() {
@@ -191,11 +193,19 @@ class WP_Users_List_Table extends WP_List_Table {
                if ( ! $this->is_site_users )
                        $post_counts = count_many_users_posts( array_keys( $this->items ) );
 
+               $editable_roles = array_keys( get_editable_roles() );
+
                $style = '';
                foreach ( $this->items as $userid => $user_object ) {
-                       $role = reset( $user_object->roles );
+                       if ( count( $user_object->roles ) <= 1 ) {
+                               $role = reset( $user_object->roles );
+                       } elseif ( $roles = array_intersect( array_values( $user_object->roles ), $editable_roles ) ) {
+                               $role = reset( $roles );
+                       } else {
+                               $role = reset( $user_object->roles );
+                       }
 
-                       if ( is_multisite() && empty( $role ) )
+                       if ( is_multisite() && empty( $user_object->allcaps ) )
                                continue;
 
                        $style = ( ' class="alternate"' == $style ) ? '' : ' class="alternate"';
@@ -218,7 +228,7 @@ class WP_Users_List_Table extends WP_List_Table {
                global $wp_roles;
 
                if ( !( is_object( $user_object ) && is_a( $user_object, 'WP_User' ) ) )
-                       $user_object = new WP_User( (int) $user_object );
+                       $user_object = get_userdata( (int) $user_object );
                $user_object->filter = 'display';
                $email = $user_object->user_email;
 
@@ -231,12 +241,7 @@ class WP_Users_List_Table extends WP_List_Table {
                // Check if the user for this row is editable
                if ( current_user_can( 'list_users' ) ) {
                        // Set up the user editing link
-                       // TODO: make profile/user-edit determination a separate function
-                       if ( get_current_user_id() == $user_object->ID ) {
-                               $edit_link = 'profile.php';
-                       } else {
-                               $edit_link = esc_url( add_query_arg( 'wp_http_referer', urlencode( stripslashes( $_SERVER['REQUEST_URI'] ) ), "user-edit.php?user_id=$user_object->ID" ) );
-                       }
+                       $edit_link = esc_url( add_query_arg( 'wp_http_referer', urlencode( stripslashes( $_SERVER['REQUEST_URI'] ) ), get_edit_user_link( $user_object->ID ) ) );
 
                        // Set up the hover actions for this user
                        $actions = array();
@@ -256,7 +261,8 @@ class WP_Users_List_Table extends WP_List_Table {
                        $edit .= $this->row_actions( $actions );
 
                        // Set up the checkbox ( because the user is editable, otherwise its empty )
-                       $checkbox = "<input type='checkbox' name='users[]' id='user_{$user_object->ID}' class='$role' value='{$user_object->ID}' />";
+                       $checkbox = '<label class="screen-reader-text" for="cb-select-' . $user_object->ID . '">' . sprintf( __( 'Select %s' ), $user_object->user_login ) . '</label>'
+                                               . "<input type='checkbox' name='users[]' id='user_{$user_object->ID}' class='$role' value='{$user_object->ID}' />";
 
                } else {
                        $edit = '<strong>' . $user_object->user_login . '</strong>';