From bed5797cf614036821ccfe1c3be3360857cdde6d Mon Sep 17 00:00:00 2001 From: TimothyBlynJacobs Date: Sun, 27 Sep 2020 19:03:05 +0000 Subject: [PATCH] REST API: Support the multipleOf JSON Schema keyword. Props yakimun. Fixes #51022. Built from https://develop.svn.wordpress.org/trunk@49063 git-svn-id: http://core.svn.wordpress.org/trunk@48825 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-includes/rest-api.php | 15 ++++++++++++--- wp-includes/version.php | 2 +- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/wp-includes/rest-api.php b/wp-includes/rest-api.php index 7b615e5a5f..99cdd3e749 100644 --- a/wp-includes/rest-api.php +++ b/wp-includes/rest-api.php @@ -1552,6 +1552,7 @@ function rest_stabilize_value( $value ) { * Support the "minItems", "maxItems" and "uniqueItems" keywords for arrays. * Validate required properties. * @since 5.6.0 Support the "minProperties" and "maxProperties" keywords for objects. + * Support the "multipleOf" keyword for numbers and integers. * * @param mixed $value The value to validate. * @param array $args Schema array to use for validation. @@ -1691,9 +1692,16 @@ function rest_validate_value_from_schema( $value, $args, $param = '' ) { } } - if ( in_array( $args['type'], array( 'integer', 'number' ), true ) && ! is_numeric( $value ) ) { - /* translators: 1: Parameter, 2: Type name. */ - return new WP_Error( 'rest_invalid_param', sprintf( __( '%1$s is not of type %2$s.' ), $param, $args['type'] ) ); + if ( in_array( $args['type'], array( 'integer', 'number' ), true ) ) { + if ( ! is_numeric( $value ) ) { + /* translators: 1: Parameter, 2: Type name. */ + return new WP_Error( 'rest_invalid_param', sprintf( __( '%1$s is not of type %2$s.' ), $param, $args['type'] ) ); + } + + if ( isset( $args['multipleOf'] ) && fmod( $value, $args['multipleOf'] ) !== 0.0 ) { + /* translators: 1: Parameter, 2: Multiplier. */ + return new WP_Error( 'rest_invalid_param', sprintf( __( '%1$s must be a multiple of %2$s.' ), $param, $args['multipleOf'] ) ); + } } if ( 'integer' === $args['type'] && ! rest_is_integer( $value ) ) { @@ -2298,6 +2306,7 @@ function rest_get_endpoint_args_for_schema( $schema, $method = WP_REST_Server::C 'maximum', 'exclusiveMinimum', 'exclusiveMaximum', + 'multipleOf', 'minLength', 'maxLength', 'pattern', diff --git a/wp-includes/version.php b/wp-includes/version.php index 9f85ab52a5..5ba50e266c 100644 --- a/wp-includes/version.php +++ b/wp-includes/version.php @@ -13,7 +13,7 @@ * * @global string $wp_version */ -$wp_version = '5.6-alpha-49062'; +$wp_version = '5.6-alpha-49063'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.