Make WordPress Core

source: branches/4.9/src/wp-admin/user-new.php @ 42264

Last change on this file since 42264 was 42264, checked in by johnbillion, 4 years ago

Hardening: Use a properly generated hash for the newbloguser key instead of a determinate substring.

Merges [42258] to the 4.9 branch.

  • Property svn:eol-style set to native
File size: 21.1 KB
Line 
1<?php
2/**
3 * New User Administration Screen.
4 *
5 * @package WordPress
6 * @subpackage Administration
7 */
8
9/** WordPress Administration Bootstrap */
10require_once( dirname( __FILE__ ) . '/admin.php' );
11
12if ( is_multisite() ) {
13        if ( ! current_user_can( 'create_users' ) && ! current_user_can( 'promote_users' ) ) {
14                wp_die(
15                        '<h1>' . __( 'Cheatin&#8217; uh?' ) . '</h1>' .
16                        '<p>' . __( 'Sorry, you are not allowed to add users to this network.' ) . '</p>',
17                        403
18                );
19        }
20} elseif ( ! current_user_can( 'create_users' ) ) {
21        wp_die(
22                '<h1>' . __( 'Cheatin&#8217; uh?' ) . '</h1>' .
23                '<p>' . __( 'Sorry, you are not allowed to create users.' ) . '</p>',
24                403
25        );
26}
27
28if ( is_multisite() ) {
29        add_filter( 'wpmu_signup_user_notification_email', 'admin_created_user_email' );
30}
31
32if ( isset($_REQUEST['action']) && 'adduser' == $_REQUEST['action'] ) {
33        check_admin_referer( 'add-user', '_wpnonce_add-user' );
34
35        $user_details = null;
36        $user_email = wp_unslash( $_REQUEST['email'] );
37        if ( false !== strpos( $user_email, '@' ) ) {
38                $user_details = get_user_by( 'email', $user_email );
39        } else {
40                if ( current_user_can( 'manage_network_users' ) ) {
41                        $user_details = get_user_by( 'login', $user_email );
42                } else {
43                        wp_redirect( add_query_arg( array('update' => 'enter_email'), 'user-new.php' ) );
44                        die();
45                }
46        }
47
48        if ( !$user_details ) {
49                wp_redirect( add_query_arg( array('update' => 'does_not_exist'), 'user-new.php' ) );
50                die();
51        }
52
53        if ( ! current_user_can( 'promote_user', $user_details->ID ) ) {
54                wp_die(
55                        '<h1>' . __( 'Cheatin&#8217; uh?' ) . '</h1>' .
56                        '<p>' . __( 'Sorry, you are not allowed to add users to this network.' ) . '</p>',
57                        403
58                );
59        }
60
61        // Adding an existing user to this blog
62        $new_user_email = $user_details->user_email;
63        $redirect = 'user-new.php';
64        $username = $user_details->user_login;
65        $user_id = $user_details->ID;
66        if ( $username != null && array_key_exists( $blog_id, get_blogs_of_user( $user_id ) ) ) {
67                $redirect = add_query_arg( array('update' => 'addexisting'), 'user-new.php' );
68        } else {
69                if ( isset( $_POST[ 'noconfirmation' ] ) && current_user_can( 'manage_network_users' ) ) {
70                        $result = add_existing_user_to_blog( array( 'user_id' => $user_id, 'role' => $_REQUEST[ 'role' ] ) );
71
72                        if ( ! is_wp_error( $result ) ) {
73                                $redirect = add_query_arg( array( 'update' => 'addnoconfirmation', 'user_id' => $user_id ), 'user-new.php' );
74                        } else {
75                                $redirect = add_query_arg( array( 'update' => 'could_not_add' ), 'user-new.php' );
76                        }
77                } else {
78                        $newuser_key = wp_generate_password( 20, false );
79                        add_option( 'new_user_' . $newuser_key, array( 'user_id' => $user_id, 'email' => $user_details->user_email, 'role' => $_REQUEST[ 'role' ] ) );
80
81                        $roles = get_editable_roles();
82                        $role = $roles[ $_REQUEST['role'] ];
83
84                        /**
85                         * Fires immediately after a user is invited to join a site, but before the notification is sent.
86                         *
87                         * @since 4.4.0
88                         *
89                         * @param int    $user_id     The invited user's ID.
90                         * @param array  $role        The role of invited user.
91                         * @param string $newuser_key The key of the invitation.
92                         */
93                        do_action( 'invite_user', $user_id, $role, $newuser_key );
94
95                        $switched_locale = switch_to_locale( get_user_locale( $user_details ) );
96
97                        /* translators: 1: Site name, 2: site URL, 3: role, 4: activation URL */
98                        $message = __( 'Hi,
99
100You\'ve been invited to join \'%1$s\' at
101%2$s with the role of %3$s.
102
103Please click the following link to confirm the invite:
104%4$s' );
105                        wp_mail( $new_user_email, sprintf( __( '[%s] Joining confirmation' ), wp_specialchars_decode( get_option( 'blogname' ) ) ), sprintf( $message, get_option( 'blogname' ), home_url(), wp_specialchars_decode( translate_user_role( $role['name'] ) ), home_url( "/newbloguser/$newuser_key/" ) ) );
106
107                        if ( $switched_locale ) {
108                                restore_previous_locale();
109                        }
110
111                        $redirect = add_query_arg( array('update' => 'add'), 'user-new.php' );
112                }
113        }
114        wp_redirect( $redirect );
115        die();
116} elseif ( isset($_REQUEST['action']) && 'createuser' == $_REQUEST['action'] ) {
117        check_admin_referer( 'create-user', '_wpnonce_create-user' );
118
119        if ( ! current_user_can( 'create_users' ) ) {
120                wp_die(
121                        '<h1>' . __( 'Cheatin&#8217; uh?' ) . '</h1>' .
122                        '<p>' . __( 'Sorry, you are not allowed to create users.' ) . '</p>',
123                        403
124                );
125        }
126
127        if ( ! is_multisite() ) {
128                $user_id = edit_user();
129
130                if ( is_wp_error( $user_id ) ) {
131                        $add_user_errors = $user_id;
132                } else {
133                        if ( current_user_can( 'list_users' ) )
134                                $redirect = 'users.php?update=add&id=' . $user_id;
135                        else
136                                $redirect = add_query_arg( 'update', 'add', 'user-new.php' );
137                        wp_redirect( $redirect );
138                        die();
139                }
140        } else {
141                // Adding a new user to this site
142                $new_user_email = wp_unslash( $_REQUEST['email'] );
143                $user_details = wpmu_validate_user_signup( $_REQUEST['user_login'], $new_user_email );
144                if ( is_wp_error( $user_details[ 'errors' ] ) && !empty( $user_details[ 'errors' ]->errors ) ) {
145                        $add_user_errors = $user_details[ 'errors' ];
146                } else {
147                        /**
148                         * Filters the user_login, also known as the username, before it is added to the site.
149                         *
150                         * @since 2.0.3
151                         *
152                         * @param string $user_login The sanitized username.
153                         */
154                        $new_user_login = apply_filters( 'pre_user_login', sanitize_user( wp_unslash( $_REQUEST['user_login'] ), true ) );
155                        if ( isset( $_POST[ 'noconfirmation' ] ) && current_user_can( 'manage_network_users' ) ) {
156                                add_filter( 'wpmu_signup_user_notification', '__return_false' ); // Disable confirmation email
157                                add_filter( 'wpmu_welcome_user_notification', '__return_false' ); // Disable welcome email
158                        }
159                        wpmu_signup_user( $new_user_login, $new_user_email, array( 'add_to_blog' => get_current_blog_id(), 'new_role' => $_REQUEST['role'] ) );
160                        if ( isset( $_POST[ 'noconfirmation' ] ) && current_user_can( 'manage_network_users' ) ) {
161                                $key = $wpdb->get_var( $wpdb->prepare( "SELECT activation_key FROM {$wpdb->signups} WHERE user_login = %s AND user_email = %s", $new_user_login, $new_user_email ) );
162                                $new_user = wpmu_activate_signup( $key );
163                                if ( is_wp_error( $new_user ) ) {
164                                        $redirect = add_query_arg( array( 'update' => 'addnoconfirmation' ), 'user-new.php' );
165                                } elseif ( ! is_user_member_of_blog( $new_user['user_id'] ) ) {
166                                        $redirect = add_query_arg( array( 'update' => 'created_could_not_add' ), 'user-new.php' );
167                                } else {
168                                        $redirect = add_query_arg( array( 'update' => 'addnoconfirmation', 'user_id' => $new_user['user_id'] ), 'user-new.php' );
169                                }
170                        } else {
171                                $redirect = add_query_arg( array('update' => 'newuserconfirmation'), 'user-new.php' );
172                        }
173                        wp_redirect( $redirect );
174                        die();
175                }
176        }
177}
178
179$title = __('Add New User');
180$parent_file = 'users.php';
181
182$do_both = false;
183if ( is_multisite() && current_user_can('promote_users') && current_user_can('create_users') )
184        $do_both = true;
185
186$help = '<p>' . __('To add a new user to your site, fill in the form on this screen and click the Add New User button at the bottom.') . '</p>';
187
188if ( is_multisite() ) {
189        $help .= '<p>' . __('Because this is a multisite installation, you may add accounts that already exist on the Network by specifying a username or email, and defining a role. For more options, such as specifying a password, you have to be a Network Administrator and use the hover link under an existing user&#8217;s name to Edit the user profile under Network Admin > All Users.') . '</p>' .
190        '<p>' . __('New users will receive an email letting them know they&#8217;ve been added as a user for your site. This email will also contain their password. Check the box if you don&#8217;t want the user to receive a welcome email.') . '</p>';
191} else {
192        $help .= '<p>' . __('New users are automatically assigned a password, which they can change after logging in. You can view or edit the assigned password by clicking the Show Password button. The username cannot be changed once the user has been added.') . '</p>' .
193
194        '<p>' . __('By default, new users will receive an email letting them know they&#8217;ve been added as a user for your site. This email will also contain a password reset link. Uncheck the box if you don&#8217;t want to send the new user a welcome email.') . '</p>';
195}
196
197$help .= '<p>' . __('Remember to click the Add New User button at the bottom of this screen when you are finished.') . '</p>';
198
199get_current_screen()->add_help_tab( array(
200        'id'      => 'overview',
201        'title'   => __('Overview'),
202        'content' => $help,
203) );
204
205get_current_screen()->add_help_tab( array(
206'id'      => 'user-roles',
207'title'   => __('User Roles'),
208'content' => '<p>' . __('Here is a basic overview of the different user roles and the permissions associated with each one:') . '</p>' .
209                                '<ul>' .
210                                '<li>' . __('Subscribers can read comments/comment/receive newsletters, etc. but cannot create regular site content.') . '</li>' .
211                                '<li>' . __('Contributors can write and manage their posts but not publish posts or upload media files.') . '</li>' .
212                                '<li>' . __('Authors can publish and manage their own posts, and are able to upload files.') . '</li>' .
213                                '<li>' . __('Editors can publish posts, manage posts as well as manage other people&#8217;s posts, etc.') . '</li>' .
214                                '<li>' . __('Administrators have access to all the administration features.') . '</li>' .
215                                '</ul>'
216) );
217
218get_current_screen()->set_help_sidebar(
219    '<p><strong>' . __('For more information:') . '</strong></p>' .
220    '<p>' . __('<a href="https://codex.wordpress.org/Users_Add_New_Screen">Documentation on Adding New Users</a>') . '</p>' .
221    '<p>' . __('<a href="https://wordpress.org/support/">Support Forums</a>') . '</p>'
222);
223
224wp_enqueue_script('wp-ajax-response');
225wp_enqueue_script( 'user-profile' );
226
227/**
228 * Filters whether to enable user auto-complete for non-super admins in Multisite.
229 *
230 * @since 3.4.0
231 *
232 * @param bool $enable Whether to enable auto-complete for non-super admins. Default false.
233 */
234if ( is_multisite() && current_user_can( 'promote_users' ) && ! wp_is_large_network( 'users' )
235        && ( current_user_can( 'manage_network_users' ) || apply_filters( 'autocomplete_users_for_site_admins', false ) )
236) {
237        wp_enqueue_script( 'user-suggest' );
238}
239
240require_once( ABSPATH . 'wp-admin/admin-header.php' );
241
242if ( isset($_GET['update']) ) {
243        $messages = array();
244        if ( is_multisite() ) {
245                $edit_link = '';
246                if ( ( isset( $_GET['user_id'] ) ) ) {
247                        $user_id_new = absint( $_GET['user_id'] );
248                        if ( $user_id_new ) {
249                                $edit_link = esc_url( add_query_arg( 'wp_http_referer', urlencode( wp_unslash( $_SERVER['REQUEST_URI'] ) ), get_edit_user_link( $user_id_new ) ) );
250                        }
251                }
252
253                switch ( $_GET['update'] ) {
254                        case "newuserconfirmation":
255                                $messages[] = __('Invitation email sent to new user. A confirmation link must be clicked before their account is created.');
256                                break;
257                        case "add":
258                                $messages[] = __('Invitation email sent to user. A confirmation link must be clicked for them to be added to your site.');
259                                break;
260                        case "addnoconfirmation":
261                                if ( empty( $edit_link ) ) {
262                                        $messages[] = __( 'User has been added to your site.' );
263                                } else {
264                                        /* translators: %s: edit page url */
265                                        $messages[] = sprintf( __( 'User has been added to your site. <a href="%s">Edit user</a>' ), $edit_link );
266                                }
267                                break;
268                        case "addexisting":
269                                $messages[] = __('That user is already a member of this site.');
270                                break;
271                        case "could_not_add":
272                                $add_user_errors = new WP_Error( 'could_not_add', __( 'That user could not be added to this site.' ) );
273                                break;
274                        case "created_could_not_add":
275                                $add_user_errors = new WP_Error( 'created_could_not_add', __( 'User has been created, but could not be added to this site.' ) );
276                                break;
277                        case "does_not_exist":
278                                $add_user_errors = new WP_Error( 'does_not_exist', __( 'The requested user does not exist.' ) );
279                                break;
280                        case "enter_email":
281                                $add_user_errors = new WP_Error( 'enter_email', __( 'Please enter a valid email address.' ) );
282                                break;
283                }
284        } else {
285                if ( 'add' == $_GET['update'] )
286                        $messages[] = __('User added.');
287        }
288}
289?>
290<div class="wrap">
291<h1 id="add-new-user"><?php
292if ( current_user_can( 'create_users' ) ) {
293        _e( 'Add New User' );
294} elseif ( current_user_can( 'promote_users' ) ) {
295        _e( 'Add Existing User' );
296} ?>
297</h1>
298
299<?php if ( isset($errors) && is_wp_error( $errors ) ) : ?>
300        <div class="error">
301                <ul>
302                <?php
303                        foreach ( $errors->get_error_messages() as $err )
304                                echo "<li>$err</li>\n";
305                ?>
306                </ul>
307        </div>
308<?php endif;
309
310if ( ! empty( $messages ) ) {
311        foreach ( $messages as $msg )
312                echo '<div id="message" class="updated notice is-dismissible"><p>' . $msg . '</p></div>';
313} ?>
314
315<?php if ( isset($add_user_errors) && is_wp_error( $add_user_errors ) ) : ?>
316        <div class="error">
317                <?php
318                        foreach ( $add_user_errors->get_error_messages() as $message )
319                                echo "<p>$message</p>";
320                ?>
321        </div>
322<?php endif; ?>
323<div id="ajax-response"></div>
324
325<?php
326if ( is_multisite() && current_user_can( 'promote_users' ) ) {
327        if ( $do_both )
328                echo '<h2 id="add-existing-user">' . __( 'Add Existing User' ) . '</h2>';
329        if ( ! current_user_can( 'manage_network_users' ) ) {
330                echo '<p>' . __( 'Enter the email address of an existing user on this network to invite them to this site. That person will be sent an email asking them to confirm the invite.' ) . '</p>';
331                $label = __('Email');
332                $type  = 'email';
333        } else {
334                echo '<p>' . __( 'Enter the email address or username of an existing user on this network to invite them to this site. That person will be sent an email asking them to confirm the invite.' ) . '</p>';
335                $label = __('Email or Username');
336                $type  = 'text';
337        }
338?>
339<form method="post" name="adduser" id="adduser" class="validate" novalidate="novalidate"<?php
340        /**
341         * Fires inside the adduser form tag.
342         *
343         * @since 3.0.0
344         */
345        do_action( 'user_new_form_tag' );
346?>>
347<input name="action" type="hidden" value="adduser" />
348<?php wp_nonce_field( 'add-user', '_wpnonce_add-user' ) ?>
349
350<table class="form-table">
351        <tr class="form-field form-required">
352                <th scope="row"><label for="adduser-email"><?php echo $label; ?></label></th>
353                <td><input name="email" type="<?php echo $type; ?>" id="adduser-email" class="wp-suggest-user" value="" /></td>
354        </tr>
355        <tr class="form-field">
356                <th scope="row"><label for="adduser-role"><?php _e('Role'); ?></label></th>
357                <td><select name="role" id="adduser-role">
358                        <?php wp_dropdown_roles( get_option('default_role') ); ?>
359                        </select>
360                </td>
361        </tr>
362<?php if ( current_user_can( 'manage_network_users' ) ) { ?>
363        <tr>
364                <th scope="row"><?php _e( 'Skip Confirmation Email' ); ?></th>
365                <td>
366                        <input type="checkbox" name="noconfirmation" id="adduser-noconfirmation" value="1" />
367                        <label for="adduser-noconfirmation"><?php _e( 'Add the user without sending an email that requires their confirmation.' ); ?></label>
368                </td>
369        </tr>
370<?php } ?>
371</table>
372<?php
373/**
374 * Fires at the end of the new user form.
375 *
376 * Passes a contextual string to make both types of new user forms
377 * uniquely targetable. Contexts are 'add-existing-user' (Multisite),
378 * and 'add-new-user' (single site and network admin).
379 *
380 * @since 3.7.0
381 *
382 * @param string $type A contextual string specifying which type of new user form the hook follows.
383 */
384do_action( 'user_new_form', 'add-existing-user' );
385?>
386<?php submit_button( __( 'Add Existing User' ), 'primary', 'adduser', true, array( 'id' => 'addusersub' ) ); ?>
387</form>
388<?php
389} // is_multisite()
390
391if ( current_user_can( 'create_users') ) {
392        if ( $do_both )
393                echo '<h2 id="create-new-user">' . __( 'Add New User' ) . '</h2>';
394?>
395<p><?php _e('Create a brand new user and add them to this site.'); ?></p>
396<form method="post" name="createuser" id="createuser" class="validate" novalidate="novalidate"<?php
397        /** This action is documented in wp-admin/user-new.php */
398        do_action( 'user_new_form_tag' );
399?>>
400<input name="action" type="hidden" value="createuser" />
401<?php wp_nonce_field( 'create-user', '_wpnonce_create-user' ); ?>
402<?php
403// Load up the passed data, else set to a default.
404$creating = isset( $_POST['createuser'] );
405
406$new_user_login = $creating && isset( $_POST['user_login'] ) ? wp_unslash( $_POST['user_login'] ) : '';
407$new_user_firstname = $creating && isset( $_POST['first_name'] ) ? wp_unslash( $_POST['first_name'] ) : '';
408$new_user_lastname = $creating && isset( $_POST['last_name'] ) ? wp_unslash( $_POST['last_name'] ) : '';
409$new_user_email = $creating && isset( $_POST['email'] ) ? wp_unslash( $_POST['email'] ) : '';
410$new_user_uri = $creating && isset( $_POST['url'] ) ? wp_unslash( $_POST['url'] ) : '';
411$new_user_role = $creating && isset( $_POST['role'] ) ? wp_unslash( $_POST['role'] ) : '';
412$new_user_send_notification = $creating && ! isset( $_POST['send_user_notification'] ) ? false : true;
413$new_user_ignore_pass = $creating && isset( $_POST['noconfirmation'] ) ? wp_unslash( $_POST['noconfirmation'] ) : '';
414
415?>
416<table class="form-table">
417        <tr class="form-field form-required">
418                <th scope="row"><label for="user_login"><?php _e('Username'); ?> <span class="description"><?php _e('(required)'); ?></span></label></th>
419                <td><input name="user_login" type="text" id="user_login" value="<?php echo esc_attr( $new_user_login ); ?>" aria-required="true" autocapitalize="none" autocorrect="off" maxlength="60" /></td>
420        </tr>
421        <tr class="form-field form-required">
422                <th scope="row"><label for="email"><?php _e('Email'); ?> <span class="description"><?php _e('(required)'); ?></span></label></th>
423                <td><input name="email" type="email" id="email" value="<?php echo esc_attr( $new_user_email ); ?>" /></td>
424        </tr>
425<?php if ( !is_multisite() ) { ?>
426        <tr class="form-field">
427                <th scope="row"><label for="first_name"><?php _e('First Name') ?> </label></th>
428                <td><input name="first_name" type="text" id="first_name" value="<?php echo esc_attr($new_user_firstname); ?>" /></td>
429        </tr>
430        <tr class="form-field">
431                <th scope="row"><label for="last_name"><?php _e('Last Name') ?> </label></th>
432                <td><input name="last_name" type="text" id="last_name" value="<?php echo esc_attr($new_user_lastname); ?>" /></td>
433        </tr>
434        <tr class="form-field">
435                <th scope="row"><label for="url"><?php _e('Website') ?></label></th>
436                <td><input name="url" type="url" id="url" class="code" value="<?php echo esc_attr( $new_user_uri ); ?>" /></td>
437        </tr>
438        <tr class="form-field form-required user-pass1-wrap">
439                <th scope="row">
440                        <label for="pass1">
441                                <?php _e( 'Password' ); ?>
442                                <span class="description hide-if-js"><?php _e( '(required)' ); ?></span>
443                        </label>
444                </th>
445                <td>
446                        <input class="hidden" value=" " /><!-- #24364 workaround -->
447                        <button type="button" class="button wp-generate-pw hide-if-no-js"><?php _e( 'Show password' ); ?></button>
448                        <div class="wp-pwd hide-if-js">
449                                <?php $initial_password = wp_generate_password( 24 ); ?>
450                                <span class="password-input-wrapper">
451                                        <input type="password" name="pass1" id="pass1" class="regular-text" autocomplete="off" data-reveal="1" data-pw="<?php echo esc_attr( $initial_password ); ?>" aria-describedby="pass-strength-result" />
452                                </span>
453                                <button type="button" class="button wp-hide-pw hide-if-no-js" data-toggle="0" aria-label="<?php esc_attr_e( 'Hide password' ); ?>">
454                                        <span class="dashicons dashicons-hidden"></span>
455                                        <span class="text"><?php _e( 'Hide' ); ?></span>
456                                </button>
457                                <button type="button" class="button wp-cancel-pw hide-if-no-js" data-toggle="0" aria-label="<?php esc_attr_e( 'Cancel password change' ); ?>">
458                                        <span class="text"><?php _e( 'Cancel' ); ?></span>
459                                </button>
460                                <div style="display:none" id="pass-strength-result" aria-live="polite"></div>
461                        </div>
462                </td>
463        </tr>
464        <tr class="form-field form-required user-pass2-wrap hide-if-js">
465                <th scope="row"><label for="pass2"><?php _e( 'Repeat Password' ); ?> <span class="description"><?php _e( '(required)' ); ?></span></label></th>
466                <td>
467                <input name="pass2" type="password" id="pass2" autocomplete="off" />
468                </td>
469        </tr>
470        <tr class="pw-weak">
471                <th><?php _e( 'Confirm Password' ); ?></th>
472                <td>
473                        <label>
474                                <input type="checkbox" name="pw_weak" class="pw-checkbox" />
475                                <?php _e( 'Confirm use of weak password' ); ?>
476                        </label>
477                </td>
478        </tr>
479        <tr>
480                <th scope="row"><?php _e( 'Send User Notification' ) ?></th>
481                <td>
482                        <input type="checkbox" name="send_user_notification" id="send_user_notification" value="1" <?php checked( $new_user_send_notification ); ?> />
483                        <label for="send_user_notification"><?php _e( 'Send the new user an email about their account.' ); ?></label>
484                </td>
485        </tr>
486<?php } // !is_multisite ?>
487        <tr class="form-field">
488                <th scope="row"><label for="role"><?php _e('Role'); ?></label></th>
489                <td><select name="role" id="role">
490                        <?php
491                        if ( !$new_user_role )
492                                $new_user_role = !empty($current_role) ? $current_role : get_option('default_role');
493                        wp_dropdown_roles($new_user_role);
494                        ?>
495                        </select>
496                </td>
497        </tr>
498        <?php if ( is_multisite() && current_user_can( 'manage_network_users' ) ) { ?>
499        <tr>
500                <th scope="row"><?php _e( 'Skip Confirmation Email' ); ?></th>
501                <td>
502                        <input type="checkbox" name="noconfirmation" id="noconfirmation" value="1" <?php checked( $new_user_ignore_pass ); ?> />
503                        <label for="noconfirmation"><?php _e( 'Add the user without sending an email that requires their confirmation.' ); ?></label>
504                </td>
505        </tr>
506        <?php } ?>
507</table>
508
509<?php
510/** This action is documented in wp-admin/user-new.php */
511do_action( 'user_new_form', 'add-new-user' );
512?>
513
514<?php submit_button( __( 'Add New User' ), 'primary', 'createuser', true, array( 'id' => 'createusersub' ) ); ?>
515
516</form>
517<?php } // current_user_can('create_users') ?>
518</div>
519<?php
520include( ABSPATH . 'wp-admin/admin-footer.php' );
Note: See TracBrowser for help on using the repository browser.