diff options
-rw-r--r-- | client/components/settings/settingBody.js | 3 | ||||
-rw-r--r-- | models/settings.js | 29 | ||||
-rw-r--r-- | models/users.js | 3 |
3 files changed, 27 insertions, 8 deletions
diff --git a/client/components/settings/settingBody.js b/client/components/settings/settingBody.js index 7230d893..ff563fc1 100644 --- a/client/components/settings/settingBody.js +++ b/client/components/settings/settingBody.js @@ -82,6 +82,7 @@ BlazeComponent.extendComponent({ }, inviteThroughEmail() { + /* eslint-disable no-console */ const emails = $('#email-to-invite').val().trim().split('\n').join(',').split(','); const boardsToInvite = []; $('.js-toggle-board-choose .materialCheckBox.is-checked').each(function () { @@ -99,9 +100,11 @@ BlazeComponent.extendComponent({ // if (!err) { // TODO - show more info to user // } + this.setLoading(false); }); } + /* eslint-enable no-console */ }, saveMailServerInfo() { diff --git a/models/settings.js b/models/settings.js index 34f693d9..308d867d 100644 --- a/models/settings.js +++ b/models/settings.js @@ -124,20 +124,33 @@ if (Meteor.isServer) { sendInvitation(emails, boards) { check(emails, [String]); check(boards, [String]); + const user = Users.findOne(Meteor.userId()); if(!user.isAdmin){ throw new Meteor.Error('not-allowed'); } emails.forEach((email) => { if (email && SimpleSchema.RegEx.Email.test(email)) { - const code = getRandomNum(100000, 999999); - InvitationCodes.insert({code, email, boardsToBeInvited: boards, createdAt: new Date(), authorId: Meteor.userId()}, function(err, _id){ - if (!err && _id) { - sendInvitationEmail(_id); - } else { - throw new Meteor.Error('invitation-generated-fail', err.message); - } - }); + // Checks if the email is already link to an account. + const userExist = Users.findOne({email}); + if (userExist){ + throw new Meteor.Error('user-exist', `The user with the email ${email} has already an account.`); + } + // Checks if the email is already link to an invitation. + const invitation = InvitationCodes.findOne({email}); + if (invitation){ + InvitationCodes.update(invitation, {$set : {boardsToBeInvited: boards}}); + sendInvitationEmail(invitation._id); + }else { + const code = getRandomNum(100000, 999999); + InvitationCodes.insert({code, email, boardsToBeInvited: boards, createdAt: new Date(), authorId: Meteor.userId()}, function(err, _id){ + if (!err && _id) { + sendInvitationEmail(_id); + } else { + throw new Meteor.Error('invitation-generated-fail', err.message); + } + }); + } } }); }, diff --git a/models/users.js b/models/users.js index 5a7fbbe5..31590cea 100644 --- a/models/users.js +++ b/models/users.js @@ -503,6 +503,9 @@ if (Meteor.isServer) { user.profile.boardView = 'board-view-lists'; } + // Deletes the invitation. + InvitationCodes.remove(invitationCode._id); + return user; }); } |