Automattic\WooCommerce\Internal\Admin\Settings

SettingsUISchema::assert_field_save │ private static │ WC 1.0

Assert field save metadata.

Method of the class: SettingsUISchema{}

No Hooks.

Returns

null. Nothing (null).

Usage

$result = SettingsUISchema::assert_field_save( $field ): void;
$field(array) (required)
Field definition.

SettingsUISchema::assert_field_save() code WC 11.2.1

private static function assert_field_save( array $field ): void {
	$save = $field['save'] ?? null;
	if ( null !== $save && ! is_array( $save ) ) {
		throw self::invalid_schema( sprintf( 'Field "%s" save metadata must be an array.', $field['id'] ) );
	}

	$adapter = self::get_field_save_adapter( $field );
	if ( ! is_string( $adapter ) || ! in_array( $adapter, array( 'form_post', 'none' ), true ) ) {
		throw self::invalid_schema( sprintf( 'Field "%s" save adapter must be "form_post" or "none".', $field['id'] ) );
	}

	if ( is_array( $save ) && array_key_exists( 'name', $save ) ) {
		self::assert_non_empty_string( $save['name'], sprintf( 'Field "%s" save name must be a non-empty string.', $field['id'] ) );
	}

	if ( 'form_post' === $adapter ) {
		$name = is_array( $save ) && array_key_exists( 'name', $save ) ? $save['name'] : $field['id'];
		if ( ! self::is_supported_form_post_name( $name, 'array' === $field['type'] ) ) {
			throw self::invalid_schema( sprintf( 'Field "%s" save name "%s" is not a supported form-post field name.', $field['id'], $name ) );
		}
	}

	if ( is_array( $save ) && array_key_exists( 'initialValue', $save ) ) {
		if ( ! self::is_form_value( $save['initialValue'] ) ) {
			throw self::invalid_schema( sprintf( 'Field "%s" save.initialValue must be a string or string list.', $field['id'] ) );
		}

		if ( ! self::is_form_value_for_field( $save['initialValue'], $field ) ) {
			throw self::invalid_schema( sprintf( 'Field "%s" save.initialValue cannot be replayed safely through classic form-post semantics.', $field['id'] ) );
		}
	}

	if ( 'info' === $field['type'] && 'none' !== $adapter ) {
		throw self::invalid_schema( sprintf( 'Field "%s" of type "info" must use the "none" save adapter.', $field['id'] ) );
	}
}