Automattic\WooCommerce\Internal\Admin\Settings

SettingsUISchema::preserve_converted_form_values │ private static │ WC 1.0

Preserve valid pre-conversion form values for changed fields.

Method of the class: SettingsUISchema{}

No Hooks.

Returns

null. Nothing (null).

Usage

$result = SettingsUISchema::preserve_converted_form_values( $schema, $original_values, $fields_requiring_preservation ): void;
$schema(array) (required)
Canonical schema.
$original_values(array) (required)
Original values keyed by field id.
$fields_requiring_preservation(array<string, bool>) (required)
Fields changed by typed canonicalization.

SettingsUISchema::preserve_converted_form_values() code WC 11.2.1

private static function preserve_converted_form_values( array &$schema, array $original_values, array $fields_requiring_preservation ): void {
	$page_save_adapter = isset( $schema['save'] ) && is_array( $schema['save'] ) ? ( $schema['save']['adapter'] ?? 'form_post' ) : 'form_post';
	if ( 'form_post' !== $page_save_adapter ) {
		return;
	}

	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'] ) ||
				! isset( $fields_requiring_preservation[ $field['id'] ] ) ||
				! array_key_exists( $field['id'], $original_values )
			) {
				continue;
			}

			$original = $original_values[ $field['id'] ];
			if ( ( $field['value'] ?? null ) === $original || 'form_post' !== self::get_field_save_adapter( $field ) ) {
				continue;
			}

			if ( isset( $field['save'] ) && is_array( $field['save'] ) && array_key_exists( 'initialValue', $field['save'] ) ) {
				continue;
			}

			$form_value = 'array' === ( $field['type'] ?? null ) && '' === $original ? array() : $original;
			if ( ! self::is_form_value_for_field( $form_value, $field ) ) {
				throw self::invalid_schema( sprintf( 'Field "%s" must define save.initialValue because its original value cannot be replayed safely through classic form-post semantics.', $field['id'] ) );
			}

			if ( ! isset( $field['save'] ) || ! is_array( $field['save'] ) ) {
				$field['save'] = array( 'adapter' => 'form_post' );
			}
			$field['save']['initialValue'] = $form_value;
		}
		unset( $field );
	}
	unset( $group );
}