Make WordPress Core

Changeset 16294


Ignore:
Timestamp:
11/11/2010 02:29:15 PM (14 years ago)
Author:
ryan
Message:

user-new.php revamp. Separate caps for adding users vs. creating users. Allow supes to add via email or username. Split adding existing users and creating new users into separate forms. see #15357

Location:
trunk/wp-admin
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-admin/menu.php

    r16261 r16294  
    187187    $_wp_real_parent_file['profile.php'] = 'users.php'; // Back-compat for plugins adding submenus to profile.php.
    188188    $submenu['users.php'][5] = array(__('Users'), 'list_users', 'users.php');
    189     $submenu['users.php'][10] = array(_x('Add New', 'user'), 'create_users', 'user-new.php');
     189    $submenu['users.php'][10] = array(_x('Add New', 'user'), 'promote_users', 'user-new.php');
    190190
    191191    $submenu['users.php'][15] = array(__('Your Profile'), 'read', 'profile.php');
     
    193193    $_wp_real_parent_file['users.php'] = 'profile.php';
    194194    $submenu['profile.php'][5] = array(__('Your Profile'), 'read', 'profile.php');
    195     $submenu['profile.php'][10] = array(__('Add New User'), 'create_users', 'user-new.php');
     195    $submenu['profile.php'][10] = array(__('Add New User'), 'promote_users', 'user-new.php');
    196196}
    197197
  • trunk/wp-admin/user-new.php

    r16164 r16294  
    1010require_once('./admin.php');
    1111
    12 if ( !current_user_can('create_users') )
     12if ( ! current_user_can('create_users') || ! current_user_can('promote_users') )
    1313    wp_die(__('Cheatin’ uh?'));
    14 
    15 if ( is_multisite() && !get_site_option( 'add_new_users' ) )
    16     wp_die( __('Page disabled by the administrator') );
    1714
    1815if ( is_multisite() ) {
     
    3734if ( isset($_REQUEST['action']) && 'adduser' == $_REQUEST['action'] ) {
    3835    check_admin_referer('add-user');
     36
     37    $user_details = null;
     38    if ( false !== strpos($_REQUEST[ 'email' ], '@') ) {
     39        $user_details = get_user_by('email', $_REQUEST[ 'email' ]);
     40    } else {
     41        if ( is_super_admin() ) {
     42            $user_details = get_user_by('login', $_REQUEST[ 'email' ]);
     43        } else {
     44            wp_redirect( add_query_arg( array('update' => 'enter_email'), 'user-new.php' ) );
     45            die();
     46        }
     47    }
     48
     49    if ( !$user_details ) {
     50        wp_redirect( add_query_arg( array('update' => 'does_not_exist'), 'user-new.php' ) );
     51        die();
     52    }
     53
     54    if ( ! current_user_can('promote_user', $user_details->ID) )
     55        wp_die(__('Cheatin’ uh?'));
     56
     57    // Adding an existing user to this blog
     58    $new_user_email = esc_html(trim($_REQUEST['email']));
     59    $redirect = 'user-new.php';
     60    $username = $user_details->user_login;
     61    $user_id = $user_details->ID;
     62    if ( ( $username != null && !is_super_admin( $user_id ) ) && ( array_key_exists($blog_id, get_blogs_of_user($user_id)) ) ) {
     63        $redirect = add_query_arg( array('update' => 'addexisting'), 'user-new.php' );
     64    } else {
     65        if ( isset( $_POST[ 'noconfirmation' ] ) && is_super_admin() ) {
     66            add_existing_user_to_blog( array( 'user_id' => $user_id, 'role' => $_REQUEST[ 'role' ] ) );
     67            $redirect = add_query_arg( array('update' => 'addnoconfirmation'), 'user-new.php' );
     68        } else {
     69            $newuser_key = substr( md5( $user_id ), 0, 5 );
     70            add_option( 'new_user_' . $newuser_key, array( 'user_id' => $user_id, 'email' => $user_details->user_email, 'role' => $_REQUEST[ 'role' ] ) );
     71            $message = __("Hi,\n\nYou have been invited to join '%s' at\n%s as a %s.\nPlease click the following link to confirm the invite:\n%s\n");
     72            wp_mail( $new_user_email, sprintf( __( '[%s] Joining confirmation' ), get_option( 'blogname' ) ),  sprintf($message, get_option('blogname'), site_url(), $_REQUEST[ 'role' ], site_url("/newbloguser/$newuser_key/")));
     73            $redirect = add_query_arg( array('update' => 'add'), 'user-new.php' );
     74        }
     75    }
     76    wp_redirect( $redirect );
     77    die();
     78} elseif ( isset($_REQUEST['action']) && 'createuser' == $_REQUEST['action'] ) {
     79    check_admin_referer('create-user');
     80
     81    if ( ! current_user_can('create_users') )
     82        wp_die(__('Cheatin’ uh?'));
    3983
    4084    if ( !is_multisite() ) {
     
    5498        }
    5599    } else {
    56         $user_login = preg_replace( "/\s+/", '', sanitize_user( $_REQUEST[ 'user_login' ], true ) );
    57         $user_details = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$wpdb->users} WHERE user_login = %s AND user_email = %s", $user_login, $_REQUEST[ 'email' ] ) );
    58         if ( $user_details ) {
    59             // Adding an existing user to this blog
    60             $new_user_email = esc_html(trim($_REQUEST['email']));
    61             $redirect = 'user-new.php';
    62             $username = $user_details->user_login;
    63             $user_id = $user_details->ID;
    64             if ( ( $username != null && !is_super_admin( $user_id ) ) && ( array_key_exists($blog_id, get_blogs_of_user($user_id)) ) ) {
    65                 $redirect = add_query_arg( array('update' => 'addexisting'), 'user-new.php' );
     100        // Adding a new user to this blog
     101        $user_details = wpmu_validate_user_signup( $_REQUEST[ 'user_login' ], $_REQUEST[ 'email' ] );
     102        unset( $user_details[ 'errors' ]->errors[ 'user_email_used' ] );
     103        if ( is_wp_error( $user_details[ 'errors' ] ) && !empty( $user_details[ 'errors' ]->errors ) ) {
     104            $add_user_errors = $user_details[ 'errors' ];
     105        } else {
     106            $new_user_login = apply_filters('pre_user_login', sanitize_user(stripslashes($_REQUEST['user_login']), true));
     107            if ( isset( $_POST[ 'noconfirmation' ] ) && is_super_admin() ) {
     108                add_filter( 'wpmu_signup_user_notification', '__return_false' ); // Disable confirmation email
     109            }
     110            wpmu_signup_user( $new_user_login, $_REQUEST[ 'email' ], array( 'add_to_blog' => $wpdb->blogid, 'new_role' => $_REQUEST[ 'role' ] ) );
     111            if ( isset( $_POST[ 'noconfirmation' ] ) && is_super_admin() ) {
     112                $key = $wpdb->get_var( $wpdb->prepare( "SELECT activation_key FROM {$wpdb->signups} WHERE user_login = %s AND user_email = %s", $new_user_login, $_REQUEST[ 'email' ] ) );
     113                wpmu_activate_signup( $key );
     114                $redirect = add_query_arg( array('update' => 'addnoconfirmation'), 'user-new.php' );
    66115            } else {
    67                 if ( isset( $_POST[ 'noconfirmation' ] ) && is_super_admin() ) {
    68                     add_existing_user_to_blog( array( 'user_id' => $user_id, 'role' => $_REQUEST[ 'role' ] ) );
    69                     $redirect = add_query_arg( array('update' => 'addnoconfirmation'), 'user-new.php' );
    70                 } else {
    71                     $newuser_key = substr( md5( $user_id ), 0, 5 );
    72                     add_option( 'new_user_' . $newuser_key, array( 'user_id' => $user_id, 'email' => $user_details->user_email, 'role' => $_REQUEST[ 'role' ] ) );
    73                     $message = __("Hi,\n\nYou have been invited to join '%s' at\n%s as a %s.\nPlease click the following link to confirm the invite:\n%s\n");
    74                     wp_mail( $new_user_email, sprintf( __( '[%s] Joining confirmation' ), get_option( 'blogname' ) ),  sprintf($message, get_option('blogname'), site_url(), $_REQUEST[ 'role' ], site_url("/newbloguser/$newuser_key/")));
    75                     $redirect = add_query_arg( array('update' => 'add'), 'user-new.php' );
    76                 }
     116                $redirect = add_query_arg( array('update' => 'newuserconfimation'), 'user-new.php' );
    77117            }
    78118            wp_redirect( $redirect );
    79119            die();
    80         } else {
    81             // Adding a new user to this blog
    82             $user_details = wpmu_validate_user_signup( $_REQUEST[ 'user_login' ], $_REQUEST[ 'email' ] );
    83             unset( $user_details[ 'errors' ]->errors[ 'user_email_used' ] );
    84             if ( is_wp_error( $user_details[ 'errors' ] ) && !empty( $user_details[ 'errors' ]->errors ) ) {
    85                 $add_user_errors = $user_details[ 'errors' ];
    86             } else {
    87                 $new_user_login = apply_filters('pre_user_login', sanitize_user(stripslashes($_REQUEST['user_login']), true));
    88                 if ( isset( $_POST[ 'noconfirmation' ] ) && is_super_admin() ) {
    89                     add_filter( 'wpmu_signup_user_notification', '__return_false' ); // Disable confirmation email
    90                 }
    91                 wpmu_signup_user( $new_user_login, $_REQUEST[ 'email' ], array( 'add_to_blog' => $wpdb->blogid, 'new_role' => $_REQUEST[ 'role' ] ) );
    92                 if ( isset( $_POST[ 'noconfirmation' ] ) && is_super_admin() ) {
    93                     $key = $wpdb->get_var( $wpdb->prepare( "SELECT activation_key FROM {$wpdb->signups} WHERE user_login = %s AND user_email = %s", $new_user_login, $_REQUEST[ 'email' ] ) );
    94                     wpmu_activate_signup( $key );
    95                     $redirect = add_query_arg( array('update' => 'addnoconfirmation'), 'user-new.php' );
    96                 } else {
    97                     $redirect = add_query_arg( array('update' => 'newuserconfimation'), 'user-new.php' );
    98                 }
    99                 wp_redirect( $redirect );
    100                 die();
    101             }
    102120        }
    103121    }
    104122}
     123
    105124
    106125$title = __('Add New User');
    107126$parent_file = 'users.php';
     127
     128$do_both = false;
     129if ( is_multisite() && current_user_can('promote_users') && current_user_can('create_users') )
     130    $do_both = true;
    108131
    109132add_contextual_help($current_screen,
     
    145168                $messages[] = __('That user is already a member of this site.');
    146169                break;
     170            case "does_not_exist":
     171                $messages[] = __('The requested user does not exist.');
     172                break;
     173            case "does_not_exist":
     174                $messages[] = __('Please enter a valid email address.');
     175                break;
    147176        }
    148177    } else {
     
    183212
    184213<?php
    185 if ( !is_multisite() ) {
    186     if ( get_option('users_can_register') )
    187         echo '<p>' . sprintf(__('Users can <a href="%1$s">register themselves</a> or you can manually create users here.'), site_url('wp-register.php')) . '</p>';
    188     else
    189         echo '<p>' . sprintf(__('Users cannot currently <a href="%1$s">register themselves</a>, but you can manually create users here.'), admin_url('options-general.php#users_can_register')) . '</p>';
    190 } else {
    191     echo '<p>' . __( 'You can add new users to your site in two ways:' ) . '<ol><li> ' . __( 'Enter the username and email address of an existing user on this network.' ) . '</li><li> ' . __( 'Enter the username and the email address of a person who is not already a member of this network. Choose the username carefully, it cannot be changed.' ) . '</li></ol></p>';
    192     echo '<p>' . __( 'That person will be sent an email asking them to click a link confirming the invite. New users will then be sent an email with a randomly generated password and a login link.' ) . '</p>';
    193 }
    194 ?>
    195 <form action="#add-new-user" method="post" name="adduser" id="adduser" class="add:users: validate"<?php do_action('user_new_form_tag');?>>
     214if ( is_multisite() ) {
     215    if ( $do_both )
     216        echo '<h3 id="add-existing-user">' . __('Add Existing User') . '</h3>';
     217    if ( !is_super_admin() ) {
     218        _e( '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.' );
     219        $label = __('E-mail');
     220    } else {
     221        _e( '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.' );
     222        $label = __('E-mail or Username');
     223    }
     224?>
     225<form action="#add-existing-user" method="post" name="adduser" id="adduser" class="add:users: validate"<?php do_action('user_new_form_tag');?>>
     226<input name="action" type="hidden" id="action" value="adduser" />
    196227<?php wp_nonce_field('add-user') ?>
    197 <?php
    198 //Load up the passed data, else set to a default.
     228<table class="form-table">
     229    <tr class="form-field form-required">
     230        <th scope="row"><label for="email"><?php echo $label; ?></label></th>
     231        <td><input name="email" type="text" id="email" value="<?php echo esc_attr($new_user_email); ?>" /></td>
     232    </tr>
     233    <tr class="form-field">
     234        <th scope="row"><label for="role"><?php _e('Role'); ?></label></th>
     235        <td><select name="role" id="role">
     236            <?php
     237            if ( !$new_user_role )
     238                $new_user_role = !empty($current_role) ? $current_role : get_option('default_role');
     239            wp_dropdown_roles($new_user_role);
     240            ?>
     241            </select>
     242        </td>
     243    </tr>
     244<?php if ( is_super_admin() ) { ?>
     245    <tr>
     246        <th scope="row"><label for="noconfirmation"><?php _e('Skip Confirmation Email') ?></label></th>
     247        <td><label for="noconfirmation"><input type="checkbox" name="noconfirmation" id="noconfirmation" value="1" /> <?php _e( 'Add the user without sending them a confirmation email.' ); ?></label></td>
     248    </tr>
     249<?php } ?>
     250</table>
     251<?php submit_button( __( 'Add User '), 'primary', 'adduser', true, array( 'id' => 'addusersub' ) ); ?>
     252</form>
     253<?php
     254} // is_multisite()
     255
     256if ( current_user_can( 'create_users') ) {
     257    if ( $do_both )
     258        echo '<h3 id="create-new-user">' . __('Create New User') . '</h3>';
     259?>
     260<p><?php _e('Create a brand new user and add it to this site.'); ?></p>
     261<form action="#create-new-user" method="post" name="createuser" id="adduser" class="add:users: validate"<?php do_action('user_new_form_tag');?>>
     262<input name="action" type="hidden" id="action" value="createuser" />
     263<?php wp_nonce_field('create-user') ?>
     264<?php
     265// Load up the passed data, else set to a default.
    199266foreach ( array('user_login' => 'login', 'first_name' => 'firstname', 'last_name' => 'lastname',
    200267                'email' => 'email', 'url' => 'uri', 'role' => 'role') as $post_field => $var ) {
     
    207274<table class="form-table">
    208275    <tr class="form-field form-required">
    209         <th scope="row"><label for="user_login"><?php _e('Username'); ?> <span class="description"><?php _e('(required)'); ?></span></label>
    210         <input name="action" type="hidden" id="action" value="adduser" /></th>
     276        <th scope="row"><label for="user_login"><?php _e('Username'); ?> <span class="description"><?php _e('(required)'); ?></span></label></th>
    211277        <td><input name="user_login" type="text" id="user_login" value="<?php echo esc_attr($new_user_login); ?>" aria-required="true" /></td>
    212278    </tr>
     
    264330</table>
    265331
    266 <?php submit_button( __( 'Add User '), 'primary', 'adduser', true, array( 'id' => 'addusersub' ) ); ?>
     332<?php submit_button( __( 'Add User '), 'primary', 'createuser', true, array( 'id' => 'createusersub' ) ); ?>
    267333
    268334</form>
    269 
     335<?php } // current_user_can('create_users') ?>
    270336</div>
    271337<?php
Note: See TracChangeset for help on using the changeset viewer.