Sfoglia il codice sorgente

Merge pull request #31601 from overleaf/rh-migrate-cio-calls

Migrate customer.io calls from pug helper to backend

GitOrigin-RevId: 3d104d0e1038c9fb662385df846ca9167b9c0609
roo hutton 5 mesi fa
parent
commit
48a5de31e1

+ 28 - 16
services/web/app/src/Features/Project/ProjectListController.mjs

@@ -532,6 +532,34 @@ async function projectListPage(req, res, next) {
       : 'member'
     : undefined
 
+  Modules.promises.hooks
+    .fire('setUserProperties', userId, {
+      overleafId: userId,
+      lastActive: user.lastActive
+        ? Math.floor(user.lastActive.getTime() / 1000)
+        : null,
+      signUpDate: user.signUpDate
+        ? Math.floor(user.signUpDate.getTime() / 1000)
+        : null,
+      ...(usersBestSubscription?.type && {
+        'best-subscription-type': usersBestSubscription.type,
+      }),
+      aiBlocked,
+      hasAiAssist,
+      ...(subjectArea && { subjectArea }),
+      ...(role && { role }),
+      ...(primaryOccupation && { primaryOccupation }),
+      ...(usedLatex && { usedLatex }),
+      ...(countryCode && { country: countryCode }),
+      ...(commonsInstitution && { commonsInstitution }),
+      ...(groupRole && { groupRole }),
+      isManagedUser: Boolean(user.enrollment?.managedBy),
+      ...(user.email && { email: user.email }),
+    })
+    .catch(err => {
+      logger.error({ err }, 'Failed to set user properties for customer.io')
+    })
+
   res.render('project/list-react', {
     title: 'your_projects',
     usersBestSubscription,
@@ -566,23 +594,7 @@ async function projectListPage(req, res, next) {
     hasIndividualPaidSubscription,
     userRestrictions: Array.from(req.userRestrictions || []),
     customerIoEnabled,
-    aiBlocked,
-    hasAiAssist,
-    lastActive: user.lastActive
-      ? Math.floor(user.lastActive.getTime() / 1000)
-      : null,
-    signUpDate: user.signUpDate
-      ? Math.floor(user.signUpDate.getTime() / 1000)
-      : null,
-    subjectArea,
-    primaryOccupation,
-    role,
-    usedLatex,
     inactiveTutorials,
-    countryCode,
-    commonsInstitution,
-    groupRole,
-    isManagedUser: Boolean(user.enrollment?.managedBy),
   })
 }
 

+ 3 - 51
services/web/app/views/_customer_io.pug

@@ -1,41 +1,13 @@
 if(customerIoEnabled && ExposedSettings.cioWriteKey && ExposedSettings.cioSiteId)
-	-
-		function boolAttr(value) {
-			return value !== undefined ? String(value) : null;
-		}
-	script(type="text/javascript", id="cio-loader", nonce=scriptNonce, data-best-subscription=(usersBestSubscription && usersBestSubscription.type), data-ai-blocked=boolAttr(aiBlocked), data-has-ai-assist=boolAttr(hasAiAssist), data-cio-write-key=ExposedSettings.cioWriteKey, data-cio-site-id=ExposedSettings.cioSiteId, data-session-analytics-id=getSessionAnalyticsId(), data-user-id=getLoggedInUserId(), data-last-active=lastActive, data-sign-up-date=signUpDate, data-subject-area=subjectArea, data-role=role, data-used-latex=usedLatex, data-primary-occupation=primaryOccupation, data-country=countryCode, data-commons-institution=commonsInstitution, data-group-role=groupRole, data-features=user.features, data-email=user.email, data-is-managed-user=boolAttr(isManagedUser)).
-		
-		function parseBool(value) {
-			return value === 'true' ? true : value === 'false' ? false : undefined;
-		}
-		
+	script(type="text/javascript", id="cio-loader", nonce=scriptNonce, data-cio-write-key=ExposedSettings.cioWriteKey, data-cio-site-id=ExposedSettings.cioSiteId, data-session-analytics-id=getSessionAnalyticsId()).
 		var cioSettings = document.querySelector('#cio-loader').dataset;
 		var analyticsId = cioSettings.sessionAnalyticsId;
 		var siteId = cioSettings.cioSiteId;
 		var writeKey = cioSettings.cioWriteKey;
-		var userId = cioSettings.userId;
-		var usersBestSubscription = cioSettings.bestSubscription;
-		var aiBlocked = parseBool(cioSettings.aiBlocked);
-		var hasAiAssist = parseBool(cioSettings.hasAiAssist);
-		var lastActive = cioSettings.lastActive;
-		var signUpDate = cioSettings.signUpDate;
-		var subjectArea = cioSettings.subjectArea;
-		var role = cioSettings.role;
-		var primaryOccupation = cioSettings.primaryOccupation;
-		var usedLatex = cioSettings.usedLatex;
-		var features = cioSettings.features;
-		var email = cioSettings.email;
-
-		var countryCode = cioSettings.country;
-		var commonsInstitution = cioSettings.commonsInstitution;
-		var groupRole = cioSettings.groupRole;
-		var isManagedUser = parseBool(cioSettings.isManagedUser);
-
-
 
 		!function(){var i="cioanalytics", analytics=(window[i]=window[i]||[]);if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","once","off","on","addSourceMiddleware","addIntegrationMiddleware","setAnonymousId","addDestinationMiddleware"];analytics.factory=function(e){return function(){var t=Array.prototype.slice.call(arguments);t.unshift(e);analytics.push(t);return analytics}};for(var e=0;e<analytics.methods.length;e++){var key=analytics.methods[e];analytics[key]=analytics.factory(key)}analytics.load=function(key,e){var t=document.createElement("script");t.type="text/javascript";t.async=!0;t.setAttribute('data-global-customerio-analytics-key', i);t.src="https://cdp.customer.io/v1/analytics-js/snippet/" + key + "/analytics.min.js";var n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(t,n);analytics._writeKey=key;analytics._loadOptions=e};analytics.SNIPPET_VERSION="4.15.3";
 			analytics.load(
-				writeKey, 
+				writeKey,
 				{
 					disableClientPersistence: true,
 					"integrations": {
@@ -47,26 +19,6 @@ if(customerIoEnabled && ExposedSettings.cioWriteKey && ExposedSettings.cioSiteId
 			);
 			if (analyticsId) {
 				analytics.setAnonymousId(analyticsId);
+				analytics.identify(analyticsId);
 			};
-			
-			function addIfDefined(obj, key, value) {
-				if (typeof value !== 'undefined') obj[key] = value;
-			}
-			
-			var identifyData = {overleafId: userId, lastActive, signUpDate};
-			addIfDefined(identifyData, 'best-subscription-type', usersBestSubscription);
-			addIfDefined(identifyData, 'aiBlocked', aiBlocked);
-			addIfDefined(identifyData, 'hasAiAssist', hasAiAssist);
-			addIfDefined(identifyData, 'subjectArea', subjectArea);
-			addIfDefined(identifyData, 'role', role);
-			addIfDefined(identifyData, 'primaryOccupation', primaryOccupation);
-			addIfDefined(identifyData, 'usedLatex', usedLatex);
-			addIfDefined(identifyData, 'country', countryCode);
-			addIfDefined(identifyData, 'commonsInstitution', commonsInstitution);
-			addIfDefined(identifyData, 'groupRole', groupRole);
-			addIfDefined(identifyData, 'isManagedUser', isManagedUser);
-			addIfDefined(identifyData, 'features', features);
-			addIfDefined(identifyData, 'email', email);
-			
-			analytics.identify(analyticsId, identifyData);
 		}}();