Changeset 38968
- Timestamp:
- 10/26/2016 09:36:29 PM (9 years ago)
- Location:
- trunk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php
r38911 r38968 112 112 113 113 // Make sure a search string is set in case the orderby is set to 'relevance'. 114 if ( ! empty( $request['orderby'] ) && 'relevance' === $request['orderby'] && empty( $request['search'] ) && empty( $request['filter']['s'] )) {114 if ( ! empty( $request['orderby'] ) && 'relevance' === $request['orderby'] && empty( $request['search'] ) ) { 115 115 return new WP_Error( 'rest_no_search_term_defined', __( 'You need to define a search term to order by relevance.' ), array( 'status' => 400 ) ); 116 116 } … … 162 162 } 163 163 164 if ( isset( $registered['filter'] ) && is_array( $request['filter'] ) ) {165 $args = array_merge( $args, $request['filter'] );166 unset( $args['filter'] );167 }168 169 164 // Ensure our per_page parameter overrides any provided posts_per_page filter. 170 165 if ( isset( $registered['per_page'] ) ) { … … 270 265 } 271 266 272 $max_pages = ceil( $total_posts / (int) $ query_args['posts_per_page'] );267 $max_pages = ceil( $total_posts / (int) $posts_query->query_vars['posts_per_page'] ); 273 268 274 269 $response = rest_ensure_response( $posts ); … … 277 272 278 273 $request_params = $request->get_query_params(); 279 if ( ! empty( $request_params['filter'] ) ) {280 // Normalize the pagination params.281 unset( $request_params['filter']['posts_per_page'], $request_params['filter']['paged'] );282 }283 274 $base = add_query_arg( $request_params, rest_url( sprintf( '%s/%s', $this->namespace, $this->rest_base ) ) ); 284 275 … … 1911 1902 'validate_callback' => array( $this, 'validate_user_can_query_private_statuses' ), 1912 1903 ); 1913 $params['filter'] = array(1914 'description' => __( 'Use WP Query arguments to modify the response; private query vars require appropriate authorization.' ),1915 );1916 1904 1917 1905 $taxonomies = wp_list_filter( get_object_taxonomies( $this->post_type, 'objects' ), array( 'show_in_rest' => true ) ); -
trunk/tests/phpunit/tests/rest-api/rest-attachments-controller.php
r38917 r38968 125 125 'context', 126 126 'exclude', 127 'filter',128 127 'include', 129 128 'media_type', -
trunk/tests/phpunit/tests/rest-api/rest-pages-controller.php
r38832 r38968 60 60 'context', 61 61 'exclude', 62 'filter',63 62 'include', 64 63 'menu_order', … … 180 179 $draft_id = $this->factory->post->create( array( 'post_status' => 'draft', 'post_type' => 'page' ) ); 181 180 $request = new WP_REST_Request( 'GET', '/wp/v2/pages' ); 182 $request->set_param( 'filter', array( 'post_status' => 'draft' ) ); 183 $response = $this->server->dispatch( $request ); 184 $data = $response->get_data(); 185 $this->assertCount( 1, $data ); 186 $this->assertEquals( $page_id, $data[0]['id'] ); 181 $request->set_param( 'status', 'draft' ); 182 $response = $this->server->dispatch( $request ); 183 $this->assertErrorResponse( 'rest_invalid_param', $response, 400 ); 184 187 185 // But they are accessible to authorized users 188 186 wp_set_current_user( $this->editor_id ); -
trunk/tests/phpunit/tests/rest-api/rest-posts-controller.php
r38911 r38968 68 68 'context', 69 69 'exclude', 70 'filter',71 70 'include', 72 71 'offset', … … 98 97 $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); 99 98 $request->set_query_params( array( 100 'filter' => array( 'year' => 2008 ), 101 ) ); 102 $response = $this->server->dispatch( $request ); 103 $this->assertEquals( array(), $response->get_data() ); 99 'author' => REST_TESTS_IMPOSSIBLY_HIGH_NUMBER, 100 ) ); 101 $response = $this->server->dispatch( $request ); 102 103 $this->assertEmpty( $response->get_data() ); 104 104 $this->assertEquals( 200, $response->get_status() ); 105 105 } … … 310 310 // Permit stickies 311 311 $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); 312 $request->set_param( ' filter', array( 'ignore_sticky_posts' => false ));312 $request->set_param( 'ignore_sticky_posts', false ); 313 313 $response = $this->server->dispatch( $request ); 314 314 $data = $response->get_data(); … … 577 577 } 578 578 579 public function test_get_items_private_ filter_query_var() {579 public function test_get_items_private_status_query_var() { 580 580 // Private query vars inaccessible to unauthorized users 581 581 wp_set_current_user( 0 ); 582 582 $draft_id = $this->factory->post->create( array( 'post_status' => 'draft' ) ); 583 583 $request = new WP_REST_Request( 'GET', '/wp/v2/posts' ); 584 $request->set_param( 'filter', array( 'post_status' => 'draft' ) ); 585 $response = $this->server->dispatch( $request ); 586 $data = $response->get_data(); 587 $this->assertCount( 1, $data ); 588 $this->assertEquals( $this->post_id, $data[0]['id'] ); 584 $request->set_param( 'status', 'draft' ); 585 $response = $this->server->dispatch( $request ); 586 $this->assertErrorResponse( 'rest_invalid_param', $response, 400 ); 587 589 588 // But they are accessible to authorized users 590 589 wp_set_current_user( $this->editor_id ); … … 600 599 $response = $this->server->dispatch( $request ); 601 600 $this->assertErrorResponse( 'rest_invalid_param', $response, 400 ); 602 }603 604 public function test_get_items_invalid_posts_per_page_ignored() {605 // This test ensures that filter[posts_per_page] is ignored, and that -1606 // cannot be used to sidestep per_page's valid range to retrieve all posts607 for ( $i = 0; $i < 20; $i++ ) {608 $this->factory->post->create( array( 'post_status' => 'publish' ) );609 }610 $request = new WP_REST_Request( 'GET', '/wp/v2/posts' );611 $request->set_query_params( array( 'filter' => array( 'posts_per_page' => -1 ) ) );612 $response = $this->server->dispatch( $request );613 $this->assertCount( 10, $response->get_data() );614 601 } 615 602
Note: See TracChangeset
for help on using the changeset viewer.