Automattic\WooCommerce\Internal\Admin\Settings
SettingsUISchema::canonicalize_numeric_validation
Canonicalize numeric validation and mirror it to legacy attributes.
Method of the class: SettingsUISchema{}
No Hooks.
Returns
bool. Whether provider-supplied metadata required compatibility conversion.
Usage
$result = SettingsUISchema::canonicalize_numeric_validation( $field, $integer_only ): bool;
- $field(array) (required)
- Field definition.
- $integer_only(true|false) (required)
- Whether bounds must be integers.
SettingsUISchema::canonicalize_numeric_validation() SettingsUISchema::canonicalize numeric validation code WC 11.2.1
private static function canonicalize_numeric_validation( array &$field, bool $integer_only ): bool {
$attributes = $field['customAttributes'] ?? array();
$validation = $field['validation'] ?? array();
$converted = false;
if ( ! is_array( $attributes ) || ! is_array( $validation ) ) {
return false;
}
foreach ( array( 'min', 'max' ) as $bound ) {
$has_attribute = array_key_exists( $bound, $attributes );
$has_validation = array_key_exists( $bound, $validation );
$empty_validation = $has_validation && is_string( $validation[ $bound ] ) && '' === trim( $validation[ $bound ] );
if ( $has_attribute && is_string( $attributes[ $bound ] ) && '' === trim( $attributes[ $bound ] ) ) {
unset( $attributes[ $bound ] );
$has_attribute = false;
}
if ( $empty_validation ) {
unset( $validation[ $bound ] );
$has_validation = false;
}
if ( ! $has_attribute && ! $has_validation ) {
$converted = $converted || $empty_validation;
continue;
}
$original_attribute = $has_attribute ? $attributes[ $bound ] : null;
$original_validation = $has_validation ? $validation[ $bound ] : null;
$attribute_value = $has_attribute ? self::canonicalize_number( $original_attribute, $integer_only, $field['id'], $bound ) : null;
$validation_value = $has_validation ? self::canonicalize_number( $original_validation, $integer_only, $field['id'], $bound ) : null;
if ( $has_attribute && $has_validation && ! self::numeric_values_agree( $attribute_value, $validation_value ) ) {
throw self::invalid_schema( sprintf( 'Field "%1$s" %2$s disagrees between customAttributes and validation.', $field['id'], $bound ) );
}
$canonical = $has_validation ? $validation_value : $attribute_value;
$validation[ $bound ] = $canonical;
$attributes[ $bound ] = $canonical;
$converted = $converted ||
$empty_validation ||
( $has_attribute && ! $has_validation ) ||
( $has_attribute && $has_validation && $original_attribute !== $attribute_value ) ||
( $has_validation && $original_validation !== $validation_value );
}
if ( ! empty( $validation ) ) {
$field['validation'] = $validation;
} else {
unset( $field['validation'] );
}
if ( ! empty( $attributes ) ) {
$field['customAttributes'] = $attributes;
} else {
unset( $field['customAttributes'] );
}
return $converted;
}