From 14ac7d71060e42dab41fd7c08b81e69c0e95e913 Mon Sep 17 00:00:00 2001 From: Vincent Vanwaelscappel Date: Wed, 13 Dec 2023 19:51:21 +0100 Subject: [PATCH] wait #6496 @5 --- js/libs/fluidbook/fluidbook.stats.js | 121 +++++++++++++++++++-------- 1 file changed, 85 insertions(+), 36 deletions(-) diff --git a/js/libs/fluidbook/fluidbook.stats.js b/js/libs/fluidbook/fluidbook.stats.js index b8a7e2f4..d5b2d949 100644 --- a/js/libs/fluidbook/fluidbook.stats.js +++ b/js/libs/fluidbook/fluidbook.stats.js @@ -6,6 +6,30 @@ function FluidbookStats(fluidbook) { this.relay_url_params = ''; this.lastTCHash = ''; this.gaqueue = []; + this.baseURL = trim((window.location.origin + window.location.pathname).replace("index.html", ""), '/'); + + this.matomoServers = []; + if (this.fluidbook.settings.statsMatomo) { + if (this.fluidbook.settings.statsMatomoServer === undefined || this.fluidbook.settings.statsMatomoServer === null) { + this.fluidbook.settings.statsMatomoServer = '3'; + } + this.matomoServers.push({ + server: 'stats' + this.fluidbook.settings.statsMatomoServer + '.fluidbook.com', + siteId: this.fluidbook.settings.statsMatomo, + lastURL: '', + referer: '', + fullURL: false, + }); + } + if (this.fluidbook.settings.matomoServer && this.fluidbook.settings.matomoSiteId) { + this.matomoServers.push({ + server: this.fluidbook.settings.matomoServer, + siteId: this.fluidbook.settings.matomoSiteId, + lastURL: '', + referer: '', + fullURL: true + }); + } if ($_GET['puppeteer'] !== undefined) { this.fluidbook.settings.stats = false; @@ -15,32 +39,29 @@ function FluidbookStats(fluidbook) { this.fluidbook.settings.tagcommander_id = ''; this.fluidbook.settings.xiti = ''; this.fluidbook.settings.tagcommander_plan_type = ''; + this.matomoServers = []; } - if (this.fluidbook.settings.tagcommander_plan_type === 'esm') { this.esm = new FluidbookStatsEsm(this.fluidbook); } if (this.fluidbook.settings.stats) { this.worker = new Worker('js/libs/fluidbook/workers/stats.js'); } - if (this.fluidbook.settings.statsMatomo) { - if (this.fluidbook.settings.statsMatomoServer === undefined || this.fluidbook.settings.statsMatomoServer === null) { - this.fluidbook.settings.statsMatomoServer = '3'; - } + if (this.matomoServers.length > 0) { + let u = 'https://' + this.matomoServers[0].server + '/'; window._paq = window._paq || []; window._paq.push(["setDoNotTrack", true]); window._paq.push(['enableHeartBeatTimer']); window._paq.push(['enableLinkTracking']); - (function (siteId, server) { - var u = "https://stats" + server + ".fluidbook.com/"; - window._paq.push(['setTrackerUrl', u + 'matomo.php']); - window._paq.push(['setSiteId', siteId]); - var d = document, g = d.createElement('script'), s = d.getElementsByTagName('script')[0]; - g.async = true; - g.src = u + 'matomo.js'; - s.parentNode.insertBefore(g, s); - })(this.fluidbook.settings.statsMatomo, this.fluidbook.settings.statsMatomoServer.toString()); + if (this.matomoServers.length === 1) { + window._paq.push(['setTrackerUrl', 'https://' + this.matomoServers[0].server + '/matomo.php']); + window._paq.push(['setSiteId', this.matomoServers[0].siteId]); + } + var d = document, g = d.createElement('script'), s = d.getElementsByTagName('script')[0]; + g.async = true; + g.src = u + 'matomo.js'; + s.parentNode.insertBefore(g, s); } if (this.fluidbook.settings.googleTagManager !== undefined && this.fluidbook.settings.googleTagManager !== '') { this.ga = 'gtm'; @@ -83,7 +104,7 @@ FluidbookStats.prototype = { return true; }); - if (this.fluidbook.settings.tagcommander_id && this.fluidbook.settings.tagcommander_plan_type==='file') { + if (this.fluidbook.settings.tagcommander_id && this.fluidbook.settings.tagcommander_plan_type === 'file') { this.initTagCommander(); } if (this.fluidbook.settings.xiti) { @@ -221,11 +242,11 @@ FluidbookStats.prototype = { } } - if (this.fluidbook.settings.statsMatomo) { + if (this.matomoServers.length > 0) { try { - this.trackMatomo(type, page, extra); + this.matomoTrack(type, page, extra); } catch (e) { - + console.log(e); } } try { @@ -256,52 +277,80 @@ FluidbookStats.prototype = { } }, - trackMatomo(type, page, extra, url) { + matomoTrack(type, page, extra, url) { if (url === undefined) { url = window.location; } switch (type) { case 0: // Change page - window._paq.push(['setCustomUrl', '/page/' + page]); - window._paq.push(['trackPageView', 'View page ' + page]); - break; - case 10: // Open Book - window._paq.push(['setCustomUrl', '/']); // Note: this shows as "/index" in the Matomo page URL reports (unless in flat view) - window._paq.push(['trackPageView', 'Open fluidbook']); + this.matomoViewPage(page); break; case 14: // Open chapters menu - window._paq.push(['trackEvent', 'menu', 'click', 'chapters']); + this.matomoPush(['trackEvent', 'menu', 'click', 'chapters']); break; case 6: // Click a link in a page - window._paq.push(['trackEvent', 'link', 'click', extra]); - window._paq.push(['trackLink', extra]); + this.matomoPush(['trackEvent', 'link', 'click', extra]); + this.matomoPush(['trackLink', extra]); break; case 1: // Search - window._paq.push(['trackSiteSearch', extra]); + this.matomoPush(['trackSiteSearch', extra]); break; case 3: // Print - window._paq.push(['trackEvent', 'menu', 'click', 'print']); + this.matomoPush(['trackEvent', 'menu', 'click', 'print']); break; case 5: // Share case 12: // Facebook case 13: // Twitter - window._paq.push(['trackEvent', 'share', 'send', extra]); + this.matomoPush(['trackEvent', 'share', 'send', extra]); break; case 7: // PDF case 8: // Partial PDF - window._paq.push(['trackEvent', 'menu', 'click', 'download']); + this.matomoPush(['trackEvent', 'menu', 'click', 'download']); break; case 4: // Bookmarks - window._paq.push(['trackEvent', 'bookmark', 'page', 'page ' + page]); + this.matomoPush(['trackEvent', 'bookmark', 'page', 'page ' + page]); break; case 9: // Extras - window._paq.push(['trackEvent', 'extra', 'click', extra]); + this.matomoPush(['trackEvent', 'extra', 'click', extra]); break; case 2:// Zoom - window._paq.push(['trackEvent', 'zoom', 'page', page]); + this.matomoPush(['trackEvent', 'zoom', 'page', page]); break; case 15:// - window._paq.push(['trackEvent', 'cart', 'addproduct', extra]); + this.matomoPush(['trackEvent', 'cart', 'addproduct', extra]); + } + }, + + matomoViewPage: function (page) { + for (var i in this.matomoServers) { + let s = this.matomoServers[i]; + let url = s.fullURL ? this.baseURL : 'http://fluidbook.' + s.siteId; + url += '/page/' + page; + s.referer = this.matomoServers[i].lastURL = s.lastURL; + s.lastURL = this.matomoServers[i].lastURL = url; + this.matomoPushToServer(['trackPageView', 'View page ' + page], s); + } + }, + + matomoPushToServer: function (data, server) { + if (this.matomoServers.length > 1) { + window._paq.push(['setTrackerUrl', 'https://' + server.server + '/matomo.php']); + window._paq.push(['setSiteId', server.siteId]); + if (server.referer !== '' && server.referer !== server.lastURL) { + _paq.push(['setReferrerUrl', server.referer]); + } + window._paq.push(['setCustomUrl', server.lastURL]); + } else if (data[0] === 'trackPageView') { + window._paq.push(['setCustomUrl', server.lastURL]); + } + console.log('push', data, server); + window._paq.push(data); + }, + + matomoPush(data) { + for (let i in this.matomoServers) { + let dataCopy = data.slice(0); + this.matomoPushToServer(dataCopy, this.matomoServers[i]); } }, -- 2.39.5