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)); }