8 */ |
8 */ |
9 |
9 |
10 /** Load WordPress Administration Bootstrap */ |
10 /** Load WordPress Administration Bootstrap */ |
11 require_once( dirname( __FILE__ ) . '/admin.php' ); |
11 require_once( dirname( __FILE__ ) . '/admin.php' ); |
12 |
12 |
13 if ( ! current_user_can('manage_sites') ) |
13 if ( ! current_user_can( 'manage_sites' ) ) { |
14 wp_die( __( 'Sorry, you are not allowed to edit this site.' ), 403 ); |
14 wp_die( __( 'Sorry, you are not allowed to edit this site.' ), 403 ); |
15 |
15 } |
16 $wp_list_table = _get_list_table('WP_Users_List_Table'); |
16 |
|
17 $wp_list_table = _get_list_table( 'WP_Users_List_Table' ); |
17 $wp_list_table->prepare_items(); |
18 $wp_list_table->prepare_items(); |
18 |
19 |
19 get_current_screen()->add_help_tab( get_site_screen_help_tab_args() ); |
20 get_current_screen()->add_help_tab( get_site_screen_help_tab_args() ); |
20 get_current_screen()->set_help_sidebar( get_site_screen_help_sidebar_content() ); |
21 get_current_screen()->set_help_sidebar( get_site_screen_help_sidebar_content() ); |
21 |
22 |
22 get_current_screen()->set_screen_reader_content( array( |
23 get_current_screen()->set_screen_reader_content( |
23 'heading_views' => __( 'Filter site users list' ), |
24 array( |
24 'heading_pagination' => __( 'Site users list navigation' ), |
25 'heading_views' => __( 'Filter site users list' ), |
25 'heading_list' => __( 'Site users list' ), |
26 'heading_pagination' => __( 'Site users list navigation' ), |
26 ) ); |
27 'heading_list' => __( 'Site users list' ), |
|
28 ) |
|
29 ); |
27 |
30 |
28 $_SERVER['REQUEST_URI'] = remove_query_arg( 'update', $_SERVER['REQUEST_URI'] ); |
31 $_SERVER['REQUEST_URI'] = remove_query_arg( 'update', $_SERVER['REQUEST_URI'] ); |
29 $referer = remove_query_arg( 'update', wp_get_referer() ); |
32 $referer = remove_query_arg( 'update', wp_get_referer() ); |
30 |
33 |
31 if ( ! empty( $_REQUEST['paged'] ) ) { |
34 if ( ! empty( $_REQUEST['paged'] ) ) { |
32 $referer = add_query_arg( 'paged', (int) $_REQUEST['paged'], $referer ); |
35 $referer = add_query_arg( 'paged', (int) $_REQUEST['paged'], $referer ); |
33 } |
36 } |
34 |
37 |
35 $id = isset( $_REQUEST['id'] ) ? intval( $_REQUEST['id'] ) : 0; |
38 $id = isset( $_REQUEST['id'] ) ? intval( $_REQUEST['id'] ) : 0; |
36 |
39 |
37 if ( ! $id ) |
40 if ( ! $id ) { |
38 wp_die( __('Invalid site ID.') ); |
41 wp_die( __( 'Invalid site ID.' ) ); |
|
42 } |
39 |
43 |
40 $details = get_site( $id ); |
44 $details = get_site( $id ); |
41 if ( ! $details ) { |
45 if ( ! $details ) { |
42 wp_die( __( 'The requested site does not exist.' ) ); |
46 wp_die( __( 'The requested site does not exist.' ) ); |
43 } |
47 } |
44 |
48 |
45 if ( ! can_edit_network( $details->site_id ) ) |
49 if ( ! can_edit_network( $details->site_id ) ) { |
46 wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 ); |
50 wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 ); |
|
51 } |
47 |
52 |
48 $is_main_site = is_main_site( $id ); |
53 $is_main_site = is_main_site( $id ); |
49 |
54 |
50 switch_to_blog( $id ); |
55 switch_to_blog( $id ); |
51 |
56 |
58 check_admin_referer( 'add-user', '_wpnonce_add-new-user' ); |
63 check_admin_referer( 'add-user', '_wpnonce_add-new-user' ); |
59 $user = $_POST['user']; |
64 $user = $_POST['user']; |
60 if ( ! is_array( $_POST['user'] ) || empty( $user['username'] ) || empty( $user['email'] ) ) { |
65 if ( ! is_array( $_POST['user'] ) || empty( $user['username'] ) || empty( $user['email'] ) ) { |
61 $update = 'err_new'; |
66 $update = 'err_new'; |
62 } else { |
67 } else { |
63 $password = wp_generate_password( 12, false); |
68 $password = wp_generate_password( 12, false ); |
64 $user_id = wpmu_create_user( esc_html( strtolower( $user['username'] ) ), $password, esc_html( $user['email'] ) ); |
69 $user_id = wpmu_create_user( esc_html( strtolower( $user['username'] ) ), $password, esc_html( $user['email'] ) ); |
65 |
70 |
66 if ( false === $user_id ) { |
71 if ( false === $user_id ) { |
67 $update = 'err_new_dup'; |
72 $update = 'err_new_dup'; |
68 } else { |
73 } else { |
69 $result = add_user_to_blog( $id, $user_id, $_POST['new_role'] ); |
74 $result = add_user_to_blog( $id, $user_id, $_POST['new_role'] ); |
70 |
75 |
71 if ( is_wp_error( $result ) ) { |
76 if ( is_wp_error( $result ) ) { |
72 $update = 'err_add_fail'; |
77 $update = 'err_add_fail'; |
73 } else { |
78 } else { |
74 $update = 'newuser'; |
79 $update = 'newuser'; |
75 /** |
80 /** |
76 * Fires after a user has been created via the network site-users.php page. |
81 * Fires after a user has been created via the network site-users.php page. |
77 * |
82 * |
78 * @since 4.4.0 |
83 * @since 4.4.0 |
79 * |
84 * |
80 * @param int $user_id ID of the newly created user. |
85 * @param int $user_id ID of the newly created user. |
81 */ |
86 */ |
82 do_action( 'network_site_users_created_user', $user_id ); |
87 do_action( 'network_site_users_created_user', $user_id ); |
83 } |
88 } |
84 } |
89 } |
85 } |
90 } |
86 break; |
91 break; |
87 |
92 |
88 case 'adduser': |
93 case 'adduser': |
89 check_admin_referer( 'add-user', '_wpnonce_add-user' ); |
94 check_admin_referer( 'add-user', '_wpnonce_add-user' ); |
90 if ( !empty( $_POST['newuser'] ) ) { |
95 if ( ! empty( $_POST['newuser'] ) ) { |
91 $update = 'adduser'; |
96 $update = 'adduser'; |
92 $newuser = $_POST['newuser']; |
97 $newuser = $_POST['newuser']; |
93 $user = get_user_by( 'login', $newuser ); |
98 $user = get_user_by( 'login', $newuser ); |
94 if ( $user && $user->exists() ) { |
99 if ( $user && $user->exists() ) { |
95 if ( ! is_user_member_of_blog( $user->ID, $id ) ) { |
100 if ( ! is_user_member_of_blog( $user->ID, $id ) ) { |
96 $result = add_user_to_blog( $id, $user->ID, $_POST['new_role'] ); |
101 $result = add_user_to_blog( $id, $user->ID, $_POST['new_role'] ); |
97 |
102 |
98 if ( is_wp_error( $result ) ) { |
103 if ( is_wp_error( $result ) ) { |
145 wp_die( __( 'Sorry, you are not allowed to give users that role.' ), 403 ); |
150 wp_die( __( 'Sorry, you are not allowed to give users that role.' ), 403 ); |
146 } |
151 } |
147 |
152 |
148 if ( isset( $_REQUEST['users'] ) ) { |
153 if ( isset( $_REQUEST['users'] ) ) { |
149 $userids = $_REQUEST['users']; |
154 $userids = $_REQUEST['users']; |
150 $update = 'promote'; |
155 $update = 'promote'; |
151 foreach ( $userids as $user_id ) { |
156 foreach ( $userids as $user_id ) { |
152 $user_id = (int) $user_id; |
157 $user_id = (int) $user_id; |
153 |
158 |
154 // If the user doesn't already belong to the blog, bail. |
159 // If the user doesn't already belong to the blog, bail. |
155 if ( ! is_user_member_of_blog( $user_id ) ) { |
160 if ( ! is_user_member_of_blog( $user_id ) ) { |
173 } |
178 } |
174 check_admin_referer( 'bulk-users' ); |
179 check_admin_referer( 'bulk-users' ); |
175 $userids = $_REQUEST['users']; |
180 $userids = $_REQUEST['users']; |
176 /** This action is documented in wp-admin/network/site-themes.php */ |
181 /** This action is documented in wp-admin/network/site-themes.php */ |
177 $referer = apply_filters( 'handle_network_bulk_actions-' . get_current_screen()->id, $referer, $action, $userids, $id ); |
182 $referer = apply_filters( 'handle_network_bulk_actions-' . get_current_screen()->id, $referer, $action, $userids, $id ); |
178 $update = $action; |
183 $update = $action; |
179 break; |
184 break; |
180 } |
185 } |
181 |
186 |
182 wp_safe_redirect( add_query_arg( 'update', $update, $referer ) ); |
187 wp_safe_redirect( add_query_arg( 'update', $update, $referer ) ); |
183 exit(); |
188 exit(); |
193 add_screen_option( 'per_page' ); |
198 add_screen_option( 'per_page' ); |
194 |
199 |
195 /* translators: %s: site name */ |
200 /* translators: %s: site name */ |
196 $title = sprintf( __( 'Edit Site: %s' ), esc_html( $details->blogname ) ); |
201 $title = sprintf( __( 'Edit Site: %s' ), esc_html( $details->blogname ) ); |
197 |
202 |
198 $parent_file = 'sites.php'; |
203 $parent_file = 'sites.php'; |
199 $submenu_file = 'sites.php'; |
204 $submenu_file = 'sites.php'; |
200 |
205 |
201 /** |
206 /** |
202 * Filters whether to show the Add Existing User form on the Multisite Users screen. |
207 * Filters whether to show the Add Existing User form on the Multisite Users screen. |
203 * |
208 * |
204 * @since 3.1.0 |
209 * @since 3.1.0 |
205 * |
210 * |
206 * @param bool $bool Whether to show the Add Existing User form. Default true. |
211 * @param bool $bool Whether to show the Add Existing User form. Default true. |
207 */ |
212 */ |
208 if ( ! wp_is_large_network( 'users' ) && apply_filters( 'show_network_site_users_add_existing_form', true ) ) |
213 if ( ! wp_is_large_network( 'users' ) && apply_filters( 'show_network_site_users_add_existing_form', true ) ) { |
209 wp_enqueue_script( 'user-suggest' ); |
214 wp_enqueue_script( 'user-suggest' ); |
|
215 } |
210 |
216 |
211 require( ABSPATH . 'wp-admin/admin-header.php' ); ?> |
217 require( ABSPATH . 'wp-admin/admin-header.php' ); ?> |
212 |
218 |
213 <script type="text/javascript"> |
219 <script type="text/javascript"> |
214 var current_site_id = <?php echo $id; ?>; |
220 var current_site_id = <?php echo $id; ?>; |
218 <div class="wrap"> |
224 <div class="wrap"> |
219 <h1 id="edit-site"><?php echo $title; ?></h1> |
225 <h1 id="edit-site"><?php echo $title; ?></h1> |
220 <p class="edit-site-actions"><a href="<?php echo esc_url( get_home_url( $id, '/' ) ); ?>"><?php _e( 'Visit' ); ?></a> | <a href="<?php echo esc_url( get_admin_url( $id ) ); ?>"><?php _e( 'Dashboard' ); ?></a></p> |
226 <p class="edit-site-actions"><a href="<?php echo esc_url( get_home_url( $id, '/' ) ); ?>"><?php _e( 'Visit' ); ?></a> | <a href="<?php echo esc_url( get_admin_url( $id ) ); ?>"><?php _e( 'Dashboard' ); ?></a></p> |
221 <?php |
227 <?php |
222 |
228 |
223 network_edit_site_nav( array( |
229 network_edit_site_nav( |
224 'blog_id' => $id, |
230 array( |
225 'selected' => 'site-users' |
231 'blog_id' => $id, |
226 ) ); |
232 'selected' => 'site-users', |
227 |
233 ) |
228 if ( isset($_GET['update']) ) : |
234 ); |
229 switch($_GET['update']) { |
235 |
230 case 'adduser': |
236 if ( isset( $_GET['update'] ) ) : |
231 echo '<div id="message" class="updated notice is-dismissible"><p>' . __( 'User added.' ) . '</p></div>'; |
237 switch ( $_GET['update'] ) { |
232 break; |
238 case 'adduser': |
233 case 'err_add_member': |
239 echo '<div id="message" class="updated notice is-dismissible"><p>' . __( 'User added.' ) . '</p></div>'; |
234 echo '<div id="message" class="error notice is-dismissible"><p>' . __( 'User is already a member of this site.' ) . '</p></div>'; |
240 break; |
235 break; |
241 case 'err_add_member': |
236 case 'err_add_fail': |
242 echo '<div id="message" class="error notice is-dismissible"><p>' . __( 'User is already a member of this site.' ) . '</p></div>'; |
237 echo '<div id="message" class="error notice is-dismissible"><p>' . __( 'User could not be added to this site.' ) . '</p></div>'; |
243 break; |
238 break; |
244 case 'err_add_fail': |
239 case 'err_add_notfound': |
245 echo '<div id="message" class="error notice is-dismissible"><p>' . __( 'User could not be added to this site.' ) . '</p></div>'; |
240 echo '<div id="message" class="error notice is-dismissible"><p>' . __( 'Enter the username of an existing user.' ) . '</p></div>'; |
246 break; |
241 break; |
247 case 'err_add_notfound': |
242 case 'promote': |
248 echo '<div id="message" class="error notice is-dismissible"><p>' . __( 'Enter the username of an existing user.' ) . '</p></div>'; |
243 echo '<div id="message" class="updated notice is-dismissible"><p>' . __( 'Changed roles.' ) . '</p></div>'; |
249 break; |
244 break; |
250 case 'promote': |
245 case 'err_promote': |
251 echo '<div id="message" class="updated notice is-dismissible"><p>' . __( 'Changed roles.' ) . '</p></div>'; |
246 echo '<div id="message" class="error notice is-dismissible"><p>' . __( 'Select a user to change role.' ) . '</p></div>'; |
252 break; |
247 break; |
253 case 'err_promote': |
248 case 'remove': |
254 echo '<div id="message" class="error notice is-dismissible"><p>' . __( 'Select a user to change role.' ) . '</p></div>'; |
249 echo '<div id="message" class="updated notice is-dismissible"><p>' . __( 'User removed from this site.' ) . '</p></div>'; |
255 break; |
250 break; |
256 case 'remove': |
251 case 'err_remove': |
257 echo '<div id="message" class="updated notice is-dismissible"><p>' . __( 'User removed from this site.' ) . '</p></div>'; |
252 echo '<div id="message" class="error notice is-dismissible"><p>' . __( 'Select a user to remove.' ) . '</p></div>'; |
258 break; |
253 break; |
259 case 'err_remove': |
254 case 'newuser': |
260 echo '<div id="message" class="error notice is-dismissible"><p>' . __( 'Select a user to remove.' ) . '</p></div>'; |
255 echo '<div id="message" class="updated notice is-dismissible"><p>' . __( 'User created.' ) . '</p></div>'; |
261 break; |
256 break; |
262 case 'newuser': |
257 case 'err_new': |
263 echo '<div id="message" class="updated notice is-dismissible"><p>' . __( 'User created.' ) . '</p></div>'; |
258 echo '<div id="message" class="error notice is-dismissible"><p>' . __( 'Enter the username and email.' ) . '</p></div>'; |
264 break; |
259 break; |
265 case 'err_new': |
260 case 'err_new_dup': |
266 echo '<div id="message" class="error notice is-dismissible"><p>' . __( 'Enter the username and email.' ) . '</p></div>'; |
261 echo '<div id="message" class="error notice is-dismissible"><p>' . __( 'Duplicated username or email address.' ) . '</p></div>'; |
267 break; |
262 break; |
268 case 'err_new_dup': |
|
269 echo '<div id="message" class="error notice is-dismissible"><p>' . __( 'Duplicated username or email address.' ) . '</p></div>'; |
|
270 break; |
263 } |
271 } |
264 endif; ?> |
272 endif; |
|
273 ?> |
265 |
274 |
266 <form class="search-form" method="get"> |
275 <form class="search-form" method="get"> |
267 <?php $wp_list_table->search_box( __( 'Search Users' ), 'user' ); ?> |
276 <?php $wp_list_table->search_box( __( 'Search Users' ), 'user' ); ?> |
268 <input type="hidden" name="id" value="<?php echo esc_attr( $id ) ?>" /> |
277 <input type="hidden" name="id" value="<?php echo esc_attr( $id ); ?>" /> |
269 </form> |
278 </form> |
270 |
279 |
271 <?php $wp_list_table->views(); ?> |
280 <?php $wp_list_table->views(); ?> |
272 |
281 |
273 <form method="post" action="site-users.php?action=update-site"> |
282 <form method="post" action="site-users.php?action=update-site"> |
274 <input type="hidden" name="id" value="<?php echo esc_attr( $id ) ?>" /> |
283 <input type="hidden" name="id" value="<?php echo esc_attr( $id ); ?>" /> |
275 |
284 |
276 <?php $wp_list_table->display(); ?> |
285 <?php $wp_list_table->display(); ?> |
277 |
286 |
278 </form> |
287 </form> |
279 |
288 |
284 * @since 3.1.0 |
293 * @since 3.1.0 |
285 */ |
294 */ |
286 do_action( 'network_site_users_after_list_table' ); |
295 do_action( 'network_site_users_after_list_table' ); |
287 |
296 |
288 /** This filter is documented in wp-admin/network/site-users.php */ |
297 /** This filter is documented in wp-admin/network/site-users.php */ |
289 if ( current_user_can( 'promote_users' ) && apply_filters( 'show_network_site_users_add_existing_form', true ) ) : ?> |
298 if ( current_user_can( 'promote_users' ) && apply_filters( 'show_network_site_users_add_existing_form', true ) ) : |
|
299 ?> |
290 <h2 id="add-existing-user"><?php _e( 'Add Existing User' ); ?></h2> |
300 <h2 id="add-existing-user"><?php _e( 'Add Existing User' ); ?></h2> |
291 <form action="site-users.php?action=adduser" id="adduser" method="post"> |
301 <form action="site-users.php?action=adduser" id="adduser" method="post"> |
292 <input type="hidden" name="id" value="<?php echo esc_attr( $id ) ?>" /> |
302 <input type="hidden" name="id" value="<?php echo esc_attr( $id ); ?>" /> |
293 <table class="form-table"> |
303 <table class="form-table" role="presentation"> |
294 <tr> |
304 <tr> |
295 <th scope="row"><label for="newuser"><?php _e( 'Username' ); ?></label></th> |
305 <th scope="row"><label for="newuser"><?php _e( 'Username' ); ?></label></th> |
296 <td><input type="text" class="regular-text wp-suggest-user" name="newuser" id="newuser" /></td> |
306 <td><input type="text" class="regular-text wp-suggest-user" name="newuser" id="newuser" /></td> |
297 </tr> |
307 </tr> |
298 <tr> |
308 <tr> |
317 * |
327 * |
318 * @since 3.1.0 |
328 * @since 3.1.0 |
319 * |
329 * |
320 * @param bool $bool Whether to show the Add New User form. Default true. |
330 * @param bool $bool Whether to show the Add New User form. Default true. |
321 */ |
331 */ |
322 if ( current_user_can( 'create_users' ) && apply_filters( 'show_network_site_users_add_new_form', true ) ) : ?> |
332 if ( current_user_can( 'create_users' ) && apply_filters( 'show_network_site_users_add_new_form', true ) ) : |
|
333 ?> |
323 <h2 id="add-new-user"><?php _e( 'Add New User' ); ?></h2> |
334 <h2 id="add-new-user"><?php _e( 'Add New User' ); ?></h2> |
324 <form action="<?php echo network_admin_url('site-users.php?action=newuser'); ?>" id="newuser" method="post"> |
335 <form action="<?php echo network_admin_url( 'site-users.php?action=newuser' ); ?>" id="newuser" method="post"> |
325 <input type="hidden" name="id" value="<?php echo esc_attr( $id ) ?>" /> |
336 <input type="hidden" name="id" value="<?php echo esc_attr( $id ); ?>" /> |
326 <table class="form-table"> |
337 <table class="form-table" role="presentation"> |
327 <tr> |
338 <tr> |
328 <th scope="row"><label for="user_username"><?php _e( 'Username' ) ?></label></th> |
339 <th scope="row"><label for="user_username"><?php _e( 'Username' ); ?></label></th> |
329 <td><input type="text" class="regular-text" name="user[username]" id="user_username" /></td> |
340 <td><input type="text" class="regular-text" name="user[username]" id="user_username" /></td> |
330 </tr> |
341 </tr> |
331 <tr> |
342 <tr> |
332 <th scope="row"><label for="user_email"><?php _e( 'Email' ) ?></label></th> |
343 <th scope="row"><label for="user_email"><?php _e( 'Email' ); ?></label></th> |
333 <td><input type="text" class="regular-text" name="user[email]" id="user_email" /></td> |
344 <td><input type="text" class="regular-text" name="user[email]" id="user_email" /></td> |
334 </tr> |
345 </tr> |
335 <tr> |
346 <tr> |
336 <th scope="row"><label for="new_role_newuser"><?php _e( 'Role' ); ?></label></th> |
347 <th scope="row"><label for="new_role_newuser"><?php _e( 'Role' ); ?></label></th> |
337 <td><select name="new_role" id="new_role_newuser"> |
348 <td><select name="new_role" id="new_role_newuser"> |
341 restore_current_blog(); |
352 restore_current_blog(); |
342 ?> |
353 ?> |
343 </select></td> |
354 </select></td> |
344 </tr> |
355 </tr> |
345 <tr class="form-field"> |
356 <tr class="form-field"> |
346 <td colspan="2"><?php _e( 'A password reset link will be sent to the user via email.' ) ?></td> |
357 <td colspan="2" class="td-full"><?php _e( 'A password reset link will be sent to the user via email.' ); ?></td> |
347 </tr> |
358 </tr> |
348 </table> |
359 </table> |
349 <?php wp_nonce_field( 'add-user', '_wpnonce_add-new-user' ) ?> |
360 <?php wp_nonce_field( 'add-user', '_wpnonce_add-new-user' ); ?> |
350 <?php submit_button( __( 'Add New User' ), 'primary', 'add-user', true, array( 'id' => 'submit-add-user' ) ); ?> |
361 <?php submit_button( __( 'Add New User' ), 'primary', 'add-user', true, array( 'id' => 'submit-add-user' ) ); ?> |
351 </form> |
362 </form> |
352 <?php endif; ?> |
363 <?php endif; ?> |
353 </div> |
364 </div> |
354 <?php |
365 <?php |