Automattic\WooCommerce\Internal\Admin\Settings

SettingsUISchema::canonicalize_typed_visibility_values │ private static │ WC 1.0

Canonicalize visibility values with their controller field type.

Method of the class: SettingsUISchema{}

No Hooks.

Returns

null. Nothing (null).

Usage

$result = SettingsUISchema::canonicalize_typed_visibility_values( $schema, $controller_types, $converted_fields ): void;
$schema(array) (required)
Schema being canonicalized.
$controller_types(array<string,string>) (required)
Field types keyed by field id.
$converted_fields(string[]) (required)
Affected field ids.

SettingsUISchema::canonicalize_typed_visibility_values() code WC 11.2.1

private static function canonicalize_typed_visibility_values( array &$schema, array $controller_types, array &$converted_fields ): void {
	foreach ( $schema['groups'] as &$group ) {
		if ( ! is_array( $group ) || ! isset( $group['fields'] ) || ! is_array( $group['fields'] ) ) {
			continue;
		}

		foreach ( $group['fields'] as &$field ) {
			if ( ! is_array( $field ) || ! isset( $field['id'] ) || ! is_string( $field['id'] ) ) {
				continue;
			}

			$visibility = $field['visibility'] ?? null;
			if ( ! is_array( $visibility ) || ! array_key_exists( 'value', $visibility ) ) {
				continue;
			}

			$controller = $visibility['controller'] ?? null;
			if ( ! is_string( $controller ) ) {
				continue;
			}

			$type = $controller_types[ $controller ] ?? null;
			if ( ! is_string( $type ) || ! in_array( $type, self::TYPED_VALUE_FIELD_TYPES, true ) ) {
				continue;
			}

			$original  = $visibility['value'];
			$canonical = self::canonicalize_typed_visibility_value( $original, $type, $controller );
			if ( $original !== $canonical ) {
				$field['visibility']['value'] = $canonical;
				$converted_fields[]           = $field['id'];
			}
		}
		unset( $field );
	}
	unset( $group );
}