web/wp-admin/users.php
changeset 194 32102edaa81b
parent 136 bde1974c263b
child 204 09a1c134465b
equal deleted inserted replaced
193:2f6f6f7551ca 194:32102edaa81b
     5  * @package WordPress
     5  * @package WordPress
     6  * @subpackage Administration
     6  * @subpackage Administration
     7  */
     7  */
     8 
     8 
     9 /** WordPress Administration Bootstrap */
     9 /** WordPress Administration Bootstrap */
    10 require_once('admin.php');
    10 require_once( './admin.php' );
    11 
    11 
    12 /** WordPress Registration API */
    12 if ( ! current_user_can( 'list_users' ) )
    13 require_once( ABSPATH . WPINC . '/registration.php');
    13 	wp_die( __( 'Cheatin’ uh?' ) );
    14 
    14 
    15 if ( !current_user_can('edit_users') )
    15 $wp_list_table = _get_list_table('WP_Users_List_Table');
    16 	wp_die(__('Cheatin’ uh?'));
    16 $pagenum = $wp_list_table->get_pagenum();
    17 
       
    18 $title = __('Users');
    17 $title = __('Users');
    19 $parent_file = 'users.php';
    18 $parent_file = 'users.php';
    20 
    19 
    21 $update = $doaction = '';
    20 add_screen_option( 'per_page', array('label' => _x( 'Users', 'users per page (screen options)' )) );
    22 if ( isset($_REQUEST['action']) )
    21 
    23 	$doaction = $_REQUEST['action'] ? $_REQUEST['action'] : $_REQUEST['action2'];
    22 // contextual help - choose Help on the top right of admin panel to preview this.
    24 
    23 get_current_screen()->add_help_tab( array(
    25 if ( empty($doaction) ) {
    24 	'id'      => 'overview',
    26 	if ( isset($_GET['changeit']) && !empty($_GET['new_role']) )
    25 	'title'   => __('Overview'),
    27 		$doaction = 'promote';
    26 	'content' => '<p>' . __('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 in the dashboard navigation when they are logged in, based on their role.') . '</p>' .
    28 }
    27 				 '<p>' . __('To add a new user for your site, click the Add New button at the top of the screen or Add New in the Users menu section.') . '</p>'
       
    28 ) ) ;
       
    29 
       
    30 get_current_screen()->add_help_tab( array(
       
    31 	'id'      => 'screen-display',
       
    32 	'title'   => __('Screen Display'),
       
    33 	'content' => '<p>' . __('You can customize the display of this screen in a number of ways:') . '</p>' .
       
    34 					'<ul>' .
       
    35 					'<li>' . __('You can hide/display columns based on your needs and decide how many users to list per screen using the Screen Options tab.') . '</li>' .
       
    36 					'<li>' . __('You can filter the list of users by User Role using the text links in the upper left to show All, Administrator, Editor, Author, Contributor, or Subscriber. The default view is to show all users. Unused User Roles are not listed.') . '</li>' .
       
    37 					'<li>' . __('You can view all posts made by a user by clicking on the number under the Posts column.') . '</li>' .
       
    38 					'</ul>'
       
    39 ) );
       
    40 
       
    41 $help = '<p>' . __('Hovering over a row in the users list will display action links that allow you to manage users. You can perform the following actions:') . '</p>' .
       
    42 	'<ul>' .
       
    43 	'<li>' . __('Edit takes you to the editable profile screen for that user. You can also reach that screen by clicking on the username.') . '</li>';
       
    44 
       
    45 if ( is_multisite() )
       
    46 	$help .= '<li>' . __( 'Remove allows you to remove a user from your site. It does not delete their posts. You can also remove multiple users at once by using Bulk Actions.' ) . '</li>';
       
    47 else
       
    48 	$help .= '<li>' . __( 'Delete brings you to the Delete Users screen for confirmation, where you can permanently remove a user from your site and delete their posts. You can also delete multiple users at once by using Bulk Actions.' ) . '</li>';
       
    49 
       
    50 $help .= '</ul>';
       
    51 
       
    52 get_current_screen()->add_help_tab( array(
       
    53 	'id'      => 'actions',
       
    54 	'title'   => __('Actions'),
       
    55 	'content' => $help,
       
    56 ) );
       
    57 unset( $help );
       
    58 
       
    59 get_current_screen()->set_help_sidebar(
       
    60     '<p><strong>' . __('For more information:') . '</strong></p>' .
       
    61     '<p>' . __('<a href="http://codex.wordpress.org/Users_Screen" target="_blank">Documentation on Managing Users</a>') . '</p>' .
       
    62     '<p>' . __('<a href="http://codex.wordpress.org/Roles_and_Capabilities" target="_blank">Descriptions of Roles and Capabilities</a>') . '</p>' .
       
    63     '<p>' . __('<a href="http://wordpress.org/support/" target="_blank">Support Forums</a>') . '</p>'
       
    64 );
    29 
    65 
    30 if ( empty($_REQUEST) ) {
    66 if ( empty($_REQUEST) ) {
    31 	$referer = '<input type="hidden" name="wp_http_referer" value="'. esc_attr(stripslashes($_SERVER['REQUEST_URI'])) . '" />';
    67 	$referer = '<input type="hidden" name="wp_http_referer" value="'. esc_attr(stripslashes($_SERVER['REQUEST_URI'])) . '" />';
    32 } elseif ( isset($_REQUEST['wp_http_referer']) ) {
    68 } elseif ( isset($_REQUEST['wp_http_referer']) ) {
    33 	$redirect = remove_query_arg(array('wp_http_referer', 'updated', 'delete_count'), stripslashes($_REQUEST['wp_http_referer']));
    69 	$redirect = remove_query_arg(array('wp_http_referer', 'updated', 'delete_count'), stripslashes($_REQUEST['wp_http_referer']));
    35 } else {
    71 } else {
    36 	$redirect = 'users.php';
    72 	$redirect = 'users.php';
    37 	$referer = '';
    73 	$referer = '';
    38 }
    74 }
    39 
    75 
    40 switch ($doaction) {
    76 $update = '';
       
    77 
       
    78 switch ( $wp_list_table->current_action() ) {
    41 
    79 
    42 /* Bulk Dropdown menu Role changes */
    80 /* Bulk Dropdown menu Role changes */
    43 case 'promote':
    81 case 'promote':
    44 	check_admin_referer('bulk-users');
    82 	check_admin_referer('bulk-users');
    45 
    83 
    46 	if (empty($_REQUEST['users'])) {
    84 	if ( ! current_user_can( 'promote_users' ) )
    47 		wp_redirect($redirect);
    85 		wp_die( __( 'You can&#8217;t edit that user.' ) );
    48 		exit();
       
    49 	}
       
    50 
       
    51 	$editable_roles = get_editable_roles();
       
    52 	if (!$editable_roles[$_REQUEST['new_role']])
       
    53 		wp_die(__('You can&#8217;t give users that role.'));
       
    54 
       
    55 	$userids = $_REQUEST['users'];
       
    56 	$update = 'promote';
       
    57 	foreach($userids as $id) {
       
    58 		if ( ! current_user_can('edit_user', $id) )
       
    59 			wp_die(__('You can&#8217;t edit that user.'));
       
    60 		// The new role of the current user must also have edit_users caps
       
    61 		if($id == $current_user->ID && !$wp_roles->role_objects[$_REQUEST['new_role']]->has_cap('edit_users')) {
       
    62 			$update = 'err_admin_role';
       
    63 			continue;
       
    64 		}
       
    65 
       
    66 		$user = new WP_User($id);
       
    67 		$user->set_role($_REQUEST['new_role']);
       
    68 	}
       
    69 
       
    70 	wp_redirect(add_query_arg('update', $update, $redirect));
       
    71 	exit();
       
    72 
       
    73 break;
       
    74 
       
    75 case 'dodelete':
       
    76 
       
    77 	check_admin_referer('delete-users');
       
    78 
    86 
    79 	if ( empty($_REQUEST['users']) ) {
    87 	if ( empty($_REQUEST['users']) ) {
    80 		wp_redirect($redirect);
    88 		wp_redirect($redirect);
    81 		exit();
    89 		exit();
    82 	}
    90 	}
    83 
    91 
    84 	if ( !current_user_can('delete_users') )
    92 	$editable_roles = get_editable_roles();
       
    93 	if ( empty( $editable_roles[$_REQUEST['new_role']] ) )
       
    94 		wp_die(__('You can&#8217;t give users that role.'));
       
    95 
       
    96 	$userids = $_REQUEST['users'];
       
    97 	$update = 'promote';
       
    98 	foreach ( $userids as $id ) {
       
    99 		$id = (int) $id;
       
   100 
       
   101 		if ( ! current_user_can('promote_user', $id) )
       
   102 			wp_die(__('You can&#8217;t edit that user.'));
       
   103 		// The new role of the current user must also have the promote_users cap or be a multisite super admin
       
   104 		if ( $id == $current_user->ID && ! $wp_roles->role_objects[ $_REQUEST['new_role'] ]->has_cap('promote_users')
       
   105 			&& ! ( is_multisite() && is_super_admin() ) ) {
       
   106 				$update = 'err_admin_role';
       
   107 				continue;
       
   108 		}
       
   109 
       
   110 		// If the user doesn't already belong to the blog, bail.
       
   111 		if ( is_multisite() && !is_user_member_of_blog( $id ) )
       
   112 			wp_die(__('Cheatin&#8217; uh?'));
       
   113 
       
   114 		$user = new WP_User($id);
       
   115 		$user->set_role($_REQUEST['new_role']);
       
   116 	}
       
   117 
       
   118 	wp_redirect(add_query_arg('update', $update, $redirect));
       
   119 	exit();
       
   120 
       
   121 break;
       
   122 
       
   123 case 'dodelete':
       
   124 	if ( is_multisite() )
       
   125 		wp_die( __('User deletion is not allowed from this screen.') );
       
   126 
       
   127 	check_admin_referer('delete-users');
       
   128 
       
   129 	if ( empty($_REQUEST['users']) ) {
       
   130 		wp_redirect($redirect);
       
   131 		exit();
       
   132 	}
       
   133 
       
   134 	if ( ! current_user_can( 'delete_users' ) )
    85 		wp_die(__('You can&#8217;t delete users.'));
   135 		wp_die(__('You can&#8217;t delete users.'));
    86 
   136 
    87 	$userids = $_REQUEST['users'];
   137 	$userids = $_REQUEST['users'];
    88 	$update = 'del';
   138 	$update = 'del';
    89 	$delete_count = 0;
   139 	$delete_count = 0;
    90 
   140 
    91 	foreach ( (array) $userids as $id) {
   141 	foreach ( (array) $userids as $id) {
    92 		if ( ! current_user_can('delete_user', $id) )
   142 		$id = (int) $id;
    93 			wp_die(__('You can&#8217;t delete that user.'));
   143 
    94 
   144 		if ( ! current_user_can( 'delete_user', $id ) )
    95 		if($id == $current_user->ID) {
   145 			wp_die(__( 'You can&#8217;t delete that user.' ) );
       
   146 
       
   147 		if ( $id == $current_user->ID ) {
    96 			$update = 'err_admin_del';
   148 			$update = 'err_admin_del';
    97 			continue;
   149 			continue;
    98 		}
   150 		}
    99 		switch($_REQUEST['delete_option']) {
   151 		switch ( $_REQUEST['delete_option'] ) {
   100 		case 'delete':
   152 		case 'delete':
   101 			wp_delete_user($id);
   153 			if ( current_user_can('delete_user', $id) )
       
   154 				wp_delete_user($id);
   102 			break;
   155 			break;
   103 		case 'reassign':
   156 		case 'reassign':
   104 			wp_delete_user($id, $_REQUEST['reassign_user']);
   157 			if ( current_user_can('delete_user', $id) )
       
   158 				wp_delete_user($id, $_REQUEST['reassign_user']);
   105 			break;
   159 			break;
   106 		}
   160 		}
   107 		++$delete_count;
   161 		++$delete_count;
   108 	}
   162 	}
   109 
   163 
   112 	exit();
   166 	exit();
   113 
   167 
   114 break;
   168 break;
   115 
   169 
   116 case 'delete':
   170 case 'delete':
       
   171 	if ( is_multisite() )
       
   172 		wp_die( __('User deletion is not allowed from this screen.') );
   117 
   173 
   118 	check_admin_referer('bulk-users');
   174 	check_admin_referer('bulk-users');
   119 
   175 
   120 	if ( empty($_REQUEST['users']) && empty($_REQUEST['user']) ) {
   176 	if ( empty($_REQUEST['users']) && empty($_REQUEST['user']) ) {
   121 		wp_redirect($redirect);
   177 		wp_redirect($redirect);
   122 		exit();
   178 		exit();
   123 	}
   179 	}
   124 
   180 
   125 	if ( !current_user_can('delete_users') )
   181 	if ( ! current_user_can( 'delete_users' ) )
   126 		$errors = new WP_Error('edit_users', __('You can&#8217;t delete users.'));
   182 		$errors = new WP_Error( 'edit_users', __( 'You can&#8217;t delete users.' ) );
   127 
   183 
   128 	if ( empty($_REQUEST['users']) )
   184 	if ( empty($_REQUEST['users']) )
   129 		$userids = array(intval($_REQUEST['user']));
   185 		$userids = array(intval($_REQUEST['user']));
   130 	else
   186 	else
   131 		$userids = $_REQUEST['users'];
   187 		$userids = (array) $_REQUEST['users'];
   132 
   188 
   133 	include ('admin-header.php');
   189 	include ('admin-header.php');
   134 ?>
   190 ?>
   135 <form action="" method="post" name="updateusers" id="updateusers">
   191 <form action="" method="post" name="updateusers" id="updateusers">
   136 <?php wp_nonce_field('delete-users') ?>
   192 <?php wp_nonce_field('delete-users') ?>
   137 <?php echo $referer; ?>
   193 <?php echo $referer; ?>
   138 
   194 
   139 <div class="wrap">
   195 <div class="wrap">
   140 <?php screen_icon(); ?>
   196 <?php screen_icon(); ?>
   141 <h2><?php _e('Delete Users'); ?></h2>
   197 <h2><?php _e('Delete Users'); ?></h2>
   142 <p><?php _e('You have specified these users for deletion:'); ?></p>
   198 <p><?php echo _n( 'You have specified this user for deletion:', 'You have specified these users for deletion:', count( $userids ) ); ?></p>
   143 <ul>
   199 <ul>
   144 <?php
   200 <?php
   145 	$go_delete = false;
   201 	$go_delete = 0;
   146 	foreach ( (array) $userids as $id ) {
   202 	foreach ( $userids as $id ) {
   147 		$id = (int) $id;
   203 		$id = (int) $id;
   148 		$user = new WP_User($id);
   204 		$user = new WP_User($id);
   149 		if ( $id == $current_user->ID ) {
   205 		if ( $id == $current_user->ID ) {
   150 			echo "<li>" . sprintf(__('ID #%1s: %2s <strong>The current user will not be deleted.</strong>'), $id, $user->user_login) . "</li>\n";
   206 			echo "<li>" . sprintf(__('ID #%1s: %2s <strong>The current user will not be deleted.</strong>'), $id, $user->user_login) . "</li>\n";
   151 		} else {
   207 		} else {
   152 			echo "<li><input type=\"hidden\" name=\"users[]\" value=\"" . esc_attr($id) . "\" />" . sprintf(__('ID #%1s: %2s'), $id, $user->user_login) . "</li>\n";
   208 			echo "<li><input type=\"hidden\" name=\"users[]\" value=\"" . esc_attr($id) . "\" />" . sprintf(__('ID #%1s: %2s'), $id, $user->user_login) . "</li>\n";
   153 			$go_delete = true;
   209 			$go_delete++;
   154 		}
   210 		}
   155 	}
   211 	}
   156 	$all_logins = $wpdb->get_results("SELECT ID, user_login FROM $wpdb->users ORDER BY user_login");
       
   157 	$user_dropdown = '<select name="reassign_user">';
       
   158 	foreach ( (array) $all_logins as $login )
       
   159 		if ( $login->ID == $current_user->ID || !in_array($login->ID, $userids) )
       
   160 			$user_dropdown .= "<option value=\"" . esc_attr($login->ID) . "\">{$login->user_login}</option>";
       
   161 	$user_dropdown .= '</select>';
       
   162 	?>
   212 	?>
   163 	</ul>
   213 	</ul>
   164 <?php if ( $go_delete ) : ?>
   214 <?php if ( $go_delete ) : ?>
   165 	<fieldset><p><legend><?php _e('What should be done with posts and links owned by this user?'); ?></legend></p>
   215 	<fieldset><p><legend><?php echo _n( 'What should be done with posts and links owned by this user?', 'What should be done with posts and links owned by these users?', $go_delete ); ?></legend></p>
   166 	<ul style="list-style:none;">
   216 	<ul style="list-style:none;">
   167 		<li><label><input type="radio" id="delete_option0" name="delete_option" value="delete" checked="checked" />
   217 		<li><label><input type="radio" id="delete_option0" name="delete_option" value="delete" checked="checked" />
   168 		<?php _e('Delete all posts and links.'); ?></label></li>
   218 		<?php _e('Delete all posts and links.'); ?></label></li>
   169 		<li><input type="radio" id="delete_option1" name="delete_option" value="reassign" />
   219 		<li><input type="radio" id="delete_option1" name="delete_option" value="reassign" />
   170 		<?php echo '<label for="delete_option1">'.__('Attribute all posts and links to:')."</label> $user_dropdown"; ?></li>
   220 		<?php echo '<label for="delete_option1">'.__('Attribute all posts and links to:').'</label>';
       
   221 		wp_dropdown_users( array( 'name' => 'reassign_user', 'exclude' => array_diff( $userids, array($current_user->ID) ) ) ); ?></li>
   171 	</ul></fieldset>
   222 	</ul></fieldset>
   172 	<input type="hidden" name="action" value="dodelete" />
   223 	<input type="hidden" name="action" value="dodelete" />
   173 	<p class="submit"><input type="submit" name="submit" value="<?php esc_attr_e('Confirm Deletion'); ?>" class="button-secondary" /></p>
   224 	<?php submit_button( __('Confirm Deletion'), 'secondary' ); ?>
   174 <?php else : ?>
   225 <?php else : ?>
   175 	<p><?php _e('There are no valid users selected for deletion.'); ?></p>
   226 	<p><?php _e('There are no valid users selected for deletion.'); ?></p>
   176 <?php endif; ?>
   227 <?php endif; ?>
   177 </div>
   228 </div>
   178 </form>
   229 </form>
   179 <?php
   230 <?php
   180 
   231 
   181 break;
   232 break;
   182 
   233 
       
   234 case 'doremove':
       
   235 	check_admin_referer('remove-users');
       
   236 
       
   237 	if ( ! is_multisite() )
       
   238 		wp_die( __( 'You can&#8217;t remove users.' ) );
       
   239 
       
   240 	if ( empty($_REQUEST['users']) ) {
       
   241 		wp_redirect($redirect);
       
   242 		exit;
       
   243 	}
       
   244 
       
   245 	if ( ! current_user_can( 'remove_users' ) )
       
   246 		wp_die( __( 'You can&#8217;t remove users.' ) );
       
   247 
       
   248 	$userids = $_REQUEST['users'];
       
   249 
       
   250 	$update = 'remove';
       
   251  	foreach ( $userids as $id ) {
       
   252 		$id = (int) $id;
       
   253 		if ( $id == $current_user->ID && !is_super_admin() ) {
       
   254 			$update = 'err_admin_remove';
       
   255 			continue;
       
   256 		}
       
   257 		if ( !current_user_can('remove_user', $id) ) {
       
   258 			$update = 'err_admin_remove';
       
   259 			continue;
       
   260 		}
       
   261 		remove_user_from_blog($id, $blog_id);
       
   262 	}
       
   263 
       
   264 	$redirect = add_query_arg( array('update' => $update), $redirect);
       
   265 	wp_redirect($redirect);
       
   266 	exit;
       
   267 
       
   268 break;
       
   269 
       
   270 case 'remove':
       
   271 
       
   272 	check_admin_referer('bulk-users');
       
   273 
       
   274 	if ( ! is_multisite() )
       
   275 		wp_die( __( 'You can&#8217;t remove users.' ) );
       
   276 
       
   277 	if ( empty($_REQUEST['users']) && empty($_REQUEST['user']) ) {
       
   278 		wp_redirect($redirect);
       
   279 		exit();
       
   280 	}
       
   281 
       
   282 	if ( !current_user_can('remove_users') )
       
   283 		$error = new WP_Error('edit_users', __('You can&#8217;t remove users.'));
       
   284 
       
   285 	if ( empty($_REQUEST['users']) )
       
   286 		$userids = array(intval($_REQUEST['user']));
       
   287 	else
       
   288 		$userids = $_REQUEST['users'];
       
   289 
       
   290 	include ('admin-header.php');
       
   291 ?>
       
   292 <form action="" method="post" name="updateusers" id="updateusers">
       
   293 <?php wp_nonce_field('remove-users') ?>
       
   294 <?php echo $referer; ?>
       
   295 
       
   296 <div class="wrap">
       
   297 <?php screen_icon(); ?>
       
   298 <h2><?php _e('Remove Users from Site'); ?></h2>
       
   299 <p><?php _e('You have specified these users for removal:'); ?></p>
       
   300 <ul>
       
   301 <?php
       
   302 	$go_remove = false;
       
   303  	foreach ( $userids as $id ) {
       
   304 		$id = (int) $id;
       
   305  		$user = new WP_User($id);
       
   306 		if ( $id == $current_user->ID && !is_super_admin() ) {
       
   307 			echo "<li>" . sprintf(__('ID #%1s: %2s <strong>The current user will not be removed.</strong>'), $id, $user->user_login) . "</li>\n";
       
   308 		} elseif ( !current_user_can('remove_user', $id) ) {
       
   309 			echo "<li>" . sprintf(__('ID #%1s: %2s <strong>You don\'t have permission to remove this user.</strong>'), $id, $user->user_login) . "</li>\n";
       
   310 		} else {
       
   311 			echo "<li><input type=\"hidden\" name=\"users[]\" value=\"{$id}\" />" . sprintf(__('ID #%1s: %2s'), $id, $user->user_login) . "</li>\n";
       
   312 			$go_remove = true;
       
   313 		}
       
   314  	}
       
   315  	?>
       
   316 <?php if ( $go_remove ) : ?>
       
   317 		<input type="hidden" name="action" value="doremove" />
       
   318 		<?php submit_button( __('Confirm Removal'), 'secondary' ); ?>
       
   319 <?php else : ?>
       
   320 	<p><?php _e('There are no valid users selected for removal.'); ?></p>
       
   321 <?php endif; ?>
       
   322 </div>
       
   323 </form>
       
   324 <?php
       
   325 
       
   326 break;
       
   327 
   183 default:
   328 default:
   184 
   329 
   185 	if ( !empty($_GET['_wp_http_referer']) ) {
   330 	if ( !empty($_GET['_wp_http_referer']) ) {
   186 		wp_redirect(remove_query_arg(array('_wp_http_referer', '_wpnonce'), stripslashes($_SERVER['REQUEST_URI'])));
   331 		wp_redirect(remove_query_arg(array('_wp_http_referer', '_wpnonce'), stripslashes($_SERVER['REQUEST_URI'])));
   187 		exit;
   332 		exit;
   188 	}
   333 	}
   189 
   334 
   190 	include('admin-header.php');
   335 	$wp_list_table->prepare_items();
   191 
   336 	$total_pages = $wp_list_table->get_pagination_arg( 'total_pages' );
   192 	$usersearch = isset($_GET['usersearch']) ? $_GET['usersearch'] : null;
   337 	if ( $pagenum > $total_pages && $total_pages > 0 ) {
   193 	$userspage = isset($_GET['userspage']) ? $_GET['userspage'] : null;
   338 		wp_redirect( add_query_arg( 'paged', $total_pages ) );
   194 	$role = isset($_GET['role']) ? $_GET['role'] : null;
   339 		exit;
   195 
   340 	}
   196 	// Query the users
   341 
   197 	$wp_user_search = new WP_User_Search($usersearch, $userspage, $role);
   342 	include('./admin-header.php');
   198 
   343 
   199 	$messages = array();
   344 	$messages = array();
   200 	if ( isset($_GET['update']) ) :
   345 	if ( isset($_GET['update']) ) :
   201 		switch($_GET['update']) {
   346 		switch($_GET['update']) {
   202 		case 'del':
   347 		case 'del':
   203 		case 'del_many':
   348 		case 'del_many':
   204 			$delete_count = isset($_GET['delete_count']) ? (int) $_GET['delete_count'] : 0;
   349 			$delete_count = isset($_GET['delete_count']) ? (int) $_GET['delete_count'] : 0;
   205 			$messages[] = '<div id="message" class="updated fade"><p>' . sprintf(_n('%s user deleted', '%s users deleted', $delete_count), $delete_count) . '</p></div>';
   350 			$messages[] = '<div id="message" class="updated"><p>' . sprintf( _n( 'User deleted.', '%s users deleted.', $delete_count ), number_format_i18n( $delete_count ) ) . '</p></div>';
   206 			break;
   351 			break;
   207 		case 'add':
   352 		case 'add':
   208 			$messages[] = '<div id="message" class="updated fade"><p>' . __('New user created.') . '</p></div>';
   353 			if ( isset( $_GET['id'] ) && ( $user_id = $_GET['id'] ) && current_user_can( 'edit_user', $user_id ) ) {
       
   354 				$messages[] = '<div id="message" class="updated"><p>' . sprintf( __( 'New user created. <a href="%s">Edit user</a>' ),
       
   355 					esc_url( add_query_arg( 'wp_http_referer', urlencode( stripslashes( $_SERVER['REQUEST_URI'] ) ),
       
   356 						self_admin_url( 'user-edit.php?user_id=' . $user_id ) ) ) ) . '</p></div>';
       
   357 			} else {
       
   358 				$messages[] = '<div id="message" class="updated"><p>' . __( 'New user created.' ) . '</p></div>';
       
   359 			}
   209 			break;
   360 			break;
   210 		case 'promote':
   361 		case 'promote':
   211 			$messages[] = '<div id="message" class="updated fade"><p>' . __('Changed roles.') . '</p></div>';
   362 			$messages[] = '<div id="message" class="updated"><p>' . __('Changed roles.') . '</p></div>';
   212 			break;
   363 			break;
   213 		case 'err_admin_role':
   364 		case 'err_admin_role':
   214 			$messages[] = '<div id="message" class="error"><p>' . __('The current user&#8217;s role must have user editing capabilities.') . '</p></div>';
   365 			$messages[] = '<div id="message" class="error"><p>' . __('The current user&#8217;s role must have user editing capabilities.') . '</p></div>';
   215 			$messages[] = '<div id="message" class="updated fade"><p>' . __('Other user roles have been changed.') . '</p></div>';
   366 			$messages[] = '<div id="message" class="updated"><p>' . __('Other user roles have been changed.') . '</p></div>';
   216 			break;
   367 			break;
   217 		case 'err_admin_del':
   368 		case 'err_admin_del':
   218 			$messages[] = '<div id="message" class="error"><p>' . __('You can&#8217;t delete the current user.') . '</p></div>';
   369 			$messages[] = '<div id="message" class="error"><p>' . __('You can&#8217;t delete the current user.') . '</p></div>';
   219 			$messages[] = '<div id="message" class="updated fade"><p>' . __('Other users have been deleted.') . '</p></div>';
   370 			$messages[] = '<div id="message" class="updated"><p>' . __('Other users have been deleted.') . '</p></div>';
       
   371 			break;
       
   372 		case 'remove':
       
   373 			$messages[] = '<div id="message" class="updated fade"><p>' . __('User removed from this site.') . '</p></div>';
       
   374 			break;
       
   375 		case 'err_admin_remove':
       
   376 			$messages[] = '<div id="message" class="error"><p>' . __("You can't remove the current user.") . '</p></div>';
       
   377 			$messages[] = '<div id="message" class="updated fade"><p>' . __('Other users have been removed.') . '</p></div>';
   220 			break;
   378 			break;
   221 		}
   379 		}
   222 	endif; ?>
   380 	endif; ?>
   223 
   381 
   224 <?php if ( isset($errors) && is_wp_error( $errors ) ) : ?>
   382 <?php if ( isset($errors) && is_wp_error( $errors ) ) : ?>
   237 		echo $msg;
   395 		echo $msg;
   238 } ?>
   396 } ?>
   239 
   397 
   240 <div class="wrap">
   398 <div class="wrap">
   241 <?php screen_icon(); ?>
   399 <?php screen_icon(); ?>
   242 <h2><?php echo esc_html( $title ); ?>  <a href="user-new.php" class="button add-new-h2"><?php echo esc_html_x('Add New', 'user'); ?></a> <?php
   400 <h2>
   243 if ( isset($_GET['usersearch']) && $_GET['usersearch'] )
   401 <?php
   244 	printf( '<span class="subtitle">' . __('Search results for &#8220;%s&#8221;') . '</span>', esc_html( $_GET['usersearch'] ) ); ?>
   402 echo esc_html( $title );
       
   403 if ( current_user_can( 'create_users' ) ) { ?>
       
   404 	<a href="user-new.php" class="add-new-h2"><?php echo esc_html_x( 'Add New', 'user' ); ?></a>
       
   405 <?php } elseif ( is_multisite() && current_user_can( 'promote_users' ) ) { ?>
       
   406 	<a href="user-new.php" class="add-new-h2"><?php echo esc_html_x( 'Add Existing', 'user' ); ?></a>
       
   407 <?php }
       
   408 
       
   409 if ( $usersearch )
       
   410 	printf( '<span class="subtitle">' . __('Search results for &#8220;%s&#8221;') . '</span>', esc_html( $usersearch ) ); ?>
   245 </h2>
   411 </h2>
   246 
   412 
   247 <div class="filter">
   413 <?php $wp_list_table->views(); ?>
   248 <form id="list-filter" action="" method="get">
   414 
   249 <ul class="subsubsub">
   415 <form action="" method="get">
   250 <?php
   416 
   251 $role_links = array();
   417 <?php $wp_list_table->search_box( __( 'Search Users' ), 'user' ); ?>
   252 $avail_roles = array();
   418 
   253 $users_of_blog = get_users_of_blog();
   419 <?php $wp_list_table->display(); ?>
   254 $total_users = count( $users_of_blog );
       
   255 foreach ( (array) $users_of_blog as $b_user ) {
       
   256 	$b_roles = unserialize($b_user->meta_value);
       
   257 	foreach ( (array) $b_roles as $b_role => $val ) {
       
   258 		if ( !isset($avail_roles[$b_role]) )
       
   259 			$avail_roles[$b_role] = 0;
       
   260 		$avail_roles[$b_role]++;
       
   261 	}
       
   262 }
       
   263 unset($users_of_blog);
       
   264 
       
   265 $current_role = false;
       
   266 $class = empty($role) ? ' class="current"' : '';
       
   267 $role_links[] = "<li><a href='users.php'$class>" . sprintf( _nx( 'All <span class="count">(%s)</span>', 'All <span class="count">(%s)</span>', $total_users, 'users' ), number_format_i18n( $total_users ) ) . '</a>';
       
   268 foreach ( $wp_roles->get_names() as $this_role => $name ) {
       
   269 	if ( !isset($avail_roles[$this_role]) )
       
   270 		continue;
       
   271 
       
   272 	$class = '';
       
   273 
       
   274 	if ( $this_role == $role ) {
       
   275 		$current_role = $role;
       
   276 		$class = ' class="current"';
       
   277 	}
       
   278 
       
   279 	$name = translate_user_role( $name );
       
   280 	/* translators: User role name with count */
       
   281 	$name = sprintf( __('%1$s <span class="count">(%2$s)</span>'), $name, $avail_roles[$this_role] );
       
   282 	$role_links[] = "<li><a href='users.php?role=$this_role'$class>$name</a>";
       
   283 }
       
   284 echo implode( " |</li>\n", $role_links) . '</li>';
       
   285 unset($role_links);
       
   286 ?>
       
   287 </ul>
       
   288 </form>
   420 </form>
   289 </div>
       
   290 
       
   291 <form class="search-form" action="" method="get">
       
   292 <p class="search-box">
       
   293 	<label class="screen-reader-text" for="user-search-input"><?php _e( 'Search Users' ); ?>:</label>
       
   294 	<input type="text" id="user-search-input" name="usersearch" value="<?php echo esc_attr($wp_user_search->search_term); ?>" />
       
   295 	<input type="submit" value="<?php esc_attr_e( 'Search Users' ); ?>" class="button" />
       
   296 </p>
       
   297 </form>
       
   298 
       
   299 <form id="posts-filter" action="" method="get">
       
   300 <div class="tablenav">
       
   301 
       
   302 <?php if ( $wp_user_search->results_are_paged() ) : ?>
       
   303 	<div class="tablenav-pages"><?php $wp_user_search->page_links(); ?></div>
       
   304 <?php endif; ?>
       
   305 
       
   306 <div class="alignleft actions">
       
   307 <select name="action">
       
   308 <option value="" selected="selected"><?php _e('Bulk Actions'); ?></option>
       
   309 <option value="delete"><?php _e('Delete'); ?></option>
       
   310 </select>
       
   311 <input type="submit" value="<?php esc_attr_e('Apply'); ?>" name="doaction" id="doaction" class="button-secondary action" />
       
   312 <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>
       
   313 <input type="submit" value="<?php esc_attr_e('Change'); ?>" name="changeit" class="button-secondary" />
       
   314 <?php wp_nonce_field('bulk-users'); ?>
       
   315 </div>
       
   316 
   421 
   317 <br class="clear" />
   422 <br class="clear" />
   318 </div>
   423 </div>
   319 
       
   320 	<?php if ( is_wp_error( $wp_user_search->search_errors ) ) : ?>
       
   321 		<div class="error">
       
   322 			<ul>
       
   323 			<?php
       
   324 				foreach ( $wp_user_search->search_errors->get_error_messages() as $message )
       
   325 					echo "<li>$message</li>";
       
   326 			?>
       
   327 			</ul>
       
   328 		</div>
       
   329 	<?php endif; ?>
       
   330 
       
   331 
       
   332 <?php if ( $wp_user_search->get_results() ) : ?>
       
   333 
       
   334 	<?php if ( $wp_user_search->is_search() ) : ?>
       
   335 		<p><a href="users.php"><?php _e('&larr; Back to All Users'); ?></a></p>
       
   336 	<?php endif; ?>
       
   337 
       
   338 <table class="widefat fixed" cellspacing="0">
       
   339 <thead>
       
   340 <tr class="thead">
       
   341 <?php print_column_headers('users') ?>
       
   342 </tr>
       
   343 </thead>
       
   344 
       
   345 <tfoot>
       
   346 <tr class="thead">
       
   347 <?php print_column_headers('users', false) ?>
       
   348 </tr>
       
   349 </tfoot>
       
   350 
       
   351 <tbody id="users" class="list:user user-list">
       
   352 <?php
       
   353 $style = '';
       
   354 foreach ( $wp_user_search->get_results() as $userid ) {
       
   355 	$user_object = new WP_User($userid);
       
   356 	$roles = $user_object->roles;
       
   357 	$role = array_shift($roles);
       
   358 
       
   359 	$style = ( ' class="alternate"' == $style ) ? '' : ' class="alternate"';
       
   360 	echo "\n\t" . user_row($user_object, $style, $role);
       
   361 }
       
   362 ?>
       
   363 </tbody>
       
   364 </table>
       
   365 
       
   366 <div class="tablenav">
       
   367 
       
   368 <?php if ( $wp_user_search->results_are_paged() ) : ?>
       
   369 	<div class="tablenav-pages"><?php $wp_user_search->page_links(); ?></div>
       
   370 <?php endif; ?>
       
   371 
       
   372 <div class="alignleft actions">
       
   373 <select name="action2">
       
   374 <option value="" selected="selected"><?php _e('Bulk Actions'); ?></option>
       
   375 <option value="delete"><?php _e('Delete'); ?></option>
       
   376 </select>
       
   377 <input type="submit" value="<?php esc_attr_e('Apply'); ?>" name="doaction2" id="doaction2" class="button-secondary action" />
       
   378 </div>
       
   379 
       
   380 <br class="clear" />
       
   381 </div>
       
   382 
       
   383 <?php endif; ?>
       
   384 
       
   385 </form>
       
   386 </div>
       
   387 
       
   388 <br class="clear" />
       
   389 <?php
   424 <?php
   390 break;
   425 break;
   391 
   426 
   392 } // end of the $doaction switch
   427 } // end of the $doaction switch
   393 
   428 
   394 include('admin-footer.php');
   429 include('./admin-footer.php');
   395 ?>