WordPress 4.7
[autoinstalls/wordpress.git] / wp-admin / network / site-users.php
1 <?php
2 /**
3  * Edit Site Users Administration Screen
4  *
5  * @package WordPress
6  * @subpackage Multisite
7  * @since 3.1.0
8  */
9
10 /** Load WordPress Administration Bootstrap */
11 require_once( dirname( __FILE__ ) . '/admin.php' );
12
13 if ( ! current_user_can('manage_sites') )
14         wp_die(__('Sorry, you are not allowed to edit this site.'));
15
16 $wp_list_table = _get_list_table('WP_Users_List_Table');
17 $wp_list_table->prepare_items();
18
19 get_current_screen()->add_help_tab( array(
20         'id'      => 'overview',
21         'title'   => __('Overview'),
22         'content' =>
23                 '<p>' . __('The menu is for editing information specific to individual sites, particularly if the admin area of a site is unavailable.') . '</p>' .
24                 '<p>' . __('<strong>Info</strong> &mdash; The site URL is rarely edited as this can cause the site to not work properly. The Registered date and Last Updated date are displayed. Network admins can mark a site as archived, spam, deleted and mature, to remove from public listings or disable.') . '</p>' .
25                 '<p>' . __('<strong>Users</strong> &mdash; This displays the users associated with this site. You can also change their role, reset their password, or remove them from the site. Removing the user from the site does not remove the user from the network.') . '</p>' .
26                 '<p>' . sprintf( __('<strong>Themes</strong> &mdash; This area shows themes that are not already enabled across the network. Enabling a theme in this menu makes it accessible to this site. It does not activate the theme, but allows it to show in the site&#8217;s Appearance menu. To enable a theme for the entire network, see the <a href="%s">Network Themes</a> screen.' ), network_admin_url( 'themes.php' ) ) . '</p>' .
27                 '<p>' . __('<strong>Settings</strong> &mdash; This page shows a list of all settings associated with this site. Some are created by WordPress and others are created by plugins you activate. Note that some fields are grayed out and say Serialized Data. You cannot modify these values due to the way the setting is stored in the database.') . '</p>'
28 ) );
29
30 get_current_screen()->set_help_sidebar(
31         '<p><strong>' . __('For more information:') . '</strong></p>' .
32         '<p>' . __('<a href="https://codex.wordpress.org/Network_Admin_Sites_Screen">Documentation on Site Management</a>') . '</p>' .
33         '<p>' . __('<a href="https://wordpress.org/support/forum/multisite/">Support Forums</a>') . '</p>'
34 );
35
36 get_current_screen()->set_screen_reader_content( array(
37         'heading_views'      => __( 'Filter site users list' ),
38         'heading_pagination' => __( 'Site users list navigation' ),
39         'heading_list'       => __( 'Site users list' ),
40 ) );
41
42 $_SERVER['REQUEST_URI'] = remove_query_arg( 'update', $_SERVER['REQUEST_URI'] );
43 $referer = remove_query_arg( 'update', wp_get_referer() );
44
45 if ( ! empty( $_REQUEST['paged'] ) ) {
46         $referer = add_query_arg( 'paged', (int) $_REQUEST['paged'], $referer );
47 }
48
49 $id = isset( $_REQUEST['id'] ) ? intval( $_REQUEST['id'] ) : 0;
50
51 if ( ! $id )
52         wp_die( __('Invalid site ID.') );
53
54 $details = get_site( $id );
55 if ( ! $details ) {
56         wp_die( __( 'The requested site does not exist.' ) );
57 }
58
59 if ( ! can_edit_network( $details->site_id ) )
60         wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 );
61
62 $is_main_site = is_main_site( $id );
63
64 switch_to_blog( $id );
65
66 $action = $wp_list_table->current_action();
67
68 if ( $action ) {
69
70         switch ( $action ) {
71                 case 'newuser':
72                         check_admin_referer( 'add-user', '_wpnonce_add-new-user' );
73                         $user = $_POST['user'];
74                         if ( ! is_array( $_POST['user'] ) || empty( $user['username'] ) || empty( $user['email'] ) ) {
75                                 $update = 'err_new';
76                         } else {
77                                 $password = wp_generate_password( 12, false);
78                                 $user_id = wpmu_create_user( esc_html( strtolower( $user['username'] ) ), $password, esc_html( $user['email'] ) );
79
80                                 if ( false === $user_id ) {
81                                         $update = 'err_new_dup';
82                                 } else {
83                                         add_user_to_blog( $id, $user_id, $_POST['new_role'] );
84                                         $update = 'newuser';
85                                         /**
86                                           * Fires after a user has been created via the network site-users.php page.
87                                           *
88                                           * @since 4.4.0
89                                           *
90                                           * @param int $user_id ID of the newly created user.
91                                           */
92                                         do_action( 'network_site_users_created_user', $user_id );
93                                 }
94                         }
95                         break;
96
97                 case 'adduser':
98                         check_admin_referer( 'add-user', '_wpnonce_add-user' );
99                         if ( !empty( $_POST['newuser'] ) ) {
100                                 $update = 'adduser';
101                                 $newuser = $_POST['newuser'];
102                                 $user = get_user_by( 'login', $newuser );
103                                 if ( $user && $user->exists() ) {
104                                         if ( ! is_user_member_of_blog( $user->ID, $id ) )
105                                                 add_user_to_blog( $id, $user->ID, $_POST['new_role'] );
106                                         else
107                                                 $update = 'err_add_member';
108                                 } else {
109                                         $update = 'err_add_notfound';
110                                 }
111                         } else {
112                                 $update = 'err_add_notfound';
113                         }
114                         break;
115
116                 case 'remove':
117                         if ( ! current_user_can( 'remove_users' ) ) {
118                                 wp_die( __( 'Sorry, you are not allowed to remove users.' ) );
119                         }
120
121                         check_admin_referer( 'bulk-users' );
122
123                         $update = 'remove';
124                         if ( isset( $_REQUEST['users'] ) ) {
125                                 $userids = $_REQUEST['users'];
126
127                                 foreach ( $userids as $user_id ) {
128                                         $user_id = (int) $user_id;
129                                         remove_user_from_blog( $user_id, $id );
130                                 }
131                         } elseif ( isset( $_GET['user'] ) ) {
132                                 remove_user_from_blog( $_GET['user'] );
133                         } else {
134                                 $update = 'err_remove';
135                         }
136                         break;
137
138                 case 'promote':
139                         check_admin_referer( 'bulk-users' );
140                         $editable_roles = get_editable_roles();
141                         if ( empty( $editable_roles[ $_REQUEST['new_role'] ] ) ) {
142                                 wp_die( __( 'Sorry, you are not allowed to give users that role.' ) );
143                         }
144
145                         if ( isset( $_REQUEST['users'] ) ) {
146                                 $userids = $_REQUEST['users'];
147                                 $update = 'promote';
148                                 foreach ( $userids as $user_id ) {
149                                         $user_id = (int) $user_id;
150
151                                         // If the user doesn't already belong to the blog, bail.
152                                         if ( ! is_user_member_of_blog( $user_id ) ) {
153                                                 wp_die(
154                                                         '<h1>' . __( 'Cheatin&#8217; uh?' ) . '</h1>' .
155                                                         '<p>' . __( 'One of the selected users is not a member of this site.' ) . '</p>',
156                                                         403
157                                                 );
158                                         }
159
160                                         $user = get_userdata( $user_id );
161                                         $user->set_role( $_REQUEST['new_role'] );
162                                 }
163                         } else {
164                                 $update = 'err_promote';
165                         }
166                         break;
167                 default:
168                         if ( ! isset( $_REQUEST['users'] ) ) {
169                                 break;
170                         }
171                         check_admin_referer( 'bulk-users' );
172                         $userids = $_REQUEST['users'];
173                         /** This action is documented in wp-admin/network/site-themes.php */
174                         $referer = apply_filters( 'handle_network_bulk_actions-' . get_current_screen()->id, $referer, $action, $userids, $id );
175                         $update = $action;
176                         break;
177         }
178
179         wp_safe_redirect( add_query_arg( 'update', $update, $referer ) );
180         exit();
181 }
182
183 restore_current_blog();
184
185 if ( isset( $_GET['action'] ) && 'update-site' == $_GET['action'] ) {
186         wp_safe_redirect( $referer );
187         exit();
188 }
189
190 add_screen_option( 'per_page' );
191
192 /* translators: %s: site name */
193 $title = sprintf( __( 'Edit Site: %s' ), esc_html( $details->blogname ) );
194
195 $parent_file = 'sites.php';
196 $submenu_file = 'sites.php';
197
198 /**
199  * Filters whether to show the Add Existing User form on the Multisite Users screen.
200  *
201  * @since 3.1.0
202  *
203  * @param bool $bool Whether to show the Add Existing User form. Default true.
204  */
205 if ( ! wp_is_large_network( 'users' ) && apply_filters( 'show_network_site_users_add_existing_form', true ) )
206         wp_enqueue_script( 'user-suggest' );
207
208 require( ABSPATH . 'wp-admin/admin-header.php' ); ?>
209
210 <script type="text/javascript">
211 var current_site_id = <?php echo $id; ?>;
212 </script>
213
214
215 <div class="wrap">
216 <h1 id="edit-site"><?php echo $title; ?></h1>
217 <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>
218 <?php
219
220 network_edit_site_nav( array(
221         'blog_id'  => $id,
222         'selected' => 'site-users'
223 ) );
224
225 if ( isset($_GET['update']) ) :
226         switch($_GET['update']) {
227         case 'adduser':
228                 echo '<div id="message" class="updated notice is-dismissible"><p>' . __( 'User added.' ) . '</p></div>';
229                 break;
230         case 'err_add_member':
231                 echo '<div id="message" class="error notice is-dismissible"><p>' . __( 'User is already a member of this site.' ) . '</p></div>';
232                 break;
233         case 'err_add_notfound':
234                 echo '<div id="message" class="error notice is-dismissible"><p>' . __( 'Enter the username of an existing user.' ) . '</p></div>';
235                 break;
236         case 'promote':
237                 echo '<div id="message" class="updated notice is-dismissible"><p>' . __( 'Changed roles.' ) . '</p></div>';
238                 break;
239         case 'err_promote':
240                 echo '<div id="message" class="error notice is-dismissible"><p>' . __( 'Select a user to change role.' ) . '</p></div>';
241                 break;
242         case 'remove':
243                 echo '<div id="message" class="updated notice is-dismissible"><p>' . __( 'User removed from this site.' ) . '</p></div>';
244                 break;
245         case 'err_remove':
246                 echo '<div id="message" class="error notice is-dismissible"><p>' . __( 'Select a user to remove.' ) . '</p></div>';
247                 break;
248         case 'newuser':
249                 echo '<div id="message" class="updated notice is-dismissible"><p>' . __( 'User created.' ) . '</p></div>';
250                 break;
251         case 'err_new':
252                 echo '<div id="message" class="error notice is-dismissible"><p>' . __( 'Enter the username and email.' ) . '</p></div>';
253                 break;
254         case 'err_new_dup':
255                 echo '<div id="message" class="error notice is-dismissible"><p>' . __( 'Duplicated username or email address.' ) . '</p></div>';
256                 break;
257         }
258 endif; ?>
259
260 <form class="search-form" method="get">
261 <?php $wp_list_table->search_box( __( 'Search Users' ), 'user' ); ?>
262 <input type="hidden" name="id" value="<?php echo esc_attr( $id ) ?>" />
263 </form>
264
265 <?php $wp_list_table->views(); ?>
266
267 <form method="post" action="site-users.php?action=update-site">
268         <input type="hidden" name="id" value="<?php echo esc_attr( $id ) ?>" />
269
270 <?php $wp_list_table->display(); ?>
271
272 </form>
273
274 <?php
275 /**
276  * Fires after the list table on the Users screen in the Multisite Network Admin.
277  *
278  * @since 3.1.0
279  */
280 do_action( 'network_site_users_after_list_table' );
281
282 /** This filter is documented in wp-admin/network/site-users.php */
283 if ( current_user_can( 'promote_users' ) && apply_filters( 'show_network_site_users_add_existing_form', true ) ) : ?>
284 <h2 id="add-existing-user"><?php _e( 'Add Existing User' ); ?></h2>
285 <form action="site-users.php?action=adduser" id="adduser" method="post">
286         <input type="hidden" name="id" value="<?php echo esc_attr( $id ) ?>" />
287         <table class="form-table">
288                 <tr>
289                         <th scope="row"><label for="newuser"><?php _e( 'Username' ); ?></label></th>
290                         <td><input type="text" class="regular-text wp-suggest-user" name="newuser" id="newuser" /></td>
291                 </tr>
292                 <tr>
293                         <th scope="row"><label for="new_role_adduser"><?php _e( 'Role' ); ?></label></th>
294                         <td><select name="new_role" id="new_role_adduser">
295                         <?php wp_dropdown_roles( get_option( 'default_role' ) ); ?>
296                         </select></td>
297                 </tr>
298         </table>
299         <?php wp_nonce_field( 'add-user', '_wpnonce_add-user' ) ?>
300         <?php submit_button( __( 'Add User' ), 'primary', 'add-user', true, array( 'id' => 'submit-add-existing-user' ) ); ?>
301 </form>
302 <?php endif; ?>
303
304 <?php
305 /**
306  * Filters whether to show the Add New User form on the Multisite Users screen.
307  *
308  * @since 3.1.0
309  *
310  * @param bool $bool Whether to show the Add New User form. Default true.
311  */
312 if ( current_user_can( 'create_users' ) && apply_filters( 'show_network_site_users_add_new_form', true ) ) : ?>
313 <h2 id="add-new-user"><?php _e( 'Add New User' ); ?></h2>
314 <form action="<?php echo network_admin_url('site-users.php?action=newuser'); ?>" id="newuser" method="post">
315         <input type="hidden" name="id" value="<?php echo esc_attr( $id ) ?>" />
316         <table class="form-table">
317                 <tr>
318                         <th scope="row"><label for="user_username"><?php _e( 'Username' ) ?></label></th>
319                         <td><input type="text" class="regular-text" name="user[username]" id="user_username" /></td>
320                 </tr>
321                 <tr>
322                         <th scope="row"><label for="user_email"><?php _e( 'Email' ) ?></label></th>
323                         <td><input type="text" class="regular-text" name="user[email]" id="user_email" /></td>
324                 </tr>
325                 <tr>
326                         <th scope="row"><label for="new_role_newuser"><?php _e( 'Role' ); ?></label></th>
327                         <td><select name="new_role" id="new_role_newuser">
328                         <?php wp_dropdown_roles( get_option( 'default_role' ) ); ?>
329                         </select></td>
330                 </tr>
331                 <tr class="form-field">
332                         <td colspan="2"><?php _e( 'A password reset link will be sent to the user via email.' ) ?></td>
333                 </tr>
334         </table>
335         <?php wp_nonce_field( 'add-user', '_wpnonce_add-new-user' ) ?>
336         <?php submit_button( __( 'Add New User' ), 'primary', 'add-user', true, array( 'id' => 'submit-add-user' ) ); ?>
337 </form>
338 <?php endif; ?>
339 </div>
340 <?php
341 require( ABSPATH . 'wp-admin/admin-footer.php' );