REST API: Allow parameters defined as `array` to be sent as CSVs.

This allows parameters that are often handled as CSVs to be properly parsed.

Fixes #38586.



git-svn-id: https://develop.svn.wordpress.org/trunk@39048 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Gary Pendergast 2016-10-31 05:44:56 +00:00
parent 4f9bc7535d
commit c9618c09ad
2 changed files with 13 additions and 1 deletions

View File

@ -996,7 +996,7 @@ function rest_get_avatar_sizes() {
function rest_validate_value_from_schema( $value, $args, $param = '' ) {
if ( 'array' === $args['type'] ) {
if ( ! is_array( $value ) ) {
return new WP_Error( 'rest_invalid_param', sprintf( /* translators: 1: parameter, 2: type name */ __( '%1$s is not of type %2$s.' ), $param, 'array' ) );
$value = preg_split( '/[\s,]+/', $value );
}
foreach ( $value as $index => $v ) {
$is_valid = rest_validate_value_from_schema( $v, $args['items'], $param . '[' . $index . ']' );

View File

@ -103,4 +103,16 @@ class WP_Test_REST_Schema_Validation extends WP_UnitTestCase {
$this->assertTrue( rest_validate_value_from_schema( array( 1 ), $schema ) );
$this->assertWPError( rest_validate_value_from_schema( array( true ), $schema ) );
}
public function test_type_array_as_csv() {
$schema = array(
'type' => 'array',
'items' => array(
'type' => 'number',
),
);
$this->assertTrue( rest_validate_value_from_schema( '1', $schema ) );
$this->assertTrue( rest_validate_value_from_schema( '1,2,3', $schema ) );
$this->assertWPError( rest_validate_value_from_schema( 'lol', $schema ) );
}
}