__('Wealthbox', 'advanced-form-integration'), 'tasks' => array( 'add_contact' => __('Add Contact', 'advanced-form-integration'), ), ); return $actions; } /** * Get Wealthbox credentials by ID * * @param string $cred_id Credential ID (optional, can be from $_POST) * @return array Array with 'api_token' key, or empty string if not found */ function adfoin_wealthbox_get_credentials( $cred_id = '' ) { // If no cred_id provided, try to get from POST if ( empty( $cred_id ) && isset( $_POST['credId'] ) ) { $cred_id = sanitize_text_field( wp_unslash( $_POST['credId'] ) ); } $api_token = ''; if ( $cred_id ) { $credentials = adfoin_read_credentials( 'wealthbox' ); foreach( $credentials as $single ) { if( $single['id'] == $cred_id ) { $api_token = $single['api_token']; break; } } } else { // Fallback to old options if no cred_id provided $api_token = get_option( 'adfoin_wealthbox_api_token' ) ? get_option( 'adfoin_wealthbox_api_token' ) : ''; } return array( 'api_token' => $api_token ); } add_filter('adfoin_settings_tabs', 'adfoin_wealthbox_settings_tab', 10, 1); function adfoin_wealthbox_settings_tab($providers) { $providers['wealthbox'] = __('Wealthbox', 'advanced-form-integration'); return $providers; } add_action( 'adfoin_settings_view', 'adfoin_wealthbox_settings_view', 10, 1 ); function adfoin_wealthbox_settings_view($current_tab) { if ($current_tab != 'wealthbox') { return; } // Load Account Manager if ( ! class_exists( 'ADFOIN_Account_Manager' ) ) { require_once plugin_dir_path( __FILE__ ) . '../../includes/class-adfoin-account-manager.php'; } // Migrate old settings if they exist and no new credentials exist $old_api_token = get_option( 'adfoin_wealthbox_api_token' ); $existing_creds = adfoin_read_credentials( 'wealthbox' ); if ( $old_api_token && empty( $existing_creds ) ) { $new_cred = array( 'id' => wp_generate_uuid4(), 'title' => 'Default Account', 'api_token' => $old_api_token ); adfoin_save_credentials( 'wealthbox', array( $new_cred ) ); } $fields = array( array( 'name' => 'api_token', 'label' => __( 'API Access Token', 'advanced-form-integration' ), 'type' => 'text', 'required' => true, 'placeholder' => __( 'Please enter API Key', 'advanced-form-integration' ), 'mask' => true, // Mask API token in table 'show_in_table' => true, ), ); $instructions = '
  1. ' . __( 'Go to Settings > API Access in your Wealthbox account.', 'advanced-form-integration' ) . '
  2. ' . __( 'Click Create Access Token.', 'advanced-form-integration' ) . '
  3. ' . __( 'Enter your API Access Token above.', 'advanced-form-integration' ) . '
  4. ' . __( 'Click "Add Account" and save your credentials.', 'advanced-form-integration' ) . '
'; ADFOIN_Account_Manager::render_settings_view( 'wealthbox', 'Wealthbox', $fields, $instructions ); } // AJAX Hooks for Account Manager add_action( 'wp_ajax_adfoin_get_wealthbox_credentials', 'adfoin_get_wealthbox_credentials' ); function adfoin_get_wealthbox_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( 'wealthbox' ); } add_action( 'wp_ajax_adfoin_save_wealthbox_credentials', 'adfoin_save_wealthbox_credentials' ); function adfoin_save_wealthbox_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( 'wealthbox', array( 'api_token' ) ); } add_action( 'wp_ajax_adfoin_get_wealthbox_credentials_list', 'adfoin_wealthbox_get_credentials_list_ajax' ); function adfoin_wealthbox_get_credentials_list_ajax() { adfoin_verify_nonce(); if ( ! class_exists( 'ADFOIN_Account_Manager' ) ) { require_once plugin_dir_path( __FILE__ ) . '../../includes/class-adfoin-account-manager.php'; } $fields = array( array( 'name' => 'api_token', 'mask' => true ), ); ADFOIN_Account_Manager::ajax_get_credentials_list( 'wealthbox', $fields ); } add_action( 'adfoin_add_js_fields', 'adfoin_wealthbox_js_fields', 10, 1 ); function adfoin_wealthbox_js_fields($field_data) { } add_action('adfoin_action_fields', 'adfoin_wealthbox_action_fields'); function adfoin_wealthbox_action_fields() { ?> users, 'name', 'id' ); wp_send_json_success( $users ); } /* * Wealthbox API Request */ function adfoin_wealthbox_request($endpoint, $method = 'GET', $data = array(), $record = array(), $cred_id = '') { $credentials = adfoin_wealthbox_get_credentials( $cred_id ); $api_token = $credentials['api_token']; if ( ! $api_token ) { return new WP_Error( 'missing_credentials', __( 'Wealthbox API token is missing.', 'advanced-form-integration' ) ); } $base_url = 'https://api.crmworkspace.com/v1/'; $url = $base_url . $endpoint; $args = array( 'timeout' => 30, 'method' => $method, 'headers' => array( 'Content-Type' => 'application/json', 'ACCESS_TOKEN' => $api_token, ), ); 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( 'adfoin_wealthbox_job_queue', 'adfoin_wealthbox_job_queue', 10, 1 ); function adfoin_wealthbox_job_queue( $data ) { adfoin_wealthbox_send_data( $data['record'], $data['posted_data'] ); } /* * Handles sending data to wealthbox API */ function adfoin_wealthbox_send_data($record, $posted_data) { $record_data = json_decode($record["data"], true); $field_data = isset( $record_data['field_data'] ) ? $record_data['field_data'] : array(); $cred_id = isset( $field_data['credId'] ) ? $field_data['credId'] : ''; $credentials = adfoin_wealthbox_get_credentials( $cred_id ); $api_token = $credentials['api_token']; if( !$api_token ) { return; } if ( adfoin_check_conditional_logic( $record_data['action_data']['cl'] ?? array(), $posted_data ) ) { return; } $data = $record_data['field_data']; $task = $record['task']; $owner = $data["owner"]; if ($task == 'add_contact') { $prefix = empty($data['prefix']) ? '' : adfoin_get_parsed_values($data['prefix'], $posted_data); $firstName = empty($data['firstName']) ? '' : adfoin_get_parsed_values($data['firstName'], $posted_data); $middleName = empty($data['middleName']) ? '' : adfoin_get_parsed_values($data['middleName'], $posted_data); $lastName = empty($data['lastName']) ? '' : adfoin_get_parsed_values($data['lastName'], $posted_data); $suffix = empty($data['suffix']) ? '' : adfoin_get_parsed_values($data['suffix'], $posted_data); $nickname = empty($data['nickname']) ? '' : adfoin_get_parsed_values($data['nickname'], $posted_data); $twitterName = empty($data['twitterName']) ? '' : adfoin_get_parsed_values($data['twitterName'], $posted_data); $linkedinUrl = empty($data['linkedinUrl']) ? '' : adfoin_get_parsed_values($data['linkedinUrl'], $posted_data); $contactSource = empty($data['contactSource']) ? '' : adfoin_get_parsed_values($data['contactSource'], $posted_data); $contactType = empty($data['contactType']) ? '' : adfoin_get_parsed_values($data['contactType'], $posted_data); $status = empty($data['status']) ? '' : adfoin_get_parsed_values($data['status'], $posted_data); $maritalStatus = empty($data['maritalStatus']) ? '' : adfoin_get_parsed_values($data['maritalStatus'], $posted_data); $jobTitle = empty($data['jobTitle']) ? '' : adfoin_get_parsed_values($data['jobTitle'], $posted_data); $companyName = empty($data['companyName']) ? '' : adfoin_get_parsed_values($data['companyName'], $posted_data); $backgroundInfo = empty($data['backgroundInfo']) ? '' : adfoin_get_parsed_values($data['backgroundInfo'], $posted_data); $gender = empty($data['gender']) ? '' : adfoin_get_parsed_values($data['gender'], $posted_data); $householdTitle = empty($data['householdTitle']) ? '' : adfoin_get_parsed_values($data['householdTitle'], $posted_data); $householdName = empty($data['householdName']) ? '' : adfoin_get_parsed_values($data['householdName'], $posted_data); $personalemail = empty($data['personalEmail']) ? '' : adfoin_get_parsed_values($data['personalEmail'], $posted_data); $workemail = empty($data['workEmail']) ? '' : adfoin_get_parsed_values($data['workEmail'], $posted_data); $emailType = empty($data['emailType']) ? '' : adfoin_get_parsed_values($data['emailType'], $posted_data); $primaryemail = empty($data['primaryemail']) ? '' : adfoin_get_parsed_values($data['primaryemail'], $posted_data); $mobile = empty($data['mobile']) ? '' : adfoin_get_parsed_values($data['mobile'], $posted_data); $workPhone = empty($data['workPhone']) ? '' : adfoin_get_parsed_values($data['workPhone'], $posted_data); $homePhone = empty($data['homePhone']) ? '' : adfoin_get_parsed_values($data['homePhone'], $posted_data); $phoneType = empty($data['phoneType']) ? '' : adfoin_get_parsed_values($data['phoneType'], $posted_data); $primaryPhoneNo = empty($data['primaryPhoneNo']) ? '' : adfoin_get_parsed_values($data['primaryPhoneNo'], $posted_data); $tags = empty($data['tags']) ? '' : adfoin_get_parsed_values($data['tags'], $posted_data); $birthDate = empty($data['birthDate']) ? '' : adfoin_get_parsed_values($data['birthDate'], $posted_data); $addressLine1 = empty($data['addressLine1']) ? '' : adfoin_get_parsed_values($data['addressLine1'], $posted_data); $addressLine2 = empty($data['addressLine2']) ? '' : adfoin_get_parsed_values($data['addressLine2'], $posted_data); $city = empty($data['city']) ? '' : adfoin_get_parsed_values($data['city'], $posted_data); $state = empty($data['state']) ? '' : adfoin_get_parsed_values($data['state'], $posted_data); $country = empty($data['country']) ? '' : adfoin_get_parsed_values($data['country'], $posted_data); $zipCode = empty($data['zipCode']) ? '' : adfoin_get_parsed_values($data['zipCode'], $posted_data); $kind = empty($data['kind']) ? '' : adfoin_get_parsed_values($data['kind'], $posted_data); $webAddress = empty($data['webAddress']) ? '' : adfoin_get_parsed_values($data['webAddress'], $posted_data); $webType = empty($data['webType']) ? '' : adfoin_get_parsed_values($data['webType'], $posted_data); $taskName = empty($data['taskName']) ? '' : adfoin_get_parsed_values($data['taskName'], $posted_data); $dueDate = empty($data['dueDate']) ? '' : adfoin_get_parsed_values($data['dueDate'], $posted_data); $category = empty($data['category']) ? '' : adfoin_get_parsed_values($data['category'], $posted_data); $priority = empty($data['priority']) ? '' : adfoin_get_parsed_values($data['priority'], $posted_data); $description = empty($data['description']) ? '' : adfoin_get_parsed_values($data['description'], $posted_data); $linkedTo = empty($data['linkedTo']) ? '' : adfoin_get_parsed_values($data['linkedTo'], $posted_data); $assignedTo = empty($data['assignedTo']) ? '' : adfoin_get_parsed_values($data['assignedTo'], $posted_data); $repeats = empty($data['repeats']) ? '' : adfoin_get_parsed_values($data['repeats'], $posted_data); $anniversary = empty($data['anniversary']) ? '' : adfoin_get_parsed_values($data['anniversary'], $posted_data); $clientSince = empty($data['clientSince']) ? '' : adfoin_get_parsed_values($data['clientSince'], $posted_data); $importantInfo = empty($data['importantInfo']) ? '' : adfoin_get_parsed_values($data['importantInfo'], $posted_data); $personalInterests = empty($data['personalInterests']) ? '' : adfoin_get_parsed_values($data['personalInterests'], $posted_data); $contactEntityType = empty($data['contactEntityType']) ? '' : adfoin_get_parsed_values($data['contactEntityType'], $posted_data); $request_data = array( "prefix" => $prefix, "first_name" => $firstName, "middle_name" => $middleName, "last_name" => $lastName, "suffix" => $suffix, "nickname" => $nickname, "twitter_name" => $twitterName, "linkedin_url" => $linkedinUrl, "contact_source" => $contactSource, "contact_type" => $contactType, "status" => $status, "marital_status" => $maritalStatus, "job_title" => $jobTitle, "company_name" => $companyName, "background_information" => $backgroundInfo, "birth_date" => $birthDate, "anniversary" => $anniversary, "client_since" => $clientSince, "important_information" => $importantInfo, "personal_interests" => $personalInterests, "type" => $contactEntityType, "household" => array( "name" => $householdName, "title" => $householdTitle, ), "gender" => $gender, ); if( $addressLine1 || $addressLine2 || $city || $state || $zipCode || $country ) { $request_data['street_addresses'] = array( array( "street_line_1" => $addressLine1, "street_line_2" => $addressLine2, "city" => $city, "state" => $state, "zip_code" => $zipCode, "country" => $country, "kind" => $kind, ), ); } if ($personalemail || $workemail) { $request_data['email_addresses'] = array(); if ($personalemail) { $request_data["email_addresses"][] = array( "address" => $personalemail, "kind" => 'personal', ); } if ($workemail) { $request_data["email_addresses"][] = array( "address" => $workemail, "kind" => 'work', ); } } if ($mobile || $workPhone || $homePhone) { $request_data['phone_numbers'] = array(); if ($mobile) { $request_data['phone_numbers'][] = array( 'address' => $mobile, 'kind' => 'Mobile', ); } if ($homePhone) { $request_data['phone_numbers'][] = array( 'address' => $homePhone, 'kind' => 'Home', ); } if ($workPhone) { $request_data['phone_numbers'][] = array( 'address' => $workPhone, 'kind' => 'Work', ); } } // if ($phoneNo) { // $request_data["phone_numbers"][] = array( // array( // "address" => $phoneNo, // "principal" => $primaryPhoneNo, // "extension" => "", // "kind" => $phoneType, // ), // ); // } if ($webAddress) { $request_data["websites"] = array( array( "address" => $webAddress, "kind" => $webType, ), ); } if ($owner) { $request_data['assigned_to'] = $owner; } $request_data = array_filter($request_data); $return = adfoin_wealthbox_request('contacts', 'POST', $request_data, $record, $cred_id); } return; }