File: /home/dfwparty/mattymcfun.com/wp-content/plugins/ws-form-paypal-checkout/js/paypal-checkout.js
(function($) {
'use strict';
var paypal_loaded_#form_instance_id = false;
if(
(typeof(paypal) === 'undefined') &&
(paypal_loaded_#form_instance_id === false)
) {
// Request checkout.js
$.ajaxSetup({ cache: true });
// Build script URL
var paypal_script = 'https://www.paypal.com/sdk/js?client-id=#action_paypalcheckout_client_id¤cy=' + paypal_get_currency_#form_instance_id() + '&locale=' + paypal_get_locale_#form_instance_id();
// Disabled funding
var disable_funding_array = [];
if('#action_paypalcheckout_disable_funding_card' === 'on') { disable_funding_array.push('card'); }
if('#action_paypalcheckout_disable_funding_credit' === 'on') { disable_funding_array.push('credit'); }
if(disable_funding_array.length) { paypal_script += '&disable-funding=' + disable_funding_array.join(','); }
// Get script
$.getScript(paypal_script, function() {
// Initialize script
paypal_init_#form_instance_id();
});
paypal_loaded_#form_instance_id = true;
} else {
// Do not load checkout.js twice
paypal_init_#form_instance_id();
}
function paypal_validate_#form_instance_id(actions) {
// Register form validation real time hook
window.wsf_form_instances[#form_instance_id].form_validate_real_time_register_hook(function(form_valid) {
paypal_button_enabled_#form_instance_id() ? actions.enable() : actions.disable();
});
// Initial call
return paypal_button_enabled_#form_instance_id() ? actions.enable() : actions.disable();
}
function paypal_message_#form_instance_id(message) {
var method = '#action_paypalcheckout_message_method';
var form_hide = '#action_paypalcheckout_message_form_hide';
var duration = '#action_paypalcheckout_message_duration';
var clear = '#action_paypalcheckout_message_clear';
var scroll_top = '#action_paypalcheckout_message_scroll_top';
window.wsf_form_instances[#form_instance_id].action_message(message, 'danger', method, duration, form_hide, clear, scroll_top, true, true);
}
function paypal_on_click_#form_instance_id(actions) {
var ws_form = window.wsf_form_instances[#form_instance_id];
// PayPal button not opened, so do something else
if(!paypal_button_enabled_#form_instance_id()) {
var paypal_total = paypal_get_amount_total_#form_instance_id();
if(paypal_total == 0) {
// Process as zero amount
switch('#action_paypalcheckout_transaction_zero') {
// Submit form
case 'submit' : ws_form.form_obj.submit(); break;
// Show message
case 'message' :
var message = '#action_paypalcheckout_transaction_zero_message';
paypal_message_#form_instance_id(message);
break;
}
} else {
// Form is not valid, so submit it to simulate validation
ws_form.form_obj.submit();
}
}
}
function paypal_button_enabled_#form_instance_id() {
var paypal_total = paypal_get_amount_total_#form_instance_id();
var form_valid = window.wsf_form_instances[#form_instance_id].form_valid;
return (paypal_total > 0) && form_valid;
}
function paypal_get_amount_total_#form_instance_id() {
var ws_form = window.wsf_form_instances[#form_instance_id];
var transaction_total = '#action_paypalcheckout_transaction_total';
if(transaction_total == '') { transaction_total = '#ecommerce_cart_total'; }
// Get PayPal total
var paypal_total = ws_form.parse_variables_process(transaction_total).output;
// Convert to a number
paypal_total = ws_form.get_number(paypal_total);
return paypal_total;
}
function paypal_get_payer_#form_instance_id() {
var ws_form = window.wsf_form_instances[#form_instance_id];
var payer = {};
// Build payer address
var payer_address = {};
// Address, phone
var payer_address_mapping = #action_paypalcheckout_payer_address_mapping;
for(var payer_address_mapping_index in payer_address_mapping) {
var payer_address_map = payer_address_mapping[payer_address_mapping_index];
if(typeof(payer_address_map.action_paypalcheckout_payer_address_field) === 'undefined') { continue; }
var payer_address_field = payer_address_map.action_paypalcheckout_payer_address_field;
if(payer_address_field == '') { continue; }
if(typeof(payer_address_map.ws_form_field) === 'undefined') { continue; }
if(payer_address_map.ws_form_field == '') { continue; }
var value = ws_form.parse_variables_process('#field(' + payer_address_map.ws_form_field + ')').output;
// Check country code
if(payer_address_field == 'country_code') {
value = paypal_check_country_code_#form_instance_id(value);
}
if(value != '') { payer_address[payer_address_field] = value; }
}
// Check minimum requirements for payer address
var payer_address_valid = (
((typeof(payer_address.address_line_1) !== 'undefined') && (payer_address.address_line_1 != '')) &&
((typeof(payer_address.admin_area_2) !== 'undefined') && (payer_address.admin_area_2 != '')) &&
((typeof(payer_address.admin_area_1) !== 'undefined') && (payer_address.admin_area_1 != '')) &&
((typeof(payer_address.postal_code) !== 'undefined') && (payer_address.postal_code != '')) &&
((typeof(payer_address.country_code) !== 'undefined') && (payer_address.country_code != ''))
);
if(payer_address_valid) {
payer.address = payer_address;
}
// Recipient name
var payer_name = {};
var payer_name_set = false;
if('#action_paypalcheckout_payer_given_name' != '') { payer_name.given_name = ws_form.parse_variables_process('#action_paypalcheckout_payer_given_name').output; payer_name_set = true; }
if('#action_paypalcheckout_payer_surname' != '') { payer_name.surname = ws_form.parse_variables_process('#action_paypalcheckout_payer_surname').output; payer_name_set = true; }
if(payer_name_set) { payer.name = payer_name; }
// Email address
if('#action_paypalcheckout_payer_email_address' != '') { payer.email_address = ws_form.parse_variables_process('#action_paypalcheckout_payer_email_address').output; payer_name_set = true; }
// Phone
if(
('#action_paypalcheckout_payer_phone_type' != '') &&
('#action_paypalcheckout_payer_phone' != '')
) {
// Get national number
var national_number = ws_form.parse_variables_process('#action_paypalcheckout_payer_phone').output;
national_number = national_number.replace(/\D/g, '');
payer.phone = {
phone_type: '#action_paypalcheckout_payer_phone_type',
phone_number: {
national_number: national_number
}
};
}
return payer;
}
function paypal_get_shipping_#form_instance_id() {
var ws_form = window.wsf_form_instances[#form_instance_id];
var shipping = {};
// Build shipping address
var shipping_address = {};
// Address, phone
var shipping_address_mapping = #action_paypalcheckout_shipping_address_mapping;
for(var shipping_address_mapping_index in shipping_address_mapping) {
var shipping_address_map = shipping_address_mapping[shipping_address_mapping_index];
if(typeof(shipping_address_map.action_paypalcheckout_shipping_address_field) === 'undefined') { continue; }
var shipping_address_field = shipping_address_map.action_paypalcheckout_shipping_address_field;
if(shipping_address_field == '') { continue; }
if(typeof(shipping_address_map.ws_form_field) === 'undefined') { continue; }
if(shipping_address_map.ws_form_field == '') { continue; }
var value = ws_form.parse_variables_process('#field(' + shipping_address_map.ws_form_field + ')').output;
// Check country code
if(shipping_address_field == 'country_code') {
value = paypal_check_country_code_#form_instance_id(value);
}
if(value != '') { shipping_address[shipping_address_field] = value; }
}
// Check minimum requirements for shipping address
var shipping_address_valid = (
((typeof(shipping_address.address_line_1) !== 'undefined') && (shipping_address.address_line_1 != '')) &&
((typeof(shipping_address.admin_area_2) !== 'undefined') && (shipping_address.admin_area_2 != '')) &&
((typeof(shipping_address.admin_area_1) !== 'undefined') && (shipping_address.admin_area_1 != '')) &&
((typeof(shipping_address.postal_code) !== 'undefined') && (shipping_address.postal_code != '')) &&
((typeof(shipping_address.country_code) !== 'undefined') && (shipping_address.country_code != ''))
);
if(shipping_address_valid) {
shipping.address = shipping_address;
}
// Recipient name
if('#action_paypalcheckout_shipping_recipient_name' != '') {
shipping.name = {
fullname: ws_form.parse_variables_process('#action_paypalcheckout_shipping_recipient_name').output
}
}
return shipping;
}
function paypal_check_country_code_#form_instance_id(country_code) {
if(country_code.length != 2) { return ''; }
var country_codes = ['AD','AE','AG','AI','AL','AM','AO','AR','AT','AU','AW','AZ','BA','BB','BE','BF','BG','BH','BI','BJ','BM','BN','BO','BR','BS','BT','BW','BY','BZ','C2','CA','CD','CG','CH','CI','CK','CL','CM','CO','CR','CV','CY','CZ','DE','DJ','DK','DM','DO','DZ','EC','EE','EG','ER','ES','ET','FI','FJ','FK','FM','FO','FR','GA','GB','GD','GE','GF','GI','GL','GM','GN','GP','GR','GT','GW','GY','HK','HN','HR','HU','ID','IE','IL','IN','IS','IT','JM','JO','JP','KE','KG','KH','KI','KM','KN','KR','KW','KY','KZ','LA','LC','LI','LK','LS','LT','LU','LV','MA','MC','MD','ME','MG','MH','MK','ML','MN','MQ','MR','MS','MT','MU','MV','MW','MX','MY','MZ','NA','NC','NE','NF','NG','NI','NL','NO','NP','NR','NU','NZ','OM','PA','PE','PF','PG','PH','PL','PM','PN','PT','PW','PY','QA','RE','RO','RS','RU','RW','SA','SB','SC','SE','SG','SH','SI','SJ','SK','SL','SM','SN','SO','SR','ST','SV','SZ','TC','TD','TG','TH','TJ','TM','TN','TO','TT','TV','TW','TZ','UA','UG','US','UY','VA','VC','VE','VG','VN','VU','WF','WS','YE','YT','ZA','ZM','ZW'];
country_code = country_code.toUpperCase();
if(!country_codes.includes(country_code)) { return ''; }
return country_code;
}
function paypal_get_amount_breakdown_#form_instance_id() {
var ws_form = window.wsf_form_instances[#form_instance_id];
var amount_breakdown = {};
var detail_mapping = #action_paypalcheckout_transaction_detail_mapping;
for(var detail_mapping_index in detail_mapping) {
var detail_map = detail_mapping[detail_mapping_index];
if(typeof(detail_map.action_paypalcheckout_price_type) === 'undefined') { continue; }
if(detail_map.action_paypalcheckout_price_type == '') { continue; }
if(typeof(detail_map.ws_form_field_ecommerce_price_cart) === 'undefined') { continue; }
if(detail_map.ws_form_field_ecommerce_price_cart == '') { continue; }
amount_breakdown[detail_map.action_paypalcheckout_price_type] = {
value: ws_form.get_number(ws_form.parse_variables_process('#field_float(' + detail_map.ws_form_field_ecommerce_price_cart + ')').output),
currency_code: paypal_get_currency_#form_instance_id()
};
}
return amount_breakdown;
}
function paypal_get_transaction_#form_instance_id() {
var ws_form = window.wsf_form_instances[#form_instance_id];
var shipping_enabled = ('#action_paypalcheckout_shipping' == 'on');
var transaction = {
intent: 'CAPTURE',
purchase_units: [{
amount: {
value: paypal_get_amount_total_#form_instance_id(),
currency_code: paypal_get_currency_#form_instance_id(),
breakdown: paypal_get_amount_breakdown_#form_instance_id()
},
description: ws_form.parse_variables_process('#action_paypalcheckout_transaction_description').output,
}],
payer: paypal_get_payer_#form_instance_id(),
}
// Shipping
if(shipping_enabled) {
var shipping = paypal_get_shipping_#form_instance_id();
if(Object.keys(shipping).length !== 0) {
transaction.purchase_units[0].shipping = shipping;
transaction.application_context = {
shipping_preference: 'SET_PROVIDED_ADDRESS'
};
}
} else {
transaction.application_context = {
shipping_preference: 'NO_SHIPPING'
};
}
// Store transaction packet
ws_form.form_ecommerce_set_transaction(JSON.stringify(transaction));
// Set status
ws_form.form_ecommerce_set_status('pending_payment');
return transaction;
}
function paypal_get_currency_#form_instance_id() {
return '#action_paypalcheckout_transaction_currency' ? '#action_paypalcheckout_transaction_currency' : '#currency';
}
function paypal_get_locale_#form_instance_id() {
return '#action_paypalcheckout_transaction_locale' ? '#action_paypalcheckout_transaction_locale' : '#locale';
}
function paypal_init_#form_instance_id() {
var ws_form = window.wsf_form_instances[#form_instance_id];
// Style
var paypal_checkout_style_#form_instance_id = {
layout: '#action_paypalcheckout_button_layout',
color: '#action_paypalcheckout_button_color',
shape: '#action_paypalcheckout_button_shape',
label: '#action_paypalcheckout_button_label',
tagline: ('#action_paypalcheckout_button_layout' == 'horizontal') && ('#action_paypalcheckout_button_tagline' == 'on')
};
// Height
var paypal_checkout_height_#form_instance_id = parseInt('#action_paypalcheckout_button_height');
if(paypal_checkout_height_#form_instance_id > 0) { paypal_checkout_style_#form_instance_id.height = paypal_checkout_height_#form_instance_id; }
paypal.Buttons({
style: paypal_checkout_style_#form_instance_id,
commit: true,
createOrder: function(data, actions) {
ws_form.log('log_payment', 'PayPal Checkout - Payment Initiated', 'payment');
return actions.order.create(paypal_get_transaction_#form_instance_id());
},
onInit: function(data, actions) {
ws_form.log('log_payment', 'PayPal Checkout - Validated', 'payment');
paypal_validate_#form_instance_id(actions);
},
onClick: function() {
ws_form.log('log_payment', 'PayPal Checkout - Clicked', 'payment');
paypal_on_click_#form_instance_id();
},
onApprove: function(data, actions) {
return actions.order.capture().then(function(data) {
var transaction_id = data.purchase_units[0].payments.captures[0].id;
var amount = data.purchase_units[0].payments.captures[0].amount.value;
ws_form.log('log_payment', 'PayPal Checkout - Authorized', 'payment');
ws_form.form_ecommerce_payment_process(transaction_id, amount, 'PayPal Checkout');
});
},
onRender: function() {
ws_form.log('log_payment', 'PayPal Checkout - Rendered', 'payment');
},
onDisplay: function() {
ws_form.log('log_payment', 'PayPal Checkout - Displayed', 'payment');
},
onError: function(err) {
ws_form.form_ecommerce_payment_error('PayPal Checkout<pre>\n\n' + err + '</pre>');
ws_form.form_ecommerce_set_status('failed');
paypal_message_#form_instance_id('A PayPal error occurred. Please check your form and try again.');
// actions.restart();
},
onCancel: function(data, actions) {
ws_form.log('log_payment', 'PayPal Checkout - Cancelled', 'payment');
ws_form.form_ecommerce_set_status('cancelled');
}
}).render('##id');
}
})(jQuery);