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 ] : '';
}
}