diff --git a/src/wp-admin/includes/class-wp-users-list-table.php b/src/wp-admin/includes/class-wp-users-list-table.php
index 018654bdd2..699e1a19f4 100644
a
|
b
|
class WP_Users_List_Table extends WP_List_Table { |
101 | 101 | 'search' => $usersearch, |
102 | 102 | 'fields' => 'all_with_meta', |
103 | 103 | ); |
| 104 | } elseif ( '-1' === $role && current_user_can( 'manage_network_users' ) ) { |
| 105 | $args = array( |
| 106 | 'number' => $users_per_page, |
| 107 | 'offset' => ( $paged - 1 ) * $users_per_page, |
| 108 | 'blog_id' => 0, |
| 109 | 'search' => $usersearch, |
| 110 | 'fields' => 'all_with_meta' |
| 111 | ); |
104 | 112 | } else { |
105 | 113 | $args = array( |
106 | 114 | 'number' => $users_per_page, |
… |
… |
class WP_Users_List_Table extends WP_List_Table { |
115 | 123 | $args['search'] = '*' . $args['search'] . '*'; |
116 | 124 | } |
117 | 125 | |
118 | | if ( $this->is_site_users ) { |
| 126 | if ( $this->is_site_users && ! isset( $args['blog_id'] ) ) { |
119 | 127 | $args['blog_id'] = $this->site_id; |
120 | 128 | } |
121 | 129 | |
… |
… |
class WP_Users_List_Table extends WP_List_Table { |
251 | 259 | $role_links['none'] = "<a href='" . esc_url( add_query_arg( 'role', 'none', $url ) ) . "'$current_link_attributes>$name</a>"; |
252 | 260 | } |
253 | 261 | |
| 262 | if ( current_user_can( 'manage_network_users' ) ) { |
| 263 | $current_link_attributes = ''; |
| 264 | |
| 265 | if ( '-1' === $role ) { |
| 266 | $current_link_attributes = ' class="current" aria-current="page"'; |
| 267 | } |
| 268 | |
| 269 | $name = __( 'All Network Users' ); |
| 270 | |
| 271 | $role_links['all_network'] = "<a href='" . esc_url( add_query_arg( 'role', '-1', $url ) ) . "'$current_link_attributes>$name</a>"; |
| 272 | } |
| 273 | |
254 | 274 | return $role_links; |
255 | 275 | } |
256 | 276 | |
… |
… |
class WP_Users_List_Table extends WP_List_Table { |
454 | 474 | if ( ! is_multisite() && get_current_user_id() != $user_object->ID && current_user_can( 'delete_user', $user_object->ID ) ) { |
455 | 475 | $actions['delete'] = "<a class='submitdelete' href='" . wp_nonce_url( "users.php?action=delete&user=$user_object->ID", 'bulk-users' ) . "'>" . __( 'Delete' ) . '</a>'; |
456 | 476 | } |
457 | | if ( is_multisite() && current_user_can( 'remove_user', $user_object->ID ) ) { |
| 477 | |
| 478 | if ( is_multisite() && get_current_user_id() != $user_object->ID && current_user_can( 'remove_user', $user_object->ID ) && is_user_member_of_blog( $user_object->ID, $this->site_id ) ) { |
458 | 479 | $actions['remove'] = "<a class='submitdelete' href='" . wp_nonce_url( $url . "action=remove&user=$user_object->ID", 'bulk-users' ) . "'>" . __( 'Remove' ) . '</a>'; |
459 | 480 | } |
460 | 481 | |
… |
… |
class WP_Users_List_Table extends WP_List_Table { |
551 | 572 | $r .= "<a href='" . esc_url( "mailto:$email" ) . "'>$email</a>"; |
552 | 573 | break; |
553 | 574 | case 'role': |
554 | | $r .= esc_html( $roles_list ); |
| 575 | if ( empty( $roles_list ) ) { |
| 576 | $r .= sprintf( |
| 577 | '<span aria-hidden="true">—</span><span class="screen-reader-text">%s</span>', |
| 578 | __( 'User is not a member of this site' ) |
| 579 | ); |
| 580 | } else { |
| 581 | $r .= esc_html( $roles_list ); |
| 582 | } |
555 | 583 | break; |
556 | 584 | case 'posts': |
557 | 585 | if ( $numposts > 0 ) { |
… |
… |
class WP_Users_List_Table extends WP_List_Table { |
623 | 651 | } |
624 | 652 | } |
625 | 653 | |
626 | | if ( empty( $role_list ) ) { |
| 654 | if ( empty( $role_list ) && is_user_member_of_blog( $user_object->ID, $this->site_id ) ) { |
627 | 655 | $role_list['none'] = _x( 'None', 'no user roles' ); |
628 | 656 | } |
629 | 657 | |
diff --git a/src/wp-admin/network/site-users.php b/src/wp-admin/network/site-users.php
index cb00cab973..7d64fec5b6 100644
a
|
b
|
if ( $action ) { |
156 | 156 | foreach ( $userids as $user_id ) { |
157 | 157 | $user_id = (int) $user_id; |
158 | 158 | |
159 | | // If the user doesn't already belong to the blog, bail. |
| 159 | // If the user doesn't already belong to the blog: |
160 | 160 | if ( ! is_user_member_of_blog( $user_id ) ) { |
161 | | wp_die( |
162 | | '<h1>' . __( 'Something went wrong.' ) . '</h1>' . |
163 | | '<p>' . __( 'One of the selected users is not a member of this site.' ) . '</p>', |
164 | | 403 |
165 | | ); |
| 161 | if ( current_user_can( 'manage_network_users' ) ) { |
| 162 | add_existing_user_to_blog( array( |
| 163 | 'user_id' => $user_id, |
| 164 | 'role' => $role, |
| 165 | ) ); |
| 166 | } else { |
| 167 | wp_die( |
| 168 | '<h1>' . __( 'Something went wrong.' ) . '</h1>' . |
| 169 | '<p>' . __( 'One of the selected users is not a member of this site.' ) . '</p>', |
| 170 | 403 |
| 171 | ); |
| 172 | } |
| 173 | } else { |
| 174 | $user = get_userdata( $user_id ); |
| 175 | $user->set_role( $role ); |
166 | 176 | } |
167 | | |
168 | | $user = get_userdata( $user_id ); |
169 | | $user->set_role( $role ); |
170 | 177 | } |
171 | 178 | } else { |
172 | 179 | $update = 'err_promote'; |
… |
… |
endif; |
275 | 282 | <form class="search-form" method="get"> |
276 | 283 | <?php $wp_list_table->search_box( __( 'Search Users' ), 'user' ); ?> |
277 | 284 | <input type="hidden" name="id" value="<?php echo esc_attr( $id ); ?>" /> |
| 285 | <?php if ( isset( $_GET['role'] ) && '-1' === $_GET['role'] ) { ?> |
| 286 | <input type="hidden" name="role" value="-1" /> |
| 287 | <?php } ?> |
278 | 288 | </form> |
279 | 289 | |
280 | 290 | <?php $wp_list_table->views(); ?> |
diff --git a/src/wp-admin/users.php b/src/wp-admin/users.php
index 04164d7179..d773a5c1ec 100644
a
|
b
|
switch ( $wp_list_table->current_action() ) { |
139 | 139 | continue; |
140 | 140 | } |
141 | 141 | |
142 | | // If the user doesn't already belong to the blog, bail. |
143 | | if ( is_multisite() && ! is_user_member_of_blog( $id ) ) { |
144 | | wp_die( |
145 | | '<h1>' . __( 'Something went wrong.' ) . '</h1>' . |
146 | | '<p>' . __( 'One of the selected users is not a member of this site.' ) . '</p>', |
147 | | 403 |
148 | | ); |
| 142 | // If the user doesn't already belong to the blog: |
| 143 | if ( ! is_user_member_of_blog( $id ) ) { |
| 144 | if ( current_user_can( 'manage_network_users' ) ) { |
| 145 | add_existing_user_to_blog( array( |
| 146 | 'user_id' => $id, |
| 147 | 'role' => $role, |
| 148 | ) ); |
| 149 | } else { |
| 150 | wp_die( |
| 151 | '<h1>' . __( 'Something went wrong.' ) . '</h1>' . |
| 152 | '<p>' . __( 'One of the selected users is not a member of this site.' ) . '</p>', |
| 153 | 403 |
| 154 | ); |
| 155 | } |
| 156 | } else { |
| 157 | $user = get_userdata( $id ); |
| 158 | $user->set_role( $role ); |
149 | 159 | } |
150 | | |
151 | | $user = get_userdata( $id ); |
152 | | $user->set_role( $role ); |
153 | 160 | } |
154 | 161 | |
155 | 162 | wp_redirect( add_query_arg( 'update', $update, $redirect ) ); |