Jelajahi Sumber

Merge pull request #5466 from overleaf/tm-gallery-analytics-duplicated-template

Add analytics data for duplicated projects (include from template data)

GitOrigin-RevId: 8072b4e3ccca634557a67d9f2cca4d87f63f786b
Thomas 5 tahun lalu
induk
melakukan
164ea5735f

+ 1 - 0
services/web/app/src/Features/Project/ProjectCreationHandler.js

@@ -38,6 +38,7 @@ async function createBlankProject(ownerId, projectName, attributes = {}) {
     'fromV1TemplateId',
     'fromV1TemplateId',
     'fromV1TemplateVersionId',
     'fromV1TemplateVersionId',
   ])
   ])
+  Object.assign(segmentation, attributes.segmentation)
   segmentation.projectId = project._id
   segmentation.projectId = project._id
   if (isImport) {
   if (isImport) {
     AnalyticsManager.recordEventForUser(
     AnalyticsManager.recordEventForUser(

+ 12 - 1
services/web/app/src/Features/Project/ProjectDuplicator.js

@@ -16,6 +16,7 @@ const ProjectLocator = require('./ProjectLocator')
 const ProjectOptionsHandler = require('./ProjectOptionsHandler')
 const ProjectOptionsHandler = require('./ProjectOptionsHandler')
 const SafePath = require('./SafePath')
 const SafePath = require('./SafePath')
 const TpdsProjectFlusher = require('../ThirdPartyDataStore/TpdsProjectFlusher')
 const TpdsProjectFlusher = require('../ThirdPartyDataStore/TpdsProjectFlusher')
+const _ = require('lodash')
 
 
 module.exports = {
 module.exports = {
   duplicate: callbackify(duplicate),
   duplicate: callbackify(duplicate),
@@ -32,6 +33,8 @@ async function duplicate(owner, originalProjectId, newProjectName) {
       compiler: true,
       compiler: true,
       rootFolder: true,
       rootFolder: true,
       rootDoc_id: true,
       rootDoc_id: true,
+      fromV1TemplateId: true,
+      fromV1TemplateVersionId: true,
     }
     }
   )
   )
   const { path: rootDocPath } = await ProjectLocator.promises.findRootDoc({
   const { path: rootDocPath } = await ProjectLocator.promises.findRootDoc({
@@ -40,10 +43,18 @@ async function duplicate(owner, originalProjectId, newProjectName) {
 
 
   const originalEntries = _getFolderEntries(originalProject.rootFolder[0])
   const originalEntries = _getFolderEntries(originalProject.rootFolder[0])
 
 
+  // Pass template ID as analytics segmentation if duplicating project from a template
+  const segmentation = _.pick(originalProject, [
+    'fromV1TemplateId',
+    'fromV1TemplateVersionId',
+  ])
+  segmentation.duplicatedFromProject = originalProjectId
+
   // Now create the new project, cleaning it up on failure if necessary
   // Now create the new project, cleaning it up on failure if necessary
   const newProject = await ProjectCreationHandler.promises.createBlankProject(
   const newProject = await ProjectCreationHandler.promises.createBlankProject(
     owner._id,
     owner._id,
-    newProjectName
+    newProjectName,
+    { segmentation }
   )
   )
 
 
   try {
   try {