ProjectEditorHandler.coffee 2.9 KB

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