Rearrange php libs/includes and produce sitemap.xml
[busui.git] / lib / ga.php
blob:a/lib/ga.php -> blob:b/lib/ga.php
  <?php
   
  /**
  Copyright 2009 Google Inc. All Rights Reserved.
  **/
   
  // Tracker version.
  define("VERSION", "4.4sh");
   
  define("COOKIE_NAME", "__utmmobile");
   
  // The path the cookie will be available to, edit this to use a different
  // cookie path.
  define("COOKIE_PATH", "/");
   
  // Two years in seconds.
  define("COOKIE_USER_PERSISTENCE", 63072000);
   
  // 1x1 transparent GIF
  $GIF_DATA = array(
  chr(0x47), chr(0x49), chr(0x46), chr(0x38), chr(0x39), chr(0x61),
  chr(0x01), chr(0x00), chr(0x01), chr(0x00), chr(0x80), chr(0xff),
  chr(0x00), chr(0xff), chr(0xff), chr(0xff), chr(0x00), chr(0x00),
  chr(0x00), chr(0x2c), chr(0x00), chr(0x00), chr(0x00), chr(0x00),
  chr(0x01), chr(0x00), chr(0x01), chr(0x00), chr(0x00), chr(0x02),
  chr(0x02), chr(0x44), chr(0x01), chr(0x00), chr(0x3b)
  );
   
  // The last octect of the IP address is removed to anonymize the user.
  function getIP($remoteAddress) {
  if (empty($remoteAddress)) {
  return "";
  }
   
  // Capture the first three octects of the IP address and replace the forth
  // with 0, e.g. 124.455.3.123 becomes 124.455.3.0
  $regex = "/^([^.]+\.[^.]+\.[^.]+\.).*/";
  if (preg_match($regex, $remoteAddress, $matches)) {
  return $matches[1] . "0";
  } else {
  return "";
  }
  }
   
  // Generate a visitor id for this hit.
  // If there is a visitor id in the cookie, use that, otherwise
  // use the guid if we have one, otherwise use a random number.
  function getVisitorId($guid, $account, $userAgent, $cookie) {
   
  // If there is a value in the cookie, don't change it.
  if (!empty($cookie)) {
  return $cookie;
  }
   
  $message = "";
  if (!empty($guid)) {
  // Create the visitor id using the guid.
  $message = $guid . $account;
  } else {
  // otherwise this is a new user, create a new random id.
  $message = $userAgent . uniqid(getRandomNumber(), true);
  }
   
  $md5String = md5($message);
   
  return "0x" . substr($md5String, 0, 16);
  }
   
  // Get a random number string.
  function getRandomNumber() {
  return rand(0, 0x7fffffff);
  }
   
  // Writes the bytes of a 1x1 transparent gif into the response.
  function writeGifData() {
  global $GIF_DATA;
  header("Content-Type: image/gif");
  header("Cache-Control: " .
  "private, no-cache, no-cache=Set-Cookie, proxy-revalidate");
  header("Pragma: no-cache");
  header("Expires: Wed, 17 Sep 1975 21:32:10 GMT");
  echo join($GIF_DATA);
  }
   
  // Make a tracking request to Google Analytics from this server.
  // Copies the headers from the original request to the new one.
  // If request containg utmdebug parameter, exceptions encountered
  // communicating with Google Analytics are thown.
  function sendRequestToGoogleAnalytics($utmUrl) {
  $options = array(
  "http" => array(
  "method" => "GET",
  "user_agent" => $_SERVER["HTTP_USER_AGENT"],
  "header" => ("Accepts-Language: " . $_SERVER["HTTP_ACCEPT_LANGUAGE"]))
  );
  if (!empty($_GET["utmdebug"])) {
  $data = file_get_contents(
  $utmUrl, false, stream_context_create($options));
  } else {
  $data = @file_get_contents(
  $utmUrl, false, stream_context_create($options));
  }
  }
   
  // Track a page view, updates all the cookies and campaign tracker,
  // makes a server side request to Google Analytics and writes the transparent
  // gif byte data to the response.
  function trackPageView() {
  $timeStamp = time();
  $domainName = $_SERVER["SERVER_NAME"];
  if (empty($domainName)) {
  $domainName = "";
  }
   
  // Get the referrer from the utmr parameter, this is the referrer to the
  // page that contains the tracking pixel, not the referrer for tracking
  // pixel.
  $documentReferer = $_GET["utmr"];
  if (empty($documentReferer) && $documentReferer !== "0") {
  $documentReferer = "-";
  } else {
  $documentReferer = urldecode($documentReferer);
  }
  $documentPath = $_GET["utmp"];
  if (empty($documentPath)) {
  $documentPath = "";
  } else {
  $documentPath = urldecode($documentPath);
  }
   
  $account = $_GET["utmac"];
  $userAgent = $_SERVER["HTTP_USER_AGENT"];
  if (empty($userAgent)) {
  $userAgent = "";
  }
   
  // Try and get visitor cookie from the request.
  $cookie = $_COOKIE[COOKIE_NAME];
   
  $guidHeader = $_SERVER["HTTP_X_DCMGUID"];
  if (empty($guidHeader)) {
  $guidHeader = $_SERVER["HTTP_X_UP_SUBNO"];
  }
  if (empty($guidHeader)) {
  $guidHeader = $_SERVER["HTTP_X_JPHONE_UID"];
  }
  if (empty($guidHeader)) {
  $guidHeader = $_SERVER["HTTP_X_EM_UID"];
  }
   
  $visitorId = getVisitorId($guidHeader, $account, $userAgent, $cookie);
   
  // Always try and add the cookie to the response.
  setrawcookie(
  COOKIE_NAME,
  $visitorId,
  $timeStamp + COOKIE_USER_PERSISTENCE,
  COOKIE_PATH);
   
  $utmGifLocation = "http://www.google-analytics.com/__utm.gif";
   
  // Construct the gif hit url.
  $utmUrl = $utmGifLocation . "?" .
  "utmwv=" . VERSION .
  "&utmn=" . getRandomNumber() .
  "&utmhn=" . urlencode($domainName) .
  "&utmr=" . urlencode($documentReferer) .
  "&utmp=" . urlencode($documentPath) .
  "&utmac=" . $account .
  "&utmcc=__utma%3D999.999.999.999.999.1%3B" .
  "&utmvid=" . $visitorId .
  "&utmip=" . getIP($_SERVER["REMOTE_ADDR"]);
   
  sendRequestToGoogleAnalytics($utmUrl);
   
  // If the debug parameter is on, add a header to the response that contains
  // the url that was used to contact Google Analytics.
  if (!empty($_GET["utmdebug"])) {
  header("X-GA-MOBILE-URL:" . $utmUrl);
  }
  // Finally write the gif data to the response.
  writeGifData();
  }
  ?><?php
  trackPageView();
  ?>