function uc_paypal_wps_form in Ubercart 6.2
Same name and namespace in other branches
- 5 payment/uc_paypal/uc_paypal.module \uc_paypal_wps_form()
- 7.3 payment/uc_paypal/uc_paypal.module \uc_paypal_wps_form()
Returns the form elements for the Website Payments Standard form.
1 string reference to 'uc_paypal_wps_form'
- uc_paypal_form_alter in payment/
uc_paypal/ uc_paypal.module - Implements hook_form_alter().
File
- payment/
uc_paypal/ uc_paypal.module, line 885 - Integrates various PayPal payment services and Instant Payment Notifications (IPN) with Ubercart!
Code
function uc_paypal_wps_form($form_state, $order) {
$shipping = 0;
foreach ($order->line_items as $item) {
if ($item['type'] == 'shipping') {
$shipping += $item['amount'];
}
}
$tax = 0;
if (module_exists('uc_taxes')) {
foreach (uc_taxes_calculate($order) as $tax_item) {
$tax += $tax_item->amount;
}
}
$address = variable_get('uc_paypal_wps_address_selection', 'billing');
$country = uc_get_country_data(array(
'country_id' => $order->{$address . '_country'},
));
if ($country === FALSE) {
$country = array(
0 => array(
'country_iso_code_2' => 'US',
),
);
}
$phone = '';
for ($i = 0; $i < strlen($order->{$address . '_phone'}); $i++) {
if (is_numeric($order->{$address . '_phone'}[$i])) {
$phone .= $order->{$address . '_phone'}[$i];
}
}
/**
* night_phone_a: The area code for U.S. phone numbers, or the country code
* for phone numbers outside the U.S.
* night_phone_b: The three-digit prefix for U.S. phone numbers, or the
* entire phone number for phone numbers outside the U.S.,
* excluding country code.
* night_phone_c: The four-digit phone number for U.S. phone numbers.
* (Not Used for UK numbers)
*/
if ($country[0]['country_iso_code_2'] == 'US' || $country[0]['country_iso_code_2'] == 'CA') {
$phone = substr($phone, -10);
$phone_a = substr($phone, 0, 3);
$phone_b = substr($phone, 3, 3);
$phone_c = substr($phone, 6, 4);
}
$context = array(
'revision' => 'formatted-original',
'type' => 'amount',
);
$options = array(
'sign' => FALSE,
'thou' => FALSE,
'dec' => '.',
);
$data = array(
// PayPal command variable
'cmd' => '_cart',
// Set the correct codepage
'charset' => 'utf-8',
// IPN control notify URL
'notify_url' => url('uc_paypal/ipn/' . $order->order_id, array(
'absolute' => TRUE,
)),
// Display information
'cancel_return' => url('uc_paypal/wps/cancel', array(
'absolute' => TRUE,
)),
'no_note' => 1,
'no_shipping' => variable_get('uc_paypal_wps_no_shipping', 1),
'return' => url('uc_paypal/wps/complete/' . $order->order_id, array(
'absolute' => TRUE,
)),
'rm' => 1,
// Transaction information
'currency_code' => variable_get('uc_paypal_wps_currency', 'USD'),
'handling_cart' => uc_price($shipping, $context, $options),
'invoice' => $order->order_id . '-' . uc_cart_get_id(),
'tax_cart' => uc_price($tax, $context, $options),
// Shopping cart specific variables
'business' => variable_get('uc_paypal_wps_email', ''),
'upload' => 1,
'lc' => variable_get('uc_paypal_wps_language', 'US'),
// Prepopulating forms/address overriding
'address1' => substr($order->{$address . '_street1'}, 0, 100),
'address2' => substr($order->{$address . '_street2'}, 0, 100),
'city' => substr($order->{$address . '_city'}, 0, 40),
'country' => $country[0]['country_iso_code_2'],
'email' => $order->primary_email,
'first_name' => substr($order->{$address . '_first_name'}, 0, 32),
'last_name' => substr($order->{$address . '_last_name'}, 0, 64),
'state' => uc_get_zone_code($order->{$address . '_zone'}),
'zip' => $order->{$address . '_postal_code'},
'night_phone_a' => $phone_a,
'night_phone_b' => $phone_b,
'night_phone_c' => $phone_c,
);
if (variable_get('uc_paypal_wps_address_override', TRUE)) {
$data['address_override'] = 1;
}
// Account for stores that just want to authorize funds instead of capture.
if (variable_get('uc_paypal_wps_payment_action', 'Sale') == 'Authorization') {
$data['paymentaction'] = 'authorization';
}
$context['subject'] = array(
'order' => $order,
);
if (variable_get('uc_paypal_wps_submit_method', 'single') == 'itemized') {
// List individual items
$context['type'] = 'order_product';
$i = 0;
foreach ($order->products as $item) {
$i++;
$context['subject']['product'] = $item;
$context['subject']['node'] = node_load($item->nid);
$data['amount_' . $i] = uc_price($item->price, $context, $options);
$data['item_name_' . $i] = $item->title;
$data['item_number_' . $i] = $item->model;
$data['quantity_' . $i] = $item->qty;
// PayPal will only display the first two...
if (!empty($item->data['attributes']) && count($item->data['attributes']) > 0) {
$o = 0;
foreach ($item->data['attributes'] as $name => $setting) {
$data['on' . $o . '_' . $i] = $name;
$data['os' . $o . '_' . $i] = implode(', ', (array) $setting);
$o++;
}
}
}
// Apply discounts (negative amount line items). For example, this handles line items created by uc_coupon.
$discount = 0;
foreach ($order->line_items as $item) {
if ($item['amount'] < 0) {
// The minus sign is not an error! The discount amount must be positive.
$discount -= $item['amount'];
}
}
if ($discount != 0) {
$data['discount_amount_cart'] = $discount;
}
}
else {
// List the whole cart as a single item to account for fees/discounts
$context['type'] = 'order_total';
$data['amount_1'] = uc_price($order->order_total - $shipping - $tax, $context, $options);
$data['item_name_1'] = t('Order @order_id at !store', array(
'@order_id' => $order->order_id,
'!store' => variable_get('uc_store_name', url('<front>', array(
'absolute' => TRUE,
))),
));
$data['on0_1'] = t('Product count');
$data['os0_1'] = count($order->products);
}
$form['#action'] = variable_get('uc_paypal_wps_server', 'https://www.sandbox.paypal.com/cgi-bin/webscr');
foreach ($data as $name => $value) {
if (!empty($value)) {
$form[$name] = array(
'#type' => 'hidden',
'#value' => $value,
);
}
}
$form['submit'] = array(
'#type' => 'submit',
'#value' => variable_get('uc_paypal_wps_checkout_button', t('Submit Order')),
);
return $form;
}