From db467c58bec6df5139b3a3a184d4a2d89e2558ee Mon Sep 17 00:00:00 2001
From: Emmanuel Raviart <emmanuel@raviart.com>
Date: Mon, 26 Jul 2021 22:30:25 +0200
Subject: [PATCH] Add Matomo configurations.

---
 example.env                |  4 ++++
 src/lib/auditors/config.ts | 17 +++++++++++++++++
 src/lib/server/config.ts   |  4 ++++
 src/lib/sessions.ts        |  2 ++
 src/routes/__layout.svelte | 18 ++++++++++++++++--
 5 files changed, 43 insertions(+), 2 deletions(-)

diff --git a/example.env b/example.env
index 95ed0770f..6a5c600a4 100644
--- a/example.env
+++ b/example.env
@@ -37,6 +37,10 @@ JSON_DIR="../openfisca-france-json"
 # Matomo analytics configuration
 # MATOMO_SITE_ID=123
 # MATOMO_URL="https://MATOMO_SERVER/"
+# Prepend the site domain to the page title when tracking (optional, default = false).
+# MATOMO_PREPEND_DOMAIN=true
+# Track visitors accross a domain (for example, example.com & its subdomains (optional).
+# MATOMO_SUBDOMAINS="*.DOMAIN"
 
 # OAuth2 configuration
 # OAUTH2_CLIENT_ID="OAUTH2_CLIENT_ID"
diff --git a/src/lib/auditors/config.ts b/src/lib/auditors/config.ts
index 990cea6ae..dc0c3d724 100644
--- a/src/lib/auditors/config.ts
+++ b/src/lib/auditors/config.ts
@@ -132,6 +132,15 @@ function auditMatomo(audit: Audit, dataUnknown: unknown,
   const errors: { [key: string]: unknown } = {}
   const remainingKeys = new Set(Object.keys(data))
 
+  audit.attribute(
+    data,
+    "prependDomain",
+    true,
+    errors,
+    remainingKeys,
+    auditSwitch([auditTrimString, auditStringToBoolean], auditBoolean),
+    auditSetNullish(false),
+  )
   audit.attribute(
     data,
     "siteId",
@@ -142,6 +151,14 @@ function auditMatomo(audit: Audit, dataUnknown: unknown,
     auditInteger,
     auditRequire,
   )
+  audit.attribute(
+    data,
+    "subdomains",
+    true,
+    errors,
+    remainingKeys,
+    auditTrimString,
+  )
   audit.attribute(
     data,
     "url",
diff --git a/src/lib/server/config.ts b/src/lib/server/config.ts
index 31328536f..63cf27513 100644
--- a/src/lib/server/config.ts
+++ b/src/lib/server/config.ts
@@ -14,7 +14,9 @@ export interface Config {
   hiddenEntitiesKeyPlural?: string[]
   jsonDir: string
   matomo?: {
+    prependDomain?: boolean
     siteId: number
+    subdomains?: string
     url: string
   }
   oauth2?: {
@@ -49,7 +51,9 @@ const [validConfig, error] = validateConfig({
   hiddenEntitiesKeyPlural: process.env["HIDDEN_ENTITIES"],
   jsonDir: process.env["JSON_DIR"],
   matomo: process.env["MATOMO_SITE_ID"] && process.env["MATOMO_URL"] ? {
+    prependDomain: process.env["MATOMO_PREPEND_DOMAIN"],
     siteId: process.env["MATOMO_SITE_ID"],
+    subdomains: process.env["MATOMO_SUBDOMAINS"],
     url: process.env["MATOMO_URL"],
   } : null,
   oauth2: process.env["OAUTH2_CLIENT_ID"]
diff --git a/src/lib/sessions.ts b/src/lib/sessions.ts
index 75fee1248..bdc73f7f3 100644
--- a/src/lib/sessions.ts
+++ b/src/lib/sessions.ts
@@ -18,7 +18,9 @@ export interface Session {
   hiddenEntitiesKeyPlural?: string[]
   leafParametersName: Set<string>
   matomo?: {
+    prependDomain?: boolean
     siteId: number
+    subdomains?: string
     url: string
   }
   metadata: Metadata
diff --git a/src/routes/__layout.svelte b/src/routes/__layout.svelte
index bab05f426..c0d4c5e1a 100644
--- a/src/routes/__layout.svelte
+++ b/src/routes/__layout.svelte
@@ -70,7 +70,6 @@
   setContext("inputInstantsByVariableName", inputInstantsByVariableName)
 
   const matomoConfig = $session.matomo
-  let matomoPaq = []
 
   const reform = writable({})
   setContext("reform", reform)
@@ -107,6 +106,16 @@
       // @ts-expect-error
       const _paq = window._paq
       /* tracker methods like "setCustomDimension" should be called before "trackPageView" */
+      if (matomoConfig.subdomains !== undefined) {
+        _paq.push(["setCookieDomain", matomoConfig.subdomains])
+        _paq.push(["setDomains", matomoConfig.subdomains])
+      }
+      _paq.push([
+        "setDocumentTitle",
+        matomoConfig.prependDomain
+          ? document.domain + "/" + document.title
+          : document.title,
+      ])
       _paq.push(["trackPageView"])
       _paq.push(["enableLinkTracking"])
       ;(function () {
@@ -141,7 +150,12 @@
     // @ts-expect-error
     const _paq = window._paq
     _paq.push(["setCustomUrl", url])
-    _paq.push(["setDocumentTitle", document.title])
+    _paq.push([
+      "setDocumentTitle",
+      matomoConfig.prependDomain
+        ? document.domain + "/" + document.title
+        : document.title,
+    ])
     _paq.push(["trackPageView"])
   }
 
-- 
GitLab