mirror of
https://github.com/overleaf/overleaf.git
synced 2025-02-05 23:43:42 +00:00
Merge pull request #1024 from sharelatex/bg-avoid-duplicate-project-names
avoid duplicate project names for templates and zips
This commit is contained in:
commit
c6ec31c773
4 changed files with 23 additions and 11 deletions
|
@ -67,6 +67,13 @@ module.exports = ProjectDetailsHandler =
|
|||
else
|
||||
return callback()
|
||||
|
||||
generateUniqueName: (user_id, name, suffixes = [], callback = (error, newName) -> ) ->
|
||||
if arguments.length is 3 && typeof suffixes is 'function' # make suffixes an optional argument
|
||||
callback = suffixes
|
||||
suffixes = []
|
||||
timestamp = new Date().toISOString().replace(/T(\d+):(\d+):(\d+)\..*/,' $1$2$3') # strip out unwanted characters
|
||||
ProjectDetailsHandler.ensureProjectNameIsUnique user_id, name, suffixes.concat(" (#{timestamp})"), callback
|
||||
|
||||
_addSuffixToProjectName: (name, suffix = '') ->
|
||||
# append the suffix and truncate the project title if needed
|
||||
truncatedLength = ProjectDetailsHandler.MAX_PROJECT_NAME_LENGTH - suffix.length
|
||||
|
@ -82,7 +89,7 @@ module.exports = ProjectDetailsHandler =
|
|||
return callback(error) if error?
|
||||
# allUsersProjectNames is returned as a hash {owned: [name1, name2, ...], readOnly: [....]}
|
||||
# collect all of the names and flatten them into a single array
|
||||
projectNameList = _.flatten(_.values(allUsersProjectNames))
|
||||
projectNameList = _.pluck(_.flatten(_.values(allUsersProjectNames)),'name')
|
||||
# create a set of all project names
|
||||
allProjectNames = new Set()
|
||||
for projectName in projectNameList
|
||||
|
|
|
@ -4,16 +4,19 @@ ArchiveManager = require "./ArchiveManager"
|
|||
FileSystemImportManager = require "./FileSystemImportManager"
|
||||
ProjectCreationHandler = require "../Project/ProjectCreationHandler"
|
||||
ProjectRootDocManager = require "../Project/ProjectRootDocManager"
|
||||
ProjectDetailsHandler = require "../Project/ProjectDetailsHandler"
|
||||
|
||||
module.exports = ProjectUploadHandler =
|
||||
createProjectFromZipArchive: (owner_id, name, zipPath, callback = (error, project) ->) ->
|
||||
ProjectCreationHandler.createBlankProject owner_id, name, (error, project) =>
|
||||
createProjectFromZipArchive: (owner_id, proposedName, zipPath, callback = (error, project) ->) ->
|
||||
ProjectDetailsHandler.generateUniqueName owner_id, proposedName, (error, name) =>
|
||||
return callback(error) if error?
|
||||
@insertZipArchiveIntoFolder owner_id, project._id, project.rootFolder[0]._id, zipPath, (error) ->
|
||||
ProjectCreationHandler.createBlankProject owner_id, name, (error, project) =>
|
||||
return callback(error) if error?
|
||||
ProjectRootDocManager.setRootDocAutomatically project._id, (error) ->
|
||||
@insertZipArchiveIntoFolder owner_id, project._id, project.rootFolder[0]._id, zipPath, (error) ->
|
||||
return callback(error) if error?
|
||||
callback(error, project)
|
||||
ProjectRootDocManager.setRootDocAutomatically project._id, (error) ->
|
||||
return callback(error) if error?
|
||||
callback(error, project)
|
||||
|
||||
insertZipArchiveIntoFolder: (owner_id, project_id, folder_id, path, callback = (error) ->) ->
|
||||
destination = @_getDestinationDirectory path
|
||||
|
|
|
@ -158,11 +158,11 @@ describe 'ProjectDetailsHandler', ->
|
|||
describe "ensureProjectNameIsUnique", ->
|
||||
beforeEach ->
|
||||
@result = {
|
||||
owned: ["name", "name1", "name11"]
|
||||
readAndWrite: ["name2", "name22"]
|
||||
readOnly: ["name3", "name33"]
|
||||
tokenReadAndWrite: ["name4", "name44"]
|
||||
tokenReadOnly: ["name5", "name55", "x".repeat(15)]
|
||||
owned: [{_id: 1, name:"name"}, {_id: 2, name: "name1"}, {_id: 3, name: "name11"}]
|
||||
readAndWrite: [{_id: 4, name:"name2"}, {_id: 5, name:"name22"}]
|
||||
readOnly: [{_id:6, name:"name3"}, {_id:7, name: "name33"}]
|
||||
tokenReadAndWrite: [{_id:8, name:"name4"}, {_id:9, name:"name44"}]
|
||||
tokenReadOnly: [{_id:10, name:"name5"}, {_id:11, name:"name55"}, {_id:12, name:"x".repeat(15)}]
|
||||
}
|
||||
@ProjectGetter.findAllUsersProjects = sinon.stub().callsArgWith(2, null, @result)
|
||||
|
||||
|
|
|
@ -15,6 +15,7 @@ describe "ProjectUploadManager", ->
|
|||
"./ArchiveManager" : @ArchiveManager = {}
|
||||
"../Project/ProjectCreationHandler" : @ProjectCreationHandler = {}
|
||||
"../Project/ProjectRootDocManager" : @ProjectRootDocManager = {}
|
||||
"../Project/ProjectDetailsHandler" : @ProjectDetailsHandler = {}
|
||||
"rimraf" : @rimraf = sinon.stub().callsArg(1)
|
||||
|
||||
describe "createProjectFromZipArchive", ->
|
||||
|
@ -26,6 +27,7 @@ describe "ProjectUploadManager", ->
|
|||
@project =
|
||||
_id: @project_id
|
||||
rootFolder: [ _id: @root_folder_id ]
|
||||
@ProjectDetailsHandler.generateUniqueName = sinon.stub().callsArgWith(2, null, @name)
|
||||
@ProjectCreationHandler.createBlankProject = sinon.stub().callsArgWith(2, null, @project)
|
||||
@ProjectUploadManager.insertZipArchiveIntoFolder = sinon.stub().callsArg(4)
|
||||
@ProjectRootDocManager.setRootDocAutomatically = sinon.stub().callsArg(1)
|
||||
|
|
Loading…
Reference in a new issue