ProjectEditorHandler.coffee 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. _ = require("underscore")
  2. module.exports = ProjectEditorHandler =
  3. trackChangesAvailable: false
  4. buildProjectModelView: (project, members, invites) ->
  5. result =
  6. _id : project._id
  7. name : project.name
  8. rootDoc_id : project.rootDoc_id
  9. rootFolder : [@buildFolderModelView project.rootFolder[0]]
  10. publicAccesLevel : project.publicAccesLevel
  11. dropboxEnabled : !!project.existsInDropbox
  12. compiler : project.compiler
  13. description: project.description
  14. spellCheckLanguage: project.spellCheckLanguage
  15. deletedByExternalDataSource : project.deletedByExternalDataSource || false
  16. deletedDocs: project.deletedDocs
  17. members: []
  18. invites: invites
  19. tokens: project.tokens
  20. if !result.invites?
  21. result.invites = []
  22. {owner, ownerFeatures, members} = @buildOwnerAndMembersViews(members)
  23. result.owner = owner
  24. result.members = members
  25. result.features = _.defaults(ownerFeatures or {}, {
  26. collaborators: -1 # Infinite
  27. versioning: false
  28. dropbox:false
  29. compileTimeout: 60
  30. compileGroup:"standard"
  31. templates: false
  32. references: false
  33. referencesSearch: false
  34. mendeley: false
  35. trackChanges: false
  36. trackChangesVisible: ProjectEditorHandler.trackChangesAvailable
  37. })
  38. # Originally these two feature flags were both signalled by the now-deprecated `references` flag.
  39. # For older users, the presence of the `references` feature flag should still turn on these features.
  40. result.features.referencesSearch = result.features.referencesSearch or result.features.references
  41. result.features.mendeley = result.features.mendeley or result.features.references
  42. return result
  43. buildOwnerAndMembersViews: (members) ->
  44. owner = null
  45. ownerFeatures = null
  46. filteredMembers = []
  47. for member in (members || [])
  48. if member.privilegeLevel == "owner"
  49. ownerFeatures = member.user.features
  50. owner = @buildUserModelView member.user, "owner"
  51. else
  52. filteredMembers.push @buildUserModelView member.user, member.privilegeLevel
  53. return {
  54. owner: owner,
  55. ownerFeatures: ownerFeatures,
  56. members: filteredMembers,
  57. }
  58. buildUserModelView: (user, privileges) ->
  59. _id : user._id
  60. first_name : user.first_name
  61. last_name : user.last_name
  62. email : user.email
  63. privileges : privileges
  64. signUpDate : user.signUpDate
  65. buildFolderModelView: (folder) ->
  66. fileRefs = _.filter (folder.fileRefs or []), (file)-> file?
  67. _id : folder._id
  68. name : folder.name
  69. folders : @buildFolderModelView childFolder for childFolder in (folder.folders or [])
  70. fileRefs : @buildFileModelView file for file in fileRefs
  71. docs : @buildDocModelView doc for doc in (folder.docs or [])
  72. buildFileModelView: (file) ->
  73. _id : file._id
  74. name : file.name
  75. linkedFileData: file.linkedFileData
  76. created: file.created
  77. buildDocModelView: (doc) ->
  78. _id : doc._id
  79. name : doc.name