You are here

function ga_push_method_ga_js_push in GA Push 8

Same name and namespace in other branches
  1. 7 inc/ga_push.ga_js.inc \ga_push_method_ga_js_push()

Send the ga push to JS on page load.

Return value

string GA script.

See also

https://developers.google.com/analytics/devguides/collection/gajs

1 call to ga_push_method_ga_js_push()
ga_push_page_attachments in ./ga_push.module
Implements hook_page_attachments().

File

inc/ga_push.ga_js.inc, line 28
Classic GA Javascript: method and functions.

Code

function ga_push_method_ga_js_push() {
  $session_key = 'ga_push_' . GA_PUSH_METHOD_GA_JS;
  $script = NULL;
  if (isset($_SESSION[$session_key])) {
    $id = \Drupal::service('ga_push.google_analytics_id')
      ->getAnalyticsId();
    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 += [
              'eventLabel' => '',
              'eventValue' => 1,
            ];
            $push_map = [
              '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 = [
              '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 = [
              '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]);
    }
  }
  return $script;
}