فهرست منبع

Add new importUsernames field for import user mapping

John R. Supplee 4 سال پیش
والد
کامیت
0446999c63

+ 4 - 1
client/components/import/import.js

@@ -169,7 +169,10 @@ BlazeComponent.extendComponent({
             this._refreshMembers(
               this.members().map(member => {
                 if (!member.wekanId) {
-                  const user = Users.findOne({ username: member.username });
+                  let user = Users.findOne({ username: member.username });
+                  if (!user) {
+                    user = Users.findOne({ importUsernames: member.username });
+                  }
                   if (user) {
                     // eslint-disable-next-line no-console
                     console.log('found username:', user.username);

+ 11 - 0
client/components/settings/peopleBody.jade

@@ -110,6 +110,7 @@ template(name="peopleGeneral")
         th {{_ 'createdAt'}}
         th {{_ 'active'}}
         th {{_ 'authentication-method'}}
+        th {{_ 'import-usernames'}}
         th
           +newUserRow
       each user in peopleList
@@ -257,6 +258,10 @@ template(name="peopleRow")
       td <s>{{_ userData.authenticationMethod }}</s>
     else
       td {{_ userData.authenticationMethod }}
+    if userData.loginDisabled
+      td <s>{{ userData.importUsernamesString }}</s>
+    else
+      td {{ userData.importUsernamesString }}
     td
       a.edit-user
         i.fa.fa-edit
@@ -346,6 +351,9 @@ template(name="editUserPopup")
         input.js-profile-email(type="email" value="{{user.emails.[0].address}}" readonly)
       else
         input.js-profile-email(type="email" value="{{user.emails.[0].address}}" required)
+    label
+      | {{_ 'import-usernames'}}
+      input.js-import-usernames(type="text" value=user.importUsernames)
     label
       | {{_ 'verified'}}
       select.select-verified.js-profile-email-verified
@@ -444,6 +452,9 @@ template(name="newUserPopup")
       //  input.js-profile-email(type="email" value="{{user.emails.[0].address}}" readonly)
       //else
       input.js-profile-email(type="email" value="" required)
+    label
+      | {{_ 'import-usernames'}}
+      input.js-import-usernames(type="text" value="")
     label
       | {{_ 'admin'}}
       select.select-role.js-profile-isadmin

+ 9 - 1
client/components/settings/peopleBody.js

@@ -143,7 +143,7 @@ BlazeComponent.extendComponent({
     const orgs = Org.find(this.findOrgsOptions.get(), {
       fields: { _id: true },
     });
-    this.numberOrgs.set(org.count(false));
+    this.numberOrgs.set(orgs.count(false));
     return orgs;
   },
   teamList() {
@@ -421,6 +421,9 @@ Template.editUserPopup.events({
     const authentication = templateInstance
       .find('.js-authenticationMethod')
       .value.trim();
+    const importUsernames = templateInstance
+      .find('.js-import-usernames')
+      .value.trim();
 
     const isChangePassword = password.length > 0;
     const isChangeUserName = username !== user.username;
@@ -441,6 +444,7 @@ Template.editUserPopup.events({
         isAdmin: isAdmin === 'true',
         loginDisabled: isActive === 'true',
         authenticationMethod: authentication,
+        importUsernames: Users.parseImportUsernames(importUsernames),
       },
     });
 
@@ -563,6 +567,9 @@ Template.newUserPopup.events({
     const isAdmin = templateInstance.find('.js-profile-isadmin').value.trim();
     const isActive = templateInstance.find('.js-profile-isactive').value.trim();
     const email = templateInstance.find('.js-profile-email').value.trim();
+    const importUsernames = templateInstance
+      .find('.js-import-usernames')
+      .value.trim();
 
     Meteor.call(
       'setCreateUser',
@@ -572,6 +579,7 @@ Template.newUserPopup.events({
       isAdmin,
       isActive,
       email.toLowerCase(),
+      importUsernames,
       function(error) {
         const usernameMessageElement = templateInstance.$('.username-taken');
         const emailMessageElement = templateInstance.$('.email-taken');

+ 1 - 0
i18n/en.i18n.json

@@ -530,6 +530,7 @@
   "custom-login-logo-link-url": "Custom Login Logo Link URL",
   "text-below-custom-login-logo": "Text below Custom Login Logo",
   "username": "Username",
+  "import-usernames": "Import Usernames",
   "view-it": "View it",
   "warn-list-archived": "warning: this card is in an list at Archive",
   "watch": "Watch",

+ 30 - 3
models/users.js

@@ -338,6 +338,13 @@ Users.attachSchema(
       type: Number,
       optional: true,
     },
+    importUsernames: {
+      /**
+       * username for imported
+       */
+      type: [String],
+      optional: true,
+    },
   }),
 );
 
@@ -433,7 +440,18 @@ if (Meteor.isClient) {
   });
 }
 
+Users.parseImportUsernames = usernamesString => {
+  return usernamesString.trim().split(new RegExp('\\s*[,;]\\s*'));
+};
+
 Users.helpers({
+  importUsernamesString() {
+    if (this.importUsernames) {
+      return this.importUsernames.join(', ');
+    }
+    return '';
+  },
+
   boards() {
     return Boards.find(
       { 'members.userId': this._id },
@@ -779,7 +797,15 @@ Meteor.methods({
 
 if (Meteor.isServer) {
   Meteor.methods({
-    setCreateUser(fullname, username, password, isAdmin, isActive, email) {
+    setCreateUser(
+      fullname,
+      username,
+      password,
+      isAdmin,
+      isActive,
+      email,
+      importUsernames,
+    ) {
       if (Meteor.user() && Meteor.user().isAdmin) {
         check(fullname, String);
         check(username, String);
@@ -787,6 +813,7 @@ if (Meteor.isServer) {
         check(isAdmin, String);
         check(isActive, String);
         check(email, String);
+        check(importUsernames, Array);
 
         const nUsersWithUsername = Users.find({ username }).count();
         const nUsersWithEmail = Users.find({ email }).count();
@@ -803,10 +830,10 @@ if (Meteor.isServer) {
             email: email.toLowerCase(),
             from: 'admin',
           });
-          user = Users.findOne(username) || Users.findOne({ username });
+          const user = Users.findOne(username) || Users.findOne({ username });
           if (user) {
             Users.update(user._id, {
-              $set: { 'profile.fullname': fullname },
+              $set: { 'profile.fullname': fullname, importUsernames },
             });
           }
         }

+ 1 - 0
server/publications/people.js

@@ -20,6 +20,7 @@ Meteor.publish('people', function(query, limit) {
         createdAt: 1,
         loginDisabled: 1,
         authenticationMethod: 1,
+        importUsernames: 1,
       },
     });
   }

+ 12 - 2
server/publications/users.js

@@ -4,8 +4,18 @@ Meteor.publish('user-miniprofile', function(usernames) {
   // eslint-disable-next-line no-console
   // console.log('usernames:', usernames);
   return Users.find(
-    { username: { $in: usernames } },
-    { fields: Users.safeFields },
+    {
+      $or: [
+        { username: { $in: usernames } },
+        { importUsernames: { $in: usernames } },
+      ],
+    },
+    {
+      fields: {
+        ...Users.safeFields,
+        importUsernames: 1,
+      },
+    },
   );
 });