Index: /var/www/html/drupal/sites/all/modules/ubercart/uc_googleanalytics/uc_googleanalytics.module =================================================================== --- /var/www/html/drupal/sites/all/modules/ubercart/uc_googleanalytics/uc_googleanalytics.module (revision 32) +++ /var/www/html/drupal/sites/all/modules/ubercart/uc_googleanalytics/uc_googleanalytics.module (working copy) @@ -32,10 +32,14 @@ if ((arg(0) == 'cart' && arg(1) == 'checkout' && arg(2) == 'complete') || !empty($checkout_page) && $checkout_page == $_GET['q']) { if ($order = uc_order_load($_SESSION['uc_googleanalytics_order_id'])) { - $script .= _uc_googleanalytics_ecommerce_form($order); + if (variable_get('googleanalytics_legacy_version', 0)) { + $script .= _uc_googleanalytics_ecommerce_form($order); + uc_add_js('$(document).ready(function() { __utmSetTrans(); });', 'inline'); + } else { + $script .= _uc_googleanalytics_ecommerce_script($order); + } $_SESSION['uc_googleanalytics_order_id'] = NULL; unset($_SESSION['uc_googleanalytics_order_id']); - uc_add_js('$(document).ready(function() { __utmSetTrans(); });', 'inline'); } } return $script; @@ -62,6 +66,9 @@ * Helper Functions ******************************************************************************/ +/** + * Track sales using Google Analytics old tracking code. + */ function _uc_googleanalytics_ecommerce_form(&$order) { $script = ''; $UTM_T = ''; @@ -123,3 +130,69 @@ return $script; } + +/** + * Track sales using Google Analytics new tracking code. + */ +function _uc_googleanalytics_ecommerce_script(&$order) { + $script = ''; + $transaction = ''; + $items = ''; + $tax = 0; + $shipping_cost = 0; + + // Finding name of country, if not use the country code from ubercart + if ($country_data = uc_get_country_data(array("country_id" => $order->billing_country))) { + $country = $country_data[0]['country_name']; + } else { + $country = $order->billing_country; + } + + foreach ($order->products as $product) { + // Try to find a category (term) for the product + // Since products most often only have one category, the first one returned (based on tid) is chosen + $terms = taxonomy_node_get_terms($product->nid); + if (count($terms)) { + $term = array_shift($terms); + $category = $term->name; + } + else { + $category = t('No category'); + } + // using the model field as SKU + $items .= 'pageTracker._addItem(' + .'"'. $product->order_id .'", ' + .'"'. $product->model .'", ' + .'"'. $product->title .'", ' + .'"'. $category .'", ' + .'"'. $product->price .'", ' + .'"'. $product->qty .'"' + .');'; + } + + foreach ($order->line_items as $line_item) { + if ($line_item['type'] == 'tax') { + $tax += $line_item['amount']; + } + if ($line_item['type'] == 'shipping') { + $shipping_cost += $line_item['amount']; + } + } + + $transaction = 'pageTracker._addTrans(' + .'"'. $order->order_id .'", ' + .'"'. variable_get('uc_store_name', 'Ubercart') .'", ' + .'"'. $order->order_total .'", ' + .'"'. $tax .'", ' + .'"'. $shipping_cost .'", ' + .'"'. check_plain($order->billing_city) .'", ' + .'"'. check_plain($order->billing_postal_code) .'", ' + .'"'. $country .'"' + .');'; + + $script .= $transaction; + $script .= $items; + $script .= 'pageTracker._trackTrans();'; + + drupal_add_js($script, 'inline', 'footer'); +}