private static function get_form_data($form, $config) { // get products $tmp_lead = RGFormsModel::create_lead($form); $products = GFCommon::get_product_fields($form, $tmp_lead); $form_data = array(); // getting billing information $form_data["form_title"] = $form["title"]; $form_data["email"] = rgpost('input_' . str_replace(".", "_", $config["meta"]["customer_fields"]["email"])); $form_data["address1"] = rgpost('input_' . str_replace(".", "_", $config["meta"]["customer_fields"]["address1"])); $form_data["address2"] = rgpost('input_' . str_replace(".", "_", $config["meta"]["customer_fields"]["address2"])); $form_data["city"] = rgpost('input_' . str_replace(".", "_", $config["meta"]["customer_fields"]["city"])); $form_data["state"] = rgpost('input_' . str_replace(".", "_", $config["meta"]["customer_fields"]["state"])); $form_data["zip"] = rgpost('input_' . str_replace(".", "_", $config["meta"]["customer_fields"]["zip"])); $form_data["country"] = rgpost('input_' . str_replace(".", "_", $config["meta"]["customer_fields"]["country"])); $card_field = self::get_creditcard_field($form); $form_data["card_number"] = rgpost("input_{$card_field["id"]}_1"); $form_data["expiration_date"] = rgpost("input_{$card_field["id"]}_2"); $form_data["security_code"] = rgpost("input_{$card_field["id"]}_3"); $form_data["card_name"] = rgpost("input_{$card_field["id"]}_5"); $names = explode(" ", $form_data["card_name"]); $form_data["first_name"] = rgar($names, 0); $form_data["last_name"] = ""; if (count($names) > 0) { unset($names[0]); $form_data["last_name"] = implode(" ", $names); } if (!empty($config["meta"]["setup_fee_enabled"])) { $order_info = self::get_order_info($products, rgar($config["meta"], "recurring_amount_field"), rgar($config["meta"], "setup_fee_amount_field")); } else { $order_info = self::get_order_info($products, rgar($config["meta"], "recurring_amount_field"), ""); } $form_data["line_items"] = $order_info["line_items"]; $form_data["amount"] = $order_info["amount"]; $form_data["fee_amount"] = $order_info["fee_amount"]; // need an easy way to filter the the order info as it is not modifiable once it is added to the transaction object $form_data = apply_filters("gform_authorizenet_form_data_{$form['id']}", apply_filters('gform_authorizenet_form_data', $form_data, $form, $config), $form, $config); return $form_data; }
private function update_entry($form, $lead) { /* * Create a new $lead based on the $_POST values and merge * them into the existing $lead array. */ $post_lead = RGFormsModel::create_lead($form); /* * Final check that the current user can edit the entry */ if ($lead['created_by'] != $post_lead['created_by']) { /* * TODO: log error here */ return false; } /* * Refine the post lead and remove unwanted, restricted and hidden */ $remove_keys = array('id', 'post_id', 'date_created', 'form_id', 'ip', 'source_url', 'user_agent', 'currency', 'created_by'); foreach ($remove_keys as $k) { unset($post_lead[$k]); } $this->unset_lead_data($post_lead, $this->atts['restricted_fields']); $this->unset_lead_data($post_lead, $this->atts['hidden_fields']); foreach ($form['fields'] as $field) { switch (RGFormsModel::get_input_type($field)) { case "captcha": case "html": case "password": case "product": case "coupon": case "quantity": case "shipping": case "donation": case "total": case "singleproduct": case "hiddenproduct": case "singleshipping": case "creditcard": case "page": case "post_image": case "fileupload": if (isset($post_lead[$field['id']])) { unset($post_lead[$field['id']]); } break; default: /* * Check if the field is hidden on the form and then set the value to empty in the new array */ if (RGFormsModel::is_field_hidden($form, $field, $post_lead)) { /* * Just reset all values to blank (even if they don't actually exist) * and we will handle the real merging below. This cuts back on checking field types * and adding particular overrides for particular fields. */ $post_lead[$field['id']] = ''; $post_lead[$field['id'] . '.1'] = ''; $post_lead[$field['id'] . '.2'] = ''; $post_lead[$field['id'] . '.3'] = ''; $post_lead[$field['id'] . '.4'] = ''; $post_lead[$field['id'] . '.5'] = ''; $post_lead[$field['id'] . '.6'] = ''; } break; } } /* * Now lets merge down the post lead with the original * array_merge() doesn't function correctly because of the mixed indexes * and array_replace is PHP5.3 and up, so instead we'll manually write the replace function */ foreach ($lead as $key => $val) { /* * Check if */ if (isset($post_lead[$key])) { $lead[$key] = $post_lead[$key]; } } /* * Now lets update the entry using the Gravity Forms API */ $update = GFAPI::update_entry($lead); if (is_wp_error($update)) { /* * TODO: log error */ return false; } /* we reached hear so the lead was successfully updated */ return true; }
public static function paypalpro_validation($validation_result) { $config = self::is_ready_for_capture($validation_result); if (!$config) { return $validation_result; } require_once self::get_base_path() . "/data.php"; // Determine if feed specific api settings are enabled $local_api_settings = array(); if ($config["meta"]["api_settings_enabled"] == 1) { $local_api_settings = self::get_local_api_settings($config); } // Billing $card_field = self::get_creditcard_field($validation_result["form"]); $card_number = rgpost("input_{$card_field["id"]}_1"); $card_type = GFCommon::get_card_type($card_number); $expiration_date = rgpost("input_{$card_field["id"]}_2"); $country = rgpost('input_' . str_replace(".", "_", $config["meta"]["customer_fields"]["country"])); $country = class_exists('GF_Field_Address') ? GF_Fields::get('address')->get_country_code($country) : GFCommon::get_country_code($country); $billing = array(); $billing['CREDITCARDTYPE'] = $card_type["slug"]; $billing['ACCT'] = $card_number; $billing['EXPDATE'] = $expiration_date[0] . $expiration_date[1]; $billing['CVV2'] = rgpost("input_{$card_field["id"]}_3"); $billing['STREET'] = rgpost('input_' . str_replace(".", "_", $config["meta"]["customer_fields"]["address1"])); $billing['STREET2'] = rgpost('input_' . str_replace(".", "_", $config["meta"]["customer_fields"]["address2"])); $billing['CITY'] = rgpost('input_' . str_replace(".", "_", $config["meta"]["customer_fields"]["city"])); $billing['STATE'] = rgpost('input_' . str_replace(".", "_", $config["meta"]["customer_fields"]["state"])); $billing['ZIP'] = rgpost('input_' . str_replace(".", "_", $config["meta"]["customer_fields"]["zip"])); $billing['COUNTRYCODE'] = $country == "UK" ? "GB" : $country; $billing['CURRENCYCODE'] = GFCommon::get_currency(); // Customer Contact $billing['FIRSTNAME'] = rgpost('input_' . str_replace(".", "_", $config["meta"]["customer_fields"]["first_name"])); $billing['LASTNAME'] = rgpost('input_' . str_replace(".", "_", $config["meta"]["customer_fields"]["last_name"])); $billing['EMAIL'] = rgpost('input_' . str_replace(".", "_", $config["meta"]["customer_fields"]["email"])); $lead = RGFormsModel::create_lead($validation_result["form"]); $product_billing_data = self::get_product_billing_data($validation_result["form"], $lead, $config); $amount = $product_billing_data["amount"]; $products = $product_billing_data["products"]; $billing = array_merge($billing, $product_billing_data["billing"]); if ($config["meta"]["type"] == "product") { if ($amount == 0) { //blank out credit card field if this is the last page if (self::is_last_page($validation_result["form"])) { $_POST["input_{$card_field["id"]}_1"] = ""; } //creating dummy transaction response if there are any visible product fields in the form if (self::has_visible_products($validation_result["form"])) { self::$transaction_response = array("transaction_id" => "N/A", "amount" => 0, "transaction_type" => 1, 'config_id' => $config['id']); } return $validation_result; } //setting up a one time payment $ip = RGFormsModel::get_ip(); $billing['PAYMENTACTION'] = "Sale"; $billing['IPADDRESS'] = $ip == "::1" ? "127.0.0.1" : $ip; $billing['RETURNFMFDETAILS'] = "1"; $billing['BUTTONSOURCE'] = 'gravityforms'; $billing['AMT'] = $amount; $billing['NOTIFYURL'] = get_bloginfo("url") . "/?page=gf_paypalpro_ipn"; self::log_debug("Sending one time payment."); $response = self::post_to_paypal("DoDirectPayment", $billing, $local_api_settings, $validation_result["form"], $lead); if (!empty($response) && !empty($response["TRANSACTIONID"])) { self::$transaction_response = array("transaction_id" => $response["TRANSACTIONID"], "subscription_amount" => 0, "initial_payment_amount" => $response["AMT"], "transaction_type" => 1, 'config_id' => $config['id']); self::log_debug("Payment successful."); return $validation_result; } else { // Payment was not succesful, need to display error message self::log_error("Payment was NOT successful."); return self::set_validation_result($validation_result, $_POST, $response, "capture"); } } else { //setting up a recurring payment $billing['PROFILESTARTDATE'] = gmdate(DATE_ATOM); $billing['SUBSCRIBERNAME'] = $billing['FIRSTNAME'] . " " . $billing['LASTNAME']; $billing['MAXFAILEDPAYMENTS'] = "0"; $interval_unit = self::get_interval_unit($config["meta"]["billing_cycle_type"]); $interval_length = $config["meta"]["billing_cycle_number"]; $billing['BILLINGPERIOD'] = $interval_unit; $billing['BILLINGFREQUENCY'] = $interval_length; $billing['TOTALBILLINGCYCLES'] = $config["meta"]["recurring_times"]; $billing['AMT'] = $amount; //setup fee $setup_fee_amount = 0; if ($config["meta"]["setup_fee_enabled"]) { $setup_fee_product = rgar($products["products"], $config["meta"]["setup_fee_amount_field"]); if (!empty($setup_fee_product)) { $setup_fee_amount = self::get_product_price($setup_fee_product); $billing['INITAMT'] = $setup_fee_amount; } } //trial $trial_amount = 0; if ($config["meta"]["trial_period_enabled"]) { if ($config["meta"]["trial_type"] == "paid") { $trial_product = rgar($products["products"], $config["meta"]["trial_amount_field"]); $trial_amount = empty($trial_product) ? 0 : self::get_product_price($trial_product); $billing["TRIALAMT"] = $trial_amount; } $billing["TRIALBILLINGPERIOD"] = self::get_interval_unit($config["meta"]["trial_period_type"]); $billing["TRIALBILLINGFREQUENCY"] = $config["meta"]["trial_period_number"]; $billing["TRIALTOTALBILLINGCYCLES"] = $config["meta"]["trial_recurring_times"]; } self::log_debug("Sending recurring payment to PayPal."); $response = self::post_to_paypal("CreateRecurringPaymentsProfile", $billing, $local_api_settings, $validation_result["form"], $lead); if (!empty($response) && !empty($response["PROFILEID"])) { self::$transaction_response = array("transaction_id" => rgar($response, "TRANSACTIONID"), "subscription_id" => $response["PROFILEID"], "subscription_amount" => $billing['AMT'], "initial_payment_amount" => $setup_fee_amount, "transaction_type" => 2, 'config_id' => $config['id']); self::log_debug("Recurring payment setup successful."); return $validation_result; } else { // Payment was not successful, need to display error message self::log_error("Recurring payment was NOT successful."); return self::set_validation_result($validation_result, $_POST, $response, "recurring"); } } }
/** * Get form data * * @since * * @uses RGFormsModel::create_lead() * @uses GFCommon::get_product_fields() * @uses rgpost() * @uses apply_filters() * @uses GFP_Stripe::get_order_info() * * @param $form * @param $feed * * @return mixed|void */ public static function get_form_data($form, $feed) { // get products $tmp_lead = RGFormsModel::create_lead($form); $products = GFCommon::get_product_fields($form, $tmp_lead); $form_data = array(); // getting billing information $form_data['form_title'] = $form['title']; $form_data['name'] = rgpost('input_' . str_replace('.', '_', $feed['meta']['customer_fields']['first_name'])) . ' ' . rgpost('input_' . str_replace('.', '_', $feed['meta']['customer_fields']['last_name'])); $form_data['email'] = rgpost('input_' . str_replace('.', '_', $feed['meta']['customer_fields']['email'])); $form_data['address1'] = rgpost('input_' . str_replace('.', '_', $feed['meta']['customer_fields']['address1'])); $form_data['address2'] = rgpost('input_' . str_replace('.', '_', $feed['meta']['customer_fields']['address2'])); $form_data['city'] = rgpost('input_' . str_replace('.', '_', $feed['meta']['customer_fields']['city'])); $form_data['state'] = rgpost('input_' . str_replace('.', '_', $feed['meta']['customer_fields']['state'])); $form_data['zip'] = rgpost('input_' . str_replace('.', '_', $feed['meta']['customer_fields']['zip'])); $form_data['country'] = rgpost('input_' . str_replace('.', '_', $feed['meta']['customer_fields']['country'])); $form_data["credit_card"] = rgpost('stripeToken'); $form_data = apply_filters('gfp_stripe_get_form_data', $form_data, $feed, $products); $order_info_args = ''; $order_info = self::$_this->get_order_info($products, apply_filters('gfp_stripe_get_form_data_order_info', $order_info_args, $feed)); $form_data["line_items"] = $order_info["line_items"]; $form_data["amount"] = $order_info["amount"]; return $form_data; }
/** * Retrieves $lead object from class if it has already been created; otherwise creates a new $lead object. */ public static function create_lead($form) { $lead = !empty(self::$lead) ? self::$lead : RGFormsModel::create_lead($form); self::$lead = $lead; return $lead; }