/** * Build a link that tracks a page view. * * Options can include: * * * track_as: an internal URI other than the link's href * * is_route: whether to send the URI through sfRouting * * is_event: track as an event rather than a page view * * use_linker: use this if you're linking to another domain that tracks on * the same website profile * * @param string $name * @param string $internalUri * @param array $options * * @return string */ function google_analytics_link_to($name = null, $internalUri = null, $options = array()) { $tracker = sfContext::getInstance()->getRequest()->getTracker(); $options = _parse_attributes($options); $trackerOptions = $tracker->extractViewOptions($options); if ($tracker->isEnabled()) { $trackAs = isset($trackerOptions['track_as']) ? $trackerOptions['track_as'] : $internalUri; if (isset($trackerOptions['use_linker']) && $trackerOptions['use_linker']) { $onclick = google_analytics_linker_function($trackAs, $trackerOptions); } else { $onclick = $tracker->forgePageViewFunction($trackAs, $trackerOptions); } $options['onclick'] = isset($options['onclick']) ? $onclick . $options['onclick'] : $onclick; if (isset($trackerOptions['use_linker']) && $trackerOptions['use_linker']) { $options['onclick'] .= 'return false'; } } return link_to($name, $internalUri, $options); }
} catch (sfViewException $e) { $t->pass('track_as exception ok'); } catch (Exception $e) { $t->fail('track_as exception ok'); } $t->is(google_analytics_link_to_function('foo', 'alert("bar")', 'track_as=/baz'), '<a href="#" onclick="alert("bar"); return false;">foo</a>', 'disabled ok'); $t->is(google_analytics_link_to_function('foo', 'alert("bar")', 'track_as=/baz is_event=on'), '<a href="#" onclick="alert("bar"); return false;">foo</a>', 'disabled event ok'); $urchin->setEnabled(true); $t->is(google_analytics_link_to_function('foo', 'alert("bar")', 'track_as=/baz'), '<a href="#" onclick="urchinTracker("\\/baz"); alert("bar"); return false;">foo</a>', 'enabled ok'); $t->is(google_analytics_link_to_function('foo', 'alert("bar")', 'track_as=/baz is_event=on'), '<a href="#" onclick="urchinTracker("\\/baz"); alert("bar"); return false;">foo</a>', 'enabled event ok'); $t->diag('urchin: link_to_remote'); $urchin->setEnabled(false); $t->is(google_analytics_link_to_remote('foo', 'url=@homepage track_as=/bar'), '<a href="#" onclick="new Ajax.Request(\'/\', {asynchronous:true, evalScripts:false}); return false;">foo</a>', 'disabled ok'); $t->is(google_analytics_link_to_remote('foo', 'url=@homepage track_as=@homepage is_route=on'), '<a href="#" onclick="new Ajax.Request(\'/\', {asynchronous:true, evalScripts:false}); return false;">foo</a>', 'disabled event ok'); $urchin->setEnabled(true); $t->is(google_analytics_link_to_remote('foo', 'url=@homepage track_as=@homepage is_route=on'), '<a href="#" onclick="urchinTracker("\\/"); new Ajax.Request(\'/\', {asynchronous:true, evalScripts:false}); return false;">foo</a>', 'enabled ok'); $t->is(google_analytics_link_to_remote('foo', 'url=@homepage track_as=/bar'), '<a href="#" onclick="urchinTracker("\\/bar"); new Ajax.Request(\'/\', {asynchronous:true, evalScripts:false}); return false;">foo</a>', 'enabled event ok'); $t->diag('urchin: linker'); $urchin->setEnabled(false); $t->ok(is_null(google_analytics_linker_function('http://www.google.com')), 'disabled ok'); $urchin->setEnabled(true); $urchin->setDomainName(false); $urchin->setLinkerPolicy(true); $t->is(google_analytics_linker_function('http://www.google.com'), '__utmLinker("http:\\/\\/www.google.com");', 'enabled ok'); $t->diag('urchin: post linker'); $urchin->setEnabled(false); $t->ok(is_null(google_analytics_post_linker_function()), 'disabled ok'); $t->ok(is_null(google_analytics_post_linker_function('document.getElementById("myform")')), 'custom form disabled ok'); $urchin->setEnabled(true); $t->is(google_analytics_post_linker_function(), '__utmLinkPost(this);', 'enabled ok'); $t->is(google_analytics_post_linker_function('document.getElementById("myform")'), '__utmLinkPost(document.getElementById("myform"));', 'custom form enabled ok');