WordPress.org

Make WordPress Core

Ticket #38528: 38528.2.diff

File 38528.2.diff, 4.7 KB (added by joehoyle, 5 years ago)
  • src/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php

     
    696696                        $data['link'] = get_author_posts_url( $user->ID, $user->user_nicename );
    697697                }
    698698
     699                if ( ! empty( $schema['properties']['locale'] ) ) {
     700                        $data['locale'] = get_user_locale( $user );
     701                }
     702
    699703                if ( ! empty( $schema['properties']['nickname'] ) ) {
    700704                        $data['nickname'] = $user->nickname;
    701705                }
     
    833837                        $prepared_user->user_url = $request['url'];
    834838                }
    835839
     840                if ( isset( $request['locale'] ) && ! empty( $schema['properties']['locale'] ) ) {
     841                        $prepared_user->locale = $request['locale'];
     842                }
     843
    836844                // setting roles will be handled outside of this function.
    837845                if ( isset( $request['roles'] ) ) {
    838846                        $prepared_user->role = false;
     
    978986                                        'context'     => array( 'embed', 'view', 'edit' ),
    979987                                        'readonly'    => true,
    980988                                ),
     989                                'locale'    => array(
     990                                        'description' => __( 'Locale for the resource.' ),
     991                                        'type'        => 'string',
     992                                        'enum'        => get_available_languages(),
     993                                        'context'     => array( 'edit' ),
     994                                ),
    981995                                'nickname'    => array(
    982996                                        'description' => __( 'The nickname for the resource.' ),
    983997                                        'type'        => 'string',
  • tests/phpunit/tests/rest-api/rest-users-controller.php

     
    777777                        'user_login' => 'test_update',
    778778                        'first_name' => 'Old Name',
    779779                        'user_url' => 'http://apple.com',
     780                        'locale' => 'en_US',
    780781                ));
    781782                $this->allow_user_to_manage_multisite();
    782783                wp_set_current_user( self::$user );
     
    788789                $_POST['username'] = $userdata->user_login;
    789790                $_POST['first_name'] = 'New Name';
    790791                $_POST['url'] = 'http://google.com';
     792                $_POST['locale'] = 'de_DE';
    791793
    792794                $request = new WP_REST_Request( 'PUT', sprintf( '/wp/v2/users/%d', $user_id ) );
    793795                $request->add_header( 'content-type', 'application/x-www-form-urlencoded' );
     
    804806
    805807                $this->assertEquals( 'http://google.com', $new_data['url'] );
    806808                $this->assertEquals( 'http://google.com', $user->user_url );
     809                $this->assertEquals( 'de_DE', $user->locale );
    807810
    808811                // Check that we haven't inadvertently changed the user's password,
    809812                // as per https://core.trac.wordpress.org/ticket/21429
     
    823826                $this->assertEquals( 'rest_user_invalid_email', $response->as_error()->get_error_code() );
    824827        }
    825828
     829        public function test_update_item_invalid_locale() {
     830                $user1 = $this->factory->user->create( array( 'user_login' => 'test_json_user', 'user_email' => 'testjson@example.com' ) );
     831                $this->allow_user_to_manage_multisite();
     832                wp_set_current_user( self::$user );
     833
     834                $request = new WP_REST_Request( 'PUT', '/wp/v2/users/' . $user1 );
     835                $request->set_param( 'locale', 'klingon' );
     836                $response = $this->server->dispatch( $request );
     837                $this->assertInstanceOf( 'WP_Error', $response->as_error() );
     838                $this->assertEquals( 'rest_invalid_param', $response->as_error()->get_error_code() );
     839        }
     840
    826841        public function test_update_item_username_attempt() {
    827842                $user1 = $this->factory->user->create( array( 'user_login' => 'test_json_user', 'user_email' => 'testjson@example.com' ) );
    828843                $user2 = $this->factory->user->create( array( 'user_login' => 'test_json_user2', 'user_email' => 'testjson2@example.com' ) );
     
    11391154                $data = $response->get_data();
    11401155                $properties = $data['schema']['properties'];
    11411156
    1142                 $this->assertEquals( 18, count( $properties ) );
     1157                $this->assertEquals( 19, count( $properties ) );
    11431158                $this->assertArrayHasKey( 'avatar_urls', $properties );
    11441159                $this->assertArrayHasKey( 'capabilities', $properties );
    11451160                $this->assertArrayHasKey( 'description', $properties );
     
    11491164                $this->assertArrayHasKey( 'id', $properties );
    11501165                $this->assertArrayHasKey( 'last_name', $properties );
    11511166                $this->assertArrayHasKey( 'link', $properties );
     1167                $this->assertArrayHasKey( 'locale', $properties );
    11521168                $this->assertArrayHasKey( 'meta', $properties );
    11531169                $this->assertArrayHasKey( 'name', $properties );
    11541170                $this->assertArrayHasKey( 'nickname', $properties );
     
    12971313                        $this->assertEquals( date( 'c', strtotime( $user->user_registered ) ), $data['registered_date'] );
    12981314                        $this->assertEquals( $user->user_login, $data['username'] );
    12991315                        $this->assertEquals( $user->roles, $data['roles'] );
     1316                        $this->assertEquals( get_user_locale( $user ), $data['locale'] );
    13001317                }
    13011318
    13021319                if ( 'edit' !== $context ) {