|
@@ -1,18 +1,3 @@
|
|
|
-/* eslint-disable
|
|
|
|
|
- camelcase,
|
|
|
|
|
- n/handle-callback-err,
|
|
|
|
|
- max-len,
|
|
|
|
|
- no-dupe-keys,
|
|
|
|
|
- no-unused-vars,
|
|
|
|
|
-*/
|
|
|
|
|
-// TODO: This file was created by bulk-decaffeinate.
|
|
|
|
|
-// Fix any style issues and re-enable lint.
|
|
|
|
|
-/*
|
|
|
|
|
- * decaffeinate suggestions:
|
|
|
|
|
- * DS102: Remove unnecessary code created because of implicit returns
|
|
|
|
|
- * DS207: Consider shorter variations of null checks
|
|
|
|
|
- * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
|
|
|
|
|
- */
|
|
|
|
|
const logger = require('@overleaf/logger')
|
|
const logger = require('@overleaf/logger')
|
|
|
const OError = require('@overleaf/o-error')
|
|
const OError = require('@overleaf/o-error')
|
|
|
const Metrics = require('@overleaf/metrics')
|
|
const Metrics = require('@overleaf/metrics')
|
|
@@ -20,181 +5,159 @@ const ProjectEntityUpdateHandler = require('../Project/ProjectEntityUpdateHandle
|
|
|
const ProjectOptionsHandler = require('../Project/ProjectOptionsHandler')
|
|
const ProjectOptionsHandler = require('../Project/ProjectOptionsHandler')
|
|
|
const ProjectDetailsHandler = require('../Project/ProjectDetailsHandler')
|
|
const ProjectDetailsHandler = require('../Project/ProjectDetailsHandler')
|
|
|
const ProjectDeleter = require('../Project/ProjectDeleter')
|
|
const ProjectDeleter = require('../Project/ProjectDeleter')
|
|
|
-const DocumentUpdaterHandler = require('../DocumentUpdater/DocumentUpdaterHandler')
|
|
|
|
|
const EditorRealTimeController = require('./EditorRealTimeController')
|
|
const EditorRealTimeController = require('./EditorRealTimeController')
|
|
|
const async = require('async')
|
|
const async = require('async')
|
|
|
const PublicAccessLevels = require('../Authorization/PublicAccessLevels')
|
|
const PublicAccessLevels = require('../Authorization/PublicAccessLevels')
|
|
|
-const _ = require('underscore')
|
|
|
|
|
const { promisifyAll } = require('../../util/promises')
|
|
const { promisifyAll } = require('../../util/promises')
|
|
|
|
|
|
|
|
const EditorController = {
|
|
const EditorController = {
|
|
|
- addDoc(project_id, folder_id, docName, docLines, source, user_id, callback) {
|
|
|
|
|
- if (callback == null) {
|
|
|
|
|
- callback = function () {}
|
|
|
|
|
- }
|
|
|
|
|
- return EditorController.addDocWithRanges(
|
|
|
|
|
- project_id,
|
|
|
|
|
- folder_id,
|
|
|
|
|
|
|
+ addDoc(projectId, folderId, docName, docLines, source, userId, callback) {
|
|
|
|
|
+ EditorController.addDocWithRanges(
|
|
|
|
|
+ projectId,
|
|
|
|
|
+ folderId,
|
|
|
docName,
|
|
docName,
|
|
|
docLines,
|
|
docLines,
|
|
|
{},
|
|
{},
|
|
|
source,
|
|
source,
|
|
|
- user_id,
|
|
|
|
|
|
|
+ userId,
|
|
|
callback
|
|
callback
|
|
|
)
|
|
)
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
addDocWithRanges(
|
|
addDocWithRanges(
|
|
|
- project_id,
|
|
|
|
|
- folder_id,
|
|
|
|
|
|
|
+ projectId,
|
|
|
|
|
+ folderId,
|
|
|
docName,
|
|
docName,
|
|
|
docLines,
|
|
docLines,
|
|
|
docRanges,
|
|
docRanges,
|
|
|
source,
|
|
source,
|
|
|
- user_id,
|
|
|
|
|
|
|
+ userId,
|
|
|
callback
|
|
callback
|
|
|
) {
|
|
) {
|
|
|
- if (callback == null) {
|
|
|
|
|
- callback = function () {}
|
|
|
|
|
- }
|
|
|
|
|
docName = docName.trim()
|
|
docName = docName.trim()
|
|
|
Metrics.inc('editor.add-doc')
|
|
Metrics.inc('editor.add-doc')
|
|
|
- return ProjectEntityUpdateHandler.addDocWithRanges(
|
|
|
|
|
- project_id,
|
|
|
|
|
- folder_id,
|
|
|
|
|
|
|
+ ProjectEntityUpdateHandler.addDocWithRanges(
|
|
|
|
|
+ projectId,
|
|
|
|
|
+ folderId,
|
|
|
docName,
|
|
docName,
|
|
|
docLines,
|
|
docLines,
|
|
|
docRanges,
|
|
docRanges,
|
|
|
- user_id,
|
|
|
|
|
- (err, doc, folder_id) => {
|
|
|
|
|
- if (err != null) {
|
|
|
|
|
|
|
+ userId,
|
|
|
|
|
+ source,
|
|
|
|
|
+ (err, doc, folderId) => {
|
|
|
|
|
+ if (err) {
|
|
|
OError.tag(err, 'error adding doc without lock', {
|
|
OError.tag(err, 'error adding doc without lock', {
|
|
|
- project_id,
|
|
|
|
|
|
|
+ projectId,
|
|
|
docName,
|
|
docName,
|
|
|
})
|
|
})
|
|
|
return callback(err)
|
|
return callback(err)
|
|
|
}
|
|
}
|
|
|
EditorRealTimeController.emitToRoom(
|
|
EditorRealTimeController.emitToRoom(
|
|
|
- project_id,
|
|
|
|
|
|
|
+ projectId,
|
|
|
'reciveNewDoc',
|
|
'reciveNewDoc',
|
|
|
- folder_id,
|
|
|
|
|
|
|
+ folderId,
|
|
|
doc,
|
|
doc,
|
|
|
source,
|
|
source,
|
|
|
- user_id
|
|
|
|
|
|
|
+ userId
|
|
|
)
|
|
)
|
|
|
- return callback(err, doc)
|
|
|
|
|
|
|
+ callback(err, doc)
|
|
|
}
|
|
}
|
|
|
)
|
|
)
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
addFile(
|
|
addFile(
|
|
|
- project_id,
|
|
|
|
|
- folder_id,
|
|
|
|
|
|
|
+ projectId,
|
|
|
|
|
+ folderId,
|
|
|
fileName,
|
|
fileName,
|
|
|
fsPath,
|
|
fsPath,
|
|
|
linkedFileData,
|
|
linkedFileData,
|
|
|
source,
|
|
source,
|
|
|
- user_id,
|
|
|
|
|
|
|
+ userId,
|
|
|
callback
|
|
callback
|
|
|
) {
|
|
) {
|
|
|
- if (callback == null) {
|
|
|
|
|
- callback = function () {}
|
|
|
|
|
- }
|
|
|
|
|
fileName = fileName.trim()
|
|
fileName = fileName.trim()
|
|
|
Metrics.inc('editor.add-file')
|
|
Metrics.inc('editor.add-file')
|
|
|
- return ProjectEntityUpdateHandler.addFile(
|
|
|
|
|
- project_id,
|
|
|
|
|
- folder_id,
|
|
|
|
|
|
|
+ ProjectEntityUpdateHandler.addFile(
|
|
|
|
|
+ projectId,
|
|
|
|
|
+ folderId,
|
|
|
fileName,
|
|
fileName,
|
|
|
fsPath,
|
|
fsPath,
|
|
|
linkedFileData,
|
|
linkedFileData,
|
|
|
- user_id,
|
|
|
|
|
- (err, fileRef, folder_id) => {
|
|
|
|
|
- if (err != null) {
|
|
|
|
|
|
|
+ userId,
|
|
|
|
|
+ source,
|
|
|
|
|
+ (err, fileRef, folderId) => {
|
|
|
|
|
+ if (err) {
|
|
|
OError.tag(err, 'error adding file without lock', {
|
|
OError.tag(err, 'error adding file without lock', {
|
|
|
- project_id,
|
|
|
|
|
- folder_id,
|
|
|
|
|
|
|
+ projectId,
|
|
|
|
|
+ folderId,
|
|
|
fileName,
|
|
fileName,
|
|
|
})
|
|
})
|
|
|
return callback(err)
|
|
return callback(err)
|
|
|
}
|
|
}
|
|
|
EditorRealTimeController.emitToRoom(
|
|
EditorRealTimeController.emitToRoom(
|
|
|
- project_id,
|
|
|
|
|
|
|
+ projectId,
|
|
|
'reciveNewFile',
|
|
'reciveNewFile',
|
|
|
- folder_id,
|
|
|
|
|
|
|
+ folderId,
|
|
|
fileRef,
|
|
fileRef,
|
|
|
source,
|
|
source,
|
|
|
linkedFileData,
|
|
linkedFileData,
|
|
|
- user_id
|
|
|
|
|
|
|
+ userId
|
|
|
)
|
|
)
|
|
|
- return callback(err, fileRef)
|
|
|
|
|
|
|
+ callback(err, fileRef)
|
|
|
}
|
|
}
|
|
|
)
|
|
)
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
- upsertDoc(
|
|
|
|
|
- project_id,
|
|
|
|
|
- folder_id,
|
|
|
|
|
- docName,
|
|
|
|
|
- docLines,
|
|
|
|
|
- source,
|
|
|
|
|
- user_id,
|
|
|
|
|
- callback
|
|
|
|
|
- ) {
|
|
|
|
|
- if (callback == null) {
|
|
|
|
|
- callback = function () {}
|
|
|
|
|
- }
|
|
|
|
|
- return ProjectEntityUpdateHandler.upsertDoc(
|
|
|
|
|
- project_id,
|
|
|
|
|
- folder_id,
|
|
|
|
|
|
|
+ upsertDoc(projectId, folderId, docName, docLines, source, userId, callback) {
|
|
|
|
|
+ ProjectEntityUpdateHandler.upsertDoc(
|
|
|
|
|
+ projectId,
|
|
|
|
|
+ folderId,
|
|
|
docName,
|
|
docName,
|
|
|
docLines,
|
|
docLines,
|
|
|
source,
|
|
source,
|
|
|
- user_id,
|
|
|
|
|
|
|
+ userId,
|
|
|
function (err, doc, didAddNewDoc) {
|
|
function (err, doc, didAddNewDoc) {
|
|
|
if (didAddNewDoc) {
|
|
if (didAddNewDoc) {
|
|
|
EditorRealTimeController.emitToRoom(
|
|
EditorRealTimeController.emitToRoom(
|
|
|
- project_id,
|
|
|
|
|
|
|
+ projectId,
|
|
|
'reciveNewDoc',
|
|
'reciveNewDoc',
|
|
|
- folder_id,
|
|
|
|
|
|
|
+ folderId,
|
|
|
doc,
|
|
doc,
|
|
|
source,
|
|
source,
|
|
|
- user_id
|
|
|
|
|
|
|
+ userId
|
|
|
)
|
|
)
|
|
|
}
|
|
}
|
|
|
- return callback(err, doc)
|
|
|
|
|
|
|
+ callback(err, doc)
|
|
|
}
|
|
}
|
|
|
)
|
|
)
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
upsertFile(
|
|
upsertFile(
|
|
|
- project_id,
|
|
|
|
|
- folder_id,
|
|
|
|
|
|
|
+ projectId,
|
|
|
|
|
+ folderId,
|
|
|
fileName,
|
|
fileName,
|
|
|
fsPath,
|
|
fsPath,
|
|
|
linkedFileData,
|
|
linkedFileData,
|
|
|
source,
|
|
source,
|
|
|
- user_id,
|
|
|
|
|
|
|
+ userId,
|
|
|
callback
|
|
callback
|
|
|
) {
|
|
) {
|
|
|
- if (callback == null) {
|
|
|
|
|
- callback = function () {}
|
|
|
|
|
- }
|
|
|
|
|
- return ProjectEntityUpdateHandler.upsertFile(
|
|
|
|
|
- project_id,
|
|
|
|
|
- folder_id,
|
|
|
|
|
|
|
+ ProjectEntityUpdateHandler.upsertFile(
|
|
|
|
|
+ projectId,
|
|
|
|
|
+ folderId,
|
|
|
fileName,
|
|
fileName,
|
|
|
fsPath,
|
|
fsPath,
|
|
|
linkedFileData,
|
|
linkedFileData,
|
|
|
- user_id,
|
|
|
|
|
|
|
+ userId,
|
|
|
|
|
+ source,
|
|
|
function (err, newFile, didAddFile, existingFile) {
|
|
function (err, newFile, didAddFile, existingFile) {
|
|
|
- if (err != null) {
|
|
|
|
|
|
|
+ if (err) {
|
|
|
return callback(err)
|
|
return callback(err)
|
|
|
}
|
|
}
|
|
|
if (!didAddFile) {
|
|
if (!didAddFile) {
|
|
|
// replacement, so remove the existing file from the client
|
|
// replacement, so remove the existing file from the client
|
|
|
EditorRealTimeController.emitToRoom(
|
|
EditorRealTimeController.emitToRoom(
|
|
|
- project_id,
|
|
|
|
|
|
|
+ projectId,
|
|
|
'removeEntity',
|
|
'removeEntity',
|
|
|
existingFile._id,
|
|
existingFile._id,
|
|
|
source
|
|
source
|
|
@@ -202,55 +165,55 @@ const EditorController = {
|
|
|
}
|
|
}
|
|
|
// now add the new file on the client
|
|
// now add the new file on the client
|
|
|
EditorRealTimeController.emitToRoom(
|
|
EditorRealTimeController.emitToRoom(
|
|
|
- project_id,
|
|
|
|
|
|
|
+ projectId,
|
|
|
'reciveNewFile',
|
|
'reciveNewFile',
|
|
|
- folder_id,
|
|
|
|
|
|
|
+ folderId,
|
|
|
newFile,
|
|
newFile,
|
|
|
source,
|
|
source,
|
|
|
linkedFileData,
|
|
linkedFileData,
|
|
|
- user_id
|
|
|
|
|
|
|
+ userId
|
|
|
)
|
|
)
|
|
|
- return callback(null, newFile)
|
|
|
|
|
|
|
+ callback(null, newFile)
|
|
|
}
|
|
}
|
|
|
)
|
|
)
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
upsertDocWithPath(
|
|
upsertDocWithPath(
|
|
|
- project_id,
|
|
|
|
|
|
|
+ projectId,
|
|
|
elementPath,
|
|
elementPath,
|
|
|
docLines,
|
|
docLines,
|
|
|
source,
|
|
source,
|
|
|
- user_id,
|
|
|
|
|
|
|
+ userId,
|
|
|
callback
|
|
callback
|
|
|
) {
|
|
) {
|
|
|
- return ProjectEntityUpdateHandler.upsertDocWithPath(
|
|
|
|
|
- project_id,
|
|
|
|
|
|
|
+ ProjectEntityUpdateHandler.upsertDocWithPath(
|
|
|
|
|
+ projectId,
|
|
|
elementPath,
|
|
elementPath,
|
|
|
docLines,
|
|
docLines,
|
|
|
source,
|
|
source,
|
|
|
- user_id,
|
|
|
|
|
|
|
+ userId,
|
|
|
function (err, doc, didAddNewDoc, newFolders, lastFolder) {
|
|
function (err, doc, didAddNewDoc, newFolders, lastFolder) {
|
|
|
- if (err != null) {
|
|
|
|
|
|
|
+ if (err) {
|
|
|
return callback(err)
|
|
return callback(err)
|
|
|
}
|
|
}
|
|
|
- return EditorController._notifyProjectUsersOfNewFolders(
|
|
|
|
|
- project_id,
|
|
|
|
|
|
|
+ EditorController._notifyProjectUsersOfNewFolders(
|
|
|
|
|
+ projectId,
|
|
|
newFolders,
|
|
newFolders,
|
|
|
function (err) {
|
|
function (err) {
|
|
|
- if (err != null) {
|
|
|
|
|
|
|
+ if (err) {
|
|
|
return callback(err)
|
|
return callback(err)
|
|
|
}
|
|
}
|
|
|
if (didAddNewDoc) {
|
|
if (didAddNewDoc) {
|
|
|
EditorRealTimeController.emitToRoom(
|
|
EditorRealTimeController.emitToRoom(
|
|
|
- project_id,
|
|
|
|
|
|
|
+ projectId,
|
|
|
'reciveNewDoc',
|
|
'reciveNewDoc',
|
|
|
lastFolder._id,
|
|
lastFolder._id,
|
|
|
doc,
|
|
doc,
|
|
|
source,
|
|
source,
|
|
|
- user_id
|
|
|
|
|
|
|
+ userId
|
|
|
)
|
|
)
|
|
|
}
|
|
}
|
|
|
- return callback()
|
|
|
|
|
|
|
+ callback()
|
|
|
}
|
|
}
|
|
|
)
|
|
)
|
|
|
}
|
|
}
|
|
@@ -258,20 +221,21 @@ const EditorController = {
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
upsertFileWithPath(
|
|
upsertFileWithPath(
|
|
|
- project_id,
|
|
|
|
|
|
|
+ projectId,
|
|
|
elementPath,
|
|
elementPath,
|
|
|
fsPath,
|
|
fsPath,
|
|
|
linkedFileData,
|
|
linkedFileData,
|
|
|
source,
|
|
source,
|
|
|
- user_id,
|
|
|
|
|
|
|
+ userId,
|
|
|
callback
|
|
callback
|
|
|
) {
|
|
) {
|
|
|
- return ProjectEntityUpdateHandler.upsertFileWithPath(
|
|
|
|
|
- project_id,
|
|
|
|
|
|
|
+ ProjectEntityUpdateHandler.upsertFileWithPath(
|
|
|
|
|
+ projectId,
|
|
|
elementPath,
|
|
elementPath,
|
|
|
fsPath,
|
|
fsPath,
|
|
|
linkedFileData,
|
|
linkedFileData,
|
|
|
- user_id,
|
|
|
|
|
|
|
+ userId,
|
|
|
|
|
+ source,
|
|
|
function (
|
|
function (
|
|
|
err,
|
|
err,
|
|
|
newFile,
|
|
newFile,
|
|
@@ -280,20 +244,20 @@ const EditorController = {
|
|
|
newFolders,
|
|
newFolders,
|
|
|
lastFolder
|
|
lastFolder
|
|
|
) {
|
|
) {
|
|
|
- if (err != null) {
|
|
|
|
|
|
|
+ if (err) {
|
|
|
return callback(err)
|
|
return callback(err)
|
|
|
}
|
|
}
|
|
|
- return EditorController._notifyProjectUsersOfNewFolders(
|
|
|
|
|
- project_id,
|
|
|
|
|
|
|
+ EditorController._notifyProjectUsersOfNewFolders(
|
|
|
|
|
+ projectId,
|
|
|
newFolders,
|
|
newFolders,
|
|
|
function (err) {
|
|
function (err) {
|
|
|
- if (err != null) {
|
|
|
|
|
|
|
+ if (err) {
|
|
|
return callback(err)
|
|
return callback(err)
|
|
|
}
|
|
}
|
|
|
if (!didAddFile) {
|
|
if (!didAddFile) {
|
|
|
// replacement, so remove the existing file from the client
|
|
// replacement, so remove the existing file from the client
|
|
|
EditorRealTimeController.emitToRoom(
|
|
EditorRealTimeController.emitToRoom(
|
|
|
- project_id,
|
|
|
|
|
|
|
+ projectId,
|
|
|
'removeEntity',
|
|
'removeEntity',
|
|
|
existingFile._id,
|
|
existingFile._id,
|
|
|
source
|
|
source
|
|
@@ -301,193 +265,189 @@ const EditorController = {
|
|
|
}
|
|
}
|
|
|
// now add the new file on the client
|
|
// now add the new file on the client
|
|
|
EditorRealTimeController.emitToRoom(
|
|
EditorRealTimeController.emitToRoom(
|
|
|
- project_id,
|
|
|
|
|
|
|
+ projectId,
|
|
|
'reciveNewFile',
|
|
'reciveNewFile',
|
|
|
lastFolder._id,
|
|
lastFolder._id,
|
|
|
newFile,
|
|
newFile,
|
|
|
source,
|
|
source,
|
|
|
linkedFileData,
|
|
linkedFileData,
|
|
|
- user_id
|
|
|
|
|
|
|
+ userId
|
|
|
)
|
|
)
|
|
|
- return callback()
|
|
|
|
|
|
|
+ callback()
|
|
|
}
|
|
}
|
|
|
)
|
|
)
|
|
|
}
|
|
}
|
|
|
)
|
|
)
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
- addFolder(project_id, folder_id, folderName, source, userId, callback) {
|
|
|
|
|
- if (callback == null) {
|
|
|
|
|
- callback = function () {}
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ addFolder(projectId, folderId, folderName, source, userId, callback) {
|
|
|
folderName = folderName.trim()
|
|
folderName = folderName.trim()
|
|
|
Metrics.inc('editor.add-folder')
|
|
Metrics.inc('editor.add-folder')
|
|
|
- return ProjectEntityUpdateHandler.addFolder(
|
|
|
|
|
- project_id,
|
|
|
|
|
- folder_id,
|
|
|
|
|
|
|
+ ProjectEntityUpdateHandler.addFolder(
|
|
|
|
|
+ projectId,
|
|
|
|
|
+ folderId,
|
|
|
folderName,
|
|
folderName,
|
|
|
- (err, folder, folder_id) => {
|
|
|
|
|
- if (err != null) {
|
|
|
|
|
|
|
+ (err, folder, folderId) => {
|
|
|
|
|
+ if (err) {
|
|
|
OError.tag(err, 'could not add folder', {
|
|
OError.tag(err, 'could not add folder', {
|
|
|
- project_id,
|
|
|
|
|
- folder_id,
|
|
|
|
|
|
|
+ projectId,
|
|
|
|
|
+ folderId,
|
|
|
folderName,
|
|
folderName,
|
|
|
source,
|
|
source,
|
|
|
})
|
|
})
|
|
|
return callback(err)
|
|
return callback(err)
|
|
|
}
|
|
}
|
|
|
- return EditorController._notifyProjectUsersOfNewFolder(
|
|
|
|
|
- project_id,
|
|
|
|
|
- folder_id,
|
|
|
|
|
|
|
+ EditorController._notifyProjectUsersOfNewFolder(
|
|
|
|
|
+ projectId,
|
|
|
|
|
+ folderId,
|
|
|
folder,
|
|
folder,
|
|
|
userId,
|
|
userId,
|
|
|
function (err) {
|
|
function (err) {
|
|
|
- if (err != null) {
|
|
|
|
|
|
|
+ if (err) {
|
|
|
return callback(err)
|
|
return callback(err)
|
|
|
}
|
|
}
|
|
|
- return callback(null, folder)
|
|
|
|
|
|
|
+ callback(null, folder)
|
|
|
}
|
|
}
|
|
|
)
|
|
)
|
|
|
}
|
|
}
|
|
|
)
|
|
)
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
- mkdirp(project_id, path, callback) {
|
|
|
|
|
- if (callback == null) {
|
|
|
|
|
- callback = function () {}
|
|
|
|
|
- }
|
|
|
|
|
- logger.debug({ project_id, path }, "making directories if they don't exist")
|
|
|
|
|
- return ProjectEntityUpdateHandler.mkdirp(
|
|
|
|
|
- project_id,
|
|
|
|
|
|
|
+ mkdirp(projectId, path, callback) {
|
|
|
|
|
+ logger.debug({ projectId, path }, "making directories if they don't exist")
|
|
|
|
|
+ ProjectEntityUpdateHandler.mkdirp(
|
|
|
|
|
+ projectId,
|
|
|
path,
|
|
path,
|
|
|
(err, newFolders, lastFolder) => {
|
|
(err, newFolders, lastFolder) => {
|
|
|
- if (err != null) {
|
|
|
|
|
|
|
+ if (err) {
|
|
|
OError.tag(err, 'could not mkdirp', {
|
|
OError.tag(err, 'could not mkdirp', {
|
|
|
- project_id,
|
|
|
|
|
|
|
+ projectId,
|
|
|
path,
|
|
path,
|
|
|
})
|
|
})
|
|
|
return callback(err)
|
|
return callback(err)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- return EditorController._notifyProjectUsersOfNewFolders(
|
|
|
|
|
- project_id,
|
|
|
|
|
|
|
+ EditorController._notifyProjectUsersOfNewFolders(
|
|
|
|
|
+ projectId,
|
|
|
newFolders,
|
|
newFolders,
|
|
|
function (err) {
|
|
function (err) {
|
|
|
- if (err != null) {
|
|
|
|
|
|
|
+ if (err) {
|
|
|
return callback(err)
|
|
return callback(err)
|
|
|
}
|
|
}
|
|
|
- return callback(null, newFolders, lastFolder)
|
|
|
|
|
|
|
+ callback(null, newFolders, lastFolder)
|
|
|
}
|
|
}
|
|
|
)
|
|
)
|
|
|
}
|
|
}
|
|
|
)
|
|
)
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
- deleteEntity(project_id, entity_id, entityType, source, userId, callback) {
|
|
|
|
|
- if (callback == null) {
|
|
|
|
|
- callback = function () {}
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ deleteEntity(projectId, entityId, entityType, source, userId, callback) {
|
|
|
Metrics.inc('editor.delete-entity')
|
|
Metrics.inc('editor.delete-entity')
|
|
|
- return ProjectEntityUpdateHandler.deleteEntity(
|
|
|
|
|
- project_id,
|
|
|
|
|
- entity_id,
|
|
|
|
|
|
|
+ ProjectEntityUpdateHandler.deleteEntity(
|
|
|
|
|
+ projectId,
|
|
|
|
|
+ entityId,
|
|
|
entityType,
|
|
entityType,
|
|
|
userId,
|
|
userId,
|
|
|
|
|
+ source,
|
|
|
function (err) {
|
|
function (err) {
|
|
|
- if (err != null) {
|
|
|
|
|
|
|
+ if (err) {
|
|
|
OError.tag(err, 'could not delete entity', {
|
|
OError.tag(err, 'could not delete entity', {
|
|
|
- project_id,
|
|
|
|
|
- entity_id,
|
|
|
|
|
|
|
+ projectId,
|
|
|
|
|
+ entityId,
|
|
|
entityType,
|
|
entityType,
|
|
|
})
|
|
})
|
|
|
return callback(err)
|
|
return callback(err)
|
|
|
}
|
|
}
|
|
|
logger.debug(
|
|
logger.debug(
|
|
|
- { project_id, entity_id, entityType },
|
|
|
|
|
|
|
+ { projectId, entityId, entityType },
|
|
|
'telling users entity has been deleted'
|
|
'telling users entity has been deleted'
|
|
|
)
|
|
)
|
|
|
EditorRealTimeController.emitToRoom(
|
|
EditorRealTimeController.emitToRoom(
|
|
|
- project_id,
|
|
|
|
|
|
|
+ projectId,
|
|
|
'removeEntity',
|
|
'removeEntity',
|
|
|
- entity_id,
|
|
|
|
|
|
|
+ entityId,
|
|
|
source
|
|
source
|
|
|
)
|
|
)
|
|
|
- return callback()
|
|
|
|
|
|
|
+ callback()
|
|
|
}
|
|
}
|
|
|
)
|
|
)
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
- deleteEntityWithPath(project_id, path, source, user_id, callback) {
|
|
|
|
|
- return ProjectEntityUpdateHandler.deleteEntityWithPath(
|
|
|
|
|
- project_id,
|
|
|
|
|
|
|
+ deleteEntityWithPath(projectId, path, source, userId, callback) {
|
|
|
|
|
+ ProjectEntityUpdateHandler.deleteEntityWithPath(
|
|
|
|
|
+ projectId,
|
|
|
path,
|
|
path,
|
|
|
- user_id,
|
|
|
|
|
- function (err, entity_id) {
|
|
|
|
|
- if (err != null) {
|
|
|
|
|
|
|
+ userId,
|
|
|
|
|
+ source,
|
|
|
|
|
+ function (err, entityId) {
|
|
|
|
|
+ if (err) {
|
|
|
return callback(err)
|
|
return callback(err)
|
|
|
}
|
|
}
|
|
|
EditorRealTimeController.emitToRoom(
|
|
EditorRealTimeController.emitToRoom(
|
|
|
- project_id,
|
|
|
|
|
|
|
+ projectId,
|
|
|
'removeEntity',
|
|
'removeEntity',
|
|
|
- entity_id,
|
|
|
|
|
|
|
+ entityId,
|
|
|
source
|
|
source
|
|
|
)
|
|
)
|
|
|
- return callback(null, entity_id)
|
|
|
|
|
|
|
+ callback(null, entityId)
|
|
|
}
|
|
}
|
|
|
)
|
|
)
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
- updateProjectDescription(project_id, description, callback) {
|
|
|
|
|
- if (callback == null) {
|
|
|
|
|
- callback = function () {}
|
|
|
|
|
- }
|
|
|
|
|
- logger.debug({ project_id, description }, 'updating project description')
|
|
|
|
|
- return ProjectDetailsHandler.setProjectDescription(
|
|
|
|
|
- project_id,
|
|
|
|
|
|
|
+ updateProjectDescription(projectId, description, callback) {
|
|
|
|
|
+ logger.debug({ projectId, description }, 'updating project description')
|
|
|
|
|
+ ProjectDetailsHandler.setProjectDescription(
|
|
|
|
|
+ projectId,
|
|
|
description,
|
|
description,
|
|
|
function (err) {
|
|
function (err) {
|
|
|
- if (err != null) {
|
|
|
|
|
|
|
+ if (err) {
|
|
|
OError.tag(
|
|
OError.tag(
|
|
|
err,
|
|
err,
|
|
|
'something went wrong setting the project description',
|
|
'something went wrong setting the project description',
|
|
|
{
|
|
{
|
|
|
- project_id,
|
|
|
|
|
|
|
+ projectId,
|
|
|
description,
|
|
description,
|
|
|
}
|
|
}
|
|
|
)
|
|
)
|
|
|
return callback(err)
|
|
return callback(err)
|
|
|
}
|
|
}
|
|
|
EditorRealTimeController.emitToRoom(
|
|
EditorRealTimeController.emitToRoom(
|
|
|
- project_id,
|
|
|
|
|
|
|
+ projectId,
|
|
|
'projectDescriptionUpdated',
|
|
'projectDescriptionUpdated',
|
|
|
description
|
|
description
|
|
|
)
|
|
)
|
|
|
- return callback()
|
|
|
|
|
|
|
+ callback()
|
|
|
}
|
|
}
|
|
|
)
|
|
)
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
- deleteProject(project_id, callback) {
|
|
|
|
|
|
|
+ deleteProject(projectId, callback) {
|
|
|
Metrics.inc('editor.delete-project')
|
|
Metrics.inc('editor.delete-project')
|
|
|
- return ProjectDeleter.deleteProject(project_id, callback)
|
|
|
|
|
|
|
+ ProjectDeleter.deleteProject(projectId, callback)
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
- renameEntity(project_id, entity_id, entityType, newName, userId, callback) {
|
|
|
|
|
- if (callback == null) {
|
|
|
|
|
- callback = function () {}
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ renameEntity(
|
|
|
|
|
+ projectId,
|
|
|
|
|
+ entityId,
|
|
|
|
|
+ entityType,
|
|
|
|
|
+ newName,
|
|
|
|
|
+ userId,
|
|
|
|
|
+ source,
|
|
|
|
|
+ callback
|
|
|
|
|
+ ) {
|
|
|
Metrics.inc('editor.rename-entity')
|
|
Metrics.inc('editor.rename-entity')
|
|
|
- return ProjectEntityUpdateHandler.renameEntity(
|
|
|
|
|
- project_id,
|
|
|
|
|
- entity_id,
|
|
|
|
|
|
|
+ ProjectEntityUpdateHandler.renameEntity(
|
|
|
|
|
+ projectId,
|
|
|
|
|
+ entityId,
|
|
|
entityType,
|
|
entityType,
|
|
|
newName,
|
|
newName,
|
|
|
userId,
|
|
userId,
|
|
|
|
|
+ source,
|
|
|
function (err) {
|
|
function (err) {
|
|
|
- if (err != null) {
|
|
|
|
|
|
|
+ if (err) {
|
|
|
OError.tag(err, 'error renaming entity', {
|
|
OError.tag(err, 'error renaming entity', {
|
|
|
- project_id,
|
|
|
|
|
- entity_id,
|
|
|
|
|
|
|
+ projectId,
|
|
|
|
|
+ entityId,
|
|
|
entityType,
|
|
entityType,
|
|
|
newName,
|
|
newName,
|
|
|
})
|
|
})
|
|
@@ -495,204 +455,177 @@ const EditorController = {
|
|
|
}
|
|
}
|
|
|
if (newName.length > 0) {
|
|
if (newName.length > 0) {
|
|
|
EditorRealTimeController.emitToRoom(
|
|
EditorRealTimeController.emitToRoom(
|
|
|
- project_id,
|
|
|
|
|
|
|
+ projectId,
|
|
|
'reciveEntityRename',
|
|
'reciveEntityRename',
|
|
|
- entity_id,
|
|
|
|
|
|
|
+ entityId,
|
|
|
newName
|
|
newName
|
|
|
)
|
|
)
|
|
|
}
|
|
}
|
|
|
- return callback()
|
|
|
|
|
|
|
+ callback()
|
|
|
}
|
|
}
|
|
|
)
|
|
)
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
- moveEntity(project_id, entity_id, folder_id, entityType, userId, callback) {
|
|
|
|
|
- if (callback == null) {
|
|
|
|
|
- callback = function () {}
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ moveEntity(
|
|
|
|
|
+ projectId,
|
|
|
|
|
+ entityId,
|
|
|
|
|
+ folderId,
|
|
|
|
|
+ entityType,
|
|
|
|
|
+ userId,
|
|
|
|
|
+ source,
|
|
|
|
|
+ callback
|
|
|
|
|
+ ) {
|
|
|
Metrics.inc('editor.move-entity')
|
|
Metrics.inc('editor.move-entity')
|
|
|
- return ProjectEntityUpdateHandler.moveEntity(
|
|
|
|
|
- project_id,
|
|
|
|
|
- entity_id,
|
|
|
|
|
- folder_id,
|
|
|
|
|
|
|
+ ProjectEntityUpdateHandler.moveEntity(
|
|
|
|
|
+ projectId,
|
|
|
|
|
+ entityId,
|
|
|
|
|
+ folderId,
|
|
|
entityType,
|
|
entityType,
|
|
|
userId,
|
|
userId,
|
|
|
|
|
+ source,
|
|
|
function (err) {
|
|
function (err) {
|
|
|
- if (err != null) {
|
|
|
|
|
|
|
+ if (err) {
|
|
|
OError.tag(err, 'error moving entity', {
|
|
OError.tag(err, 'error moving entity', {
|
|
|
- project_id,
|
|
|
|
|
- entity_id,
|
|
|
|
|
- folder_id,
|
|
|
|
|
|
|
+ projectId,
|
|
|
|
|
+ entityId,
|
|
|
|
|
+ folderId,
|
|
|
})
|
|
})
|
|
|
return callback(err)
|
|
return callback(err)
|
|
|
}
|
|
}
|
|
|
EditorRealTimeController.emitToRoom(
|
|
EditorRealTimeController.emitToRoom(
|
|
|
- project_id,
|
|
|
|
|
|
|
+ projectId,
|
|
|
'reciveEntityMove',
|
|
'reciveEntityMove',
|
|
|
- entity_id,
|
|
|
|
|
- folder_id
|
|
|
|
|
|
|
+ entityId,
|
|
|
|
|
+ folderId
|
|
|
)
|
|
)
|
|
|
- return callback()
|
|
|
|
|
|
|
+ callback()
|
|
|
}
|
|
}
|
|
|
)
|
|
)
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
- renameProject(project_id, newName, callback) {
|
|
|
|
|
- if (callback == null) {
|
|
|
|
|
- callback = function () {}
|
|
|
|
|
- }
|
|
|
|
|
- return ProjectDetailsHandler.renameProject(
|
|
|
|
|
- project_id,
|
|
|
|
|
- newName,
|
|
|
|
|
- function (err) {
|
|
|
|
|
- if (err != null) {
|
|
|
|
|
- OError.tag(err, 'error renaming project', {
|
|
|
|
|
- project_id,
|
|
|
|
|
- newName,
|
|
|
|
|
- })
|
|
|
|
|
- return callback(err)
|
|
|
|
|
- }
|
|
|
|
|
- EditorRealTimeController.emitToRoom(
|
|
|
|
|
- project_id,
|
|
|
|
|
- 'projectNameUpdated',
|
|
|
|
|
- newName
|
|
|
|
|
- )
|
|
|
|
|
- return callback()
|
|
|
|
|
|
|
+ renameProject(projectId, newName, callback) {
|
|
|
|
|
+ ProjectDetailsHandler.renameProject(projectId, newName, function (err) {
|
|
|
|
|
+ if (err) {
|
|
|
|
|
+ OError.tag(err, 'error renaming project', {
|
|
|
|
|
+ projectId,
|
|
|
|
|
+ newName,
|
|
|
|
|
+ })
|
|
|
|
|
+ return callback(err)
|
|
|
}
|
|
}
|
|
|
- )
|
|
|
|
|
|
|
+ EditorRealTimeController.emitToRoom(
|
|
|
|
|
+ projectId,
|
|
|
|
|
+ 'projectNameUpdated',
|
|
|
|
|
+ newName
|
|
|
|
|
+ )
|
|
|
|
|
+ callback()
|
|
|
|
|
+ })
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
- setCompiler(project_id, compiler, callback) {
|
|
|
|
|
- if (callback == null) {
|
|
|
|
|
- callback = function () {}
|
|
|
|
|
- }
|
|
|
|
|
- return ProjectOptionsHandler.setCompiler(
|
|
|
|
|
- project_id,
|
|
|
|
|
- compiler,
|
|
|
|
|
- function (err) {
|
|
|
|
|
- if (err != null) {
|
|
|
|
|
- return callback(err)
|
|
|
|
|
- }
|
|
|
|
|
- EditorRealTimeController.emitToRoom(
|
|
|
|
|
- project_id,
|
|
|
|
|
- 'compilerUpdated',
|
|
|
|
|
- compiler
|
|
|
|
|
- )
|
|
|
|
|
- return callback()
|
|
|
|
|
|
|
+ setCompiler(projectId, compiler, callback) {
|
|
|
|
|
+ ProjectOptionsHandler.setCompiler(projectId, compiler, function (err) {
|
|
|
|
|
+ if (err) {
|
|
|
|
|
+ return callback(err)
|
|
|
}
|
|
}
|
|
|
- )
|
|
|
|
|
|
|
+ EditorRealTimeController.emitToRoom(
|
|
|
|
|
+ projectId,
|
|
|
|
|
+ 'compilerUpdated',
|
|
|
|
|
+ compiler
|
|
|
|
|
+ )
|
|
|
|
|
+ callback()
|
|
|
|
|
+ })
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
- setImageName(project_id, imageName, callback) {
|
|
|
|
|
- if (callback == null) {
|
|
|
|
|
- callback = function () {}
|
|
|
|
|
- }
|
|
|
|
|
- return ProjectOptionsHandler.setImageName(
|
|
|
|
|
- project_id,
|
|
|
|
|
- imageName,
|
|
|
|
|
- function (err) {
|
|
|
|
|
- if (err != null) {
|
|
|
|
|
- return callback(err)
|
|
|
|
|
- }
|
|
|
|
|
- EditorRealTimeController.emitToRoom(
|
|
|
|
|
- project_id,
|
|
|
|
|
- 'imageNameUpdated',
|
|
|
|
|
- imageName
|
|
|
|
|
- )
|
|
|
|
|
- return callback()
|
|
|
|
|
|
|
+ setImageName(projectId, imageName, callback) {
|
|
|
|
|
+ ProjectOptionsHandler.setImageName(projectId, imageName, function (err) {
|
|
|
|
|
+ if (err) {
|
|
|
|
|
+ return callback(err)
|
|
|
}
|
|
}
|
|
|
- )
|
|
|
|
|
|
|
+ EditorRealTimeController.emitToRoom(
|
|
|
|
|
+ projectId,
|
|
|
|
|
+ 'imageNameUpdated',
|
|
|
|
|
+ imageName
|
|
|
|
|
+ )
|
|
|
|
|
+ callback()
|
|
|
|
|
+ })
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
- setSpellCheckLanguage(project_id, languageCode, callback) {
|
|
|
|
|
- if (callback == null) {
|
|
|
|
|
- callback = function () {}
|
|
|
|
|
- }
|
|
|
|
|
- return ProjectOptionsHandler.setSpellCheckLanguage(
|
|
|
|
|
- project_id,
|
|
|
|
|
|
|
+ setSpellCheckLanguage(projectId, languageCode, callback) {
|
|
|
|
|
+ ProjectOptionsHandler.setSpellCheckLanguage(
|
|
|
|
|
+ projectId,
|
|
|
languageCode,
|
|
languageCode,
|
|
|
function (err) {
|
|
function (err) {
|
|
|
- if (err != null) {
|
|
|
|
|
|
|
+ if (err) {
|
|
|
return callback(err)
|
|
return callback(err)
|
|
|
}
|
|
}
|
|
|
EditorRealTimeController.emitToRoom(
|
|
EditorRealTimeController.emitToRoom(
|
|
|
- project_id,
|
|
|
|
|
|
|
+ projectId,
|
|
|
'spellCheckLanguageUpdated',
|
|
'spellCheckLanguageUpdated',
|
|
|
languageCode
|
|
languageCode
|
|
|
)
|
|
)
|
|
|
- return callback()
|
|
|
|
|
|
|
+ callback()
|
|
|
}
|
|
}
|
|
|
)
|
|
)
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
- setPublicAccessLevel(project_id, newAccessLevel, callback) {
|
|
|
|
|
- if (callback == null) {
|
|
|
|
|
- callback = function () {}
|
|
|
|
|
- }
|
|
|
|
|
- return ProjectDetailsHandler.setPublicAccessLevel(
|
|
|
|
|
- project_id,
|
|
|
|
|
|
|
+ setPublicAccessLevel(projectId, newAccessLevel, callback) {
|
|
|
|
|
+ ProjectDetailsHandler.setPublicAccessLevel(
|
|
|
|
|
+ projectId,
|
|
|
newAccessLevel,
|
|
newAccessLevel,
|
|
|
function (err) {
|
|
function (err) {
|
|
|
- if (err != null) {
|
|
|
|
|
|
|
+ if (err) {
|
|
|
return callback(err)
|
|
return callback(err)
|
|
|
}
|
|
}
|
|
|
EditorRealTimeController.emitToRoom(
|
|
EditorRealTimeController.emitToRoom(
|
|
|
- project_id,
|
|
|
|
|
|
|
+ projectId,
|
|
|
'project:publicAccessLevel:changed',
|
|
'project:publicAccessLevel:changed',
|
|
|
{ newAccessLevel }
|
|
{ newAccessLevel }
|
|
|
)
|
|
)
|
|
|
if (newAccessLevel === PublicAccessLevels.TOKEN_BASED) {
|
|
if (newAccessLevel === PublicAccessLevels.TOKEN_BASED) {
|
|
|
- return ProjectDetailsHandler.ensureTokensArePresent(
|
|
|
|
|
- project_id,
|
|
|
|
|
|
|
+ ProjectDetailsHandler.ensureTokensArePresent(
|
|
|
|
|
+ projectId,
|
|
|
function (err, tokens) {
|
|
function (err, tokens) {
|
|
|
- if (err != null) {
|
|
|
|
|
|
|
+ if (err) {
|
|
|
return callback(err)
|
|
return callback(err)
|
|
|
}
|
|
}
|
|
|
EditorRealTimeController.emitToRoom(
|
|
EditorRealTimeController.emitToRoom(
|
|
|
- project_id,
|
|
|
|
|
|
|
+ projectId,
|
|
|
'project:tokens:changed',
|
|
'project:tokens:changed',
|
|
|
{ tokens }
|
|
{ tokens }
|
|
|
)
|
|
)
|
|
|
- return callback()
|
|
|
|
|
|
|
+ callback()
|
|
|
}
|
|
}
|
|
|
)
|
|
)
|
|
|
} else {
|
|
} else {
|
|
|
- return callback()
|
|
|
|
|
|
|
+ callback()
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
)
|
|
)
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
- setRootDoc(project_id, newRootDocID, callback) {
|
|
|
|
|
- if (callback == null) {
|
|
|
|
|
- callback = function () {}
|
|
|
|
|
- }
|
|
|
|
|
- return ProjectEntityUpdateHandler.setRootDoc(
|
|
|
|
|
- project_id,
|
|
|
|
|
|
|
+ setRootDoc(projectId, newRootDocID, callback) {
|
|
|
|
|
+ ProjectEntityUpdateHandler.setRootDoc(
|
|
|
|
|
+ projectId,
|
|
|
newRootDocID,
|
|
newRootDocID,
|
|
|
function (err) {
|
|
function (err) {
|
|
|
- if (err != null) {
|
|
|
|
|
|
|
+ if (err) {
|
|
|
return callback(err)
|
|
return callback(err)
|
|
|
}
|
|
}
|
|
|
EditorRealTimeController.emitToRoom(
|
|
EditorRealTimeController.emitToRoom(
|
|
|
- project_id,
|
|
|
|
|
|
|
+ projectId,
|
|
|
'rootDocUpdated',
|
|
'rootDocUpdated',
|
|
|
newRootDocID
|
|
newRootDocID
|
|
|
)
|
|
)
|
|
|
- return callback()
|
|
|
|
|
|
|
+ callback()
|
|
|
}
|
|
}
|
|
|
)
|
|
)
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
- _notifyProjectUsersOfNewFolders(project_id, folders, callback) {
|
|
|
|
|
- if (callback == null) {
|
|
|
|
|
- callback = function () {}
|
|
|
|
|
- }
|
|
|
|
|
- return async.eachSeries(
|
|
|
|
|
|
|
+ _notifyProjectUsersOfNewFolders(projectId, folders, callback) {
|
|
|
|
|
+ async.eachSeries(
|
|
|
folders,
|
|
folders,
|
|
|
(folder, cb) =>
|
|
(folder, cb) =>
|
|
|
EditorController._notifyProjectUsersOfNewFolder(
|
|
EditorController._notifyProjectUsersOfNewFolder(
|
|
|
- project_id,
|
|
|
|
|
|
|
+ projectId,
|
|
|
folder.parentFolder_id,
|
|
folder.parentFolder_id,
|
|
|
folder,
|
|
folder,
|
|
|
null,
|
|
null,
|
|
@@ -703,23 +636,20 @@ const EditorController = {
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
_notifyProjectUsersOfNewFolder(
|
|
_notifyProjectUsersOfNewFolder(
|
|
|
- project_id,
|
|
|
|
|
- folder_id,
|
|
|
|
|
|
|
+ projectId,
|
|
|
|
|
+ folderId,
|
|
|
folder,
|
|
folder,
|
|
|
userId,
|
|
userId,
|
|
|
callback
|
|
callback
|
|
|
) {
|
|
) {
|
|
|
- if (callback == null) {
|
|
|
|
|
- callback = function () {}
|
|
|
|
|
- }
|
|
|
|
|
EditorRealTimeController.emitToRoom(
|
|
EditorRealTimeController.emitToRoom(
|
|
|
- project_id,
|
|
|
|
|
|
|
+ projectId,
|
|
|
'reciveNewFolder',
|
|
'reciveNewFolder',
|
|
|
- folder_id,
|
|
|
|
|
|
|
+ folderId,
|
|
|
folder,
|
|
folder,
|
|
|
userId
|
|
userId
|
|
|
)
|
|
)
|
|
|
- return callback()
|
|
|
|
|
|
|
+ callback()
|
|
|
},
|
|
},
|
|
|
}
|
|
}
|
|
|
|
|
|