WordPress.org

Make WordPress Core

Ticket #12295: 12295.8.diff

File 12295.8.diff, 30.6 KB (added by flabadab, 5 years ago)

Using metaboxes would allow for complete customization

  • user-edit.php

     
    1111
    1212wp_reset_vars( array( 'action', 'user_id', 'wp_http_referer' ) );
    1313
     14if ( wp_is_mobile() )
     15        wp_enqueue_script( 'jquery-touch-punch' );
     16       
     17
    1418$user_id = (int) $user_id;
    1519$current_user = wp_get_current_user();
    1620if ( ! defined( 'IS_PROFILE_PAGE' ) )
     
    2226        wp_die(__( 'Invalid user ID.' ) );
    2327elseif ( ! get_userdata( $user_id ) )
    2428        wp_die( __('Invalid user ID.') );
     29       
     30wp_enqueue_script('post');              // Enqueue post scripts for Metaboxes to work
    2531
     32add_thickbox();                                 // Enqueue media scripts for images to be used
     33wp_enqueue_media();
     34
    2635wp_enqueue_script('user-profile');
    2736
    2837$title = IS_PROFILE_PAGE ? __('Profile') : __('Edit User');
     
    5867
    5968$user_can_edit = current_user_can( 'edit_posts' ) || current_user_can( 'edit_pages' );
    6069
     70
     71$profileuser = get_user_to_edit($user_id);
     72
     73/*
     74**      Create User Update/Submit & Password Meta Box
     75*/
     76
     77function user_submit_meta_box( $user_id ) {
     78        global $action;
     79       
     80        $user = get_userdata($user_id);
     81?>
     82
     83<div id="submituser">
     84        <div id="minor-publishing">
     85                <?php // Hidden submit button early on so that the browser chooses the right button when form is submitted with Return key ?>
     86                <div style="display:none;">
     87                        <?php submit_button( IS_PROFILE_PAGE ? __('Update Profile') : __('Update User') ); ?>
     88                </div>
     89                <div id="misc-publishing-actions">
     90        <?php
     91        // translators: Publish box date format, see http://php.net/date
     92        $datef = __( 'M j, Y @ G:i' );
     93        $stamp = __('Added on: <b>%1$s</b>');
     94        $date = date_i18n( $datef, strtotime( $user->user_registered ) );
     95        ?>
     96                        <div class="misc-pub-section curtime"> <span id="timestamp"><?php printf($stamp, $date); ?></span> </div>
     97                        <!-- .misc-pub-section -->
     98                </div>
     99                <!-- #misc-publishing-actions -->
     100                <div class="clear"></div>
     101        </div>
     102        <!-- #minor-publishing -->
     103       
     104        <div id="major-publishing-actions">
     105                <?php
     106$show_password_fields = apply_filters('show_password_fields', true, $profileuser);
     107if ( $show_password_fields ) :
     108?>
     109                <div class="pass-fields">
     110                        <label for="pass1">
     111                                <?php _e('New Password'); ?>
     112                        </label>
     113                        <br />
     114                        <input class="hidden" value=" " />
     115                        <!-- #24364 workaround -->
     116                        <input style="text-align:left;" type="password" name="pass1" id="pass1" size="16" value="" autocomplete="off" />
     117                        <div class="clear"></div>
     118                        <label for="pass2">
     119                                <?php _e('Repeat New Password'); ?>
     120                        </label>
     121                        <br />
     122                        <input style="text-align:left;" name="pass2" type="password" id="pass2" size="16" value="" autocomplete="off" />
     123                        <br />
     124                        <div id="pass-strength-result">
     125                                <?php _e('Strength indicator'); ?>
     126                        </div>
     127                </div>
     128                <?php endif; ?>
     129                <div id="delete-action">
     130                        <?php
     131        if ( current_user_can( 'delete_users', $user_id) ){
     132                        echo "<a class='submitdelete deletion' href='" . wp_nonce_url(admin_url(). 'users.php?user='. $user_id, 'bulk-users','action=delete&_wpnonce') . "'>" . __( 'Delete User' ) . "</a>";
     133        }
     134        ?>
     135                </div>
     136                <div id="publishing-action"> <span class="spinner"></span>
     137                        <input type="hidden" name="action" value="update" />
     138                        <input type="hidden" name="user_id" id="user_id" value="<?php echo esc_attr($user_id); ?>" />
     139                        <?php submit_button( IS_PROFILE_PAGE ? __('Update Profile') : __('Update User') ); ?>
     140                </div>
     141                <div class="clear"></div>
     142        </div>
     143        <!-- #major-publishing-actions -->
     144       
     145</div>
     146<?php
     147}
     148
     149/*
     150**      Create User Personal Options Meta Box
     151*/
     152
     153function user_personal_options_meta_box( $user_id ) {
     154global $_wp_admin_css_colors,$profileuser; ?>
     155<?php
     156        if ( IS_PROFILE_PAGE )
     157                do_action( 'show_user_profile_personal_before', $profileuser );
     158        else
     159                do_action( 'edit_user_profile_personal_before', $profileuser );
     160?>
     161<table class="form-table">
     162        <?php if ( rich_edit_exists() && !( IS_PROFILE_PAGE && !$user_can_edit ) ) : // don't bother showing the option if the editor has been removed ?>
     163        <tr>
     164                <th scope="row"><?php _e('Visual Editor')?></th>
     165                <td><label for="rich_editing">
     166                                <input name="rich_editing" type="checkbox" id="rich_editing" value="false" <?php checked('false', $profileuser->rich_editing); ?> />
     167                                <?php _e('Disable the visual editor when writing'); ?>
     168                        </label></td>
     169        </tr>
     170        <?php endif; ?>
     171        <?php if ( count($_wp_admin_css_colors) > 1 && has_action('admin_color_scheme_picker') ) : ?>
     172        <tr>
     173                <th scope="row"><?php _e('Admin Color Scheme')?></th>
     174                <td><?php do_action( 'admin_color_scheme_picker' ); ?></td>
     175        </tr>
     176        <?php
     177endif; // $_wp_admin_css_colors
     178if ( !( IS_PROFILE_PAGE && !$user_can_edit ) ) : ?>
     179        <tr>
     180                <th scope="row"><?php _e( 'Keyboard Shortcuts' ); ?></th>
     181                <td><label for="comment_shortcuts">
     182                                <input type="checkbox" name="comment_shortcuts" id="comment_shortcuts" value="true" <?php if ( !empty($profileuser->comment_shortcuts) ) checked('true', $profileuser->comment_shortcuts); ?> />
     183                                <?php _e('Enable keyboard shortcuts for comment moderation.'); ?>
     184                        </label>
     185                        <?php _e('<a href="http://codex.wordpress.org/Keyboard_Shortcuts" target="_blank">More information</a>'); ?></td>
     186        </tr>
     187        <?php endif; ?>
     188        <tr class="show-admin-bar">
     189                <th scope="row"><?php _e('Toolbar')?></th>
     190                <td><fieldset>
     191                                <legend class="screen-reader-text"><span>
     192                                <?php _e('Toolbar') ?>
     193                                </span></legend>
     194                                <label for="admin_bar_front">
     195                                        <input name="admin_bar_front" type="checkbox" id="admin_bar_front" value="1"<?php checked( _get_admin_bar_pref( 'front', $profileuser->ID ) ); ?> />
     196                                        <?php _e( 'Show Toolbar when viewing site' ); ?>
     197                                </label>
     198                                <br />
     199                        </fieldset></td>
     200        </tr>
     201        <?php   
     202                /*
     203                **      Create action hook to add extra user personal fields
     204                */
     205                if ( IS_PROFILE_PAGE )
     206                        do_action( 'show_user_profile_personal_extra', $profileuser );
     207                else
     208                        do_action( 'edit_user_profile_personal_extra', $profileuser );
     209        ?>
     210</table>
     211<?php
     212        if ( IS_PROFILE_PAGE )
     213                do_action( 'show_user_profile_personal_after', $profileuser );
     214        else
     215                do_action( 'edit_user_profile_personal_after', $profileuser );
     216?>
     217<?php
     218}
     219
     220/*
     221**      Create User Name Meta Box
     222*/
     223
     224function user_name_meta_box( $user_id ) {
     225global $profileuser;?>
     226<?php
     227        if ( IS_PROFILE_PAGE )
     228                do_action( 'show_user_profile_name_before', $profileuser );
     229        else
     230                do_action( 'edit_user_profile_name_before', $profileuser );
     231?>
     232<table class="form-table">
     233        <tr>
     234                <th><label for="user_login">
     235                                <?php _e('Username'); ?>
     236                        </label></th>
     237                <td><input type="text" name="user_login" id="user_login" value="<?php echo esc_attr($profileuser->user_login); ?>" disabled="disabled" class="regular-text" />
     238                        <span class="description">
     239                        <?php _e('Usernames cannot be changed.'); ?>
     240                        </span></td>
     241        </tr>
     242        <?php
     243
     244 if ( !IS_PROFILE_PAGE && !is_network_admin() ) : ?>
     245        <tr>
     246                <th><label for="role">
     247                                <?php _e('Role') ?>
     248                        </label></th>
     249                <td><select name="role" id="role">
     250                                <?php
     251// Compare user role against currently editable roles
     252$user_roles = array_intersect( array_values( $profileuser->roles ), array_keys( get_editable_roles() ) );
     253$user_role  = array_shift( $user_roles );
     254
     255// print the full list of roles with the primary one selected.
     256wp_dropdown_roles($user_role);
     257
     258// print the 'no role' option. Make it selected if the user has no role yet.
     259if ( $user_role )
     260        echo '<option value="">' . __('&mdash; No role for this site &mdash;') . '</option>';
     261else
     262        echo '<option value="" selected="selected">' . __('&mdash; No role for this site &mdash;') . '</option>';
     263?>
     264                        </select></td>
     265        </tr>
     266        <?php endif; //!IS_PROFILE_PAGE
     267
     268if ( is_multisite() && is_network_admin() && ! IS_PROFILE_PAGE && current_user_can( 'manage_network_options' ) && !isset($super_admins) ) { ?>
     269        <tr>
     270                <th><?php _e('Super Admin'); ?></th>
     271                <td><?php if ( $profileuser->user_email != get_site_option( 'admin_email' ) || ! is_super_admin( $profileuser->ID ) ) : ?>
     272                        <p>
     273                                <label>
     274                                        <input type="checkbox" id="super_admin" name="super_admin"<?php checked( is_super_admin( $profileuser->ID ) ); ?> />
     275                                        <?php _e( 'Grant this user super admin privileges for the Network.' ); ?>
     276                                </label>
     277                        </p>
     278                        <?php else : ?>
     279                        <p>
     280                                <?php _e( 'Super admin privileges cannot be removed because this user has the network admin email.' ); ?>
     281                        </p>
     282                        <?php endif; ?></td>
     283        </tr>
     284        <?php } ?>
     285        <tr>
     286                <th><label for="first_name">
     287                                <?php _e('First Name') ?>
     288                        </label></th>
     289                <td><input type="text" name="first_name" id="first_name" value="<?php echo esc_attr($profileuser->first_name) ?>" class="regular-text" /></td>
     290        </tr>
     291        <tr>
     292                <th><label for="last_name">
     293                                <?php _e('Last Name') ?>
     294                        </label></th>
     295                <td><input type="text" name="last_name" id="last_name" value="<?php echo esc_attr($profileuser->last_name) ?>" class="regular-text" /></td>
     296        </tr>
     297        <tr>
     298                <th><label for="nickname">
     299                                <?php _e('Nickname'); ?>
     300                                <span class="description">
     301                                <?php _e('(required)'); ?>
     302                                </span></label></th>
     303                <td><input type="text" name="nickname" id="nickname" value="<?php echo esc_attr($profileuser->nickname) ?>" class="regular-text" /></td>
     304        </tr>
     305        <tr>
     306                <th><label for="display_name">
     307                                <?php _e('Display name publicly as') ?>
     308                        </label></th>
     309                <td><select name="display_name" id="display_name">
     310                        <?php
     311                        $public_display = array();
     312                        $public_display['display_nickname']  = $profileuser->nickname;
     313                        $public_display['display_username']  = $profileuser->user_login;
     314
     315                        if ( !empty($profileuser->first_name) )
     316                                $public_display['display_firstname'] = $profileuser->first_name;
     317
     318                        if ( !empty($profileuser->last_name) )
     319                                $public_display['display_lastname'] = $profileuser->last_name;
     320
     321                        if ( !empty($profileuser->first_name) && !empty($profileuser->last_name) ) {
     322                                $public_display['display_firstlast'] = $profileuser->first_name . ' ' . $profileuser->last_name;
     323                                $public_display['display_lastfirst'] = $profileuser->last_name . ' ' . $profileuser->first_name;
     324                        }
     325
     326                        if ( !in_array( $profileuser->display_name, $public_display ) ) // Only add this if it isn't duplicated elsewhere
     327                                $public_display = array( 'display_displayname' => $profileuser->display_name ) + $public_display;
     328
     329                        $public_display = array_map( 'trim', $public_display );
     330                        $public_display = array_unique( $public_display );
     331
     332                        foreach ( $public_display as $id => $item ) {
     333                        ?>
     334                                <option <?php selected( $profileuser->display_name, $item ); ?>><?php echo $item; ?></option>
     335                        <?php
     336                        }
     337                        ?>
     338                        </select></td>
     339        </tr>
     340        <?php
     341       
     342        /*
     343        **      Create action hook to add extra user name fields
     344        */
     345       
     346        if ( IS_PROFILE_PAGE )
     347                do_action( 'show_user_profile_name_extra', $profileuser );
     348        else
     349                do_action( 'edit_user_profile_name_extra', $profileuser );
     350        ?>
     351</table>
     352<?php
     353        if ( IS_PROFILE_PAGE )
     354                do_action( 'show_user_profile_name_after', $profileuser );
     355        else
     356                do_action( 'edit_user_profile_name_after', $profileuser );
     357?>
     358<?php
     359}
     360       
     361/*
     362**      Create User Contact Meta Box
     363*/
     364
     365function user_contact_meta_box( $user_id ){
     366global $profileuser; ?>
     367<?php
     368        if ( IS_PROFILE_PAGE )
     369                do_action( 'show_user_profile_contact_before', $profileuser );
     370        else
     371                do_action( 'edit_user_profile_contact_before', $profileuser );
     372?>
     373<table class="form-table">
     374        <tr>
     375                <th><label for="email">
     376                                <?php _e('E-mail'); ?>
     377                                <span class="description">
     378                                <?php _e('(required)'); ?>
     379                                </span></label></th>
     380                <td><input type="text" name="email" id="email" value="<?php echo esc_attr($profileuser->user_email) ?>" class="regular-text" />
     381                        <?php
     382        $new_email = get_option( $current_user->ID . '_new_email' );
     383        if ( $new_email && $new_email['newemail'] != $current_user->user_email && $profileuser->ID == $current_user->ID ) : ?>
     384                        <div class="updated inline">
     385                                <p><?php printf( __('There is a pending change of your e-mail to <code>%1$s</code>. <a href="%2$s">Cancel</a>'), $new_email['newemail'], esc_url( self_admin_url( 'profile.php?dismiss=' . $current_user->ID . '_new_email' ) ) ); ?></p>
     386                        </div>
     387                        <?php endif; ?></td>
     388        </tr>
     389        <tr>
     390                <th><label for="url">
     391                                <?php _e('Website') ?>
     392                        </label></th>
     393                <td><input type="text" name="url" id="url" value="<?php echo esc_attr($profileuser->user_url) ?>" class="regular-text code" /></td>
     394        </tr>
     395        <?php
     396        foreach (_wp_get_user_contactmethods( $profileuser ) as $name => $desc) {
     397?>
     398        <tr>
     399                <th><label for="<?php echo $name; ?>"><?php echo apply_filters('user_'.$name.'_label', $desc); ?></label></th>
     400                <td><input type="text" name="<?php echo $name; ?>" id="<?php echo $name; ?>" value="<?php echo esc_attr($profileuser->$name) ?>" class="regular-text" /></td>
     401        </tr>
     402        <?php
     403        }
     404?>
     405<?php
     406        /*
     407        **      Create action hook to add extra user contact fields
     408        */
     409        if ( IS_PROFILE_PAGE )
     410                do_action( 'show_user_profile_contact_extra', $profileuser );
     411        else
     412                do_action( 'edit_user_profile_contact_extra', $profileuser );
     413?>
     414</table>
     415<?php
     416        if ( IS_PROFILE_PAGE )
     417                do_action( 'show_user_profile_contact_after', $profileuser );
     418        else
     419                do_action( 'edit_user_profile_contact_after', $profileuser );
     420?>
     421<?php
     422}
     423
     424
     425/*
     426**      Create User Bio Meta Box
     427*/
     428
     429function user_bio_meta_box( $user_id ){
     430global $profileuser; ?>
     431<?php
     432        if ( IS_PROFILE_PAGE )
     433                do_action( 'show_user_profile_bio_before', $profileuser );
     434        else
     435                do_action( 'edit_user_profile_bio_before', $profileuser );
     436?>
     437<table class="form-table">
     438        <tr>
     439                <th><label for="description">
     440                                <?php _e('Biographical Info'); ?>
     441                        </label></th>
     442                <td><textarea name="description" id="description" rows="5" cols="30"><?php echo $profileuser->description; // textarea_escaped ?></textarea>
     443                        <br />
     444                        <span class="description">
     445                        <?php _e('Share a little biographical information to fill out your profile. This may be shown publicly.'); ?>
     446                        </span></td>
     447        </tr>
     448<?php   
     449        /*
     450        **      Create action hook to add extra user bio fields
     451        */
     452        if ( IS_PROFILE_PAGE )
     453                do_action( 'show_user_profile_bio_extra', $profileuser );
     454        else
     455                do_action( 'edit_user_profile_bio_extra', $profileuser );
     456?>
     457</table>
     458<?php
     459        if ( IS_PROFILE_PAGE )
     460                do_action( 'show_user_profile_bio_after', $profileuser );
     461        else
     462                do_action( 'edit_user_profile_bio_after', $profileuser );
     463?>
     464<?php   
     465}
     466
    61467/**
    62468 * Optional SSL preference that can be turned on by hooking to the 'personal_options' action.
    63469 *
     
    67473 */
    68474function use_ssl_preference($user) {
    69475?>
    70         <tr>
    71                 <th scope="row"><?php _e('Use https')?></th>
    72                 <td><label for="use_ssl"><input name="use_ssl" type="checkbox" id="use_ssl" value="1" <?php checked('1', $user->use_ssl); ?> /> <?php _e('Always use https when visiting the admin'); ?></label></td>
    73         </tr>
     476<tr>
     477        <th scope="row"><?php _e('Use https')?></th>
     478        <td><label for="use_ssl">
     479                        <input name="use_ssl" type="checkbox" id="use_ssl" value="1" <?php checked('1', $user->use_ssl); ?> />
     480                        <?php _e('Always use https when visiting the admin'); ?>
     481                </label></td>
     482</tr>
    74483<?php
    75484}
    76485
     
    154563        wp_die(__('You do not have permission to edit this user.'));
    155564
    156565include (ABSPATH . 'wp-admin/admin-header.php');
    157 ?>
    158566
    159 <?php if ( !IS_PROFILE_PAGE && is_super_admin( $profileuser->ID ) && current_user_can( 'manage_network_options' ) ) { ?>
    160         <div class="updated"><p><strong><?php _e('Important:'); ?></strong> <?php _e('This user has super admin privileges.'); ?></p></div>
    161 <?php } ?>
    162 <?php if ( isset($_GET['updated']) ) : ?>
    163 <div id="message" class="updated">
    164         <?php if ( IS_PROFILE_PAGE ) : ?>
    165         <p><strong><?php _e('Profile updated.') ?></strong></p>
    166         <?php else: ?>
    167         <p><strong><?php _e('User updated.') ?></strong></p>
    168         <?php endif; ?>
    169         <?php if ( $wp_http_referer && !IS_PROFILE_PAGE ) : ?>
    170         <p><a href="<?php echo esc_url( $wp_http_referer ); ?>"><?php _e('&larr; Back to Users'); ?></a></p>
    171         <?php endif; ?>
    172 </div>
    173 <?php endif; ?>
    174 <?php if ( isset( $errors ) && is_wp_error( $errors ) ) : ?>
    175 <div class="error"><p><?php echo implode( "</p>\n<p>", $errors->get_error_messages() ); ?></p></div>
    176 <?php endif; ?>
     567/*
     568**      Add User Meta Boxes
     569*/
    177570
    178 <div class="wrap" id="profile-page">
    179 <?php screen_icon(); ?>
    180 <h2>
    181 <?php
    182 echo esc_html( $title );
    183 if ( ! IS_PROFILE_PAGE ) {
    184         if ( current_user_can( 'create_users' ) ) { ?>
    185                 <a href="user-new.php" class="add-new-h2"><?php echo esc_html_x( 'Add New', 'user' ); ?></a>
    186         <?php } elseif ( is_multisite() && current_user_can( 'promote_users' ) ) { ?>
    187                 <a href="user-new.php" class="add-new-h2"><?php echo esc_html_x( 'Add Existing', 'user' ); ?></a>
    188         <?php }
    189 } ?>
    190 </h2>
     571require_once(ABSPATH . 'wp-admin/includes/meta-boxes.php');
    191572
    192 <form id="your-profile" action="<?php echo esc_url( self_admin_url( IS_PROFILE_PAGE ? 'profile.php' : 'user-edit.php' ) ); ?>" method="post"<?php do_action('user_edit_form_tag'); ?>>
    193 <?php wp_nonce_field('update-user_' . $user_id) ?>
    194 <?php if ( $wp_http_referer ) : ?>
    195         <input type="hidden" name="wp_http_referer" value="<?php echo esc_url($wp_http_referer); ?>" />
    196 <?php endif; ?>
    197 <p>
    198 <input type="hidden" name="from" value="profile" />
    199 <input type="hidden" name="checkuser_id" value="<?php echo $user_ID ?>" />
    200 </p>
     573add_meta_box( 'updatediv', __('Save'), 'user_submit_meta_box', null, 'side', 'core' );
     574add_meta_box( 'personaldiv', __('Personal Options'), 'user_personal_options_meta_box', null, 'normal', 'core' );
     575add_meta_box( 'namediv', __('Name'), 'user_name_meta_box', null, 'normal', 'core' );
     576add_meta_box( 'contactdiv', __('Contact Info'), 'user_contact_meta_box', null, 'normal', 'core' );
     577add_meta_box( 'biodiv', IS_PROFILE_PAGE ? __('About Yourself') : __('About the user'), 'user_bio_meta_box', null, 'normal', 'core' );
    201578
    202 <h3><?php _e('Personal Options'); ?></h3>
    203579
    204 <table class="form-table">
    205 <?php if ( rich_edit_exists() && !( IS_PROFILE_PAGE && !$user_can_edit ) ) : // don't bother showing the option if the editor has been removed ?>
    206         <tr>
    207                 <th scope="row"><?php _e('Visual Editor')?></th>
    208                 <td><label for="rich_editing"><input name="rich_editing" type="checkbox" id="rich_editing" value="false" <?php if ( ! empty( $profileuser->rich_editing ) ) checked( 'false', $profileuser->rich_editing ); ?> /> <?php _e( 'Disable the visual editor when writing' ); ?></label></td>
    209         </tr>
    210 <?php endif; ?>
    211 <?php if ( count($_wp_admin_css_colors) > 1 && has_action('admin_color_scheme_picker') ) : ?>
    212 <tr>
    213 <th scope="row"><?php _e('Admin Color Scheme')?></th>
    214 <td><?php do_action( 'admin_color_scheme_picker' ); ?></td>
    215 </tr>
    216 <?php
    217 endif; // $_wp_admin_css_colors
    218 if ( !( IS_PROFILE_PAGE && !$user_can_edit ) ) : ?>
    219 <tr>
    220 <th scope="row"><?php _e( 'Keyboard Shortcuts' ); ?></th>
    221 <td><label for="comment_shortcuts"><input type="checkbox" name="comment_shortcuts" id="comment_shortcuts" value="true" <?php if ( ! empty( $profileuser->comment_shortcuts ) ) checked( 'true', $profileuser->comment_shortcuts ); ?> /> <?php _e('Enable keyboard shortcuts for comment moderation.'); ?></label> <?php _e('<a href="http://codex.wordpress.org/Keyboard_Shortcuts" target="_blank">More information</a>'); ?></td>
    222 </tr>
    223 <?php endif; ?>
    224 <tr class="show-admin-bar">
    225 <th scope="row"><?php _e('Toolbar')?></th>
    226 <td><fieldset><legend class="screen-reader-text"><span><?php _e('Toolbar') ?></span></legend>
    227 <label for="admin_bar_front">
    228 <input name="admin_bar_front" type="checkbox" id="admin_bar_front" value="1"<?php checked( _get_admin_bar_pref( 'front', $profileuser->ID ) ); ?> />
    229 <?php _e( 'Show Toolbar when viewing site' ); ?></label><br />
    230 </fieldset>
    231 </td>
    232 </tr>
    233 <?php do_action('personal_options', $profileuser); ?>
    234 </table>
    235 <?php
    236         if ( IS_PROFILE_PAGE )
    237                 do_action('profile_personal_options', $profileuser);
    238 ?>
     580if ( count( $profileuser->caps ) > count( $profileuser->roles ) && apply_filters( 'additional_capabilities_display', true, $profileuser ) ) :
     581        add_meta_box( 'addcapdiv', __('Additional Capabilities'), 'user_additional_capabilities_meta_box', null, 'normal', 'core' );
     582endif;
    239583
    240 <h3><?php _e('Name') ?></h3>
     584/*
     585**      Create action hooks to for user profile page
     586*/
    241587
    242 <table class="form-table">
    243         <tr>
    244                 <th><label for="user_login"><?php _e('Username'); ?></label></th>
    245                 <td><input type="text" name="user_login" id="user_login" value="<?php echo esc_attr($profileuser->user_login); ?>" disabled="disabled" class="regular-text" /> <span class="description"><?php _e('Usernames cannot be changed.'); ?></span></td>
    246         </tr>
     588if ( IS_PROFILE_PAGE )
     589        do_action( 'show_user_profile', $profileuser );
     590else
     591        do_action( 'edit_user_profile', $profileuser );
    247592
    248 <?php if ( !IS_PROFILE_PAGE && !is_network_admin() ) : ?>
    249 <tr><th><label for="role"><?php _e('Role') ?></label></th>
    250 <td><select name="role" id="role">
    251 <?php
    252 // Compare user role against currently editable roles
    253 $user_roles = array_intersect( array_values( $profileuser->roles ), array_keys( get_editable_roles() ) );
    254 $user_role  = array_shift( $user_roles );
    255 
    256 // print the full list of roles with the primary one selected.
    257 wp_dropdown_roles($user_role);
    258 
    259 // print the 'no role' option. Make it selected if the user has no role yet.
    260 if ( $user_role )
    261         echo '<option value="">' . __('&mdash; No role for this site &mdash;') . '</option>';
    262 else
    263         echo '<option value="" selected="selected">' . __('&mdash; No role for this site &mdash;') . '</option>';
     593add_screen_option('layout_columns', array('max' => 2, 'default' => 2) );
    264594?>
    265 </select></td></tr>
    266 <?php endif; //!IS_PROFILE_PAGE
    267 
    268 if ( is_multisite() && is_network_admin() && ! IS_PROFILE_PAGE && current_user_can( 'manage_network_options' ) && !isset($super_admins) ) { ?>
    269 <tr><th><?php _e('Super Admin'); ?></th>
    270 <td>
    271 <?php if ( $profileuser->user_email != get_site_option( 'admin_email' ) || ! is_super_admin( $profileuser->ID ) ) : ?>
    272 <p><label><input type="checkbox" id="super_admin" name="super_admin"<?php checked( is_super_admin( $profileuser->ID ) ); ?> /> <?php _e( 'Grant this user super admin privileges for the Network.' ); ?></label></p>
    273 <?php else : ?>
    274 <p><?php _e( 'Super admin privileges cannot be removed because this user has the network admin email.' ); ?></p>
    275 <?php endif; ?>
    276 </td></tr>
     595<?php if ( !IS_PROFILE_PAGE && is_super_admin( $profileuser->ID ) && current_user_can( 'manage_network_options' ) ) { ?>
     596<div class="updated">
     597        <p><strong>
     598                <?php _e('Important:'); ?>
     599                </strong>
     600                <?php _e('This user has super admin privileges.'); ?>
     601        </p>
     602</div>
    277603<?php } ?>
    278 
    279 <tr>
    280         <th><label for="first_name"><?php _e('First Name') ?></label></th>
    281         <td><input type="text" name="first_name" id="first_name" value="<?php echo esc_attr($profileuser->first_name) ?>" class="regular-text" /></td>
    282 </tr>
    283 
    284 <tr>
    285         <th><label for="last_name"><?php _e('Last Name') ?></label></th>
    286         <td><input type="text" name="last_name" id="last_name" value="<?php echo esc_attr($profileuser->last_name) ?>" class="regular-text" /></td>
    287 </tr>
    288 
    289 <tr>
    290         <th><label for="nickname"><?php _e('Nickname'); ?> <span class="description"><?php _e('(required)'); ?></span></label></th>
    291         <td><input type="text" name="nickname" id="nickname" value="<?php echo esc_attr($profileuser->nickname) ?>" class="regular-text" /></td>
    292 </tr>
    293 
    294 <tr>
    295         <th><label for="display_name"><?php _e('Display name publicly as') ?></label></th>
    296         <td>
    297                 <select name="display_name" id="display_name">
     604<div class="wrap" id="profile-page">
     605        <?php screen_icon(); ?>
     606        <h2>
     607                <?php if ( isset( $errors ) && is_wp_error( $errors ) ) : ?>
     608                <div class="error">
     609                        <p><?php echo implode( "</p>\n<p>", $errors->get_error_messages() ); ?></p>
     610                </div>
     611                <?php endif; ?>
     612                <?php if ( isset($_GET['updated']) ) : ?>
     613                <div id="message" class="updated">
     614                        <?php if ( IS_PROFILE_PAGE ) : ?>
     615                        <p><strong>
     616                                <?php _e('Profile updated.') ?>
     617                                </strong></p>
     618                        <?php else: ?>
     619                        <p><strong>
     620                                <?php _e('User updated.') ?>
     621                                </strong></p>
     622                        <?php endif; ?>
     623                        <?php if ( $wp_http_referer && !IS_PROFILE_PAGE ) : ?>
     624                        <p><a href="<?php echo esc_url( $wp_http_referer ); ?>">
     625                                <?php _e('&larr; Back to Users'); ?>
     626                                </a></p>
     627                        <?php endif; ?>
     628                </div>
     629                <?php endif; ?>
    298630                <?php
    299                         $public_display = array();
    300                         $public_display['display_nickname']  = $profileuser->nickname;
    301                         $public_display['display_username']  = $profileuser->user_login;
    302 
    303                         if ( !empty($profileuser->first_name) )
    304                                 $public_display['display_firstname'] = $profileuser->first_name;
    305 
    306                         if ( !empty($profileuser->last_name) )
    307                                 $public_display['display_lastname'] = $profileuser->last_name;
    308 
    309                         if ( !empty($profileuser->first_name) && !empty($profileuser->last_name) ) {
    310                                 $public_display['display_firstlast'] = $profileuser->first_name . ' ' . $profileuser->last_name;
    311                                 $public_display['display_lastfirst'] = $profileuser->last_name . ' ' . $profileuser->first_name;
    312                         }
    313 
    314                         if ( !in_array( $profileuser->display_name, $public_display ) ) // Only add this if it isn't duplicated elsewhere
    315                                 $public_display = array( 'display_displayname' => $profileuser->display_name ) + $public_display;
    316 
    317                         $public_display = array_map( 'trim', $public_display );
    318                         $public_display = array_unique( $public_display );
    319 
    320                         foreach ( $public_display as $id => $item ) {
    321                 ?>
    322                         <option <?php selected( $profileuser->display_name, $item ); ?>><?php echo $item; ?></option>
     631echo esc_html( $title );
     632if ( ! IS_PROFILE_PAGE ) {
     633        if ( current_user_can( 'create_users' ) ) { ?>
     634                <a href="user-new.php" class="add-new-h2"><?php echo esc_html_x( 'Add New', 'user' ); ?></a>
     635                <?php } elseif ( is_multisite() && current_user_can( 'promote_users' ) ) { ?>
     636                <a href="user-new.php" class="add-new-h2"><?php echo esc_html_x( 'Add Existing', 'user' ); ?></a>
     637                <?php }
     638} ?>
     639        </h2>
     640        <form id="your-profile" action="<?php echo esc_url( self_admin_url( IS_PROFILE_PAGE ? 'profile.php' : 'user-edit.php' ) ); ?>" method="post"<?php do_action('user_edit_form_tag'); ?>>
    323641                <?php
    324                         }
    325                 ?>
    326                 </select>
    327         </td>
    328 </tr>
    329 </table>
    330 
    331 <h3><?php _e('Contact Info') ?></h3>
    332 
    333 <table class="form-table">
    334 <tr>
    335         <th><label for="email"><?php _e('E-mail'); ?> <span class="description"><?php _e('(required)'); ?></span></label></th>
    336         <td><input type="text" name="email" id="email" value="<?php echo esc_attr($profileuser->user_email) ?>" class="regular-text" />
    337         <?php
    338         $new_email = get_option( $current_user->ID . '_new_email' );
    339         if ( $new_email && $new_email['newemail'] != $current_user->user_email && $profileuser->ID == $current_user->ID ) : ?>
    340         <div class="updated inline">
    341         <p><?php printf( __('There is a pending change of your e-mail to <code>%1$s</code>. <a href="%2$s">Cancel</a>'), $new_email['newemail'], esc_url( self_admin_url( 'profile.php?dismiss=' . $current_user->ID . '_new_email' ) ) ); ?></p>
    342         </div>
    343         <?php endif; ?>
    344         </td>
    345 </tr>
    346 
    347 <tr>
    348         <th><label for="url"><?php _e('Website') ?></label></th>
    349         <td><input type="text" name="url" id="url" value="<?php echo esc_attr($profileuser->user_url) ?>" class="regular-text code" /></td>
    350 </tr>
    351 
    352 <?php
    353         foreach (_wp_get_user_contactmethods( $profileuser ) as $name => $desc) {
    354 ?>
    355 <tr>
    356         <th><label for="<?php echo $name; ?>"><?php echo apply_filters('user_'.$name.'_label', $desc); ?></label></th>
    357         <td><input type="text" name="<?php echo $name; ?>" id="<?php echo $name; ?>" value="<?php echo esc_attr($profileuser->$name) ?>" class="regular-text" /></td>
    358 </tr>
    359 <?php
    360         }
    361 ?>
    362 </table>
    363 
    364 <h3><?php IS_PROFILE_PAGE ? _e('About Yourself') : _e('About the user'); ?></h3>
    365 
    366 <table class="form-table">
    367 <tr>
    368         <th><label for="description"><?php _e('Biographical Info'); ?></label></th>
    369         <td><textarea name="description" id="description" rows="5" cols="30"><?php echo $profileuser->description; // textarea_escaped ?></textarea><br />
    370         <span class="description"><?php _e('Share a little biographical information to fill out your profile. This may be shown publicly.'); ?></span></td>
    371 </tr>
    372 
    373 <?php
    374 $show_password_fields = apply_filters('show_password_fields', true, $profileuser);
    375 if ( $show_password_fields ) :
    376 ?>
    377 <tr id="password">
    378         <th><label for="pass1"><?php _e('New Password'); ?></label></th>
    379         <td>
    380                 <input class="hidden" value=" " /><!-- #24364 workaround -->
    381                 <input type="password" name="pass1" id="pass1" size="16" value="" autocomplete="off" /> <span class="description"><?php _e("If you would like to change the password type a new one. Otherwise leave this blank."); ?></span>
    382         </td>
    383 </tr>
    384 <tr>
    385         <th scope="row"><label for="pass2"><?php _e('Repeat New Password'); ?></label></th>
    386         <td>
    387         <input name="pass2" type="password" id="pass2" size="16" value="" autocomplete="off" /> <span class="description" for="pass2"><?php _e("Type your new password again."); ?></span>
    388         <br />
    389         <div id="pass-strength-result"><?php _e('Strength indicator'); ?></div>
    390         <p class="description indicator-hint"><?php _e('Hint: The password should be at least seven characters long. To make it stronger, use upper and lower case letters, numbers and symbols like ! " ? $ % ^ &amp; ).'); ?></p>
    391         </td>
    392 </tr>
    393 <?php endif; ?>
    394 </table>
    395 
    396 <?php
    397         if ( IS_PROFILE_PAGE )
    398                 do_action( 'show_user_profile', $profileuser );
    399         else
    400                 do_action( 'edit_user_profile', $profileuser );
    401 ?>
    402 
    403 <?php if ( count( $profileuser->caps ) > count( $profileuser->roles ) && apply_filters( 'additional_capabilities_display', true, $profileuser ) ) : ?>
    404 <h3><?php _e( 'Additional Capabilities' ); ?></h3>
    405 <table class="form-table">
    406 <tr>
    407         <th scope="row"><?php _e( 'Capabilities' ); ?></th>
    408         <td>
    409 <?php
    410         $output = '';
    411         foreach ( $profileuser->caps as $cap => $value ) {
    412                 if ( ! $wp_roles->is_role( $cap ) ) {
    413                         if ( '' != $output )
    414                                 $output .= ', ';
    415                         $output .= $value ? $cap : sprintf( __( 'Denied: %s' ), $cap );
    416                 }
    417         }
    418         echo $output;
    419 ?>
    420         </td>
    421 </tr>
    422 </table>
    423 <?php endif; ?>
    424 
    425 <input type="hidden" name="action" value="update" />
    426 <input type="hidden" name="user_id" id="user_id" value="<?php echo esc_attr($user_id); ?>" />
    427 
    428 <?php submit_button( IS_PROFILE_PAGE ? __('Update Profile') : __('Update User') ); ?>
    429 
     642                                wp_nonce_field('update-user_' . $user_id);
     643                                wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false );
     644                                wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false ); ?>
     645                <?php if ( $wp_http_referer ) : ?>
     646                <input type="hidden" name="wp_http_referer" value="<?php echo esc_url($wp_http_referer); ?>" />
     647                <?php endif; ?>
     648                <p>
     649                        <input type="hidden" name="from" value="profile" />
     650                        <input type="hidden" name="checkuser_id" value="<?php echo $user_ID ?>" />
     651                </p>
     652                <div id="poststuff">
     653                <div id="post-body" class="metabox-holder columns-<?php echo 1 == get_current_screen()->get_columns() ? '1' : '2'; ?>">
     654                        <div id="post-body-content">
     655                                <div id="postbox-container-1" class="postbox-container">
     656                                        <?php
     657                                                do_meta_boxes( null, 'side', $user_id );
     658                                        ?>
     659                                </div>
     660                                <div id="postbox-container-2" class="postbox-container">
     661                                        <?php
     662                                                do_meta_boxes(null, 'normal', $user_id);
     663                                       
     664                                                do_meta_boxes(null, 'advanced', $user_id);
     665                                        ?>
     666                                </div>
     667                        </div>
     668                        <!-- /post-body -->
     669                        <br class="clear" />
     670                </div>
     671                <!-- /poststuff -->
     672        </form>
     673</div>
    430674</form>
    431675</div>
    432676<?php
     
    440684</script>
    441685<?php
    442686include( ABSPATH . 'wp-admin/admin-footer.php');
     687