Index: /trunk/wp-admin/includes/class-wp-users-list-table.php =================================================================== --- /trunk/wp-admin/includes/class-wp-users-list-table.php (revision 16559) +++ /trunk/wp-admin/includes/class-wp-users-list-table.php (revision 16560) @@ -8,8 +8,27 @@ */ class WP_Users_List_Table extends WP_List_Table { + + var $site_id; + var $is_site_users; + + function WP_Users_List_Table() { + $screen = get_current_screen(); + $this->is_site_users = ( 'site-users-network' == $screen->id ) ? true : false; + + if ( $this->is_site_users ) + $this->site_id = isset( $_REQUEST['id'] ) ? intval( $_REQUEST['id'] ) : 0; + + parent::WP_List_Table( array( + 'singular' => 'user', + 'plural' => 'users' + ) ); + } function check_permissions() { if ( !current_user_can('list_users') ) wp_die(__('Cheatin’ uh?')); + + if ( $this->is_site_users && !current_user_can('manage_sites') ) + wp_die(__('You do not have sufficient permissions to edit this site.')); } @@ -31,4 +50,7 @@ 'search' => $usersearch ); + + if ( $this->is_site_users ) + $args['blog_id'] = $this->site_id; if ( isset( $_REQUEST['orderby'] ) ) @@ -56,5 +78,13 @@ global $wp_roles, $role; - $users_of_blog = count_users(); + if ( $this->is_site_users ) { + $url = 'site-users.php?id=' . $this->site_id; + switch_to_blog( $this->site_id ); + $users_of_blog = count_users(); + restore_current_blog(); + } else { + $url = 'users.php'; + $users_of_blog = count_users(); + } $total_users = $users_of_blog['total_users']; $avail_roles =& $users_of_blog['avail_roles']; @@ -64,5 +94,5 @@ $class = empty($role) ? ' class="current"' : ''; $role_links = array(); - $role_links['all'] = "" . sprintf( _nx( 'All (%s)', 'All (%s)', $total_users, 'users' ), number_format_i18n( $total_users ) ) . ''; + $role_links['all'] = "" . sprintf( _nx( 'All (%s)', 'All (%s)', $total_users, 'users' ), number_format_i18n( $total_users ) ) . ''; foreach ( $wp_roles->get_names() as $this_role => $name ) { if ( !isset($avail_roles[$this_role]) ) @@ -79,5 +109,5 @@ /* translators: User role name with count */ $name = sprintf( __('%1$s (%2$s)'), $name, $avail_roles[$this_role] ); - $role_links[$this_role] = "$name"; + $role_links[$this_role] = "$name"; } @@ -172,4 +202,9 @@ $user_object = sanitize_user_object( $user_object, 'display' ); $email = $user_object->user_email; + + if ( $this->is_site_users ) + $url = "site-users.php?id={$this->site_id}&"; + else + $url = 'users.php?'; $checkbox = ''; @@ -198,5 +233,5 @@ $actions['delete'] = "" . __( 'Delete' ) . ""; if ( is_multisite() && get_current_user_id() != $user_object->ID && current_user_can( 'remove_user', $user_object->ID ) ) - $actions['remove'] = "" . __( 'Remove' ) . ""; + $actions['remove'] = "" . __( 'Remove' ) . ""; $actions = apply_filters( 'user_row_actions', $actions, $user_object ); $edit .= $this->row_actions( $actions ); Index: /trunk/wp-admin/network/site-users.php =================================================================== --- /trunk/wp-admin/network/site-users.php (revision 16559) +++ /trunk/wp-admin/network/site-users.php (revision 16560) @@ -16,4 +16,15 @@ if ( ! current_user_can('manage_sites') ) wp_die(__('You do not have sufficient permissions to edit this site.')); + +$wp_list_table = get_list_table('WP_Users_List_Table'); +$wp_list_table->check_permissions(); +$wp_list_table->prepare_items(); + +$action = $wp_list_table->current_action(); + +$s = isset($_REQUEST['s']) ? $_REQUEST['s'] : ''; + +// Clean up request URI from temporary args for screen options/paging uri's to work as expected. +$_SERVER['REQUEST_URI'] = remove_query_arg(array('enable', 'disable', 'enable-selected', 'disable-selected'), $_SERVER['REQUEST_URI']); $id = isset( $_REQUEST['id'] ) ? intval( $_REQUEST['id'] ) : 0; @@ -39,72 +50,63 @@ } -if ( isset($_REQUEST['action']) && 'update-site' == $_REQUEST['action'] ) { - check_admin_referer( 'edit-site' ); +$action = $wp_list_table->current_action(); +if ( $action ) { switch_to_blog( $id ); + + switch ( $action ) { + case 'adduser': + if ( !empty( $_POST['newuser'] ) ) { + $newuser = $_POST['newuser']; + $userid = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM " . $wpdb->users . " WHERE user_login = %s", $newuser ) ); + if ( $userid ) { + $user = $wpdb->get_var( "SELECT user_id FROM " . $wpdb->usermeta . " WHERE user_id='$userid' AND meta_key='{$blog_prefix}capabilities'" ); + if ( $user == false ) + add_user_to_blog( $id, $userid, $_POST['new_role'] ); + } + } + break; + + case 'remove': + if ( !current_user_can('remove_users') ) + die(__('You can’t remove users.')); - // user roles - if ( isset( $_POST['role'] ) && is_array( $_POST['role'] ) == true ) { - $newroles = $_POST['role']; + if ( isset( $_REQUEST['users'] ) ) { + $userids = $_REQUEST['users']; - reset( $newroles ); - foreach ( (array) $newroles as $userid => $role ) { - $user = new WP_User( $userid ); - if ( empty( $user->ID ) ) - continue; - $user->for_blog( $id ); - $user->set_role( $role ); - } + foreach ( $userids as $user_id ) { + $user_id = (int) $user_id; + remove_user_from_blog( $user_id, $id ); + } + } else { + remove_user_from_blog( $_GET['user'] ); + } + break; + + case 'promote': + $editable_roles = get_editable_roles(); + if ( empty( $editable_roles[$_REQUEST['new_role']] ) ) + wp_die(__('You can’t give users that role.')); + + $userids = $_REQUEST['users']; + $update = 'promote'; + foreach ( $userids as $user_id ) { + $user_id = (int) $user_id; + + // If the user doesn't already belong to the blog, bail. + if ( !is_user_member_of_blog( $user_id ) ) + wp_die(__('Cheatin’ uh?')); + + $user = new WP_User( $user_id ); + $user->set_role( $_REQUEST['new_role'] ); + } + break; } - - // remove user - if ( isset( $_POST['blogusers'] ) && is_array( $_POST['blogusers'] ) ) { - reset( $_POST['blogusers'] ); - foreach ( (array) $_POST['blogusers'] as $key => $val ) - remove_user_from_blog( $key, $id ); - } - - // change password - if ( isset( $_POST['user_password'] ) && is_array( $_POST['user_password'] ) ) { - reset( $_POST['user_password'] ); - $newroles = $_POST['role']; - foreach ( (array) $_POST['user_password'] as $userid => $pass ) { - unset( $_POST['role'] ); - $_POST['role'] = $newroles[ $userid ]; - if ( $pass != '' ) { - $cap = $wpdb->get_var( $wpdb->prepare( "SELECT meta_value FROM {$wpdb->usermeta} WHERE user_id = %d AND meta_key = '{$blog_prefix}capabilities' AND meta_value = 'a:0:{}'", $userid ) ); - $userdata = get_userdata($userid); - $_POST['pass1'] = $_POST['pass2'] = $pass; - $_POST['email'] = $userdata->user_email; - $_POST['rich_editing'] = $userdata->rich_editing; - edit_user( $userid ); - if ( $cap == null ) - $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->usermeta} WHERE user_id = %d AND meta_key = '{$blog_prefix}capabilities' AND meta_value = 'a:0:{}'", $userid ) ); - } - } - unset( $_POST['role'] ); - $_POST['role'] = $newroles; - } - - // add user - if ( !empty( $_POST['newuser'] ) ) { - $newuser = $_POST['newuser']; - $userid = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM " . $wpdb->users . " WHERE user_login = %s", $newuser ) ); - if ( $userid ) { - $user = $wpdb->get_var( "SELECT user_id FROM " . $wpdb->usermeta . " WHERE user_id='$userid' AND meta_key='{$blog_prefix}capabilities'" ); - if ( $user == false ) - add_user_to_blog( $id, $userid, $_POST['new_role'] ); - } - } - + restore_current_blog(); - wp_redirect( add_query_arg( array( 'update' => 'updated', 'id' => $id ), 'site-users.php') ); + wp_redirect( wp_get_referer() ); // @todo add_query_arg for update message } -if ( isset($_GET['update']) ) { - $messages = array(); - if ( 'updated' == $_GET['update'] ) - $messages[] = __('Site users updated.'); -} +add_screen_option( 'per_page', array( 'label' => _x( 'Users', 'users per page (screen options)' ) ) ); $title = sprintf( __('Edit Site: %s'), get_blogaddress_by_id($id)); @@ -129,59 +131,25 @@ ?> -
' . $msg . '
'; -} ?> + + +views(); ?> + -