ProjectDeleter.coffee 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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. CollaboratorsHandler = require("../Collaborators/CollaboratorsHandler")
  8. module.exports = ProjectDeleter =
  9. markAsDeletedByExternalSource : (project_id, callback = (error) ->)->
  10. logger.log project_id:project_id, "marking project as deleted by external data source"
  11. conditions = {_id:project_id}
  12. update = {deletedByExternalDataSource:true}
  13. Project.update conditions, update, {}, (err)->
  14. require('../Editor/EditorController').notifyUsersProjectHasBeenDeletedOrRenamed project_id, ->
  15. callback()
  16. unmarkAsDeletedByExternalSource: (project_id, callback = (error) ->) ->
  17. logger.log project_id: project_id, "removing flag marking project as deleted by external data source"
  18. conditions = {_id:project_id.toString()}
  19. update = {deletedByExternalDataSource: false}
  20. Project.update conditions, update, {}, callback
  21. deleteUsersProjects: (owner_id, callback)->
  22. logger.log owner_id:owner_id, "deleting users projects"
  23. Project.remove owner_ref:owner_id, callback
  24. deleteProject: (project_id, callback = (error) ->) ->
  25. # archiveProject takes care of the clean-up
  26. ProjectDeleter.archiveProject project_id, (error) ->
  27. logger.log project_id: project_id, "deleting project"
  28. Project.remove _id: project_id, callback
  29. archiveProject: (project_id, callback = (error) ->)->
  30. logger.log project_id:project_id, "deleting project"
  31. Project.findById project_id, (err, project)=>
  32. if err? or !project?
  33. logger.err err:err, project_id:project_id, "error getting project to delete it"
  34. callback(err)
  35. else
  36. async.series [
  37. (cb)->
  38. documentUpdaterHandler.flushProjectToMongoAndDelete project_id, cb
  39. (cb)->
  40. CollaboratorsHandler.getMemberIds project_id, (error, member_ids = []) ->
  41. for member_id in member_ids
  42. tagsHandler.removeProjectFromAllTags member_id, project_id, (err)->
  43. cb() #doesn't matter if this fails or the order it happens in
  44. (cb)->
  45. Project.update {_id:project_id}, { $set: { archived: true }}, cb
  46. ], (err)->
  47. if err?
  48. logger.err err:err, "problem deleting project"
  49. callback(err)
  50. restoreProject: (project_id, callback = (error) ->) ->
  51. Project.update {_id:project_id}, { $unset: { archived: true }}, callback