diff --git a/services/web/app/src/Features/Project/ProjectListController.mjs b/services/web/app/src/Features/Project/ProjectListController.mjs index 5fd7c7d797..a006f7e050 100644 --- a/services/web/app/src/Features/Project/ProjectListController.mjs +++ b/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), }) } diff --git a/services/web/app/views/_customer_io.pug b/services/web/app/views/_customer_io.pug index e9506bbac1..182356d597 100644 --- a/services/web/app/views/_customer_io.pug +++ b/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