ProjectDeleter.coffee 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. Project = require('../../models/Project').Project
  2. logger = require('logger-sharelatex')
  3. documentUpdaterHandler = require('../DocumentUpdater/DocumentUpdaterHandler')
  4. tagsHandler = require("../Tags/TagsHandler")
  5. async = require("async")
  6. FileStoreHandler = require("../FileStore/FileStoreHandler")
  7. module.exports = ProjectDeleter =
  8. markAsDeletedByExternalSource : (project_id, callback = (error) ->)->
  9. logger.log project_id:project_id, "marking project as deleted by external data source"
  10. conditions = {_id:project_id}
  11. update = {deletedByExternalDataSource:true}
  12. Project.update conditions, update, {}, (err)->
  13. require('../Editor/EditorController').notifyUsersProjectHasBeenDeletedOrRenamed project_id, ->
  14. callback()
  15. unmarkAsDeletedByExternalSource: (project_id, callback = (error) ->) ->
  16. logger.log project_id: project_id, "removing flag marking project as deleted by external data source"
  17. conditions = {_id:project_id.toString()}
  18. update = {deletedByExternalDataSource: false}
  19. Project.update conditions, update, {}, callback
  20. deleteUsersProjects: (owner_id, callback)->
  21. logger.log owner_id:owner_id, "deleting users projects"
  22. Project.remove owner_ref:owner_id, callback
  23. deleteProject: (project_id, callback = (error) ->) ->
  24. # archiveProject takes care of the clean-up
  25. ProjectDeleter.archiveProject project_id, (error) ->
  26. logger.log project_id: project_id, "deleting project"
  27. Project.remove _id: project_id, callback
  28. archiveProject: (project_id, callback = (error) ->)->
  29. logger.log project_id:project_id, "deleting project"
  30. Project.findById project_id, (err, project)=>
  31. if err? or !project?
  32. logger.err err:err, project_id:project_id, "error getting project to delete it"
  33. callback(err)
  34. else
  35. async.series [
  36. (cb)->
  37. documentUpdaterHandler.flushProjectToMongoAndDelete project_id, cb
  38. (cb)->
  39. tagsHandler.removeProjectFromAllTags project.owner_ref, project_id, (err)->
  40. cb() #doesn't matter if this fails or the order it happens in
  41. (cb)->
  42. project.collaberator_refs.forEach (collaberator_ref)->
  43. tagsHandler.removeProjectFromAllTags collaberator_ref, project_id, ->
  44. cb()
  45. (cb)->
  46. project.readOnly_refs.forEach (readOnly_ref)->
  47. tagsHandler.removeProjectFromAllTags readOnly_ref, project_id, ->
  48. cb()
  49. (cb)->
  50. Project.update {_id:project_id}, { $set: { archived: true }}, cb
  51. ], (err)->
  52. if err?
  53. logger.err err:err, "problem deleting project"
  54. callback(err)
  55. restoreProject: (project_id, callback = (error) ->) ->
  56. Project.update {_id:project_id}, { $unset: { archived: true }}, callback