Automattic\WooCommerce\Internal\RestApi\Routes\V4\Settings\Emails\Schema

EmailsSettingsSchema::validate_and_sanitize_settingspublicWC 1.0

Validate and sanitize email settings.

Method of the class: EmailsSettingsSchema{}

Returns

Array|WP_Error. Validated settings or error.

Usage

$EmailsSettingsSchema = new EmailsSettingsSchema();
$EmailsSettingsSchema->validate_and_sanitize_settings( $email, $values );
$email(WC_Email) (required)
Email instance.
$values(array) (required)
Values to validate and sanitize.

EmailsSettingsSchema::validate_and_sanitize_settings() code WC 10.8.1

public function validate_and_sanitize_settings( WC_Email $email, array $values ) {
	$email->init_form_fields();
	$validated = array();

	foreach ( $values as $field_id => $value ) {
		// Only allow valid form fields.
		if ( ! isset( $email->form_fields[ $field_id ] ) ) {
			continue;
		}

		$field      = $email->form_fields[ $field_id ];
		$field_type = $field['type'] ?? 'text';

		// Unwrap personalization tags if the field supports them to make sure we don't strip them in the sanitization process.
		if ( in_array( $field_id, self::FIELDS_SUPPORTING_PERSONALIZATION_TAGS, true ) ) {
			$value = $this->unwrap_woocommerce_tags( $value );
		}

		// Sanitize by type.
		$sanitized = $this->sanitize_field_value( $field_type, $value );

		// Sanitize Personalization tags. Wrap them in HTML comments for the email editor.
		if ( in_array( $field_id, self::FIELDS_SUPPORTING_PERSONALIZATION_TAGS, true ) ) {
			$sanitized = $this->wrap_woocommerce_tags( $sanitized );
		}

		// Validate.
		$validation = $this->validate_field_value( $field_id, $sanitized, $field );
		if ( is_wp_error( $validation ) ) {
			return $validation;
		}

		$validated[ $field_id ] = $sanitized;
	}

	/**
	 * Filters the validated settings after validation and sanitization.
	 *
	 * @param array $validated Validated settings.
	 * @param WC_Email $email Email instance.
	 * @param array $values Values to validate and sanitize.
	 * @return array Validated settings.
	 * @since 10.6.0
	 */
	$validated = apply_filters( 'woocommerce_emails_settings_schema_validate_and_sanitize_settings', $validated, $email, $values );
	if ( is_wp_error( $validated ) ) {
		return $validated;
	}

	if ( ! is_array( $validated ) ) {
		return new WP_Error(
			'rest_invalid_filter_result',
			__( 'Invalid result from filter.', 'woocommerce' ),
			array( 'status' => 500 )
		);
	}

	return $validated;
}