Automattic\WooCommerce\Internal\Admin\Settings

SettingsUISchema::canonicalize_numeric_validation │ private static │ WC 1.0

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() 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;
}