Make WordPress Core

Ticket #38632: 38632.4.diff

File 38632.4.diff, 5.5 KB (added by ocean90, 5 years ago)
  • src/wp-admin/includes/user.php

     
    9898
    9999                if ( isset( $_POST['locale'] ) ) {
    100100                        $locale = sanitize_text_field( $_POST['locale'] );
    101                         if ( ! in_array( $locale, get_available_languages(), true ) ) {
     101                        if ( 'site-default' === $locale ) {
    102102                                $locale = '';
     103                        } elseif ( ! in_array( $locale, get_available_languages(), true ) ) {
     104                                $locale = 'en_US';
    103105                        }
    104106
    105                         $user->locale = ( '' === $locale ) ? 'en_US' : $locale;
     107                        $user->locale = $locale;
    106108                }
    107109        }
    108110
  • src/wp-admin/user-edit.php

     
    284284                $user_locale = $profileuser->locale;
    285285
    286286                if ( 'en_US' === $user_locale ) {
    287                         $user_locale = false;
    288                 } elseif ( ! in_array( $user_locale, $languages, true ) ) {
    289                         $user_locale = get_locale();
     287                        $user_locale = '';
     288                } elseif ( '' === $user_locale || ! in_array( $user_locale, $languages, true ) ) {
     289                        $user_locale = 'site-default';
    290290                }
    291291
    292292                wp_dropdown_languages( array(
     
    294294                        'id'                          => 'locale',
    295295                        'selected'                    => $user_locale,
    296296                        'languages'                   => $languages,
    297                         'show_available_translations' => false
     297                        'show_available_translations' => false,
     298                        'show_site_locale_default'    => true
    298299                ) );
    299300                ?>
    300301        </td>
  • src/wp-includes/l10n.php

     
    10651065 *     @type bool|int $echo                         Whether to echo the generated markup. Accepts 0, 1, or their
    10661066 *                                                  boolean equivalents. Default 1.
    10671067 *     @type bool     $show_available_translations  Whether to show available translations. Default true.
     1068 *     @type bool     $show_site_locale_default     Whether to show an option to fall back to the site's locale. Default false.
    10681069 * }
    10691070 * @return string HTML content
    10701071 */
     
    10781079                'selected'     => '',
    10791080                'echo'         => 1,
    10801081                'show_available_translations' => true,
     1082                'show_site_locale_default'    => false,
    10811083        ) );
    10821084
     1085        // English (United States) uses an empty string for the value attribute.
     1086        if ( 'en_US' === $args['selected'] ) {
     1087                $args['selected'] = '';
     1088        }
     1089
    10831090        $translations = $args['translations'];
    10841091        if ( empty( $translations ) ) {
    10851092                require_once( ABSPATH . 'wp-admin/includes/translation-install.php' );
     
    11221129        if ( $translations_available ) {
    11231130                $structure[] = '<optgroup label="' . esc_attr_x( 'Installed', 'translations' ) . '">';
    11241131        }
    1125         $structure[] = '<option value="" lang="en" data-installed="1">English (United States)</option>';
     1132
     1133        if ( $args['show_site_locale_default'] ) {
     1134                $structure[] = sprintf(
     1135                        '<option value="site-default" data-installed="1"%s>%s</option>',
     1136                        _x( 'Site Default', 'default site language' ),
     1137                        selected( 'site-default', $args['selected'], false )
     1138                );
     1139        }
     1140
     1141        $structure[] = sprintf(
     1142                '<option value="" lang="en" data-installed="1"%s>English (United States)</option>',
     1143                selected( '', $args['selected'], false )
     1144        );
     1145
    11261146        foreach ( $languages as $language ) {
    11271147                $structure[] = sprintf(
    11281148                        '<option value="%s" lang="%s"%s data-installed="1">%s</option>',
  • src/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php

     
    10741074                                'locale'    => array(
    10751075                                        'description' => __( 'Locale for the resource.' ),
    10761076                                        'type'        => 'string',
    1077                                         'enum'        => array_merge( array( 'en_US' ), get_available_languages() ),
     1077                                        'enum'        => array_merge( array( '', 'en_US' ), get_available_languages() ),
    10781078                                        'context'     => array( 'edit' ),
    10791079                                ),
    10801080                                'nickname'    => array(
  • tests/phpunit/tests/rest-api/rest-users-controller.php

     
    879879                $this->assertEquals( 'en_US', $user->locale );
    880880        }
    881881
     882        /**
     883         * @ticket 38632
     884         */
     885        public function test_update_item_empty_locale() {
     886                $user_id = $this->factory->user->create( array( 'user_login' => 'test_json_user', 'user_email' => 'testjson@example.com', 'locale' => 'de_DE' ) );
     887                $this->allow_user_to_manage_multisite();
     888                wp_set_current_user( self::$user );
     889
     890                $request = new WP_REST_Request( 'PUT', '/wp/v2/users/' . $user_id );
     891                $request->set_param( 'locale', '' );
     892                $response = $this->server->dispatch( $request );
     893                $this->check_add_edit_user_response( $response, true );
     894
     895                $data = $response->get_data();
     896                $this->assertEquals( get_locale(), $data['locale'] );
     897                $user = get_userdata( $user_id );
     898                $this->assertEquals( '', $user->locale );
     899        }
     900
    882901        public function test_update_item_username_attempt() {
    883902                $user1 = $this->factory->user->create( array( 'user_login' => 'test_json_user', 'user_email' => 'testjson@example.com' ) );
    884903                $user2 = $this->factory->user->create( array( 'user_login' => 'test_json_user2', 'user_email' => 'testjson2@example.com' ) );