__( 'ActiveCampaign', 'advanced-form-integration' ), 'tasks' => array( 'subscribe' => __( 'Add Contact/Deal/Note', 'advanced-form-integration' ) ) ); return $actions; } add_filter( 'adfoin_settings_tabs', 'adfoin_activecampaign_settings_tab', 10, 1 ); function adfoin_activecampaign_settings_tab( $providers ) { $providers['activecampaign'] = __( 'ActiveCampaign', 'advanced-form-integration' ); return $providers; } add_action( 'adfoin_settings_view', 'adfoin_activecampaign_settings_view', 10, 1 ); function adfoin_activecampaign_settings_view( $current_tab ) { if( $current_tab != 'activecampaign' ) { return; } if ( ! class_exists( 'ADFOIN_Account_Manager' ) ) { require_once plugin_dir_path( __FILE__ ) . '../../includes/class-adfoin-account-manager.php'; } $fields = array( array( 'name' => 'url', 'label' => __( 'URL', 'advanced-form-integration' ), 'type' => 'text', 'required' => true, 'placeholder' => __( 'Enter your ActiveCampaign URL', 'advanced-form-integration' ), 'show_in_table' => true ), array( 'name' => 'apiKey', 'label' => __( 'API Key', 'advanced-form-integration' ), 'type' => 'text', 'required' => true, 'mask' => true, 'placeholder' => __( 'Enter your API Key', 'advanced-form-integration' ), 'show_in_table' => true ) ); $instructions = sprintf( '
  1. %s
  2. %s
  3. %s
', __('Go to Settings > Developer', 'advanced-form-integration'), __('Copy your URL and API Key', 'advanced-form-integration'), __('Add them here and click Save', 'advanced-form-integration') ); ADFOIN_Account_Manager::render_settings_view( 'activecampaign', __( 'ActiveCampaign', 'advanced-form-integration' ), $fields, $instructions ); } add_action( 'wp_ajax_adfoin_get_activecampaign_credentials', 'adfoin_get_activecampaign_credentials', 10, 0 ); /* * Get ActiveCampaign credentials */ function adfoin_get_activecampaign_credentials() { if ( ! class_exists( 'ADFOIN_Account_Manager' ) ) { require_once plugin_dir_path( __FILE__ ) . '../../includes/class-adfoin-account-manager.php'; } ADFOIN_Account_Manager::ajax_get_credentials_list( 'activecampaign' ); } add_action( 'wp_ajax_adfoin_save_activecampaign_credentials', 'adfoin_save_activecampaign_credentials', 10, 0 ); /* * Save ActiveCampaign credentials */ function adfoin_save_activecampaign_credentials() { if ( ! class_exists( 'ADFOIN_Account_Manager' ) ) { require_once plugin_dir_path( __FILE__ ) . '../../includes/class-adfoin-account-manager.php'; } ADFOIN_Account_Manager::ajax_save_credentials( 'activecampaign', array( 'url' => 'url', 'apiKey' => 'password', ) ); } /* * ActiveCampaign Credentials List */ function adfoin_activecampaign_get_credentials_list() { $credentials = adfoin_read_credentials( 'activecampaign' ); foreach ($credentials as $option) { printf('', esc_attr($option['id']), esc_html($option['title'])); } } // Legacy single-account import: surfaces an old `adfoin_activecampaign_*` // option pair as a "Legacy Account" record when the new credentials store is // empty. Wrapped in plugins_loaded so ADFOIN_Account_Manager is loaded first. add_action( 'plugins_loaded', function() { if ( class_exists( 'ADFOIN_Account_Manager' ) ) { ADFOIN_Account_Manager::register_legacy_option_importer( 'activecampaign', array( 'apiKey' => 'adfoin_activecampaign_api_key', 'url' => 'adfoin_activecampaign_url', ) ); } }, 20 ); // Deprecated - kept for backward compatibility add_action( 'admin_post_adfoin_save_activecampaign_api_key', 'adfoin_save_activecampaign_api_key', 10, 0 ); function adfoin_save_activecampaign_api_key() { // Security Check // Authorization check adfoin_require_manage_options(); if (! wp_verify_nonce( $_POST['_nonce'], 'adfoin_activecampaign_settings' ) ) { die( __( 'Security check Failed', 'advanced-form-integration' ) ); } $api_key = sanitize_text_field( wp_unslash( $_POST["adfoin_activecampaign_api_key"] ) ); $url = sanitize_text_field( wp_unslash( $_POST["adfoin_activecampaign_url"] ) ); // Save tokens update_option( "adfoin_activecampaign_api_key", $api_key ); update_option( "adfoin_activecampaign_url", $url ); advanced_form_integration_redirect( "admin.php?page=advanced-form-integration-settings&tab=activecampaign" ); } add_action( 'adfoin_add_js_fields', 'adfoin_activecampaign_js_fields', 10, 1 ); function adfoin_activecampaign_js_fields( $field_data ) { } add_action( 'adfoin_action_fields', 'adfoin_activecampaign_action_fields' ); function adfoin_activecampaign_action_fields() { ?> 30, 'method' => $method, 'headers' => array( 'Content-Type' => 'application/json', 'Api-Token' => $api_key, ), ); if ('POST' == $method || 'PUT' == $method) { $args['body'] = wp_json_encode($data); } $response = wp_remote_request($url, $args); if ($record) { adfoin_add_to_log($response, $url, $args, $record); } return $response; } add_action( 'wp_ajax_adfoin_get_activecampaign_list', 'adfoin_get_activecampaign_list', 10, 0 ); /* * Get ActiveCampaign subscriber lists */ function adfoin_get_activecampaign_list() { // Security Check if (! wp_verify_nonce( $_POST['_nonce'], 'advanced-form-integration' ) ) { die( __( 'Security check Failed', 'advanced-form-integration' ) ); } $cred_id = isset( $_POST['credId'] ) ? sanitize_text_field( wp_unslash( $_POST['credId'] ) ) : ''; $page = 0; $limit = 100; $has_value = true; $all_data = array(); while( $has_value ) { $offset = $page * $limit; $endpoint = "lists?limit={$limit}&offset={$offset}"; $data = adfoin_activecampaign_request( $endpoint, 'GET', array(), array(), $cred_id ); $body = json_decode( wp_remote_retrieve_body( $data ) ); if( empty( $body->lists ) ) { $has_value = false; } else { $lists = wp_list_pluck( $body->lists, 'name', 'id' ); $all_data = $all_data + $lists; $page++; } } wp_send_json_success( $all_data ); } add_action( 'wp_ajax_adfoin_get_activecampaign_automations', 'adfoin_get_activecampaign_automations', 10, 0 ); /* * Get ActiveCampaign subscriber automations */ function adfoin_get_activecampaign_automations() { // Security Check if (! wp_verify_nonce( $_POST['_nonce'], 'advanced-form-integration' ) ) { die( __( 'Security check Failed', 'advanced-form-integration' ) ); } $cred_id = isset( $_POST['credId'] ) ? sanitize_text_field( wp_unslash( $_POST['credId'] ) ) : ''; $page = 0; $limit = 100; $has_value = true; $all_data = array(); while( $has_value ) { $offset = $page * $limit; $endpoint = "automations?limit={$limit}&offset={$offset}"; $data = adfoin_activecampaign_request( $endpoint, 'GET', array(), array(), $cred_id ); $body = json_decode( wp_remote_retrieve_body( $data ) ); if( empty( $body->automations ) ) { $has_value = false; } else { $automations = wp_list_pluck( $body->automations, 'name', 'id' ); $all_data = $all_data + $automations; $page++; } } wp_send_json_success( $all_data ); } add_action( 'wp_ajax_adfoin_get_activecampaign_accounts', 'adfoin_get_activecampaign_accounts', 10, 0 ); /* * Get ActiveCampaign subscriber automations */ function adfoin_get_activecampaign_accounts() { // Security Check if (! wp_verify_nonce( $_POST['_nonce'], 'advanced-form-integration' ) ) { die( __( 'Security check Failed', 'advanced-form-integration' ) ); } $cred_id = isset( $_POST['credId'] ) ? sanitize_text_field( wp_unslash( $_POST['credId'] ) ) : ''; $page = 0; $limit = 100; $has_value = true; $all_data = array(); while( $has_value ) { $offset = $page * $limit; $endpoint = "accounts?limit={$limit}&offset={$offset}"; $data = adfoin_activecampaign_request( $endpoint, 'GET', array(), array(), $cred_id ); $body = json_decode( wp_remote_retrieve_body( $data ) ); if( empty( $body->accounts ) ) { $has_value = false; } else { $accounts = wp_list_pluck( $body->accounts, 'name', 'id' ); $all_data = $all_data + $accounts; $page++; } } wp_send_json_success( $all_data ); } add_action( 'wp_ajax_adfoin_get_activecampaign_deal_fields', 'adfoin_get_activecampaign_deal_fields', 10, 0 ); /* * Get Pipedrive Dal Fields */ function adfoin_get_activecampaign_deal_fields() { // Security Check if (! wp_verify_nonce( $_POST['_nonce'], 'advanced-form-integration' ) ) { die( __( 'Security check Failed', 'advanced-form-integration' ) ); } $cred_id = isset( $_POST['credId'] ) ? sanitize_text_field( wp_unslash( $_POST['credId'] ) ) : ''; $credentials = adfoin_get_credentials_by_id( 'activecampaign', $cred_id ); $api_key = isset( $credentials['apiKey'] ) ? $credentials['apiKey'] : ''; $base_url = isset( $credentials['url'] ) ? $credentials['url'] : ''; // Backward compatibility: fallback to old options if credentials not found if( empty( $api_key ) ) { $api_key = get_option( 'adfoin_activecampaign_api_key' ) ? get_option( 'adfoin_activecampaign_api_key' ) : ''; } if( empty( $base_url ) ) { $base_url = get_option( 'adfoin_activecampaign_url' ) ? get_option( 'adfoin_activecampaign_url' ) : ''; } if( !$api_key || !$base_url ) { return array(); } $url = "{$base_url}/api/3/dealGroups?limit=100"; $args = array( 'timeout' => 30, "headers" => array( "Content-Type" => "application/json", "Api-Token" => $api_key ) ); $data = wp_remote_get( $url, $args ); $stages = ""; $stage_body = json_decode( wp_remote_retrieve_body( $data ) ); $pipelines = wp_list_pluck( $stage_body->dealGroups, "title", "id" ); if( isset( $stage_body->dealStages ) ) { if( is_array( $stage_body->dealStages ) ) { foreach( $stage_body->dealStages as $single ) { $stages .= $pipelines[$single->group] . '/' . $single->title . ': ' . $single->id . ' '; } } } $user_url = "{$base_url}/api/3/users?limit=100"; $user_data = wp_remote_get( $user_url, $args ); $users = ""; $user_body = json_decode( wp_remote_retrieve_body( $user_data ) ); foreach( $user_body->users as $single ) { $users .= $single->username . ': ' . $single->id . ' '; } $deal_fields = array( array( 'key' => 'dealTitle', 'value' => 'Title [Deal]', 'description' => 'Required for deal creation' ), array( 'key' => 'dealDescription', 'value' => 'Description [Deal]', 'description' => '' ), array( 'key' => 'dealCurrency', 'value' => 'Currency [Deal]', 'description' => '' ), array( 'key' => 'dealStage', 'value' => 'Stage ID [Deal]', 'description' => $stages ), array( 'key' => 'dealOwner', 'value' => 'Owner ID [Deal]', 'description' => $users ), array( 'key' => 'dealValue', 'value' => 'Value [Deal]', 'description' => '' ) ); wp_send_json_success( $deal_fields ); return; } add_action( 'adfoin_activecampaign_job_queue', 'adfoin_activecampaign_job_queue', 10, 1 ); function adfoin_activecampaign_job_queue( $data ) { adfoin_activecampaign_send_data( $data['record'], $data['posted_data'] ); } /* * Handles sending data to ActiveCampaign API */ function adfoin_activecampaign_send_data( $record, $posted_data ) { $record_data = json_decode( $record["data"], true ); if ( adfoin_check_conditional_logic( $record_data['action_data']['cl'] ?? array(), $posted_data ) ) { return; } $data = $record_data["field_data"]; $list_id = $data["listId"]; $aut_id = $data["automationId"]; $acc_id = $data["accountId"]; $cred_id = isset( $data["credId"] ) ? $data["credId"] : ''; $task = $record["task"]; $update = $data["update"]; $email = empty( $data["email"] ) ? "" : adfoin_get_parsed_values($data["email"], $posted_data); // Backward compatibility: if no cred_id, use first available credential if( empty( $cred_id ) ) { $all_credentials = adfoin_read_credentials( 'activecampaign' ); if( !empty( $all_credentials ) ) { $cred_id = $all_credentials[0]['id']; } } if( $task == "subscribe" ) { $first_name = empty( $data["firstName"] ) ? "" : adfoin_get_parsed_values($data["firstName"], $posted_data); $last_name = empty( $data["lastName"] ) ? "" : adfoin_get_parsed_values($data["lastName"], $posted_data); $phone_number = empty( $data["phoneNumber"] ) ? "" : adfoin_get_parsed_values($data["phoneNumber"], $posted_data); $deal_tile = empty( $data["dealTitle"] ) ? "" : adfoin_get_parsed_values($data["dealTitle"], $posted_data); $note = empty( $data["note"] ) ? "" : adfoin_get_parsed_values($data["note"], $posted_data); $endpoint = "contacts"; $method = "POST"; if( "true" == $update ) { $endpoint = "contact/sync"; } $request_data = array( "contact" => array( "email" => $email, "first_name" => $first_name, "last_name" => $last_name, "phone" => $phone_number, ) ); $request_data = array_map('array_filter', $request_data ); $return = adfoin_activecampaign_request( $endpoint, $method, $request_data, $record, $cred_id ); $contact_id = ""; if( !is_wp_error( $return ) ) { $return_body = json_decode( wp_remote_retrieve_body( $return ) ); $contact_id = isset($return_body->contact->id) ? $return_body->contact->id : ''; } if( $contact_id && $list_id ) { $endpoint = "contactLists"; $request_data = array( "contactList" => array( "list" => $list_id, "contact" => $contact_id, "status" => 1 ) ); adfoin_activecampaign_request( $endpoint, "POST", $request_data, $record ); } if( $contact_id && $aut_id ) { $endpoint = "contactAutomations"; $request_data = array( "contactAutomation" => array( "automation" => $aut_id, "contact" => $contact_id ) ); adfoin_activecampaign_request( $endpoint, "POST", $request_data, $record ); } if( $contact_id && $acc_id ) { $endpoint = "accountContacts"; $request_data = array( "accountContact" => array( "account" => $acc_id, "contact" => $contact_id ) ); adfoin_activecampaign_request( $endpoint, "POST", $request_data, $record ); } if( $contact_id && $deal_tile ) { $deal_description = empty( $data["dealDescription"] ) ? "" : adfoin_get_parsed_values( $data["dealDescription"], $posted_data ); $deal_currency = empty( $data["dealCurrency"] ) ? "" : adfoin_get_parsed_values( $data["dealCurrency"], $posted_data ); $deal_stage = empty( $data["dealStage"] ) ? "" : adfoin_get_parsed_values( $data["dealStage"], $posted_data ); $deal_owner = empty( $data["dealOwner"] ) ? "" : adfoin_get_parsed_values( $data["dealOwner"], $posted_data ); $deal_value = empty( $data["dealValue"] ) ? "" : adfoin_get_parsed_values( $data["dealValue"], $posted_data ); $endpoint = "deals"; $request_data = array( "deal" => array( "title" => $deal_tile, "description" => $deal_description, "currency" => $deal_currency, "owner" => $deal_owner, "value" => $deal_value * 100, "stage" => $deal_stage, "contact" => $contact_id ) ); adfoin_activecampaign_request( $endpoint, "POST", $request_data, $record ); } if( $contact_id && $note ) { $endpoint = "notes"; $request_data = array( "note" => array( "note" => $note, "relid" => $contact_id, "reltype" => "Subscriber" ) ); adfoin_activecampaign_request( $endpoint, "POST", $request_data, $record ); } return; } }