From f9230a1c4ddf74e470247da3625e550c71617551 Mon Sep 17 00:00:00 2001 From: Ryan McCue Date: Wed, 2 Nov 2016 06:23:12 +0000 Subject: [PATCH] REST API: Add locale to user resource. Props ocean90, joehoyle. Fixes #38528. git-svn-id: https://develop.svn.wordpress.org/trunk@39090 602fd350-edb4-49c9-b593-d223f7449a82 --- .../class-wp-rest-users-controller.php | 14 ++++++++++++++ .../tests/rest-api/rest-users-controller.php | 19 ++++++++++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php index 976fe6c058..f23a6cd49b 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php @@ -696,6 +696,10 @@ class WP_REST_Users_Controller extends WP_REST_Controller { $data['link'] = get_author_posts_url( $user->ID, $user->user_nicename ); } + if ( ! empty( $schema['properties']['locale'] ) ) { + $data['locale'] = get_user_locale( $user ); + } + if ( ! empty( $schema['properties']['nickname'] ) ) { $data['nickname'] = $user->nickname; } @@ -833,6 +837,10 @@ class WP_REST_Users_Controller extends WP_REST_Controller { $prepared_user->user_url = $request['url']; } + if ( isset( $request['locale'] ) && ! empty( $schema['properties']['locale'] ) ) { + $prepared_user->locale = $request['locale']; + } + // setting roles will be handled outside of this function. if ( isset( $request['roles'] ) ) { $prepared_user->role = false; @@ -978,6 +986,12 @@ class WP_REST_Users_Controller extends WP_REST_Controller { 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), + 'locale' => array( + 'description' => __( 'Locale for the resource.' ), + 'type' => 'string', + 'enum' => get_available_languages(), + 'context' => array( 'edit' ), + ), 'nickname' => array( 'description' => __( 'The nickname for the resource.' ), 'type' => 'string', diff --git a/tests/phpunit/tests/rest-api/rest-users-controller.php b/tests/phpunit/tests/rest-api/rest-users-controller.php index 4e42a4b340..eccc8695a8 100644 --- a/tests/phpunit/tests/rest-api/rest-users-controller.php +++ b/tests/phpunit/tests/rest-api/rest-users-controller.php @@ -777,6 +777,7 @@ class WP_Test_REST_Users_Controller extends WP_Test_REST_Controller_Testcase { 'user_login' => 'test_update', 'first_name' => 'Old Name', 'user_url' => 'http://apple.com', + 'locale' => 'en_US', )); $this->allow_user_to_manage_multisite(); wp_set_current_user( self::$user ); @@ -788,6 +789,7 @@ class WP_Test_REST_Users_Controller extends WP_Test_REST_Controller_Testcase { $_POST['username'] = $userdata->user_login; $_POST['first_name'] = 'New Name'; $_POST['url'] = 'http://google.com'; + $_POST['locale'] = 'de_DE'; $request = new WP_REST_Request( 'PUT', sprintf( '/wp/v2/users/%d', $user_id ) ); $request->add_header( 'content-type', 'application/x-www-form-urlencoded' ); @@ -804,6 +806,7 @@ class WP_Test_REST_Users_Controller extends WP_Test_REST_Controller_Testcase { $this->assertEquals( 'http://google.com', $new_data['url'] ); $this->assertEquals( 'http://google.com', $user->user_url ); + $this->assertEquals( 'de_DE', $user->locale ); // Check that we haven't inadvertently changed the user's password, // as per https://core.trac.wordpress.org/ticket/21429 @@ -823,6 +826,18 @@ class WP_Test_REST_Users_Controller extends WP_Test_REST_Controller_Testcase { $this->assertEquals( 'rest_user_invalid_email', $response->as_error()->get_error_code() ); } + public function test_update_item_invalid_locale() { + $user1 = $this->factory->user->create( array( 'user_login' => 'test_json_user', 'user_email' => 'testjson@example.com' ) ); + $this->allow_user_to_manage_multisite(); + wp_set_current_user( self::$user ); + + $request = new WP_REST_Request( 'PUT', '/wp/v2/users/' . $user1 ); + $request->set_param( 'locale', 'klingon' ); + $response = $this->server->dispatch( $request ); + $this->assertInstanceOf( 'WP_Error', $response->as_error() ); + $this->assertEquals( 'rest_invalid_param', $response->as_error()->get_error_code() ); + } + public function test_update_item_username_attempt() { $user1 = $this->factory->user->create( array( 'user_login' => 'test_json_user', 'user_email' => 'testjson@example.com' ) ); $user2 = $this->factory->user->create( array( 'user_login' => 'test_json_user2', 'user_email' => 'testjson2@example.com' ) ); @@ -1139,7 +1154,7 @@ class WP_Test_REST_Users_Controller extends WP_Test_REST_Controller_Testcase { $data = $response->get_data(); $properties = $data['schema']['properties']; - $this->assertEquals( 18, count( $properties ) ); + $this->assertEquals( 19, count( $properties ) ); $this->assertArrayHasKey( 'avatar_urls', $properties ); $this->assertArrayHasKey( 'capabilities', $properties ); $this->assertArrayHasKey( 'description', $properties ); @@ -1149,6 +1164,7 @@ class WP_Test_REST_Users_Controller extends WP_Test_REST_Controller_Testcase { $this->assertArrayHasKey( 'id', $properties ); $this->assertArrayHasKey( 'last_name', $properties ); $this->assertArrayHasKey( 'link', $properties ); + $this->assertArrayHasKey( 'locale', $properties ); $this->assertArrayHasKey( 'meta', $properties ); $this->assertArrayHasKey( 'name', $properties ); $this->assertArrayHasKey( 'nickname', $properties ); @@ -1297,6 +1313,7 @@ class WP_Test_REST_Users_Controller extends WP_Test_REST_Controller_Testcase { $this->assertEquals( date( 'c', strtotime( $user->user_registered ) ), $data['registered_date'] ); $this->assertEquals( $user->user_login, $data['username'] ); $this->assertEquals( $user->roles, $data['roles'] ); + $this->assertEquals( get_user_locale( $user ), $data['locale'] ); } if ( 'edit' !== $context ) {