diff --git a/services/web/app/coffee/Features/Subscription/TeamInvitesController.coffee b/services/web/app/coffee/Features/Subscription/TeamInvitesController.coffee index a073c448e2..0a48aa4838 100644 --- a/services/web/app/coffee/Features/Subscription/TeamInvitesController.coffee +++ b/services/web/app/coffee/Features/Subscription/TeamInvitesController.coffee @@ -1,6 +1,7 @@ logger = require("logger-sharelatex") TeamInvitesHandler = require('./TeamInvitesHandler') AuthenticationController = require("../Authentication/AuthenticationController") +ErrorController = require("../Errors/ErrorController") module.exports = createInvite: (req, res, next) -> @@ -14,16 +15,23 @@ module.exports = } res.json inviteView - viewInvite: (req, res) -> - token = request.params.token + viewInvite: (req, res, next) -> + token = req.params.token + userId = AuthenticationController.getLoggedInUserId(req) - TeamInvitesHandler.getInvite token, (err, invite) -> + TeamInvitesHandler.getInviteDetails token, userId, (err, results) -> next(err) if err? - res.render "referal/bonus", - title: "bonus_please_recommend_us" - refered_users: refered_users - refered_user_count: (refered_users or []).length + { invite, personalSubscription, inviterName } = results + + unless invite? + return ErrorController.notFound(req, res, next) + + res.render "subscriptions/group/team_invite", + inviterName: inviterName + inviteToken: invite.token + hasPersonalSubscription: personalSubscription? + acceptInvite: (req, res) -> diff --git a/services/web/app/coffee/Features/Subscription/TeamInvitesHandler.coffee b/services/web/app/coffee/Features/Subscription/TeamInvitesHandler.coffee index 2d170aae93..c106598d56 100644 --- a/services/web/app/coffee/Features/Subscription/TeamInvitesHandler.coffee +++ b/services/web/app/coffee/Features/Subscription/TeamInvitesHandler.coffee @@ -19,7 +19,7 @@ module.exports = TeamInvitesHandler = SubscriptionLocator.getUsersSubscription adminUserId, (error, subscription) -> return callback(error) if error? - inviterName = "#{groupAdmin.first_name} #{groupAdmin.last_name}" + inviterName = TeamInvitesHandler.inviterName(groupAdmin) token = crypto.randomBytes(32).toString("hex") TeamInvite.create { @@ -37,8 +37,35 @@ module.exports = TeamInvitesHandler = return callback(error, invite) getInvite: (token, callback) -> - + TeamInvite.findOne(token: token, callback) acceptInvite: (userId, token, callback) -> revokeInvite: (token, callback) -> + + getInviteDetails: (token, userId, callback) -> + TeamInvitesHandler.getInvite token, (err, invite) -> + callback(err) if err? + + SubscriptionLocator.getUsersSubscription userId, (err, personalSubscription) -> + callback(err) if err? + + SubscriptionLocator.getSubscription invite.subscriptionId, (err, teamSubscription) -> + callback(err) if err? + + UserLocator.findById teamSubscription.admin_id, (err, teamAdmin) -> + callback(err) if err? + + callback(null , { + invite: invite, + personalSubscription: personalSubscription, + team: teamSubscription, + inviterName: TeamInvitesHandler.inviterName(teamAdmin), + teamAdmin: teamAdmin + }) + + inviterName: (groupAdmin) -> + if groupAdmin.first_name and groupAdmin.last_name + "#{groupAdmin.first_name} #{groupAdmin.last_name} (#{groupAdmin.email})" + else + groupAdmin.email diff --git a/services/web/app/views/subscriptions/group/team_invite.pug b/services/web/app/views/subscriptions/group/team_invite.pug index 6d7e962ccc..ae065ea64b 100644 --- a/services/web/app/views/subscriptions/group/team_invite.pug +++ b/services/web/app/views/subscriptions/group/team_invite.pug @@ -4,10 +4,10 @@ block scripts script(type='text/javascript'). window.teamId = '#{teamId}' window.hasPersonalSubscription = #{hasPersonalSubscription} - window.inviteToken = #{inviteToken} + window.inviteToken = '#{inviteToken}' block content - .content.content-alt + .content.content-alt.team-invite .container .row .col-md-8.col-md-offset-2 @@ -20,36 +20,21 @@ block content .col-md-8.col-md-offset-2(ng-cloak) .card(ng-controller="TeamInviteController") .page-header - h1.text-centered #{translate("you_are_invited_to_group", {teamName: teamName})} + h1.text-centered #{translate("invited_to_group", {inviterName: inviterName})} - div(ng-show="view =='personalSubscription'").row.text-centered - div #{translate("cancel_personal_subscription_first")} - .row - .col-md-12   + div(ng-show="view =='personalSubscription'").row.text-centered.message + p #{translate("cancel_personal_subscription_first")} .row .col-md-12 a.btn.btn.btn-default(ng-click="keepPersonalSubscription()", ng-disabled="inflight") #{translate("not_now")} span   a.btn.btn.btn-primary(ng-click="cancelPersonalSubscription()", ng-disabled="inflight") #{translate("cancel_your_subscription")} - div(ng-show="view =='teamInvite'").row.text-centered - .row - .col-md-12 #{translate("group_provides_you_with_premium_account", {teamName: teamName})} - .row - .col-md-12   + div(ng-show="view =='teamInvite'").row.text-centered.message + p #{translate("accept_invite_to_join_team", {inviterName: inviterName})} .row .col-md-12 .text-center a.btn.btn-default(href="/project") #{translate("not_now")} span   - a.btn.btn.btn-primary(ng-click="joinTeam()", ng-disabled="inflight") #{translate("verify_email_address")} - - - span(ng-show="view =='requestSent'").row.text-centered.text-center - .row - .col-md-12 #{translate("check_email_to_complete_the_upgrade")} - .row - .col-md-12   - .row - .col-md-12 - a.btn.btn.btn-primary(href="/project") #{translate("done")} + a.btn.btn.btn-primary(ng-click="joinTeam()", ng-disabled="inflight") #{translate("join_team")} diff --git a/services/web/public/coffee/main.coffee b/services/web/public/coffee/main.coffee index 951923dc35..6034ed1bdd 100644 --- a/services/web/public/coffee/main.coffee +++ b/services/web/public/coffee/main.coffee @@ -17,6 +17,7 @@ define [ "main/announcements" "main/register-users" "main/subscription/group-subscription-invite-controller" + "main/subscription/team-invite-controller" "main/contact-us" "main/learn" "analytics/AbTestingManager" diff --git a/services/web/public/stylesheets/app/subscription.less b/services/web/public/stylesheets/app/subscription.less index 5cabafbec2..f2ff53250b 100644 --- a/services/web/public/stylesheets/app/subscription.less +++ b/services/web/public/stylesheets/app/subscription.less @@ -24,7 +24,7 @@ .input-feedback-message { display: none; font-size: 0.8em; - + .has-error & { display: inline-block; } @@ -58,7 +58,7 @@ & + & { border-left-width: 0; - border-radius: 0 @border-radius-large @border-radius-large 0; + border-radius: 0 @border-radius-large @border-radius-large 0; } &-selected { @@ -73,6 +73,10 @@ } } +.team-invite .message { + margin: 3em 0; +} + .capitalised { text-transform:capitalize; -} \ No newline at end of file +}