Make WordPress Core

source: trunk/src/wp-admin/network/user-new.php

Last change on this file was 55026, checked in by audrasjb, 5 weeks ago

Networks and Sites: Mark required fields as such in New User Form.

This changeset adds required="required" attributes to required form fields and uses wp_required_field_message() and wp_required_field_indicator() functions to improve the generated markup, and for better consistency with other required fields.

Props jackreichert, flixos90, afercia, sabernhardt.
Fixes #38460.

  • Property svn:eol-style set to native
File size: 5.1 KB
Line 
1<?php
2/**
3 * Add New User network administration panel.
4 *
5 * @package WordPress
6 * @subpackage Multisite
7 * @since 3.1.0
8 */
9
10/** Load WordPress Administration Bootstrap */
11require_once __DIR__ . '/admin.php';
12
13if ( ! current_user_can( 'create_users' ) ) {
14        wp_die( __( 'Sorry, you are not allowed to add users to this network.' ) );
15}
16
17get_current_screen()->add_help_tab(
18        array(
19                'id'      => 'overview',
20                'title'   => __( 'Overview' ),
21                'content' =>
22                        '<p>' . __( 'Add User will set up a new user account on the network and send that person an email with username and password.' ) . '</p>' .
23                        '<p>' . __( 'Users who are signed up to the network without a site are added as subscribers to the main or primary dashboard site, giving them profile pages to manage their accounts. These users will only see Dashboard and My Sites in the main navigation until a site is created for them.' ) . '</p>',
24        )
25);
26
27get_current_screen()->set_help_sidebar(
28        '<p><strong>' . __( 'For more information:' ) . '</strong></p>' .
29        '<p>' . __( '<a href="https://codex.wordpress.org/Network_Admin_Users_Screen">Documentation on Network Users</a>' ) . '</p>' .
30        '<p>' . __( '<a href="https://wordpress.org/support/forum/multisite/">Support Forums</a>' ) . '</p>'
31);
32
33if ( isset( $_REQUEST['action'] ) && 'add-user' === $_REQUEST['action'] ) {
34        check_admin_referer( 'add-user', '_wpnonce_add-user' );
35
36        if ( ! current_user_can( 'manage_network_users' ) ) {
37                wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 );
38        }
39
40        if ( ! is_array( $_POST['user'] ) ) {
41                wp_die( __( 'Cannot create an empty user.' ) );
42        }
43
44        $user = wp_unslash( $_POST['user'] );
45
46        $user_details = wpmu_validate_user_signup( $user['username'], $user['email'] );
47
48        if ( is_wp_error( $user_details['errors'] ) && $user_details['errors']->has_errors() ) {
49                $add_user_errors = $user_details['errors'];
50        } else {
51                $password = wp_generate_password( 12, false );
52                $user_id  = wpmu_create_user( esc_html( strtolower( $user['username'] ) ), $password, sanitize_email( $user['email'] ) );
53
54                if ( ! $user_id ) {
55                        $add_user_errors = new WP_Error( 'add_user_fail', __( 'Cannot add user.' ) );
56                } else {
57                        /**
58                         * Fires after a new user has been created via the network user-new.php page.
59                         *
60                         * @since 4.4.0
61                         *
62                         * @param int $user_id ID of the newly created user.
63                         */
64                        do_action( 'network_user_new_created_user', $user_id );
65
66                        wp_redirect(
67                                add_query_arg(
68                                        array(
69                                                'update'  => 'added',
70                                                'user_id' => $user_id,
71                                        ),
72                                        'user-new.php'
73                                )
74                        );
75                        exit;
76                }
77        }
78}
79
80if ( isset( $_GET['update'] ) ) {
81        $messages = array();
82        if ( 'added' === $_GET['update'] ) {
83                $edit_link = '';
84                if ( isset( $_GET['user_id'] ) ) {
85                        $user_id_new = absint( $_GET['user_id'] );
86                        if ( $user_id_new ) {
87                                $edit_link = esc_url( add_query_arg( 'wp_http_referer', urlencode( wp_unslash( $_SERVER['REQUEST_URI'] ) ), get_edit_user_link( $user_id_new ) ) );
88                        }
89                }
90
91                $message = __( 'User added.' );
92
93                if ( $edit_link ) {
94                        $message .= sprintf( ' <a href="%s">%s</a>', $edit_link, __( 'Edit user' ) );
95                }
96
97                $messages[] = $message;
98        }
99}
100
101// Used in the HTML title tag.
102$title       = __( 'Add New User' );
103$parent_file = 'users.php';
104
105require_once ABSPATH . 'wp-admin/admin-header.php'; ?>
106
107<div class="wrap">
108<h1 id="add-new-user"><?php _e( 'Add New User' ); ?></h1>
109<?php
110if ( ! empty( $messages ) ) {
111        foreach ( $messages as $msg ) {
112                echo '<div id="message" class="updated notice is-dismissible"><p>' . $msg . '</p></div>';
113        }
114}
115
116if ( isset( $add_user_errors ) && is_wp_error( $add_user_errors ) ) {
117        ?>
118        <div class="error">
119                <?php
120                foreach ( $add_user_errors->get_error_messages() as $message ) {
121                        echo "<p>$message</p>";
122                }
123                ?>
124        </div>
125<?php } ?>
126        <form action="<?php echo esc_url( network_admin_url( 'user-new.php?action=add-user' ) ); ?>" id="adduser" method="post" novalidate="novalidate">
127                <p><?php echo wp_required_field_message(); ?></p>
128                <table class="form-table" role="presentation">
129                        <tr class="form-field form-required">
130                                <th scope="row"><label for="username"><?php _e( 'Username' ); ?> <?php echo wp_required_field_indicator(); ?></label></th>
131                                <td><input type="text" class="regular-text" name="user[username]" id="username" autocapitalize="none" autocorrect="off" maxlength="60" required="required" /></td>
132                        </tr>
133                        <tr class="form-field form-required">
134                                <th scope="row"><label for="email"><?php _e( 'Email' ); ?> <?php echo wp_required_field_indicator(); ?></label></th>
135                                <td><input type="text" class="regular-text" name="user[username]" id="username" autocapitalize="none" autocorrect="off" maxlength="60" required="required" /></td>
136                        </tr>
137                        <tr class="form-field">
138                                <td colspan="2" class="td-full"><?php _e( 'A password reset link will be sent to the user via email.' ); ?></td>
139                        </tr>
140                </table>
141        <?php
142        /**
143         * Fires at the end of the new user form in network admin.
144         *
145         * @since 4.5.0
146         */
147        do_action( 'network_user_new_form' );
148
149        wp_nonce_field( 'add-user', '_wpnonce_add-user' );
150        submit_button( __( 'Add User' ), 'primary', 'add-user' );
151        ?>
152        </form>
153</div>
154<?php
155require_once ABSPATH . 'wp-admin/admin-footer.php';
Note: See TracBrowser for help on using the repository browser.