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