Skip to content

Commit

Permalink
Google analytics upgrade to GA4 is required #371 (#380)
Browse files Browse the repository at this point in the history
  • Loading branch information
KrzysztofPajak committed Mar 16, 2023
1 parent c576269 commit facd7bb
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 75 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,56 +6,23 @@
@await Component.InvokeAsync("StoreScope")
@{
//default values
var googleAnalytics_trackingScript = Html.Raw(System.Text.Encodings.Web.JavaScriptEncoder.Default.Encode("<!-- Google code for Analytics tracking -->" + "\r\n" +
"<script type=\"text/javascript\">" + "\r\n" +
"var _gaq = _gaq || [];" + "\r\n" +
"_gaq.push(['_setAccount', '{GOOGLEID}']);" + "\r\n" +
"_gaq.push(['_trackPageview']);" + "\r\n" +
"{ECOMMERCE}" + "\r\n" +
"(function() {" + "\r\n" +
"var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;" + "\r\n" +
"ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';" + "\r\n" +
"var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);" + "\r\n" +
"})();" + "\r\n" +
"</script>"));
var googleAnalytics_EcommerceScript = Html.Raw(System.Text.Encodings.Web.JavaScriptEncoder.Default.Encode("_gaq.push(['_addTrans', '{ORDERID}', '{SITE}', '{TOTAL}', '{TAX}', '{SHIP}', '{CITY}', '{STATEPROVINCE}', '{COUNTRY}']);" + "\r\n" +
"{DETAILS}" + "\r\n" +
"_gaq.push(['_trackTrans']); "));
var googleAnalytics_EcommerceDetailScript = Html.Raw(System.Text.Encodings.Web.JavaScriptEncoder.Default.Encode("_gaq.push(['_addItem', '{ORDERID}', '{PRODUCTSKU}', '{PRODUCTNAME}', '{CATEGORYNAME}', '{UNITPRICE}', '{QUANTITY}' ]); "));

var universalAnalytics_trackingScript = Html.Raw(System.Text.Encodings.Web.JavaScriptEncoder.Default.Encode("<!-- Google code for Analytics tracking -->" + "\r\n" +
"<script>" + "\r\n" +
"(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){" + "\r\n" +
"(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o)," + "\r\n" +
"m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)" + "\r\n" +
"})(window,document,'script','//www.google-analytics.com/analytics.js','ga');" + "\r\n" +
"ga('create', '{GOOGLEID}', 'auto');" + "\r\n" +
"ga('send', 'pageview');" + "\r\n" +
"{ECOMMERCE}" + "\r\n" +
"</script>"));
var universalAnalytics_EcommerceScript = Html.Raw(System.Text.Encodings.Web.JavaScriptEncoder.Default.Encode("ga('require', 'ecommerce', 'ecommerce.js');" + "\r\n" +
"ga('ecommerce:addTransaction', {" + "\r\n" +
"'id': '{ORDERID}'," + "\r\n" +
"'affiliation': '{SITE}'," + "\r\n" +
"'revenue': '{TOTAL}'," + "\r\n" +
"'shipping': '{SHIP}'," + "\r\n" +
"'tax': '{TAX}'" + "\r\n" +
"});" + "\r\n" +
"{DETAILS} " + "\r\n" +
"ga('ecommerce:send');"));
var universalAnalytics_EcommerceDetailScript = Html.Raw(System.Text.Encodings.Web.JavaScriptEncoder.Default.Encode("ga('ecommerce:addItem', {" + "\r\n" +
"'id': '{ORDERID}'," + "\r\n" +
"'name': '{PRODUCTNAME}'," + "\r\n" +
"'sku': '{PRODUCTSKU}'," + "\r\n" +
"'category': '{CATEGORYNAME}'," + "\r\n" +
"'price': '{UNITPRICE}'," + "\r\n" +
"'quantity': '{QUANTITY}'" + "\r\n" +
"});"));
var googleAnalytics_trackingScript = Html.Raw(System.Text.Encodings.Web.JavaScriptEncoder.Default.Encode(@"<!-- Google tag (gtag.js) -->
<script async src='https://www.googletagmanager.com/gtag/js?id={GOOGLEID}'></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', '{GOOGLEID}');
{ECOMMERCE}
</script>
"));
var googleAnalytics_EcommerceScript = Html.Raw(System.Text.Encodings.Web.JavaScriptEncoder.Default.Encode(@"gtag('event', 'purchase', {transaction_id: '{ORDERID}', value: {TOTAL}, tax: {TAX}, shipping: {SHIP}, currency: '{CURRENCY}', city: '{CITY}', state: '{STATEPROVINCE}', country: '{COUNTRY}', items: [{DETAILS}]});"));
var googleAnalytics_EcommerceDetailScript = Html.Raw(System.Text.Encodings.Web.JavaScriptEncoder.Default.Encode(@"{ item_id: '{PRODUCTID}', item_name: '{PRODUCTNAME}', item_category: '{CATEGORYNAME}', price: {UNITPRICE}, quantity: {QUANTITY} }, "));

}
<script>
$(document).ready(function () {
$("#pre-configure-google-analytics").click(preConfigureGoogleAnalytic);
$("#pre-configure-universal-analytics").click(preConfigureUniversalAnalytic);
$("#pre-configure-google-analytics").click(preConfigureGoogleAnalytic);
});
function preConfigureGoogleAnalytic() {
Expand All @@ -64,11 +31,6 @@
$('#@Html.IdFor(model => model.EcommerceDetailScript)').val('@googleAnalytics_EcommerceDetailScript');
}
function preConfigureUniversalAnalytic() {
$('#@Html.IdFor(model => model.TrackingScript)').val('@universalAnalytics_trackingScript');
$('#@Html.IdFor(model => model.EcommerceScript)').val('@universalAnalytics_EcommerceScript');
$('#@Html.IdFor(model => model.EcommerceDetailScript)').val('@universalAnalytics_EcommerceDetailScript');
}
</script>
<form asp-controller="WidgetsGoogleAnalytics" asp-action="Configure" method="post">

Expand All @@ -93,11 +55,7 @@
<li>Copy the Tracking ID into the 'ID' box below</li>
<li>Click the 'Save' button below and Google Analytics will be integrated into your store</li>
</ul>
<p>
If you would like to switch between Google Analytics (used by default) and Universal Analytics, then please use the buttons below:
</p>
<input type="button" id="pre-configure-google-analytics" class="k-button" value="Pre-configure Google Analytics" />
<input type="button" id="pre-configure-universal-analytics" class="k-button" value="Pre-configure Universal Analytics" />
</div>
</div>
<div class="form-group">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,8 +107,8 @@ private async Task<string> GetEcommerceScript(Order order)
var analyticsEcommerceScript = _googleAnalyticsEcommerceSettings.EcommerceScript + "\n";
analyticsEcommerceScript = analyticsEcommerceScript.Replace("{GOOGLEID}", _googleAnalyticsEcommerceSettings.GoogleId);
analyticsEcommerceScript = analyticsEcommerceScript.Replace("{ORDERID}", order.Id.ToString());
analyticsEcommerceScript = analyticsEcommerceScript.Replace("{SITE}", _workContext.CurrentHost.Url.Replace("http://", "").Replace("/", ""));
analyticsEcommerceScript = analyticsEcommerceScript.Replace("{TOTAL}", order.OrderTotal.ToString("0.00", usCulture));
analyticsEcommerceScript = analyticsEcommerceScript.Replace("{CURRENCY}", order.CustomerCurrencyCode);
analyticsEcommerceScript = analyticsEcommerceScript.Replace("{TAX}", order.OrderTax.ToString("0.00", usCulture));
var orderShipping = _googleAnalyticsEcommerceSettings.IncludingTax ? order.OrderShippingInclTax : order.OrderShippingExclTax;
analyticsEcommerceScript = analyticsEcommerceScript.Replace("{SHIP}", orderShipping.ToString("0.00", usCulture));
Expand All @@ -135,7 +135,8 @@ private async Task<string> GetEcommerceScript(Order order)
}
analyticsEcommerceDetailScript = analyticsEcommerceDetailScript.Replace("{ORDERID}", order.Id.ToString());
//The SKU code is a required parameter for every item that is added to the transaction
analyticsEcommerceDetailScript = analyticsEcommerceDetailScript.Replace("{PRODUCTSKU}", FixIllegalJavaScriptChars(product.FormatSku(item.Attributes)));
analyticsEcommerceDetailScript = analyticsEcommerceDetailScript.Replace("{PRODUCTSKU}", FixIllegalJavaScriptChars(item.Sku));
analyticsEcommerceDetailScript = analyticsEcommerceDetailScript.Replace("{PRODUCTID}", FixIllegalJavaScriptChars(item.ProductId));
analyticsEcommerceDetailScript = analyticsEcommerceDetailScript.Replace("{PRODUCTNAME}", FixIllegalJavaScriptChars(product.Name));
analyticsEcommerceDetailScript = analyticsEcommerceDetailScript.Replace("{CATEGORYNAME}", FixIllegalJavaScriptChars(category));
var unitPrice = _googleAnalyticsEcommerceSettings.IncludingTax ? item.UnitPriceInclTax : item.UnitPriceExclTax;
Expand Down
28 changes: 12 additions & 16 deletions src/Plugins/Widgets.GoogleAnalytics/GoogleAnalyticPlugin.cs
Original file line number Diff line number Diff line change
Expand Up @@ -48,23 +48,19 @@ public override async Task Install()
{
var settings = new GoogleAnalyticsEcommerceSettings
{
GoogleId = "UA-0000000-0",
TrackingScript = @"<!-- Google code for Analytics tracking -->
GoogleId = "000000000",
TrackingScript = @"<!-- Google tag (gtag.js) -->
<script async src='https://www.googletagmanager.com/gtag/js?id={GOOGLEID}'></script>
<script>
var _gaq = _gaq || [];
_gaq.push(['_setAccount', '{GOOGLEID}']);
_gaq.push(['_trackPageview']);
{ECOMMERCE}
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>",
EcommerceScript = @"_gaq.push(['_addTrans', '{ORDERID}', '{SITE}', '{TOTAL}', '{TAX}', '{SHIP}', '{CITY}', '{STATEPROVINCE}', '{COUNTRY}']);
{DETAILS}
_gaq.push(['_trackTrans']); ",
EcommerceDetailScript = @"_gaq.push(['_addItem', '{ORDERID}', '{PRODUCTSKU}', '{PRODUCTNAME}', '{CATEGORYNAME}', '{UNITPRICE}', '{QUANTITY}' ]); ",
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', '{GOOGLEID}');
{ECOMMERCE}
</script>
",
EcommerceScript = @"gtag('event', 'purchase', {transaction_id: '{ORDERID}', value: {TOTAL}, tax: {TAX}, shipping: {SHIP}, currency: '{CURRENCY}', city: '{CITY}', state: '{STATEPROVINCE}', country: '{COUNTRY}', items: [{DETAILS}]});",
EcommerceDetailScript = @"{ item_id: '{PRODUCTID}', item_name: '{PRODUCTNAME}', item_category: '{CATEGORYNAME}', price: {UNITPRICE}, quantity: {QUANTITY} }, ",
ConsentName = "Google Analytics",
ConsentDescription = "Allows us to analyse the statistics of visits to our website."
};
Expand Down
2 changes: 1 addition & 1 deletion src/Plugins/Widgets.GoogleAnalytics/Manifest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,5 @@
SystemName = GoogleAnalyticDefaults.ProviderSystemName,
SupportedVersion = GrandVersion.SupportedPluginVersion,
Author = "grandnode team",
Version = "1.00"
Version = "1.01"
)]

0 comments on commit facd7bb

Please sign in to comment.