Files
roi-theme/wp-content/plugins/thrive-ultimatum/thrive-dashboard/inc/auto-responder/classes/Connection/Abstract.php
root a22573bf0b Commit inicial - WordPress Análisis de Precios Unitarios
- WordPress core y plugins
- Tema Twenty Twenty-Four configurado
- Plugin allow-unfiltered-html.php simplificado
- .gitignore configurado para excluir wp-config.php y uploads

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-03 21:04:30 -06:00

1389 lines
28 KiB
PHP
Executable File

<?php
/**
* Thrive Themes - https://thrivethemes.com
*
* @package thrive-dashboard
*/
if ( ! defined( 'ABSPATH' ) ) {
exit; // Silence is golden!
}
/**
* Class Thrive_Dash_List_Connection_Abstract
*
* base class for all connections
* acts as a high-level interface for the main functionalities exposed by the system
*/
abstract class Thrive_Dash_List_Connection_Abstract {
/**
* @var array connection details (used for API calls)
*/
protected $_credentials = [];
/**
* @var string internal key for the connection api
*/
protected $_key = null;
/**
* @var mixed
*/
protected $_api;
/**
* error message to be displayed in the editor
*
* @var string
*/
protected $_error = '';
/**
* Transient name for API custom fields
*
* @var string
*/
public $_custom_fields_transient = '';
/**
* Allowed custom fields for APIs that supports them
*
* @var array
*/
protected $_mapped_custom_fields = [];
/**
* Default form fields for APIs
*
* @var array
*/
protected $_default_form_fields = [];
/**
* @param string $key
*/
public function __construct( $key ) {
$this->_key = $key;
$this->_custom_fields_transient = 'api_custom_fields_' . $key;
$this->set_custom_fields_mapping();
$this->set_custom_default_fields_mapping();
}
/**
* If the snake_case version of the function does not exist, attempt to call the camelCase version.
* Can be deleted after we switch everything to snake_case.
*
* @param $method_name
* @param $arguments
*
* @return mixed
*/
public function __call( $method_name, $arguments ) {
$camel_case_method_name = tve_dash_to_camel_case( $method_name );
return method_exists( $this, $camel_case_method_name ) ? call_user_func_array( [
$this,
$camel_case_method_name,
], $arguments ) : null;
}
/**
* Same as above, but for static calls.
* Can be deleted after we switch everything to snake_case.
*
* @param $method_name
* @param $arguments
*
* @return mixed
*/
public static function __callStatic( $method_name, $arguments ) {
$camel_case_method_name = tve_dash_to_camel_case( $method_name );
return method_exists( __CLASS__, $camel_case_method_name ) ? call_user_func_array( [
static::class,
$camel_case_method_name,
], $arguments ) : null;
}
/**
* Can be removed in 2-3 releases
*
* @return String
* @deprecated
*/
public static function getType() {
return static::get_type();
}
/**
* Returns the connection type
*
* @return String
*/
public static function get_type() {
return 'autoresponder';
}
/**
* Can be removed in 2-3 releases
*
* @return mixed
* @deprecated
*/
public static function getEmailMergeTag() {
return static::get_email_merge_tag();
}
/**
* Return the connection email merge tag
*
* @return String
*/
public static function get_email_merge_tag() {
return '[email]';
}
/**
* Called from TTW, do not delete.
*
* @return mixed
* @deprecated
*/
public function getApi() {
return $this->get_api();
}
/**
* get the API Connection code to use in calls
*
* @return mixed
*/
public function get_api() {
if ( ! isset( $this->_api ) ) {
$this->_api = $this->get_api_instance();
}
return $this->_api;
}
/**
* Can be removed in 2-3 releases
*
* @return array
* @deprecated
*/
public function getCredentials() {
return $this->get_credentials();
}
/**
* @return array
*/
public function get_credentials() {
return $this->_credentials;
}
/**
* @param array $connection_details
*
* @return Thrive_Dash_List_Connection_Abstract
*/
public function set_credentials( $connection_details ) {
$this->_credentials = $connection_details;
/* if we set new credentials, the previously saved API is no longer valid */
$this->_api = null;
return $this;
}
/**
* Can be removed in 2-3 releases
*
* @return string|null
* @deprecated
*/
public function getKey() {
return $this->get_key();
}
/**
* @return string
*/
public function get_key() {
return $this->_key;
}
/**
* Can be deleted in 2-3 releases
*
* @deprecated
*/
public function isConnected() {
return $this->is_connected();
}
/**
* Whether this list is connected to the service (has been authenticated)
*
* @return bool
*/
public function is_connected() {
return ! empty( $this->_credentials );
}
/**
* @return bool
*/
public function is_related() {
return false;
}
/**
* get connection parameter by name
*
* @param string $field
* @param string $default
*
* @return mixed
*/
public function param( $field, $default = null ) {
return isset( $this->_credentials[ $field ] ) ? $this->_credentials[ $field ] : $default;
}
/**
* Used in TTW, do not delete.
*
* @param $field
* @param $value
*
* @return $this
* @deprecated
*/
public function setParam( $field, $value ) {
return $this->set_param( $field, $value );
}
/**
* set connection parameter
*
* @param string $field
* @param mixed $value
*
* @return $this
*/
public function set_param( $field, $value ) {
$this->_credentials[ $field ] = $value;
return $this;
}
/**
* setup a global error message
*
* @param string $message
*
* @return Thrive_Dash_List_Connection_Abstract
*/
public function error( $message ) {
if ( wp_doing_ajax() ) {
return $message;
}
return $this->message( 'error', $message );
}
/**
* setup a global success message
*
* @param string $message
*
* @return Thrive_Dash_List_Connection_Abstract
*/
public function success( $message ) {
if ( wp_doing_ajax() ) {
return true;
}
return $this->message( 'success', $message );
}
/**
* save the connection details
*
* @return Thrive_Dash_List_Connection_Abstract
* @see Thrive_Dash_List_Manager
*
*/
public function save() {
Thrive_Dash_List_Manager::save( $this );
return $this;
}
/**
* disconnect (remove) this API connection
*/
public function disconnect() {
$disconnect = apply_filters( 'tve_dash_disconnect_' . $this->get_key(), true );
if ( true === $disconnect ) {
$this->before_disconnect();
$this->set_credentials( [] );
Thrive_Dash_List_Manager::save( $this );
}
return $this;
}
/**
* Actions to take before a disconnection (can be overwritten by any API connection for different purposes)
*
* @return $this
*/
public function before_disconnect() {
delete_transient( $this->_custom_fields_transient );
return $this;
}
/**
* get the last error message in communicating with the api
*
* @return string the error message
*/
public function get_api_error() {
return $this->_error;
}
/**
* Used in TTW, do not delete.
*
* @return string
* @deprecated
*/
public function getTitle() {
return $this->get_title();
}
/**
* @return string the API connection title
*/
abstract public function get_title();
/**
* Can be deleted in 2-3 releases
*
* @deprecated
*/
public function outputSetupForm() {
$this->output_setup_form();
}
/**
* output the setup form html
*
* @return void
*/
abstract public function output_setup_form();
/**
* Can be removed in 2-3 releases
*
* @return mixed
* @deprecated
*/
public function readCredentials() {
return $this->read_credentials();
}
/**
* should handle: read data from post / get, test connection and save the details
* on error return the error message
* on success return true
*
* @return mixed
*/
abstract public function read_credentials();
/**
* Used in TTW, do not delete.
*
* @return bool|string
* @deprecated
*/
public function testConnection() {
return $this->test_connection();
}
/**
* test if a connection can be made to the service using the stored credentials
*
* @return bool|string true for success or error message for failure
*/
abstract public function test_connection();
/**
* Can be removed in 2-3 releases
*
* @param $list_identifier
* @param $arguments
*
* @deprecated
*/
public function addSubscriber( $list_identifier, $arguments ) {
$this->add_subscriber( $list_identifier, $arguments );
}
/**
*
* @param mixed $list_identifier
* @param array $arguments
*
* @return mixed
*/
abstract public function add_subscriber( $list_identifier, $arguments );
/**
* delete a contact matching arguments
*
* @param string $email
* @param array $arguments
*
* @return mixed
*/
public function delete_subscriber( $email, $arguments = [] ) {
return false;
}
/**
* Can be deleted in 2-3 releases
*
* @param bool $use_cache
*
* @return array|bool
* @deprecated
*/
public function getLists( $use_cache = true ) {
return $this->get_lists( $use_cache );
}
/**`
* get all Subscriber Lists from this API service
* it will first check a local cache for the existing lists
*
* @param bool $use_cache if true, it will read the lists from a local cache (wp options)
*
* @return array|bool for error
* @see self::_get_lists()
*/
public function get_lists( $use_cache = true ) {
if ( ! $this->is_connected() ) {
$this->_error = $this->get_title() . ' ' . __( 'is not connected', 'thrive-dash' );
return false;
}
$cache = get_option( 'thrive_auto_responder_lists', [] );
if ( ! $use_cache || ! isset( $cache[ $this->get_key() ] ) ) {
$lists = $this->_get_lists();
if ( $lists !== false ) {
$cache[ $this->get_key() ] = $lists;
update_option( 'thrive_auto_responder_lists', $cache );
}
} else {
$lists = $cache[ $this->get_key() ];
}
return $lists;
}
/**
* if an API instance has a special way of designating the list, it should override this method
* e.g. "Choose the mailing list you want your subscribers to be assigned to"
*
* @return string
*/
public function get_list_sub_title() {
return '';
}
/**
* Get fields mapping specific to an API for add to autoresponder action
*
* @return string[][]
*/
public function get_automator_add_autoresponder_mapping_fields() {
return array( 'autoresponder' => array( 'mailing_list', 'api_fields' ) );
}
/**
* Get fields mapping specific to an API for tag in autoresponder action
*
* @return string[][]
*/
public function get_automator_tag_autoresponder_mapping_fields() {
return array( 'autoresponder' => array( 'tag_input' ) );
}
/**
* Enable custom subfields based on api
*
* @param $fields
* @param $field
* @param $action_id
* @param $action_data
*
* @return mixed
*/
public function set_custom_autoresponder_fields( $fields, $field, $action_id, $action_data ) {
return $fields;
}
/**
* get an array of warning messages (e.g. The access token will expire in xxx days. Click here to renew it)
*
* @return array
*/
public function get_warnings() {
return [];
}
/**
* output any (possible) extra editor settings for this API
*
* @param array $params allow various different calls to this method
*
* @return array
*/
public function get_extra_settings( $params = [] ) {
do_action( 'tvd_autoresponder_render_extra_editor_settings_' . $this->get_key() );
return [];
}
/**
* Can be removed in 2-3 releases
*
* @param array $params
*
* @deprecated
*/
public function renderExtraEditorSettings( $params = [] ) {
$this->render_extra_editor_settings( $params );
}
/**
* output any (possible) extra editor settings for this API
*
* @param array $params allow various different calls to this method
*/
public function render_extra_editor_settings( $params = [] ) {
do_action( 'tvd_autoresponder_render_extra_editor_settings_' . $this->get_key() );
return false;
}
public function render_before_lists_settings( $params = [] ) {
return false;
}
/**
* @return string
*/
public function get_logo_url() {
return TVE_DASH_URL . '/inc/auto-responder/views/images/' . $this->get_key() . '.png';
}
/**
* @return array
*/
public function prepare_json() {
$properties = array(
'key' => $this->get_key(),
'connected' => $this->is_connected(),
'credentials' => $this->get_credentials(),
'title' => $this->get_title(),
'type' => $this->get_type(),
'logoUrl' => $this->get_logo_url(),
'success_message' => $this->custom_success_message(),
'can_test' => $this->can_test(),
'can_delete' => $this->can_delete(),
'can_edit' => $this->can_edit(),
);
$properties['notification'] = TVE_Dash_InboxManager::instance()->get_by_slug( $this->get_key() );
return $properties;
}
/**
* Custom message for success state
*
* @return string
*/
public function custom_success_message() {
return '';
}
/**
* Can be overwritten by any api who needs custom data to be sent
*
* @param $params
* @param bool $force
* @param bool $get_all
*
* @return array|mixed
*/
public function get_api_custom_fields( $params, $force = false, $get_all = false ) {
$cache_data = get_transient( $this->_custom_fields_transient );
return $cache_data ?: [];
}
/**
* Get extra parameters or fields from apis.
*
* @param $func
* @param $params
*
* @return mixed
*/
public function get_api_extra( $func, $params ) {
$extra = [];
if ( method_exists( $this, $func ) ) {
$extra = call_user_func_array( array( $this, $func ), array( $params ) );
}
return [
'extra' => $extra,
'api_custom_fields' => $this->get_api_custom_fields( $params ),
];
}
/**
* Return an array with the lists, custom fields and extra settings
*
* @param array $params
* @param int $force
*
* @return array
*/
public function get_api_data( $params = [], $force = false ) {
if ( empty( $params ) ) { //in case it comes out empty string
$params = [];
}
if ( $this->get_key() === 'email' ) {
$force = true;
} else {
$transient = 'tve_api_data_' . $this->get_key();
$data = get_transient( $transient );
}
if ( false === $force && tve_dash_is_debug_on() ) {
$force = true;
}
if ( true === $force || false === $data ) {
$data = array(
'lists' => $this->get_lists( false ),
'extra_settings' => $this->get_extra_settings( $params ),
'custom_fields' => $this->get_custom_fields( $params ),
);
if ( $this->get_key() !== 'email' ) {
set_transient( $transient, $data, MONTH_IN_SECONDS );
}
}
$data['api_custom_fields'] = $this->get_api_custom_fields( $params, $force );
return $data;
}
/**
* Get API custom form fields. By default, we have only name and phone
*
* @param array $params
*
* @return array
*/
public function get_custom_fields( $params = [] ) {
return [
[ 'id' => 'name', 'placeholder' => __( 'Name', 'thrive-dash' ) ],
[ 'id' => 'phone', 'placeholder' => __( 'Phone', 'thrive-dash' ) ],
];
}
/**
* output directly the html for a connection form from views/setup
*
* @param string $filename
* @param array $data allows passing variables to the view file
*/
protected function output_controls_html( $filename, $data = [] ) {
include dirname( dirname( __DIR__ ) ) . '/views/setup/' . $filename . '.php';
}
/**
* @param $type
* @param $message
*
* @return Thrive_Dash_List_Connection_Abstract
*/
protected function message( $type, $message ) {
Thrive_Dash_List_Manager::message( $type, $message );
return $this;
}
/**
* explode fullname into first name and last name
*
* @param string $full_name
*
* @return array
*/
protected function get_name_parts( $full_name ) {
if ( empty( $full_name ) ) {
return array( '', '' );
}
$parts = explode( ' ', $full_name );
if ( count( $parts ) === 1 ) {
return array(
$parts[0],
'',
);
}
$last_name = array_pop( $parts );
$first_name = implode( ' ', $parts );
return array(
sanitize_text_field( $first_name ),
sanitize_text_field( $last_name ),
);
}
/**
* Compose name from email
*
* @param $email
*
* @return array
*/
protected function get_name_from_email( $email ) {
if ( empty( $email ) || ! is_string( $email ) || false === strpos( $email, '@' ) ) {
return array( '', '' );
}
$email_name = str_replace( array( '.', '_', '-', '+', '=' ), ' ', strstr( $email, '@', true ) );
list( $first_name, $last_name ) = $this->get_name_parts( $email_name );
if ( empty( $first_name ) ) {
$first_name = $email_name;
}
if ( empty( $last_name ) ) {
$last_name = $first_name;
}
return [
$first_name,
$last_name,
];
}
/**
* instantiate the API code required for this connection
*
* @return mixed
*/
protected abstract function get_api_instance();
/**
* get all Subscriber Lists from this API service
*
* @return array|bool for error
*/
protected abstract function _get_lists();
/**
* Whether the integration supports forms
*
* @return bool
*/
public function has_forms() {
return false;
}
/**
* @return array
*/
protected function _get_forms() {
return [];
}
/**
* @return array|bool
*/
public function get_forms() {
if ( ! $this->is_connected() ) {
$this->_error = $this->get_title() . ' ' . __( 'is not connected', 'thrive-dash' );
return false;
}
return $this->_get_forms();
}
/**
* Get API Videos URLs
*
* @return array
*/
public function get_api_video_urls() {
$return = [];
$transient = get_transient( 'ttw_api_urls' );
if ( ! empty( $transient ) && is_array( $transient ) ) {
$return = (array) $transient;
}
return $return;
}
/**
* Displays the video link with his html structure
*
* @return mixed|string
*/
public function display_video_link() {
$api_slug = strtolower( str_replace( array( ' ', '-' ), '', $this->get_key() ) );
$video_urls = $this->get_api_video_urls();
if ( ! array_key_exists( $api_slug, $video_urls ) ) {
return '';
}
return include dirname( dirname( __DIR__ ) ) . '/views/includes/video-link.php';
}
/**
* A connection can work with different versions of API
*
* @return false|mixed
*/
public function get_version() {
$credentials = (array) $this->get_credentials();
if ( ! empty( $credentials['version'] ) ) {
return $credentials['version'];
}
return false;
}
/**
* Defines a common field structure to work with
*
* @param array $data Field data from the API
*
* @return array
*/
protected function normalize_custom_field( $data ) {
return [
'id' => $data['id'], //unique identifier
'name' => $data['name'], //should be name="" attribute for an input
'type' => $data['type'], //type for e.g. [url, text]
'label' => $data['label'], //label to display for users
];
}
/**
* Get the value of from email for email delivery services
*
* @return string
*/
public function get_email_param() {
return $this->param( 'email', get_option( 'admin_email' ) );
}
/**
* Insert message to API error log
*
* @param string|int $list_identifier
* @param array $data
* @param string $error
*
* @return bool
*/
public function api_log_error( $list_identifier, $data, $error ) {
if ( ! $list_identifier || ! $data || ! $error ) {
return false;
}
global $wpdb;
$return = false;
$api_log_table = $wpdb->prefix . 'tcb_api_error_log';
$table_exists = (bool) $wpdb->get_var( $wpdb->prepare( 'SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME=%s', $api_log_table ) );
if ( $table_exists ) {
$log_data = array(
'date' => date( 'Y-m-d H:i:s' ),
'error_message' => tve_sanitize_data_recursive( $error ),
'api_data' => serialize( tve_sanitize_data_recursive( $data ) ),
'connection' => $this->get_key(),
'list_id' => maybe_serialize( tve_sanitize_data_recursive( $list_identifier ) ),
);
$return = (bool) $wpdb->insert( $api_log_table, $log_data );
}
return $return;
}
/**
* Mapped custom fields setter
*/
protected function set_custom_fields_mapping() {
$this->_mapped_custom_fields = apply_filters(
'tve_dash_mapped_custom_fields',
array(
array(
'id' => 'mapping_text',
'placeholder' => __( 'Text', 'thrive-dash' ),
'unique' => false,
),
array(
'id' => 'mapping_url',
'placeholder' => __( 'URL', 'thrive-dash' ),
'unique' => false,
),
array(
'id' => 'mapping_radio',
'placeholder' => __( 'Radio', 'thrive-dash' ),
'unique' => false,
),
array(
'id' => 'mapping_select',
'placeholder' => __( 'Dropdown', 'thrive-dash' ),
'unique' => false,
),
array(
'id' => 'mapping_checkbox',
'placeholder' => __( 'Checkbox', 'thrive-dash' ),
'unique' => false,
),
array(
'id' => 'mapping_textarea',
'placeholder' => __( 'Textarea', 'thrive-dash' ),
'unique' => false,
),
array(
'id' => 'mapping_file',
'placeholder' => __( 'File upload', 'thrive-dash' ),
'unique' => true,
),
array(
'id' => 'mapping_avatar_picker',
'placeholder' => __( 'Avatar picker', 'thrive-dash' ),
'unique' => true,
),
array(
'id' => 'mapping_hidden',
'placeholder' => __( 'Hidden', 'thrive-dash' ),
'unique' => false,
),
array(
'id' => 'number',
'placeholder' => __( 'Number', 'thrive-dash' ),
'unique' => false,
),
array(
'id' => 'country',
'placeholder' => __( 'Country', 'thrive-dash' ),
'unique' => false,
),
array(
'id' => 'state',
'placeholder' => __( 'State', 'thrive-dash' ),
'unique' => false,
),
array(
'id' => 'date',
'placeholder' => __( 'Date/Time', 'thrive-dash' ),
'unique' => false,
),
)
);
}
protected function set_custom_default_fields_mapping() {
$this->_default_form_fields = apply_filters(
'tve_dash_mapped_default_fields',
array(
array(
'id' => 'email',
'placeholder' => __( 'Email', 'thrive-dash' ),
'unique' => true,
'mandatory' => true,
),
array(
'id' => 'name',
'placeholder' => __( 'Name', 'thrive-dash' ),
'unique' => true,
'mandatory' => false,
),
array(
'id' => 'phone',
'placeholder' => __( 'Phone', 'thrive-dash' ),
'unique' => true,
'mandatory' => false,
),
) );
}
/**
* Global getter for the hardcoded allowed custom fields type
*
* @return array
*/
public function get_custom_fields_mapping() {
return $this->_mapped_custom_fields;
}
/**
* Global getter for the default fields type
*
* @return array
*/
public function get_default_fields_mapper() {
return $this->_default_form_fields;
}
/**
* Custom fields cache getter
*
* @return mixed
*/
protected function get_cached_custom_fields() {
return get_transient( $this->_custom_fields_transient );
}
/**
* Save custom fields
*
* @param array $custom_fields
*
* @return bool
*/
protected function _save_custom_fields( $custom_fields = [] ) {
if ( empty( $custom_fields ) ) {
return false;
}
$custom_fields = tve_sanitize_data_recursive( $custom_fields );
return set_transient( $this->_custom_fields_transient, $custom_fields, WEEK_IN_SECONDS );
}
public function process_field( $field ) {
if ( is_array( $field ) ) {
$field = implode( ', ', $field );
}
return stripslashes( $field );
}
/**
* Whether the integration supports tags
*
* @return bool
*/
public function has_tags() {
return false;
}
/**
* Whether the current integration can provide custom fields
*
* @return false
*/
public function has_custom_fields() {
return false;
}
/**
* Whether the current integration has multiple opt-in types
*
* @return false
*/
public function has_optin() {
return false;
}
/**
* @return string
*/
public function get_tags_key() {
return $this->_key . '_tags';
}
/**
* @return string
*/
public function get_forms_key() {
return $this->_key . '_form';
}
/**
* @return string
*/
public function get_optin_key() {
return $this->_key . '_optin';
}
/**
* Get tags key for the api
*
* @return array
*/
protected function get_mapped_field_ids() {
$mapped_fields = array_map(
function ( $field ) {
return $field['id'];
},
$this->_mapped_custom_fields
);
$mapped_fields[] = 'user_consent';
$mapped_fields[] = 'gdpr';
return $mapped_fields;
}
/**
* Push external tags in $data, EX: adds tags from tqb
*
* @param array|string $tags
* @param array $data
*
* @return array
*/
public function push_tags( $tags, $data = [] ) {
if ( empty( $tags ) || ! $this->has_tags() ) {
return $data;
}
if ( is_array( $tags ) ) {
$tags = implode( ', ', $tags );
} else if ( ! is_string( $tags ) ) {
$tags = '';
}
$tag_key = $this->get_tags_key();
if ( empty( $data[ $tag_key ] ) ) {
$tag_data = $tags;
} else {
$tag_data = $data[ $tag_key ] . ( empty( $tags ) ? '' : ', ' . $tags );
}
$data[ $tag_key ] = trim( $tag_data );
return $data;
}
/**
* Whether this connection can be edited
*
* @return bool
*/
public function can_edit() {
return true;
}
/**
* Whether this connection can be deleted
*
* @return bool
*/
public function can_delete() {
return true;
}
/**
* Whether this connection can be tested to validate that the stored credentials are correct
*
* @return bool
*/
public function can_test() {
return true;
}
/**
* Can be removed in 2-3 releases
*
* @return array
* @deprecated
*/
public function getDataForSetup() {
return $this->get_data_for_setup();
}
/**
* Get localization data needed for setting up this connection within a form
*
* @return array
*/
public function get_data_for_setup() {
return [];
}
/**
* get relevant data from webhook trigger
*
* @param $request WP_REST_Request
*
* @return array
*/
public function get_webhook_data( $request ) {
return [];
}
/**
* @param string $email
* @param array $tags
* @param array $extra
*
* @return int
*/
public function update_tags( $email, $tags = '', $extra = [] ) {
$args = $this->get_args_for_tags_update( $email, $tags, $extra );
$list_identifier = ! empty( $args['list_identifier'] ) ? $args['list_identifier'] : null;
unset( $args['list_identifier'] );
return $this->add_subscriber( $list_identifier, $args );
}
/**
* Prepare necessary arguments for adding a tag
*
* @param string $email
* @param array|string $tags
* @param array $extra
*
* @return array
*/
public function get_args_for_tags_update( $email, $tags = '', $extra = [] ) {
$tags_key = $this->get_tags_key();
$return = [
'email' => $email,
$tags_key => $tags,
];
foreach ( $extra as $key => $value ) {
$return[ $key ] = $value;
}
return $return;
}
/**
* Add a custom field for a subscriber
* This method should be overwritten in avery instance that deals with custom fields
* Subscriber ID should be returned
*
* @param $email
* @param array $custom_fields
* @param array $extra
*
* @return int
*/
public function add_custom_fields( $email, $custom_fields = [], $extra = [] ) {
return 0;
}
/**
*
* Each api expects custom fields data in a specific format
* This method should be overwritten in every instance that deals with custom fields and prepare them as needed
*
* @param array $custom_fields
* @param null $list_identifier
*
* @return array
*/
protected function prepare_custom_fields_for_api( $custom_fields = [], $list_identifier = null ) {
return [];
}
/**
* Get available custom fields for this api connection
*
* @param array $data
*
* @return array
*/
public function get_available_custom_fields( $data = [] ) {
return method_exists( $this, 'get_all_custom_fields' ) ? $this->get_all_custom_fields( true ) : [];
}
/**
* @param null $list
*
* @return array|mixed
*/
public function get_custom_fields_by_list( $list = null ) {
$fields = $this->get_available_custom_fields();
if ( $list && isset( $fields[ $list ] ) ) {
$fields = $fields[ $list ];
}
return $fields;
}
/**
* Get a sanitized value from post
*
* @param string $key
* @param mixed $default
*
* @return array|mixed|null
*/
protected function post( $key, $default = null ) {
if ( ! isset( $_POST[ $key ] ) ) {
return $default;
}
return map_deep( $_POST[ $key ], 'sanitize_text_field' );
}
/**
* Build custom fields mapping for automations
*
* @param $automation_data
*
* @return array
*/
public function build_automation_custom_fields( $automation_data ) {
return [];
}
}