You are here

ga_push.ga_js.inc in GA Push 7

Same filename and directory in other branches
  1. 8 inc/ga_push.ga_js.inc

Classic GA Javascript: method and functions.

File

inc/ga_push.ga_js.inc
View source
<?php

/**
 * @file
 * Classic GA Javascript: method and functions.
 */

/**
 * GA Push Method callback: Javascript Classic (javascript).
 */
function ga_push_method_ga_js($push, $type, $options) {
  $push_info = array(
    'push' => $push,
    'type' => $type,
  );
  $key = 'ga_push_' . GA_PUSH_METHOD_GA_JS;
  if (!isset($_SESSION[$key])) {
    $_SESSION[$key] = array();
  }
  $_SESSION[$key][] = $push_info;
}

/**
 * Send the ga push to JS on page load.
 *
 * @see https://developers.google.com/analytics/devguides/collection/gajs
 */
function ga_push_method_ga_js_push() {
  $session_key = 'ga_push_' . GA_PUSH_METHOD_GA_JS;
  if (isset($_SESSION[$session_key])) {
    $id = variable_get('googleanalytics_account', '');
    if (!empty($id)) {
      $script = "var _gaq = _gaq || [];\n";
      foreach ($_SESSION[$session_key] as $queued) {
        $push = $queued['push'];
        $type = $queued['type'];
        switch ($type) {
          case GA_PUSH_TYPE_EVENT:

            // Optional: default values:
            $push += array(
              'eventLabel' => '',
              'eventValue' => 1,
            );
            $push_map = array(
              'eventCategory' => 'category',
              'eventAction' => 'action',
              'eventLabel' => 'label',
              'eventValue' => 'value',
              'non-interaction' => 'non-interaction',
            );

            // Mapping.
            $mapped_push = ga_push_push_key_mapper($push_map, $push);

            // Add method.
            array_unshift($mapped_push, '_trackEvent');

            // Convert to JSON to avoid special chars problems that could broke syntax.
            $script_params = json_encode(array_values($mapped_push));

            // Convert to JS function.
            $script .= '_gaq.push(' . $script_params . ");\n";
            break;
          case GA_PUSH_TYPE_ECOMMERCE:

            // Transaction.
            $transaction_push_map = array(
              'id' => 'order_id',
              'affiliation' => 'affiliation',
              'revenue' => 'total',
              'tax' => 'total_tax',
              'shipping' => 'total_shipping',
              'city' => 'city',
              'region' => 'region',
              'country' => 'country',
            );

            // Mapping and initialize empty values assure param order (so no
            // param is in place of another).
            $transaction_mapped_push = ga_push_push_key_mapper($transaction_push_map, $push['trans'], TRUE);
            $transaction_mapped_push = ga_push_clean_empty_array_tail($transaction_mapped_push);

            // Add method.
            array_unshift($transaction_mapped_push, '_addTrans');

            // Build up the transaction.
            $script .= "_gaq.push(" . json_encode(array_values($transaction_mapped_push)) . ");\n";

            // Items.
            $item_push_map = array(
              'id' => 'order_id',
              'sku' => 'sku',
              'name' => 'name',
              'category' => 'category',
              'price' => 'price',
              'quantity' => 'quantity',
            );

            // Build up the items.
            foreach ($push['items'] as $value) {

              // Mapping.
              $item_mapped_push = ga_push_push_key_mapper($item_push_map, $value, TRUE);
              $item_mapped_push = ga_push_clean_empty_array_tail($item_mapped_push);

              // Adding method.
              array_unshift($item_mapped_push, '_addItem');
              $script .= "_gaq.push(" . json_encode(array_values($item_mapped_push)) . ");\n";
            }

            // Currency: by default, you can configure a common, global, currency
            // for all transactions and items through the Google Analytics management
            // web interface. By default, the global currency is used for all items
            // and transactions.
            if (!empty($push['trans']['currency'])) {
              $script .= "_gaq.push(['_set', 'currencyCode', '" . $push['trans']['currency'] . "']);\n";
            }

            // Transaction - end:
            $script .= "_gaq.push(['_trackTrans']);\n ";
            break;
        }
      }
      unset($_SESSION[$session_key]);
      $options = array(
        'type' => 'inline',
        'scope' => 'footer',
      );
      drupal_add_js($script, $options);
    }
  }
}

Functions

Namesort descending Description
ga_push_method_ga_js GA Push Method callback: Javascript Classic (javascript).
ga_push_method_ga_js_push Send the ga push to JS on page load.