Ticket #6148: 6148.4.patch
| File 6148.4.patch, 15.7 KB (added by , 7 years ago) |
|---|
-
wp-admin/includes/class-wp-users-list-table.php
504 504 $r .= "$avatar $edit"; 505 505 break; 506 506 case 'name': 507 if ( $user_object->first_name && $user_object->last_name ) { 508 $r .= "$user_object->first_name $user_object->last_name"; 509 } elseif ( $user_object->first_name ) { 510 $r .= $user_object->first_name; 511 } elseif ( $user_object->last_name ) { 512 $r .= $user_object->last_name; 513 } else { 514 $r .= '<span aria-hidden="true">—</span><span class="screen-reader-text">' . _x( 'Unknown', 'name' ) . '</span>'; 515 } 507 $r.= $user_object->nickname ?: $user_object->display_name; 516 508 break; 517 509 case 'email': 518 510 $r .= "<a href='" . esc_url( "mailto:$email" ) . "'>$email</a>"; -
wp-admin/includes/user.php
88 88 $user->user_url = preg_match( '/^(' . $protocols . '):/is', $user->user_url ) ? $user->user_url : 'http://' . $user->user_url; 89 89 } 90 90 } 91 if ( isset( $_POST['first_name'] ) ) { 92 $user->first_name = sanitize_text_field( $_POST['first_name'] ); 91 foreach ( wp_get_user_name_parts() as $key => $label ) { 92 if ( isset( $_POST[ $key ] ) ) { 93 $user->{$key} = sanitize_text_field( $_POST[ $key ] ); 94 } 93 95 } 94 if ( isset( $_POST['last_name'] ) ) {95 $user->last_name = sanitize_text_field( $_POST['last_name'] );96 }97 96 if ( isset( $_POST['nickname'] ) ) { 98 97 $user->nickname = sanitize_text_field( $_POST['nickname'] ); 99 98 } -
wp-admin/user-edit.php
425 425 </td></tr> 426 426 <?php } ?> 427 427 428 <tr class="user-first-name-wrap"> 429 <th><label for="first_name"><?php _e( 'First Name' ); ?></label></th> 430 <td><input type="text" name="first_name" id="first_name" value="<?php echo esc_attr( $profileuser->first_name ); ?>" class="regular-text" /></td> 428 <?php foreach ( wp_get_user_name_parts() as $key => $label ) : ?> 429 <tr class="user-<?php echo esc_attr( str_replace( '_', '-', $key ) ) ?>-wrap"> 430 <th><label for="<?php echo esc_attr( $key ) ?>"><?php echo esc_html( $label ); ?></label></th> 431 <td><input type="text" name="<?php echo esc_attr( $key ) ?>" id="<?php echo esc_attr( $key ) ?>" value="<?php echo esc_attr( $profileuser->{$key}); ?>" class="regular-text" /></td> 431 432 </tr> 433 <?php endforeach; ?> 432 434 433 <tr class="user-last-name-wrap">434 <th><label for="last_name"><?php _e( 'Last Name' ); ?></label></th>435 <td><input type="text" name="last_name" id="last_name" value="<?php echo esc_attr( $profileuser->last_name ); ?>" class="regular-text" /></td>436 </tr>437 438 435 <tr class="user-nickname-wrap"> 439 436 <th><label for="nickname"><?php _e( 'Nickname' ); ?> <span class="description"><?php _e( '(required)' ); ?></span></label></th> 440 437 <td><input type="text" name="nickname" id="nickname" value="<?php echo esc_attr( $profileuser->nickname ); ?>" class="regular-text" /></td> … … 445 442 <td> 446 443 <select name="display_name" id="display_name"> 447 444 <?php 448 $public_display = array(); 449 $public_display['display_nickname'] = $profileuser->nickname; 450 $public_display['display_username'] = $profileuser->user_login; 451 452 if ( ! empty( $profileuser->first_name ) ) { 453 $public_display['display_firstname'] = $profileuser->first_name; 445 $public_display = array(); 446 $public_display['display_nickname'] = $profileuser->nickname; 447 $public_display['display_username'] = $profileuser->user_login; 448 $user_name = []; 449 foreach ( array_keys( wp_get_user_name_parts() ) as $key ) { 450 if ( ! empty( $profileuser->{$key} ) ) { 451 $user_name[] = $profileuser->{$key}; 452 } 454 453 } 455 456 if ( ! empty( $profileuser->last_name ) ) { 457 $public_display['display_lastname'] = $profileuser->last_name; 454 if ( $user_name ) { 455 $public_display[ 'display_name_parts' ] = implode( wp_user_name_parts_glue( $profileuser ), $user_name ); 458 456 } 459 460 if ( ! empty( $profileuser->first_name ) && ! empty( $profileuser->last_name ) ) { 461 $public_display['display_firstlast'] = $profileuser->first_name . ' ' . $profileuser->last_name; 462 $public_display['display_lastfirst'] = $profileuser->last_name . ' ' . $profileuser->first_name; 463 } 464 457 465 458 if ( ! in_array( $profileuser->display_name, $public_display ) ) { // Only add this if it isn't duplicated elsewhere 466 459 $public_display = array( 'display_displayname' => $profileuser->display_name ) + $public_display; 467 460 } 468 461 469 $public_display = array_map( 'trim', $public_display );470 $public_display = array_unique( $public_display );462 $public_display = array_map( 'trim', $public_display ); 463 $public_display = array_unique( $public_display ); 471 464 472 465 foreach ( $public_display as $id => $item ) { 473 466 ?> -
wp-admin/user-new.php
453 453 $creating = isset( $_POST['createuser'] ); 454 454 455 455 $new_user_login = $creating && isset( $_POST['user_login'] ) ? wp_unslash( $_POST['user_login'] ) : ''; 456 $new_user_firstname = $creating && isset( $_POST['first_name'] ) ? wp_unslash( $_POST['first_name'] ) : '';457 $new_user_lastname = $creating && isset( $_POST['last_name'] ) ? wp_unslash( $_POST['last_name'] ) : '';458 456 $new_user_email = $creating && isset( $_POST['email'] ) ? wp_unslash( $_POST['email'] ) : ''; 459 457 $new_user_uri = $creating && isset( $_POST['url'] ) ? wp_unslash( $_POST['url'] ) : ''; 460 458 $new_user_role = $creating && isset( $_POST['role'] ) ? wp_unslash( $_POST['role'] ) : ''; 461 459 $new_user_send_notification = $creating && ! isset( $_POST['send_user_notification'] ) ? false : true; 462 460 $new_user_ignore_pass = $creating && isset( $_POST['noconfirmation'] ) ? wp_unslash( $_POST['noconfirmation'] ) : ''; 463 461 $new_user_name_parts = []; 462 foreach ( wp_get_user_name_parts() as $user_name_key => $label ) { 463 $new_user_name_parts[] = [ 464 'key' => $user_name_key, 465 'value' => $creating && isset( $_POST[ $user_name_key ] ) ? wp_unslash( $_POST[ $user_name_key ] ) : '', 466 'label' => $label, 467 ]; 468 } 464 469 ?> 465 470 <table class="form-table" role="presentation"> 466 471 <tr class="form-field form-required"> … … 472 477 <td><input name="email" type="email" id="email" value="<?php echo esc_attr( $new_user_email ); ?>" /></td> 473 478 </tr> 474 479 <?php if ( ! is_multisite() ) { ?> 480 <?php foreach ( $new_user_name_parts as $name_part ) : ?> 481 <tr class="form-field"> 482 <th scope="row"> 483 <label for="<?php echo esc_attr( $name_part['key'] ) ?>"><?php echo esc_html( $name_part['label'] ); ?> </label> 484 </th> 485 <td> 486 <input name="<?php echo esc_attr( $name_part['key'] ) ?>" type="text" id="<?php echo esc_attr( $name_part['key'] ) ?>" value="<?php echo esc_attr( $name_part['value'] ); ?>"/> 487 </td> 488 </tr> 489 <?php endforeach; ?> 475 490 <tr class="form-field"> 476 <th scope="row"><label for="first_name"><?php _e( 'First Name' ); ?> </label></th>477 <td><input name="first_name" type="text" id="first_name" value="<?php echo esc_attr( $new_user_firstname ); ?>" /></td>478 </tr>479 <tr class="form-field">480 <th scope="row"><label for="last_name"><?php _e( 'Last Name' ); ?> </label></th>481 <td><input name="last_name" type="text" id="last_name" value="<?php echo esc_attr( $new_user_lastname ); ?>" /></td>482 </tr>483 <tr class="form-field">484 491 <th scope="row"><label for="url"><?php _e( 'Website' ); ?></label></th> 485 492 <td><input name="url" type="url" id="url" class="code" value="<?php echo esc_attr( $new_user_uri ); ?>" /></td> 486 493 </tr> -
wp-includes/user.php
1629 1629 */ 1630 1630 $user_email = apply_filters( 'pre_user_email', $raw_user_email ); 1631 1631 1632 /* 1633 * If there is no update, just check for `email_exists`. If there is an update, 1634 * check if current email and new email are the same, or not, and check `email_exists` 1635 * accordingly. 1636 */ 1637 if ( ( ! $update || ( ! empty( $old_user_data ) && 0 !== strcasecmp( $user_email, $old_user_data->user_email ) ) ) 1638 && ! defined( 'WP_IMPORTING' ) 1639 && email_exists( $user_email ) 1640 ) { 1641 return new WP_Error( 'existing_user_email', __( 'Sorry, that email address is already used!' ) ); 1632 foreach ( wp_get_user_name_parts() as $name_key => $label ) { 1633 $name_part = empty( $userdata[ $name_key ] ) ? '' : $userdata[ $name_key ]; 1634 /** 1635 * Filters a user's name part before the user is created or updated. 1636 * 1637 * This filter is backward compatibility for 'pre_user_first_name' and 'pre_user_last_name'. 1638 * 1639 * @since 5.3.0 1640 * 1641 * @param string $name_part The user's 1642 */ 1643 $meta[ $name_key ] = apply_filters( "pre_user_{$name_key}", $name_part ); 1644 /** 1645 * Filters a user's name part before the user is created or updated. 1646 * 1647 * @since 5.3.0 1648 * 1649 * @param string $name_part_value The user's name part value. e.g. "John" 1650 * @param string $name_part_name The user's name part key. e.g. "first_name" 1651 * @param array $userdata User data array. 1652 * @param bool $update If updating, true. 1653 */ 1654 $meta[ $name_key ] = apply_filters( "pre_user_name_part", $name_part, $name_key, $userdata, $update ); 1642 1655 } 1643 $nickname = empty( $userdata['nickname'] ) ? $user_login : $userdata['nickname'];1644 1656 1645 /**1646 * Filters a user's nickname before the user is created or updated.1647 *1648 * @since 2.0.31649 *1650 * @param string $nickname The user's nickname.1651 */1652 $meta['nickname'] = apply_filters( 'pre_user_nickname', $nickname );1653 1654 $first_name = empty( $userdata['first_name'] ) ? '' : $userdata['first_name'];1655 1656 /**1657 * Filters a user's first name before the user is created or updated.1658 *1659 * @since 2.0.31660 *1661 * @param string $first_name The user's first name.1662 */1663 $meta['first_name'] = apply_filters( 'pre_user_first_name', $first_name );1664 1665 $last_name = empty( $userdata['last_name'] ) ? '' : $userdata['last_name'];1666 1667 /**1668 * Filters a user's last name before the user is created or updated.1669 *1670 * @since 2.0.31671 *1672 * @param string $last_name The user's last name.1673 */1674 $meta['last_name'] = apply_filters( 'pre_user_last_name', $last_name );1675 1676 1657 if ( empty( $userdata['display_name'] ) ) { 1677 1658 if ( $update ) { 1678 1659 $display_name = $user_login; 1679 } elseif ( $meta['first_name'] && $meta['last_name'] ) {1680 /* translators: 1: first name, 2: last name */1681 $display_name = sprintf( _x( '%1$s %2$s', 'Display name based on first name and last name' ), $meta['first_name'], $meta['last_name'] );1682 } elseif ( $meta['first_name'] ) {1683 $display_name = $meta['first_name'];1684 } elseif ( $meta['last_name'] ) {1685 $display_name = $meta['last_name'];1686 1660 } else { 1687 $display_name = $user_login; 1661 // Try building non empty name. 1662 $generated_name = []; 1663 foreach ( array_keys( wp_get_user_name_parts() ) as $name_part_key ) { 1664 if ( ! empty( $userdata[ $name_part_key ]) ) { 1665 $generated_name[] = $userdata[ $name_part_key ]; 1666 } 1667 } 1668 $display_name = $generated_name ? implode( wp_user_name_parts_glue( $userdata ), $generated_name ) : $user_login; 1688 1669 } 1689 1670 } else { 1690 1671 $display_name = $userdata['display_name']; … … 1698 1679 * @param string $display_name The user's display name. 1699 1680 */ 1700 1681 $display_name = apply_filters( 'pre_user_display_name', $display_name ); 1682 1683 /* 1684 * If there is no update, just check for `email_exists`. If there is an update, 1685 * check if current email and new email are the same, or not, and check `email_exists` 1686 * accordingly. 1687 */ 1688 if ( ( ! $update || ( ! empty( $old_user_data ) && 0 !== strcasecmp( $user_email, $old_user_data->user_email ) ) ) 1689 && ! defined( 'WP_IMPORTING' ) 1690 && email_exists( $user_email ) 1691 ) { 1692 return new WP_Error( 'existing_user_email', __( 'Sorry, that email address is already used!' ) ); 1693 } 1694 $nickname = empty( $userdata['nickname'] ) ? $display_name : $userdata['nickname']; 1695 1696 /** 1697 * Filters a user's nickname before the user is created or updated. 1698 * 1699 * @since 2.0.3 1700 * 1701 * @param string $nickname The user's nickname. 1702 */ 1703 $meta['nickname'] = apply_filters( 'pre_user_nickname', $nickname ); 1701 1704 1702 1705 $description = empty( $userdata['description'] ) ? '' : $userdata['description']; 1703 1706 … … 2131 2134 */ 2132 2135 function _get_additional_user_keys( $user ) { 2133 2136 $keys = array( 'first_name', 'last_name', 'nickname', 'description', 'rich_editing', 'syntax_highlighting', 'comment_shortcuts', 'admin_color', 'use_ssl', 'show_admin_bar_front', 'locale' ); 2134 return array_merge( $keys, array_keys( wp_get_user_ contact_methods( $user ) ) );2137 return array_merge( $keys, array_keys( wp_get_user_name_parts() ), array_keys( wp_get_user_contact_methods( $user ) ) ); 2135 2138 } 2136 2139 2137 2140 /** 2141 * Get user name parts. 2142 * 2143 * Default name parts are first_name and last_name. 2144 * 2145 * @since 5.3.0 2146 * 2147 * @return array An associative array consists of user_meta key as key and label as value. 2148 */ 2149 function wp_get_user_name_parts() { 2150 $available_name_parts = [ 2151 'first_name' => __( 'First Name' ), 2152 'middle_name' => __( 'Middle Name' ), 2153 'last_name' => __( 'Last Name' ), 2154 'full_name' => __( 'Full Name' ), 2155 ]; 2156 $user_locale = get_user_locale(); 2157 /** 2158 * Filters user name parts. 2159 * 2160 * @since 5.3.0 2161 * 2162 * @param array $available_name_parts An associative array consists of user_meta key as key and label as value. 2163 * @param string $user_locale User locale 2164 */ 2165 $available_name_parts = (array) apply_filters( 'user_name_parts', $available_name_parts, $user_locale ); 2166 /* 2167 * translators: Control name order in your locale. If last name precedes first name, 'last_name,first_name'. 2168 * A middle name is required, 'first_name,middle_name,last_name'. 2169 * Other name parts can be added by user_name_parts filters. 2170 */ 2171 if ( /*$version_is_too_old*/ false ) { 2172 $name_order = _x( 'first_name,last_name', 'Name order. Do not translate!' ); 2173 } else { 2174 $name_order = _x( 'full_name', 'Default name order since 5.3.0. Do not translate!' ); 2175 } 2176 /** 2177 * Order of user name parts. Must be included in name parts. 2178 * 2179 * @since 5.3.0 2180 * 2181 * @param array $name_order An array of user_meta key. 2182 * @param string $user_locale User locale. 2183 */ 2184 $name_order = (array) apply_filters( 'user_name_parts_order', array_map( 'trim', explode( ',', $name_order ) ), $user_locale ); 2185 $name_order = array_filter( $name_order, function( $key ) use ( $available_name_parts ) { 2186 return ! empty( $available_name_parts[ $key ] ); 2187 } ); 2188 $allowed_parts = []; 2189 foreach ( $name_order as $key ) { 2190 $allowed_parts[ $key ] = $available_name_parts[ $key ]; 2191 } 2192 return empty( $allowed_parts ) ? [ 2193 'full_name' => __( 'Full Name' ), 2194 ] : $allowed_parts; 2195 } 2196 2197 /** 2198 * Return glue for name parts. 2199 * 2200 * @param null|WP_User|array $userdata 2201 * @return string 2202 */ 2203 function wp_user_name_parts_glue( $userdata = null ) { 2204 $glue = _x( ' ', 'User name parts glue. Do not translate!' ); 2205 /** 2206 * Filters the glue of name parts. 2207 * 2208 * @param string $glue Default ' '. 2209 * @param array|null|WP_User $userdata User data. Varies depending on context. 2210 * 2211 * @since 5.3.0 2212 * 2213 * @param string $glue 2214 * @param array|array|WP_User $userdata 2215 */ 2216 return (string) apply_filters( 'default_user_display_name_glue', $glue, $userdata ); 2217 } 2218 2219 /** 2138 2220 * Set up the user contact methods. 2139 2221 * 2140 2222 * Default contact methods were removed in 3.6. A filter dictates contact methods.