Automattic\WooCommerce\Internal\Admin\Settings
SettingsUISchema::canonicalize_field
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() 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
);
}