__('Copernica', 'advanced-form-integration'), 'tasks' => [ 'add_subscriber' => __('Add Profile', 'advanced-form-integration') ] ]; return $actions; } add_filter('adfoin_settings_tabs', 'adfoin_copernica_settings_tab', 10, 1); function adfoin_copernica_settings_tab($providers) { $providers['copernica'] = __('Copernica', 'advanced-form-integration'); return $providers; } add_action('adfoin_settings_view', 'adfoin_copernica_settings_view', 10, 1); function adfoin_copernica_settings_view($current_tab) { if ($current_tab !== 'copernica') return; $title = __('Copernica', 'advanced-form-integration'); $key = 'copernica'; $arguments = wp_json_encode([ 'platform' => $key, 'fields' => [ ['key' => 'accessToken', 'label' => __('Access Token', 'advanced-form-integration'), 'hidden' => true] ] ]); $instructions = __('Go to Configuration > API access tokens and create. Select SOAP and REST API', 'advanced-form-integration'); echo adfoin_platform_settings_template($title, $key, $arguments, $instructions); } add_action('wp_ajax_adfoin_get_copernica_credentials', 'adfoin_get_copernica_credentials'); function adfoin_get_copernica_credentials() { adfoin_verify_nonce(); wp_send_json_success(adfoin_read_credentials('copernica')); } add_action('wp_ajax_adfoin_save_copernica_credentials', 'adfoin_save_copernica_credentials'); function adfoin_save_copernica_credentials() { adfoin_verify_nonce(); if ($_POST['platform'] === 'copernica') { $data = adfoin_array_map_recursive('sanitize_text_field', $_POST['data']); adfoin_save_credentials('copernica', $data); } wp_send_json_success(); } function adfoin_copernica_credentials_list() { foreach (adfoin_read_credentials('copernica') as $option) { printf('', esc_attr($option['id']), esc_html($option['title'])); } } add_action('adfoin_action_fields', 'adfoin_copernica_action_fields'); function adfoin_copernica_action_fields() { ?> 15, 'headers' => ['Content-Type' => 'application/x-www-form-urlencoded'], 'body' => http_build_query(['access_token' => $access_token]) ]); if (is_wp_error($response)) return ''; if (wp_remote_retrieve_response_code($response) !== 200) { return ''; } $body = wp_remote_retrieve_body($response); if (!empty($body)) { update_option("adfoin_copernica_jwt_{$cred_id}", [ 'jwt' => $body, 'fetched_at' => time() ]); return $body; } return ''; } function adfoin_copernica_request($endpoint, $method = 'GET', $data = [], $record = [], $cred_id = '') { $jwt = adfoin_get_copernica_jwt($cred_id); $url = 'https://rest.copernica.com/v4/' . ltrim($endpoint, '/'); $args = [ 'method' => $method, 'timeout' => 30, 'headers' => [ 'Authorization' => 'Bearer ' . $jwt, 'Content-Type' => 'application/json' ] ]; 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_copernica_databases', 'adfoin_get_copernica_databases'); function adfoin_get_copernica_databases() { adfoin_verify_nonce(); $cred_id = sanitize_text_field( wp_unslash( $_POST['credId'] ) ); $response = adfoin_copernica_request('databases', 'GET', [], [], $cred_id); if (is_wp_error($response)) { wp_send_json_error( __( 'Request failed', 'advanced-form-integration' ) ); return; } $data = json_decode(wp_remote_retrieve_body($response), true); $output = []; if (isset($data['data']) && is_array($data['data'])) { $output = wp_list_pluck($data['data'], 'name', 'ID'); } wp_send_json_success($output); } add_action('wp_ajax_adfoin_get_copernica_fields', 'adfoin_get_copernica_fields'); function adfoin_get_copernica_fields() { adfoin_verify_nonce(); $cred_id = sanitize_text_field( wp_unslash( $_POST['credId'] ) ); $databaseId = sanitize_text_field( wp_unslash( $_POST['databaseId'] ) ); $response = adfoin_copernica_request("database/{$databaseId}/fields", 'GET', [], [], $cred_id); if (is_wp_error($response)) { wp_send_json_error( __( 'Request failed', 'advanced-form-integration' ) ); return; } $body = json_decode(wp_remote_retrieve_body($response), true); if (isset($body['data']) && !empty($body['data'])) { $fields = []; foreach ($body['data'] as $field) { $field_type = $field['type'] ? $field['type'] : ''; $description = ''; if ($field_type === 'select' && !empty($field['value'])) { $options = array_filter(array_map('trim', explode("\n", $field['value']))); $description = __('Options: ', 'advanced-form-integration') . implode(', ', $options); } $fields[] = [ 'key' => $field_type . '__' . $field['name'], 'value' => $field['name'], 'description' => $description ]; } wp_send_json_success($fields); } else { wp_send_json_error( __( 'No fields found', 'advanced-form-integration' ) ); return; } } add_action('adfoin_copernica_job_queue', 'adfoin_copernica_job_queue', 10, 1); function adfoin_copernica_job_queue($data) { adfoin_copernica_send_data($data['record'], $data['posted_data']); } function adfoin_copernica_send_data($record, $posted_data) { $record_data = json_decode($record['data'], true); if (isset($record_data['action_data']['cl']) && adfoin_check_conditional_logic($record_data['action_data']['cl'], $posted_data)) { return; } $data = isset($record_data['field_data']) ? $record_data['field_data'] : []; $task = isset($record_data['task']) ? $record_data['task'] : ''; $cred_id = isset($data['credId']) ? $data['credId'] : ''; $database_id = isset($data['databaseId']) ? $data['databaseId'] : ''; unset($data['credId'], $data['databaseId']); $profile_data = array(); foreach ($data as $key => $value) { if (empty($value)) { continue; } $key_parts = explode('__', $key, 2); $parsed_value = adfoin_get_parsed_values($value, $posted_data); if (!empty($parsed_value)) { $profile_data[$key_parts[1]] = $parsed_value; } } $body = array( 'fields' => $profile_data ); adfoin_copernica_request("database/{$database_id}/profiles", 'POST', $body, $record, $cred_id); }