Remove invitation code if email sending failed, improve registration process with invitation

This commit is contained in:
lkisme 2017-03-28 00:48:18 +08:00
parent feafc46bb5
commit f82941550a
4 changed files with 19 additions and 12 deletions

View file

@ -1,6 +1,6 @@
Template.invitationCode.onRendered(() => { Template.invitationCode.onRendered(() => {
const disableRegistration = Settings.findOne().disableRegistration; const setting = Settings.findOne();
if(!disableRegistration){ if (!setting || !setting.disableRegistration) {
$('#invitationcode').hide(); $('#invitationcode').hide();
} }
}); });

View file

@ -13,7 +13,6 @@ AccountsTemplates.addFields([{
displayName: 'Invitation Code', displayName: 'Invitation Code',
required: false, required: false,
minLength: 6, minLength: 6,
errStr: 'Invitation code doesn\'t exist',
template: 'invitationCode', template: 'invitationCode',
}]); }]);
@ -69,4 +68,3 @@ if (Meteor.isServer) {
}; };
}); });
} }

View file

@ -104,6 +104,7 @@ if (Meteor.isServer) {
text: TAPi18n.__('email-invite-register-text', params, lang), text: TAPi18n.__('email-invite-register-text', params, lang),
}); });
} catch (e) { } catch (e) {
InvitationCodes.remove(_id);
throw new Meteor.Error('email-fail', e.message); throw new Meteor.Error('email-fail', e.message);
} }
} }

View file

@ -91,6 +91,10 @@ Users.attachSchema(new SimpleSchema({
type: [String], type: [String],
optional: true, optional: true,
}, },
'profile.icode': {
type: String,
optional: true,
},
services: { services: {
type: Object, type: Object,
optional: true, optional: true,
@ -401,11 +405,12 @@ if (Meteor.isServer) {
return user; return user;
} }
const iCode = options.profile.invitationcode | ''; if (!options || !options.profile) {
throw new Meteor.Error('error-invitation-code-blank', 'The invitation code is required');
const invitationCode = InvitationCodes.findOne({code: iCode, valid:true}); }
const invitationCode = InvitationCodes.findOne({code: options.profile.invitationcode, email: options.email, valid: true});
if (!invitationCode) { if (!invitationCode) {
throw new Meteor.Error('error-invitation-code-not-exist'); throw new Meteor.Error('error-invitation-code-not-exist', 'The invitation code doesn\'t exist');
}else{ }else{
user.profile = {icode: options.profile.invitationcode}; user.profile = {icode: options.profile.invitationcode};
} }
@ -487,16 +492,19 @@ if (Meteor.isServer) {
//invite user to corresponding boards //invite user to corresponding boards
const disableRegistration = Settings.findOne().disableRegistration; const disableRegistration = Settings.findOne().disableRegistration;
if (disableRegistration) { if (disableRegistration) {
const user = Users.findOne(doc._id); const invitationCode = InvitationCodes.findOne({code: doc.profile.icode, valid:true});
const invitationCode = InvitationCodes.findOne({code: user.profile.icode, valid:true});
if (!invitationCode) { if (!invitationCode) {
throw new Meteor.Error('error-user-notCreated'); throw new Meteor.Error('error-invitation-code-not-exist');
}else{ }else{
invitationCode.boardsToBeInvited.forEach((boardId) => { invitationCode.boardsToBeInvited.forEach((boardId) => {
const board = Boards.findOne(boardId); const board = Boards.findOne(boardId);
board.addMember(doc._id); board.addMember(doc._id);
}); });
user.profile = {invitedBoards: invitationCode.boardsToBeInvited}; if (!doc.profile) {
doc.profile = {};
}
doc.profile.invitedBoards = invitationCode.boardsToBeInvited;
Users.update(doc._id, {$set:{profile: doc.profile}});
InvitationCodes.update(invitationCode._id, {$set: {valid:false}}); InvitationCodes.update(invitationCode._id, {$set: {valid:false}});
} }
} }