WordPress Version: 7.1
/**
* Validates a number value based on a schema.
*
* @since 5.7.0
*
* @param mixed $value The value to validate.
* @param array $args Schema array to use for validation.
* @param string $param The parameter name, used in error messages.
* @return true|WP_Error
*/
function rest_validate_number_value_from_schema($value, $args, $param)
{
if (!is_numeric($value)) {
return new WP_Error(
'rest_invalid_type',
/* translators: 1: Parameter, 2: Type name. */
sprintf(__('%1$s is not of type %2$s.'), $param, $args['type']),
array('param' => $param)
);
}
if (isset($args['multipleOf']) && fmod($value, $args['multipleOf']) !== 0.0) {
return new WP_Error(
'rest_invalid_multiple',
/* translators: 1: Parameter, 2: Multiplier. */
sprintf(__('%1$s must be a multiple of %2$s.'), $param, $args['multipleOf'])
);
}
if (isset($args['minimum']) && !isset($args['maximum'])) {
if (!empty($args['exclusiveMinimum']) && $value <= $args['minimum']) {
return new WP_Error(
'rest_out_of_bounds',
/* translators: 1: Parameter, 2: Minimum number. */
sprintf(__('%1$s must be greater than %2$d'), $param, $args['minimum'])
);
}
if (empty($args['exclusiveMinimum']) && $value < $args['minimum']) {
return new WP_Error(
'rest_out_of_bounds',
/* translators: 1: Parameter, 2: Minimum number. */
sprintf(__('%1$s must be greater than or equal to %2$d'), $param, $args['minimum'])
);
}
}
if (isset($args['maximum']) && !isset($args['minimum'])) {
if (!empty($args['exclusiveMaximum']) && $value >= $args['maximum']) {
return new WP_Error(
'rest_out_of_bounds',
/* translators: 1: Parameter, 2: Maximum number. */
sprintf(__('%1$s must be less than %2$d'), $param, $args['maximum'])
);
}
if (empty($args['exclusiveMaximum']) && $value > $args['maximum']) {
return new WP_Error(
'rest_out_of_bounds',
/* translators: 1: Parameter, 2: Maximum number. */
sprintf(__('%1$s must be less than or equal to %2$d'), $param, $args['maximum'])
);
}
}
if (isset($args['minimum'], $args['maximum'])) {
if (!empty($args['exclusiveMinimum']) && !empty($args['exclusiveMaximum'])) {
if ($value >= $args['maximum'] || $value <= $args['minimum']) {
return new WP_Error('rest_out_of_bounds', sprintf(
/* translators: 1: Parameter, 2: Minimum number, 3: Maximum number. */
__('%1$s must be between %2$d (exclusive) and %3$d (exclusive)'),
$param,
$args['minimum'],
$args['maximum']
));
}
}
if (!empty($args['exclusiveMinimum']) && empty($args['exclusiveMaximum'])) {
if ($value > $args['maximum'] || $value <= $args['minimum']) {
return new WP_Error('rest_out_of_bounds', sprintf(
/* translators: 1: Parameter, 2: Minimum number, 3: Maximum number. */
__('%1$s must be between %2$d (exclusive) and %3$d (inclusive)'),
$param,
$args['minimum'],
$args['maximum']
));
}
}
if (!empty($args['exclusiveMaximum']) && empty($args['exclusiveMinimum'])) {
if ($value >= $args['maximum'] || $value < $args['minimum']) {
return new WP_Error('rest_out_of_bounds', sprintf(
/* translators: 1: Parameter, 2: Minimum number, 3: Maximum number. */
__('%1$s must be between %2$d (inclusive) and %3$d (exclusive)'),
$param,
$args['minimum'],
$args['maximum']
));
}
}
if (empty($args['exclusiveMinimum']) && empty($args['exclusiveMaximum'])) {
if ($value > $args['maximum'] || $value < $args['minimum']) {
return new WP_Error('rest_out_of_bounds', sprintf(
/* translators: 1: Parameter, 2: Minimum number, 3: Maximum number. */
__('%1$s must be between %2$d (inclusive) and %3$d (inclusive)'),
$param,
$args['minimum'],
$args['maximum']
));
}
}
}
return true;
}