Automattic\WooCommerce\Internal\Admin\Settings

SettingsUISchema::canonicalize_field │ private static │ WC 1.0

Canonicalize one field in place.

Method of the class: SettingsUISchema{}

No Hooks.

Returns

bool. Whether the field required compatibility conversion.

Usage

$result = SettingsUISchema::canonicalize_field( $field, $legacy_derived ): bool;
$field(array) (required)
Field definition.
$legacy_derived(true|false) (required)
Whether the schema came from legacy settings definitions.

SettingsUISchema::canonicalize_field() code WC 11.2.1

private static function canonicalize_field( array &$field, bool $legacy_derived ): bool {
	$type = $field['type'] ?? null;
	if ( ! is_string( $type ) ) {
		return false;
	}

	$original_type  = $type;
	$original_value = $field['value'] ?? null;

	$numeric_validation_converted = false;

	if ( $legacy_derived && 'number' === $type && self::should_promote_to_integer( $field ) ) {
		$type          = 'integer';
		$field['type'] = $type;
	}

	if ( array_key_exists( 'value', $field ) ) {
		switch ( $type ) {
			case 'array':
				$field['value'] = self::canonicalize_array_value( $field['value'], $field['id'] );
				break;
			case 'checkbox':
				$field['value'] = self::canonicalize_checkbox_value( $field['value'], $field['id'] );
				break;
			case 'number':
				$field['value'] = self::canonicalize_number( $field['value'], false, $field['id'], 'value' );
				break;
			case 'integer':
				$field['value'] = self::canonicalize_number( $field['value'], true, $field['id'], 'value' );
				break;
			case 'datetime-local':
				$field['value'] = self::canonicalize_datetime( $field['value'], $field['id'] );
				break;
			default:
				if ( in_array( $type, self::SUPPORTED_FIELD_TYPES, true ) && ( null === $field['value'] || is_scalar( $field['value'] ) ) && ! is_string( $field['value'] ) ) {
					$field['value'] = null === $field['value'] ? '' : self::to_canonical_string( $field['value'] );
				}
				break;
		}
	}

	if ( in_array( $type, array( 'number', 'integer' ), true ) ) {
		$numeric_validation_converted = self::canonicalize_numeric_validation( $field, 'integer' === $type );
	}

	return (
		$original_type !== $field['type'] ||
		( array_key_exists( 'value', $field ) && $original_value !== $field['value'] ) ||
		$numeric_validation_converted
	);
}