ProjectDeleter.coffee 2.9 KB

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