__('Apollo.io', 'advanced-form-integration'), 'tasks' => [ 'add_contact' => __('Add Contact', 'advanced-form-integration') ] ]; return $actions; } add_filter('adfoin_settings_tabs', 'adfoin_apollo_settings_tab', 10, 1); function adfoin_apollo_settings_tab($providers) { $providers['apollo'] = __('Apollo.io', 'advanced-form-integration'); return $providers; } add_action('adfoin_settings_view', 'adfoin_apollo_settings_view', 10, 1); function adfoin_apollo_settings_view($current_tab) { if ($current_tab !== 'apollo') return; $title = __('Apollo.io', 'advanced-form-integration'); $key = 'apollo'; $arguments = wp_json_encode([ 'platform' => $key, 'fields' => [ ['key' => 'apiToken', 'label' => __('API Token', 'advanced-form-integration'), 'hidden' => true], ] ]); $instructions = __('Go to Admin Settings > Integrations > API and click on Connect. Again go to API Keys and create a new key. Insert a name and click on Create. Copy the API Key.', 'advanced-form-integration'); echo adfoin_platform_settings_template($title, $key, $arguments, $instructions); } add_action('wp_ajax_adfoin_get_apollo_credentials', 'adfoin_get_apollo_credentials'); function adfoin_get_apollo_credentials() { adfoin_verify_nonce(); wp_send_json_success(adfoin_read_credentials('apollo')); } add_action('wp_ajax_adfoin_save_apollo_credentials', 'adfoin_save_apollo_credentials'); function adfoin_save_apollo_credentials() { adfoin_verify_nonce(); if ($_POST['platform'] === 'apollo') { $data = adfoin_array_map_recursive('sanitize_text_field', $_POST['data']); adfoin_save_credentials('apollo', $data); } wp_send_json_success(); } function adfoin_apollo_credentials_list() { foreach (adfoin_read_credentials('apollo') as $option) { printf('', esc_attr($option['id']), esc_html($option['title'])); } } function adfoin_apollo_add_or_update_contact($fields, $record, $cred_id) { // Search for existing contact $search_response = adfoin_apollo_request( 'contacts/search?q_keywords=' . urlencode($fields['email']), 'POST', '', $record, $cred_id ); $search_body = wp_remote_retrieve_body($search_response); $search_data = json_decode($search_body, true); if (!empty($search_data['contacts'])) { // Update existing contact $contact_id = $search_data['contacts'][0]['id']; $update_response = adfoin_apollo_request( 'contacts/' . $contact_id, 'PUT', $fields, $record, $cred_id ); return $update_response; } else { // Create new contact $create_response = adfoin_apollo_request( 'contacts', 'POST', $fields, $record, $cred_id ); return $create_response; } } function adfoin_apollo_add_or_update_company($fields, $record, $cred_id) { // Search for existing contact $search_response = adfoin_apollo_request( 'accounts/search?q_organization_name=' . urlencode($fields['name']), 'POST', '', $record, $cred_id ); $search_body = wp_remote_retrieve_body($search_response); $search_data = json_decode($search_body, true); if (!empty($search_data['accounts'])) { // Update existing contact $company_id = $search_data['accounts'][0]['id']; $update_response = adfoin_apollo_request( 'accounts/' . $company_id, 'PUT', $fields, $record, $cred_id ); return $update_response; } else { // Create new contact $create_response = adfoin_apollo_request( 'accounts', 'POST', $fields, $record, $cred_id ); return $create_response; } } function adfoin_apollo_request($endpoint, $method = 'GET', $data = [], $record = [], $cred_id = '') { $credentials = adfoin_get_credentials_by_id('apollo', $cred_id); $api_token = isset($credentials['apiToken']) ? $credentials['apiToken'] : ''; $url = 'https://api.apollo.io/api/v1/' . ltrim($endpoint, '/'); $args = [ 'method' => $method, 'timeout' => 30, 'headers' => [ 'Content-Type' => 'application/json', 'Cache-Control' => 'no-cache', 'X-Api-Key' => $api_token ] ]; if (in_array($method, ['POST', 'PUT'])) { $args['body'] = wp_json_encode($data); } $response = wp_remote_request($url, $args); if (!empty($record)) { adfoin_add_to_log($response, $url, $args, $record); } return $response; } add_action('wp_ajax_adfoin_get_apollo_users', 'adfoin_get_apollo_users'); function adfoin_get_apollo_users() { adfoin_verify_nonce(); $cred_id = sanitize_text_field( wp_unslash( $_POST['credId'] ) ); $response = adfoin_apollo_request('users/search?per_page=1000', 'GET', [], [], $cred_id); if (is_wp_error($response)) wp_send_json_error(); $body = json_decode(wp_remote_retrieve_body($response), true); if (!empty($body['users'])) { $users = wp_list_pluck($body['users'], 'name', 'id'); wp_send_json_success($users); } else { wp_send_json_error(__('Unable to retrieve users.', 'advanced-form-integration')); } } function adfoin_get_apollo_contact_lists($cred_id) { $response = adfoin_apollo_request('labels', 'GET', [], [], $cred_id); $body = json_decode(wp_remote_retrieve_body($response), true); $lists = []; if (!empty($body)) { $lists = wp_list_pluck($body, 'name'); } return implode(', ', $lists); } add_action( 'wp_ajax_adfoin_get_apollo_fields', 'adfoin_get_apollo_fields', 10 ); /* * Get Apollo subscriber fields */ function adfoin_get_apollo_fields() { adfoin_verify_nonce(); $cred_id = sanitize_text_field( wp_unslash( $_POST['credId'] ) ); $company_stages = adfoin_get_apollo_account_stages( 'account', $cred_id ); $contact_stages = adfoin_get_apollo_account_stages( 'contact', $cred_id ); $contact_lists = adfoin_get_apollo_contact_lists( $cred_id ); $company_fields = array(); array_push($company_fields, array('key' => 'company__name', 'value' => 'Company Name', 'description' => '')); array_push($company_fields, array('key' => 'company__domain', 'value' => 'Company Domain', 'description' => '')); array_push($company_fields, array('key' => 'company__account_stage_id', 'value' => 'Company Stage ID', 'description' => $company_stages)); array_push($company_fields, array('key' => 'company__phone', 'value' => 'Company Phone', 'description' => '')); array_push($company_fields, array('key' => 'company__raw_address', 'value' => 'Company Address', 'description' => '')); $fields = []; array_push($fields, array('key' => 'email', 'value' => 'Email', 'description' => '')); array_push($fields, array('key' => 'first_name', 'value' => 'First Name', 'description' => '')); array_push($fields, array('key' => 'last_name', 'value' => 'Last Name', 'description' => '')); array_push($fields, array('key' => 'title', 'value' => 'Job Title', 'description' => '')); array_push($fields, array('key' => 'contact_stage_id', 'value' => 'Contact Stage ID', 'description' => $contact_stages)); array_push($fields, array('key' => 'website_url', 'value' => 'Website URL', 'description' => '')); array_push($fields, array('key' => 'present_raw_address', 'value' => 'Address', 'description' => '')); array_push($fields, array('key' => 'direct_phone', 'value' => 'Phone', 'description' => '')); array_push($fields, array('key' => 'corporate_phone', 'value' => 'Corporate Phone', 'description' => '')); array_push($fields, array('key' => 'mobile_phone', 'value' => 'Mobile Phone', 'description' => '')); array_push($fields, array('key' => 'other_phone', 'value' => 'Other Phone', 'description' => '')); array_push($fields, array('key' => 'label_names', 'value' => 'Contact Lists', 'description' => $contact_lists)); $fields = array_merge($fields, $company_fields); wp_send_json_success( $fields ); } function adfoin_get_apollo_account_stages($type, $cred_id) { adfoin_verify_nonce(); $response = adfoin_apollo_request("{$type}_stages", 'GET', [], [], $cred_id); $body = json_decode(wp_remote_retrieve_body($response), true); $stages_string = ''; $stages = []; if (!empty($body[$type . '_stages'])) { $stages = array_map(function ($stage) { return $stage['name'] . ': ' . $stage['id']; }, $body[$type . '_stages']); } $stages_string = implode(', ', $stages); return $stages_string; } add_action('adfoin_action_fields', 'adfoin_apollo_action_fields'); function adfoin_apollo_action_fields() { ?> $value) { if (!empty($value)) { $value = adfoin_get_parsed_values($value, $posted_data); if (!empty($value)) { if (strpos($key, 'company__') === 0) { $company_fields[str_replace('company__', '', $key)] = $value; } else { $fields[$key] = $value; } } } } if (!empty($owner_id)) { $company_fields['owner_id'] = $owner_id; } if (isset($fields['label_names']) && !empty($fields['label_names'])) { $fields['label_names'] = explode(',', $fields['label_names']); } $company_response = adfoin_apollo_add_or_update_company($company_fields, $record, $cred_id); $company_body = wp_remote_retrieve_body($company_response); $company_data = json_decode($company_body, true); $company_id = !empty($company_data['account']['id']) ? $company_data['account']['id'] : ''; if (!empty($company_id)) { $fields['account_id'] = $company_id; } $contact_response = adfoin_apollo_add_or_update_contact( $fields, $record, $cred_id); }