public function onAfterInit()
 {
     if ($this->owner instanceof DevelopmentAdmin || $this->owner instanceof DatabaseAdmin || class_exists('DevBuildController') && $this->owner instanceof DevBuildController) {
         return;
     }
     // include the JS snippet into the frontend page markup
     if (GoogleConfig::get_google_config('code')) {
         $snippet = new ArrayData(array('GoogleAnalyticsCode' => GoogleConfig::get_google_config('code'), 'UseGoogleUniversalSnippet' => GoogleConfig::get_google_config('universal')));
         Requirements::customScript($snippet->renderWith('GoogleAnalyticsJSSnippet'));
     }
     // if this request comes from a web crawler, leave a trace
     if (isset($_SERVER['HTTP_USER_AGENT']) && $this->owner instanceof ContentController && $this->owner->data()->ID) {
         foreach (GoogleLogger::$web_crawlers as $name => $signature) {
             if (preg_match('/' . str_replace('/', "\\/", $signature) . '/i', $_SERVER['HTTP_USER_AGENT'])) {
                 $trace = new GoogleLogEvent();
                 $trace->Title = $name;
                 $trace->PageID = $this->owner->data()->ID;
                 $trace->write();
             }
         }
     }
     // include event tracking api if required, jQuery 1.5 is required for automatic data attributes
     if (self::event_tracking_enabled()) {
         Requirements::javascript(THIRDPARTY_DIR . '/jquery/jquery.js');
         Requirements::javascript('googleanalytics/javascript/googleanalytics.event.tracking.js');
     }
 }
 function performance($request)
 {
     $markers = array();
     $q = substr(GoogleAnalyzer::get_sapphire_version(), 0, 3) == '2.3' ? '`' : '"';
     $metrics = $request->requestVar('metrics');
     $filters = null;
     $eventfiltersql = "{$q}GoogleLogEvent{$q}.{$q}PageID{$q} = 0";
     $page = SiteTree::get()->byID((int) $request->param('ID'));
     if ($page) {
         $url = trim($page->Link(), '/');
         if (!empty($url)) {
             $url .= '/';
         }
         $filters = 'ga:pagePath==/' . $url;
         $eventfiltersql .= " OR {$q}GoogleLogEvent{$q}.{$q}PageID{$q} = " . (int) $page->ID;
         $allversions = $q == '"' ? '"WasPublished" = 1 AND ' . DB::getConn()->datetimeDifferenceClause('"LastEdited"', date('Y-m-d 23:59:59', strtotime('-1 Year'))) . ' > 0' : "{$q}WasPublished{$q} = 1 AND {$q}LastEdited{$q} > '" . date('Y-m-d 23:59:59', strtotime('-1 Year')) . "'";
         foreach ($page->allVersions() as $version) {
             $markers[] = array(strtotime($version->LastEdited) * 1000, 'Updated', 'Long descr.');
         }
     }
     $events = DataObject::get('GoogleLogEvent', $eventfiltersql);
     if ($events) {
         foreach ($events as $event) {
             $markers[] = array(strtotime($event->Created) * 1000, $event->Title, 'Long descr.');
         }
     }
     $store = new GoogleDataStore(GoogleConfig::get_google_config('profile'), GoogleConfig::get_google_config('email'), GoogleConfig::get_google_config('password'));
     $data = $store->fetchPerformance(array('dimensions' => 'ga:date', 'metrics' => 'ga:visits,ga:pageviews', 'sort' => '-ga:date', 'filters' => $filters));
     return json_encode(array('series' => $data, 'markers' => $markers));
 }