ProShell v2.0
Dashboard
Server Info
Server: 158.106.128.192
PHP: 8.2.33
home
planet5
public_html
bansibaba.com
wp-includes
2026-09-14 17:04:25
Editing: FluentCRM.php
Cancel
Save Changes
<?php /** * ET_Core_API_Email_FluentCRM class file. * * @class ET_Core_API_Email_FluentCRM * @package ET\Core\API\Email */ // phpcs:disable Squiz.Commenting.VariableComment.MissingVar -- All the class level variables here inherit parent inline documentation. Please check ET_Core_API_Email_Provider or ET_Core_API_Service class. // phpcs:disable Squiz.Commenting.FunctionComment.MissingParamTag -- Almost all the methods here inherit parent inline documentation. Please check ET_Core_API_Email_Provider or ET_Core_API_Service class. /** * Wrapper for FluentCRM's API. * * @since 4.9.1 * * @package ET\Core\API\Email */ class ET_Core_API_Email_FluentCRM extends ET_Core_API_Email_Provider { /** * Warning message text if the required plugin doesn't exist. * * @var boolean */ public static $PLUGIN_REQUIRED; // phpcs:ignore ET.Sniffs.ValidVariableName.PropertyNotSnakeCase -- Widely used on all email provider classes. /** * {@inheritdoc} */ public $name = 'FluentCRM'; /** * {@inheritdoc} */ public $slug = 'fluentcrm'; /** * {@inheritdoc} */ public $custom_fields = 'predefined'; /** * {@inheritdoc} */ public $custom_fields_scope = 'account'; /** * ET_Core_API_Email_FluentCRM constructor. */ public function __construct( $owner = '', $account_name = '', $api_key = '' ) { parent::__construct( $owner, $account_name, $api_key ); if ( null === self::$PLUGIN_REQUIRED ) { // phpcs:ignore ET.Sniffs.ValidVariableName.UsedPropertyNotSnakeCase -- Widely used on all email provider classes. self::$PLUGIN_REQUIRED = esc_html__( 'FluentCRM plugin is either not installed or not activated.', 'et_core' ); // phpcs:ignore ET.Sniffs.ValidVariableName.UsedPropertyNotSnakeCase -- Widely used on all email provider classes. } } /** * {@inheritdoc} */ public function get_data_keymap( $keymap = array() ) { $keymap = array( 'list' => array( 'list_id' => 'id', 'name' => 'title', ), 'subscriber' => array( 'email' => 'email', 'last_name' => 'last_name', 'name' => 'first_name', 'custom_fields' => 'custom_fields', ), 'custom_field' => array( 'field_id' => 'slug', 'name' => 'label', 'type' => 'type', 'hidden' => 'hidden', 'options' => 'options', ), 'custom_field_option' => array( 'id' => 'value', 'name' => 'value', ), 'custom_field_type' => array( // Us <=> Them. 'radio' => 'radio', 'checkbox' => 'checkbox', // Us => Them. 'input' => 'text', 'select' => 'select-one', // Them => Us. 'text' => 'input', 'number' => 'input', 'date' => 'input', 'date_time' => 'input', 'select-one' => 'select', 'select-multi' => 'checkbox', ), ); return parent::get_data_keymap( $keymap ); } /** * {@inheritdoc} * * FluentCRM is self hosted and all the fields can be managed on the plugin itself. */ protected function _fetch_custom_fields( $list_id = '', $list = array() ) { static $processed = null; if ( is_null( $processed ) ) { // A. Default custom fields. $processed = array( 'address_line_1' => array( 'field_id' => 'address_line_1', 'name' => __( 'Address Line 1', 'et_builder' ), 'type' => 'input', 'hidden' => false, ), 'address_line_2' => array( 'field_id' => 'address_line_2', 'name' => __( 'Address Line 2', 'et_builder' ), 'type' => 'input', 'hidden' => false, ), 'postal_code' => array( 'field_id' => 'postal_code', 'name' => __( 'Postal Code', 'et_builder' ), 'type' => 'input', 'hidden' => false, ), 'city' => array( 'field_id' => 'city', 'name' => __( 'City', 'et_builder' ), 'type' => 'input', 'hidden' => false, ), 'state' => array( 'field_id' => 'state', 'name' => __( 'State', 'et_builder' ), 'type' => 'input', 'hidden' => false, ), 'country' => array( 'field_id' => 'country', 'name' => __( 'Country', 'et_builder' ), 'type' => 'input', 'hidden' => false, ), 'phone' => array( 'field_id' => 'phone', 'name' => __( 'Phone', 'et_builder' ), 'type' => 'input', 'hidden' => false, ), 'status' => array( 'field_id' => 'status', 'name' => __( 'Enable Double Optin', 'et_builder' ), 'type' => 'input', 'required_mark' => 'off', 'default' => 'pending', 'hidden' => true, ), ); // B. Contact custom fields. $contact_custom_fields = fluentcrm_get_option( 'contact_custom_fields', array() ); if ( ! empty( $contact_custom_fields ) ) { foreach ( $contact_custom_fields as $field ) { // 1. Transform field data to fit our format. $field = $this->transform_data_to_our_format( $field, 'custom_field' ); $field_id = $field['field_id']; $type = $field['type']; // 2. Transform field type to fit our supported field type. $field['type'] = self::$_->array_get( $this->data_keys, "custom_field_type.{$type}", 'any' ); if ( 'select-multi' === $type ) { $field['type_origin'] = $type; } // 3. Transform `options` data to fit our format (`id` => `name`). if ( ! empty( $field['options'] ) ) { $options = array(); foreach ( $field['options'] as $option ) { $option = array( 'value' => $option ); $option = $this->transform_data_to_our_format( $option, 'custom_field_option' ); $options[ $option['id'] ] = $option['name']; } $field['options'] = $options; } $processed[ $field_id ] = $field; } } } return $processed; } /** * {@inheritdoc} * * FluentCRM is self hosted and all the fields can be managed on the plugin itself. */ public function get_account_fields() { return array(); } /** * {@inheritdoc} * * FluentCRM is self hosted and all the lists can be managed on the plugin itself. */ public function fetch_subscriber_lists() { if ( ! defined( 'FLUENTCRM' ) ) { return self::$PLUGIN_REQUIRED; // phpcs:ignore ET.Sniffs.ValidVariableName.UsedPropertyNotSnakeCase -- Widely used on all email provider classes. } $list_tags = array(); // Lists. $lists = FluentCrmApi( 'lists' )->all(); foreach ( $lists as $list ) { $list_tags[ 'list_' . $list->id ] = array( 'list_id' => 'list_' . $list->id, 'name' => 'List: ' . $list->title, 'subscribers_count' => 0, ); } // Tags. $tags = FluentCrmApi( 'tags' )->all(); foreach ( $tags as $tag ) { $list_tags[ 'tags_' . $tag->id ] = array( 'list_id' => 'tags_' . $tag->id, 'name' => 'Tag: ' . $tag->title, 'subscribers_count' => 0, ); } // Combine both of lists and tags because there is no other way to display both // with different fields. $this->data['lists'] = $list_tags; $this->data['custom_fields'] = $this->_fetch_custom_fields( '', array() ); $this->data['is_authorized'] = true; $this->save_data(); return 'success'; } /** * {@inheritdoc} */ protected function _process_custom_fields( $args ) { if ( ! empty( $args['custom_fields'] ) ) { $custom_fields = $args['custom_fields']; foreach ( $custom_fields as $field_id => $field_value ) { if ( $field_value ) { $field_type = self::$_->array_get( $this->data['custom_fields'][ $field_id ], 'type' ); $field_type_origin = self::$_->array_get( $this->data['custom_fields'][ $field_id ], 'type_origin' ); // Transform `checkbox` value into string separated by comma i.e. 'val1,val2'. // However, if the field type origin is `select-multi`, we have to use array // values instead. if ( 'checkbox' === $field_type ) { $field_value = 'select-multi' === $field_type_origin ? array_values( $field_value ) : implode( ',', $field_value ); } $args[ $field_id ] = $field_value; } } if ( isset( $custom_fields['status'] ) ) { $args['status'] = 'pending'; } unset( $args['custom_fields'] ); } return $args; } /** * {@inheritdoc} */ public function subscribe( $args, $url = '' ) { if ( ! defined( 'FLUENTCRM' ) ) { ET_Core_Logger::error( self::$PLUGIN_REQUIRED ); // phpcs:ignore ET.Sniffs.ValidVariableName.UsedPropertyNotSnakeCase -- Widely used on all email provider classes. return esc_html__( 'An error occurred. Please try again later.', 'et_core' ); } $contact = $this->transform_data_to_provider_format( $args, 'subscriber' ); $contact = $this->_process_custom_fields( $contact ); // IP Address. $ip_address = 'true' === self::$_->array_get( $args, 'ip_address', 'true' ) ? et_core_get_ip_address() : ''; $contact['ip_address'] = $ip_address; // Name. if ( empty( $contact['last_name'] ) ) { $contact['full_name'] = $contact['first_name']; unset( $contact['first_name'] ); unset( $contact['last_name'] ); } // List or Tag. $list_or_tag_id = $args['list_id']; if ( false === strpos( $list_or_tag_id, 'tags_' ) ) { $contact['lists'] = array( intval( str_replace( 'list_', '', $list_or_tag_id ) ) ); } else { $contact['tags'] = array( intval( str_replace( 'tags_', '', $list_or_tag_id ) ) ); } $contact = array_filter( $contact ); // Email. if ( empty( $contact['email'] ) || ! is_email( $contact['email'] ) ) { return esc_html__( 'Email Validation has been failed.', 'et_core' ); } FluentCrmApi( 'contacts' )->createOrUpdate( $contact ); return 'success'; } }
Upload Files
Cancel
Upload
Create New
Cancel
Create
Change Permissions
Cancel
Save
Change Date
Cancel
Save
Rename Item
Cancel
Save
Confirm Delete
Are you sure you want to delete the selected items?
Cancel
Delete