web/wp-admin/includes/class-wp-users-list-table.php
changeset 204 09a1c134465b
parent 194 32102edaa81b
--- a/web/wp-admin/includes/class-wp-users-list-table.php	Wed Dec 19 12:35:13 2012 -0800
+++ b/web/wp-admin/includes/class-wp-users-list-table.php	Wed Dec 19 17:46:52 2012 -0800
@@ -12,17 +12,17 @@
 	var $site_id;
 	var $is_site_users;
 
-	function __construct() {
-		$screen = get_current_screen();
-		$this->is_site_users = 'site-users-network' == $screen->id;
+	function __construct( $args = array() ) {
+		parent::__construct( array(
+			'singular' => 'user',
+			'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;
-
-		parent::__construct( array(
-			'singular' => 'user',
-			'plural'   => 'users'
-		) );
 	}
 
 	function ajax_user_can() {
@@ -35,7 +35,7 @@
 	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 @@
 	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 @@
 		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 @@
 		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 @@
 		// 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 @@
 			$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>';