]> _ Git - fluidbook-html5.git/commitdiff
wait #6496 @5
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Wed, 13 Dec 2023 18:51:21 +0000 (19:51 +0100)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Wed, 13 Dec 2023 18:51:21 +0000 (19:51 +0100)
js/libs/fluidbook/fluidbook.stats.js

index b8a7e2f4b627a6455db819f9382d70384b12c52a..d5b2d94943f0b41813871c1d35a55f7a4ce3230a 100644 (file)
@@ -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]);
         }
     },