SubscriptionGroupController.coffee 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. SubscriptionGroupHandler = require("./SubscriptionGroupHandler")
  2. logger = require("logger-sharelatex")
  3. SubscriptionLocator = require("./SubscriptionLocator")
  4. ErrorsController = require("../Errors/ErrorController")
  5. SubscriptionDomainHandler = require("./SubscriptionDomainHandler")
  6. _ = require("underscore")
  7. async = require("async")
  8. module.exports =
  9. addUserToGroup: (req, res)->
  10. adminUserId = req.session.user._id
  11. newEmail = req.body?.email?.toLowerCase()?.trim()
  12. logger.log adminUserId:adminUserId, newEmail:newEmail, "adding user to group subscription"
  13. SubscriptionGroupHandler.addUserToGroup adminUserId, newEmail, (err, user)->
  14. if err?
  15. logger.err err:err, newEmail:newEmail, adminUserId:adminUserId, "error adding user from group"
  16. return res.sendStatus 500
  17. result =
  18. user:user
  19. if err and err.limitReached
  20. result.limitReached = true
  21. res.json(result)
  22. removeUserFromGroup: (req, res)->
  23. adminUserId = req.session.user._id
  24. userToRemove_id = req.params.user_id
  25. logger.log adminUserId:adminUserId, userToRemove_id:userToRemove_id, "removing user from group subscription"
  26. SubscriptionGroupHandler.removeUserFromGroup adminUserId, userToRemove_id, (err)->
  27. if err?
  28. logger.err err:err, adminUserId:adminUserId, userToRemove_id:userToRemove_id, "error removing user from group"
  29. return res.sendStatus 500
  30. res.send()
  31. removeSelfFromGroup: (req, res)->
  32. adminUserId = req.query.admin_user_id
  33. userToRemove_id = req.session.user._id
  34. logger.log adminUserId:adminUserId, userToRemove_id:userToRemove_id, "removing user from group subscription after self request"
  35. SubscriptionGroupHandler.removeUserFromGroup adminUserId, userToRemove_id, (err)->
  36. if err?
  37. logger.err err:err, userToRemove_id:userToRemove_id, adminUserId:adminUserId, "error removing self from group"
  38. return res.sendStatus 500
  39. res.send()
  40. renderSubscriptionGroupAdminPage: (req, res)->
  41. user_id = req.session.user._id
  42. SubscriptionLocator.getUsersSubscription user_id, (err, subscription)->
  43. if !subscription.groupPlan
  44. return res.redirect("/")
  45. SubscriptionGroupHandler.getPopulatedListOfMembers user_id, (err, users)->
  46. res.render "subscriptions/group_admin",
  47. title: 'group_admin'
  48. users: users
  49. subscription: subscription
  50. renderGroupInvitePage: (req, res)->
  51. group_subscription_id = req.params.subscription_id
  52. user_id = req.session.user._id
  53. licence = SubscriptionDomainHandler.findDomainLicenceBySubscriptionId(group_subscription_id)
  54. if !licence?
  55. return ErrorsController.notFound(req, res)
  56. jobs =
  57. partOfGroup: (cb)->
  58. SubscriptionGroupHandler.isUserPartOfGroup user_id, licence.group_subscription_id, cb
  59. subscription: (cb)->
  60. SubscriptionLocator.getUsersSubscription user_id, cb
  61. async.series jobs, (err, results)->
  62. {partOfGroup, subscription} = results
  63. if partOfGroup
  64. return res.redirect("/user/subscription/custom_account")
  65. else
  66. res.render "subscriptions/group/invite",
  67. title: "Group Invitation"
  68. group_subscription_id:group_subscription_id
  69. licenceName:licence.name
  70. has_personal_subscription: subscription?
  71. beginJoinGroup: (req, res)->
  72. subscription_id = req.params.subscription_id
  73. user_id = req.session.user._id
  74. licence = SubscriptionDomainHandler.findDomainLicenceBySubscriptionId(subscription_id)
  75. if !licence?
  76. return ErrorsController.notFound(req, res)
  77. SubscriptionGroupHandler.sendVerificationEmail subscription_id, licence.name, req.session.user.email, (err)->
  78. if err?
  79. res.sendStatus 500
  80. else
  81. res.sendStatus 200
  82. completeJoin: (req, res)->
  83. subscription_id = req.params.subscription_id
  84. if !SubscriptionDomainHandler.findDomainLicenceBySubscriptionId(subscription_id)?
  85. return ErrorsController.notFound(req, res)
  86. email = req?.session?.user?.email
  87. logger.log subscription_id:subscription_id, user_id:req?.session?.user?._id, email:email, "starting the completion of joining group"
  88. SubscriptionGroupHandler.processGroupVerification email, subscription_id, req.query?.token, (err)->
  89. if err? and err == "token_not_found"
  90. return res.redirect "/user/subscription/#{subscription_id}/group/invited?expired=true"
  91. else if err?
  92. return res.sendStatus 500
  93. else
  94. logger.log subscription_id:subscription_id, email:email, "user successful completed join of group subscription"
  95. return res.redirect "/user/subscription/#{subscription_id}/group/successful-join"
  96. renderSuccessfulJoinPage: (req, res)->
  97. subscription_id = req.params.subscription_id
  98. licence = SubscriptionDomainHandler.findDomainLicenceBySubscriptionId(subscription_id)
  99. if !SubscriptionDomainHandler.findDomainLicenceBySubscriptionId(subscription_id)?
  100. return ErrorsController.notFound(req, res)
  101. res.render "subscriptions/group/successful_join",
  102. title: "Sucessfully joined group"
  103. licenceName:licence.name
  104. exportGroupCsv: (req, res)->
  105. user_id = req.session.user._id
  106. logger.log user_id: user_id, "exporting group csv"
  107. SubscriptionLocator.getUsersSubscription user_id, (err, subscription)->
  108. if !subscription.groupPlan
  109. return res.redirect("/")
  110. SubscriptionGroupHandler.getPopulatedListOfMembers user_id, (err, users)->
  111. groupCsv = ""
  112. for user in users
  113. groupCsv += user.email + "\n"
  114. res.header(
  115. "Content-Disposition",
  116. "attachment; filename=Group.csv"
  117. )
  118. res.contentType('text/csv')
  119. res.send(groupCsv)