WordPress.org

Make WordPress Core

Ticket #40838: 40838.1.patch

File 40838.1.patch, 2.8 KB (added by vagios, 2 years ago)
  • src/wp-includes/rest-api/class-wp-rest-request.php

     
    399399        /**
    400400         * Sets a parameter on the request.
    401401         *
     402         * If the given parameter key exists in any parameter type an update will take place,
     403         * otherwise a new param will be created in the first parameter type (respecting
     404         * get_parameter_order()).
     405         *
    402406         * @since 4.4.0
    403407         *
    404408         * @param string $key   Parameter name.
     
    405409         * @param mixed  $value Parameter value.
    406410         */
    407411        public function set_param( $key, $value ) {
    408                 $order                             = $this->get_parameter_order();
    409                 $this->params[ $order[0] ][ $key ] = $value;
     412                $order          = $this->get_parameter_order();
     413                $found_key      = false;
     414
     415                foreach ( $order as $type ) {
     416                        if ( isset( $this->params[ $type ][ $key ] ) ) {
     417                                $this->params[ $type ][ $key ] = $value;
     418                                $found_key = true;
     419                        }
     420                }
     421
     422                if ( !$found_key ) {
     423                        $this->params[ $order[0] ][ $key ] = $value;
     424                }
    410425        }
    411426
    412427        /**
  • tests/phpunit/tests/rest-api/rest-request.php

     
    657657                        $request->get_json_params()
    658658                );
    659659        }
     660
     661        public function test_set_param_updates_param_in_json_and_query() {
     662                $request = new WP_REST_Request();
     663                $request->add_header( 'content-type', 'application/json' );
     664                $request->set_method( 'POST' );
     665                $request->set_body( wp_json_encode( array(
     666                        'param' => 'value_body',
     667                ) ) );
     668                $request->set_query_params( array(
     669                        'param' => 'value_query',
     670                ) );
     671                $request->set_param( 'param', 'new_value' );
     672
     673                $this->assertEquals( 'new_value', $request->get_param( 'param' ) );
     674                $this->assertEquals( array( 'param' => 'new_value' ), $request->get_json_params() );
     675                $this->assertEquals( array( 'param' => 'new_value' ), $request->get_query_params() );
     676        }
     677
     678        public function test_set_param_updates_param_if_already_exists_in_query() {
     679                $request = new WP_REST_Request();
     680                $request->add_header( 'content-type', 'application/json' );
     681                $request->set_method( 'POST' );
     682                $request->set_body( wp_json_encode( array(
     683                        'param_body' => 'value_body',
     684                ) ) );
     685                $request->set_query_params( array(
     686                        'param_query' => 'value_query',
     687                ) );
     688                $request->set_param( 'param_query', 'new_value' );
     689
     690                $this->assertEquals( 'new_value', $request->get_param( 'param_query' ) );
     691                $this->assertEquals( array( 'param_body' => 'value_body' ), $request->get_json_params() );
     692                $this->assertEquals( array( 'param_query' => 'new_value' ), $request->get_query_params() );
     693        }
    660694}