瀏覽代碼

Merge pull request #1785 from Akuket/devel

Bugfix : Resending invitation code.
Lauri Ojansivu 7 年之前
父節點
當前提交
c708877dde
共有 3 個文件被更改,包括 28 次插入10 次删除
  1. 1 0
      client/components/settings/settingBody.js
  2. 21 8
      models/settings.js
  3. 6 2
      models/users.js

+ 1 - 0
client/components/settings/settingBody.js

@@ -101,6 +101,7 @@ BlazeComponent.extendComponent({
         // if (!err) {
         //   TODO - show more info to user
         // }
+
         this.setLoading(false);
       });
     }

+ 21 - 8
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);
+              }
+            });
+          }
         }
       });
     },

+ 6 - 2
models/users.js

@@ -501,9 +501,13 @@ if (Meteor.isServer) {
     } else {
       user.profile = {icode: options.profile.invitationcode};
       user.profile.boardView = 'board-view-lists';
-    }
 
-    return user;
+      // Deletes the invitation code after the user was created successfully.
+      setTimeout(Meteor.bindEnvironment(() => {
+        InvitationCodes.remove({'_id': invitationCode._id});
+      }), 200);
+      return user;
+    }
   });
 }