HEX
Server: Apache/2.4.68 (Debian)
System: Linux as-cs-widget-demo-us-central1 6.1.0-44-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.164-1 (2026-03-09) x86_64
User: root (0)
PHP: 8.2.32
Disabled: NONE
Upload Files
File: /var/www/kevin-demo/wp-content/plugins/wpforms-sendinblue/src/Provider/CustomFields/FieldMapper.php
<?php

namespace WPFormsSendinblue\Provider\CustomFields;

use WPFormsSendinblue\Api\Exceptions\RequiredArgumentMissingException;

/**
 * Class FieldMapper.
 *
 * @since 1.0.0
 */
class FieldMapper {

	/**
	 * List of fields.
	 *
	 * @since 1.0.0
	 *
	 * @var array
	 */
	private $fields;

	/**
	 * Form data.
	 *
	 * @since 1.0.0
	 *
	 * @var array
	 */
	private $form_data;

	/**
	 * Connection data.
	 *
	 * @since 1.0.0
	 *
	 * @var array
	 */
	private $connection_data;

	/**
	 * Entry ID.
	 *
	 * @var int
	 */
	private $entry_id;

	/**
	 * List of custom fields if key => value format.
	 *
	 * @since 1.0.0
	 *
	 * @var array
	 */
	private $custom_fields = [];

	/**
	 * FieldMapper constructor.
	 *
	 * @since 1.0.0
	 *
	 * @param array $fields          Array of form fields.
	 * @param array $form_data       Form data and settings.
	 * @param array $connection_data Connection data.
	 * @param int   $entry_id        ID of a saved entry.
	 */
	public function __construct( $fields, $form_data, $connection_data, $entry_id ) {

		$this->fields          = $fields;
		$this->form_data       = $form_data;
		$this->connection_data = $connection_data;
		$this->entry_id        = $entry_id;
	}

	/**
	 * Get required field value.
	 *
	 * @since 1.0.0
	 *
	 * @param string $name Field name.
	 * @param string $key  Field key.
	 *
	 * @return string
	 *
	 * @throws RequiredArgumentMissingException Required argument is missing.
	 */
	public function get_required_field_value( $name, $key ) {

		if ( ! isset( $this->connection_data['fields_required'][ $name ][ $key ] ) ) {
			throw new RequiredArgumentMissingException( esc_html( $name ) );
		}

		return (string) $this->connection_data['fields_required'][ $name ][ $key ];
	}

	/**
	 * Get NOT required field value.
	 *
	 * @since 1.0.0
	 *
	 * @param string $name Field name.
	 * @param string $key  Field key.
	 *
	 * @return string
	 */
	public function get_not_required_field_value( $name, $key ) {

		if ( ! isset( $this->connection_data['fields_required'][ $name ][ $key ] ) ) {
			return '';
		}

		return (string) $this->connection_data['fields_required'][ $name ][ $key ];
	}

	/**
	 * Get field value by field ID.
	 *
	 * @since 1.0.0
	 *
	 * @param int $field_id Field ID.
	 *
	 * @return string
	 */
	public function get_field_value_by_id( $field_id ) {

		return isset( $this->form_data['fields'][ $field_id ] ) ? (string) $this->fields[ $field_id ]['value'] : '';
	}

	/**
	 * Get custom field value.
	 *
	 * @since 1.0.0
	 *
	 * @param string $name Field name.
	 *
	 * @return string
	 */
	public function get_custom_field_value( $name ) {

		$custom_fields = $this->get_custom_fields();

		return isset( $custom_fields[ $name ] ) ? $custom_fields[ $name ] : '';
	}

	/**
	 * Get custom field formatted to Sendinblue attributes.
	 *
	 * @since 1.0.0
	 *
	 * @param string $field_id  Field ID.
	 * @param array  $attribute Attribute data.
	 *
	 * @return string
	 */
	public function get_formatted_field_value_by_id( $field_id, $attribute ) {

		$field_id_parts = explode( '.', $field_id );
		$field_id       = $field_id_parts[0];
		$field_key      = ! empty( $field_id_parts[1] ) ? $field_id_parts[1] : '';

		if ( ! isset( $this->fields[ $field_id ] ) ) {
			return '';
		}

		$type = ! empty( $this->form_data['fields'][ $field_id ]['type'] )
			? $this->form_data['fields'][ $field_id ]['type']
			: 'text';

		$class = 'WPFormsSendinblue\Provider\CustomFields\\' . $this->snake_to_camel( $type ) . 'Field';
		$class = class_exists( $class ) ? $class : DefaultField::class;

		$class = new $class(
			$this->fields[ $field_id ],
			$this->form_data['fields'][ $field_id ],
			$attribute,
			$field_key
		);

		return $class->value();
	}

	/**
	 * Convert snake case to camel case.
	 *
	 * @since 1.0.0
	 *
	 * @param string $string String in snake case.
	 *
	 * @return string
	 */
	private function snake_to_camel( $string ) {

		return str_replace( ' ', '', ucwords( str_replace( '_', ' ', $string ) ) );
	}

	/**
	 * Convert custom fields in key => value format.
	 *
	 * @since 1.0.0
	 *
	 * @return array
	 */
	private function get_custom_fields() {

		if ( ! empty( $this->custom_fields ) ) {
			return $this->custom_fields;
		}

		if ( empty( $this->connection_data['fields_meta'] ) ) {
			return [];
		}

		$this->custom_fields = wp_list_pluck( $this->connection_data['fields_meta'], 'field_id', 'name' );

		return $this->custom_fields;
	}

	/**
	 * Get current entry ID.
	 *
	 * @since 1.0.0
	 *
	 * @return int
	 */
	public function get_entry_id() {

		return $this->entry_id;
	}

	/**
	 * Get some information from form data.
	 *
	 * @since 1.0.0
	 *
	 * @param string $field_key    Field key name.
	 * @param string $subfield_key Subfield key name.
	 *
	 * @return mixed
	 */
	public function get_form_data_value( $field_key, $subfield_key = '' ) {

		if ( empty( $subfield_key ) ) {
			return isset( $this->form_data[ $field_key ] ) ? $this->form_data[ $field_key ] : '';
		}

		return isset( $this->form_data[ $field_key ][ $subfield_key ] ) ? $this->form_data[ $field_key ][ $subfield_key ] : '';
	}
}