#5340 - Update Google Analytics tracking code

Identifier #5340
Issue type Feature request or suggestion
Title Update Google Analytics tracking code
Status Open
Tags

Has Patch (custom)

Roadmap: Over the horizon (custom)

Handling member Deleted
Addon core
Description Our GA event tracking code ($cms.statsEventTrack) is outdated, needs rewriting for GA4 with more bulletproofing.

Below is some code for a client that has change massively from the v10 code, but is also very divergent from the v11 code. So it needs going over carefully.
Steps to reproduce

Additional information /* Google Analytics tracking for links; particularly useful if you have no server-side stat collection */
function ga_track(ob,event_name,event_primary_parameter,event_secondary_parameter,callback)
{
// If gtag is not working (either a bug in gtag, or browser is blocking it)
window.setTimeout(function() {
if (typeof callback!=='undefined') {
callback();
} else {
if (ob) {
click_link(ob);
}
}
}, 1000);

/*{+START,IF_NON_EMPTY,{$CONFIG_OPTION,google_analytics}}*/
if (typeof event_name=='undefined') event_name='{!URL;^}';
if (typeof event_primary_parameter=='undefined') event_primary_parameter=ob?ob.href:'{!UNKNOWN;^}';
if (typeof event_secondary_parameter=='undefined') event_secondary_parameter=window.location.href;

try
{
var ga_properties=[];
/*{+START,LOOP,{$CONFIG_OPTION,google_analytics}\,}*/
/*{+START,IF_NON_EMPTY,{$TRIM,{_loop_var}}}*/
ga_properties.push('{$TRIM;^,{_loop_var}}');
/*{+END}*/
/*{+END}*/

for (var i=0;i<ga_properties.length;i++) {
var property=ga_properties[i];
var last_one=(i==ga_properties.length-1);
if (property.substring(0,3)=='UA-') {
// LEGACY
var parameters={
'event_category': event_name,
'event_label': event_secondary_parameter,
'send_to': property
};
if (last_one) {
if (typeof callback!=='undefined') {
parameters.event_callback=callback;
} else {
if (ob) {
parameters.event_callback=function() {
click_link(ob);
};
}
}
}

gtag('event',event_primary_parameter,parameters);
} else {
// Assumed GA4+...

if (event_name=='{!URL;^}') { // Automatic in GA4
if (last_one) {
if (typeof callback!=='undefined') {
callback();
return false;
}
return null;
}
continue;
}

var parameters={
'primary_parameter': event_primary_parameter,
'secondary_parameter': event_secondary_parameter,
'send_to': property
};
if (last_one) {
if (typeof callback!=='undefined') {
parameters.event_callback=callback;
} else {
if (ob) {
parameters.event_callback=function() {
click_link(ob);
};
}
}
}

gtag('event',event_name,parameters);
}
}

if (ob || typeof callback!=='undefined') {
return false;
}
}
catch(err) {}
/*{+END}*/
/*{+START,IF_EMPTY,{$CONFIG_OPTION,google_analytics}}*/
if (typeof callback!=='undefined') {
callback();
return false;
}
/*{+END}*/

return null;
}
function ga_track_structured(ob,event_name,parameters,callback)
{
// GA4+

/*{+START,IF_NON_EMPTY,{$CONFIG_OPTION,google_analytics}}*/
try
{
var ga_properties=[];
/*{+START,LOOP,{$CONFIG_OPTION,google_analytics}\,}*/
/*{+START,IF_NON_EMPTY,{$TRIM,{_loop_var}}}*/
var property='{$TRIM;^,{_loop_var}}';
if (property.substring(0,3)!='UA-') {
ga_properties.push(property);
}
/*{+END}*/
/*{+END}*/

for (var i=0;i<ga_properties.length;i++) {
var property=ga_properties[i];
var last_one=(i==ga_properties.length-1);

// Assumed GA4+...

if (last_one) {
if (typeof callback!=='undefined') {
parameters.event_callback=callback;
} else {
if (ob) {
parameters.event_callback=function() {
click_link(ob);
};
}
}
}

gtag('event',event_name,parameters);
}

if (ob || typeof callback!=='undefined') {
return false;
}
}
catch(err) {}
/*{+END}*/
/*{+START,IF_EMPTY,{$CONFIG_OPTION,google_analytics}}*/
if (typeof callback!=='undefined') {
callback();
return false;
}
/*{+END}*/

return null;
}
Funded? No
The system will post a comment when this issue is modified (e.g., status changes). To be notified of this, click "Enable comment notifications".

Rating

Unrated