function uc_googleanalytics_ecommerce_js in Ubercart 7.3
Same name and namespace in other branches
- 8.4 uc_googleanalytics/uc_googleanalytics.module \uc_googleanalytics_ecommerce_js()
- 6.2 uc_googleanalytics/uc_googleanalytics.module \uc_googleanalytics_ecommerce_js()
Build the e-commerce JS passed to Google Analytics for order tracking.
Parameters
$order: The fully loaded order object to convert into GA JS.
Return value
string The JS that should be added to the page footer.
1 call to uc_googleanalytics_ecommerce_js()
- uc_googleanalytics_page_alter in uc_googleanalytics/
uc_googleanalytics.module - Implements hook_page_alter().
File
- uc_googleanalytics/
uc_googleanalytics.module, line 100 - Adds Google Analytics Javascript to the checkout completion page.
Code
function uc_googleanalytics_ecommerce_js($order) {
$analytics_version = variable_get('uc_googleanalytics_version', 'ga.js');
if ($analytics_version == 'analytics.js') {
$script = 'ga("require", "ecommerce", "ecommerce.js");';
}
else {
$script = '';
}
// Lookup the name of the country or default to the ID if it can't be found
// for some reason.
if ($country_data = uc_get_country_data(array(
'country_id' => $order->billing_country,
))) {
$order->billing_country_name = $country_data[0]['country_name'];
}
else {
$order->billing_country_name = $order->billing_country;
}
// Lookup the name of the zone.
$order->billing_zone_name = uc_zone_get_by_id($order->billing_zone);
// Calculate order tax and shipping totals.
$order->tax_total = 0;
$order->shipping_total = 0;
foreach ($order->line_items as $line_item) {
if ($line_item['type'] == 'tax') {
$order->tax_total += $line_item['amount'];
}
elseif ($line_item['type'] == 'shipping') {
$order->shipping_total += $line_item['amount'];
}
}
// Build the transaction arguments.
$trans = array(
'order_id' => $order->order_id,
'store' => uc_store_name(),
'total' => $order->order_total,
'tax' => $order->tax_total,
'shipping' => $order->shipping_total,
'city' => $order->billing_city,
'state' => $order->billing_zone_name,
'country' => $order->billing_country_name,
);
// Allow modules to alter the transaction arguments.
drupal_alter('ucga_trans', $trans, $order);
// Create GA-friendly associative array.
$script_args = array(
'id' => $trans['order_id'],
'affiliation' => $trans['store'],
'revenue' => $trans['total'],
'tax' => $trans['tax'],
'shipping' => $trans['shipping'],
'city' => $trans['city'],
'region' => $trans['state'],
'country' => $trans['country'],
);
// Add the transaction line to the JS.
if ($analytics_version == 'analytics.js') {
$script .= 'ga("ecommerce:addTransaction", ' . drupal_json_encode($script_args) . ');';
}
else {
foreach ($script_args as &$arg) {
$arg = drupal_json_encode($arg);
}
$script .= '_gaq.push(["_addTrans", ' . implode(', ', $script_args) . ']);';
}
// Loop through the products on the order.
foreach ($order->products as $product) {
$product->category = '';
// Try to find a category (term) for the product. Since products most often
// only have one category, the first one returned (in the
// $node->taxonomy_catalog) is chosen.
if (module_exists('taxonomy')) {
$node = node_load($product->nid);
if (isset($node->taxonomy_catalog[LANGUAGE_NONE][0]['tid'])) {
$term = taxonomy_term_load($node->taxonomy_catalog[LANGUAGE_NONE][0]['tid']);
$product->category = $term->name;
}
}
if (empty($product->category)) {
$product->category = t('No category');
}
// Build the item arguments.
$item = array(
'order_id' => $order->order_id,
'sku' => $product->model,
'name' => $product->title,
'category' => $product->category,
'price' => $product->price,
'qty' => $product->qty,
);
// Allow modules to alter the item arguments.
drupal_alter('ucga_item', $item, $product, $trans, $order);
// Create GA-friendly associative array.
$script_args = array(
'id' => $item['order_id'],
'sku' => $item['sku'],
'name' => $item['name'],
'category' => (string) $item['category'],
'price' => $item['price'],
'quantity' => $item['qty'],
);
// Add the item line to the JS.
if ($analytics_version == 'analytics.js') {
$script .= 'ga("ecommerce:addItem", ' . drupal_json_encode($script_args) . ');';
}
else {
foreach ($script_args as &$arg) {
$arg = drupal_json_encode($arg);
}
$script .= '_gaq.push(["_addItem", ' . implode(', ', $script_args) . ']);';
}
}
// Add the function to submit the transaction to GA.
if ($analytics_version == 'analytics.js') {
$script .= 'ga("ecommerce:send");';
}
else {
$script .= '_gaq.push(["_trackTrans"]);';
}
return $script;
}