User.coffee 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. Project = require('./Project').Project
  2. Settings = require 'settings-sharelatex'
  3. _ = require('underscore')
  4. mongoose = require('mongoose')
  5. uuid = require('node-uuid')
  6. Schema = mongoose.Schema
  7. ObjectId = Schema.ObjectId
  8. UserSchema = new Schema
  9. email : {type : String, default : ''}
  10. first_name : {type : String, default : ''}
  11. last_name : {type : String, default : ''}
  12. hashedPassword : String
  13. isAdmin : {type : Boolean, default : false}
  14. confirmed : {type : Boolean, default : false}
  15. signUpDate : {type : Date, default: () -> new Date() }
  16. lastLoggedIn : {type : Date}
  17. loginCount : {type : Number, default: 0}
  18. holdingAccount : {type : Boolean, default: false}
  19. ace : {
  20. mode : {type : String, default: 'none'}
  21. theme : {type : String, default: 'textmate'}
  22. fontSize : {type : Number, default:'12'}
  23. autoComplete: {type : Boolean, default: true}
  24. spellCheckLanguage : {type : String, default: "en"}
  25. pdfViewer : {type : String, default: "pdfjs"}
  26. }
  27. features : {
  28. collaborators: { type:Number, default: Settings.defaultFeatures.collaborators }
  29. versioning: { type:Boolean, default: Settings.defaultFeatures.versioning }
  30. dropbox: { type:Boolean, default: Settings.defaultFeatures.dropbox }
  31. }
  32. featureSwitches : {
  33. dropbox: {type:Boolean, default:true},
  34. oldHistory: {type:Boolean}
  35. }
  36. referal_id : {type:String, default:() -> uuid.v4().split("-")[0]}
  37. refered_users: [ type:ObjectId, ref:'User' ]
  38. refered_user_count: { type:Number, default: 0 }
  39. subscription:
  40. recurlyToken : String
  41. freeTrialExpiresAt: Date
  42. freeTrialDowngraded: Boolean
  43. freeTrialPlanCode: String
  44. # This is poorly named. It does not directly correspond
  45. # to whether the user has has a free trial, but rather
  46. # whether they should be allowed one in the future.
  47. # For example, a user signing up directly for a paid plan
  48. # has this set to true, despite never having had a free trial
  49. hadFreeTrial: {type: Boolean, default: false}
  50. UserSchema.statics.getAllIds = (callback)->
  51. this.find {}, ["first_name"], callback
  52. UserSchema.statics.findReadOnlyProjects = (user_id, callback)->
  53. @find({'projects.readOnly_refs':user_id}).populate('projects.readOnly_refs').run (err, users)->
  54. projects = []
  55. _.each users, (user)->
  56. _.each user.projects, (project)->
  57. _.each project.readOnly_refs, (subUser)->
  58. if(subUser._id == user_id)
  59. projects.push(project)
  60. callback(projects)
  61. UserSchema.statics.findCollaborationProjects = (user_id, callback)->
  62. @find({'projects.collaberator_refs':user_id}).populate('projects.collaberator_refs').run (err, users)->
  63. projects = []
  64. _.each users, (user)->
  65. _.each user.projects, (project)->
  66. _.each project.collaberator_refs, (subUser)->
  67. if(subUser._id == user_id)
  68. projects.push(project)
  69. callback(projects)
  70. conn = mongoose.createConnection(Settings.mongo.url, server: poolSize: 10)
  71. User = conn.model('User', UserSchema)
  72. model = mongoose.model 'User', UserSchema
  73. exports.User = User