mirror of
https://github.com/wekan/wekan.git
synced 2026-02-03 23:21:47 +01:00
Merge #616 into devel
This commit is contained in:
commit
4f5cecf738
9 changed files with 242 additions and 105 deletions
139
models/users.js
139
models/users.js
|
|
@ -1,5 +1,95 @@
|
|||
Users = Meteor.users;
|
||||
|
||||
Users.attachSchema(new SimpleSchema({
|
||||
username: {
|
||||
type: String,
|
||||
optional: true,
|
||||
autoValue() { // eslint-disable-line consistent-return
|
||||
if (this.isInsert && !this.isSet) {
|
||||
const name = this.field('profile.fullname');
|
||||
if (name.isSet) {
|
||||
return name.value.toLowerCase().replace(/\s/g, '');
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
emails: {
|
||||
type: [Object],
|
||||
optional: true,
|
||||
},
|
||||
'emails.$.address': {
|
||||
type: String,
|
||||
regEx: SimpleSchema.RegEx.Email,
|
||||
},
|
||||
'emails.$.verified': {
|
||||
type: Boolean,
|
||||
},
|
||||
createdAt: {
|
||||
type: Date,
|
||||
autoValue() { // eslint-disable-line consistent-return
|
||||
if (this.isInsert) {
|
||||
return new Date();
|
||||
} else {
|
||||
this.unset();
|
||||
}
|
||||
},
|
||||
},
|
||||
profile: {
|
||||
type: Object,
|
||||
optional: true,
|
||||
autoValue() { // eslint-disable-line consistent-return
|
||||
if (this.isInsert && !this.isSet) {
|
||||
return {};
|
||||
}
|
||||
},
|
||||
},
|
||||
'profile.avatarUrl': {
|
||||
type: String,
|
||||
optional: true,
|
||||
},
|
||||
'profile.emailBuffer': {
|
||||
type: [String],
|
||||
optional: true,
|
||||
},
|
||||
'profile.fullname': {
|
||||
type: String,
|
||||
optional: true,
|
||||
},
|
||||
'profile.initials': {
|
||||
type: String,
|
||||
optional: true,
|
||||
},
|
||||
'profile.invitedBoards': {
|
||||
type: [String],
|
||||
optional: true,
|
||||
},
|
||||
'profile.language': {
|
||||
type: String,
|
||||
optional: true,
|
||||
},
|
||||
'profile.notifications': {
|
||||
type: [String],
|
||||
optional: true,
|
||||
},
|
||||
'profile.starredBoards': {
|
||||
type: [String],
|
||||
optional: true,
|
||||
},
|
||||
'profile.tags': {
|
||||
type: [String],
|
||||
optional: true,
|
||||
},
|
||||
services: {
|
||||
type: Object,
|
||||
optional: true,
|
||||
blackbox: true,
|
||||
},
|
||||
heartbeat: {
|
||||
type: Date,
|
||||
optional: true,
|
||||
},
|
||||
}));
|
||||
|
||||
// Search a user in the complete server database by its name or username. This
|
||||
// is used for instance to add a new user to a board.
|
||||
const searchInFields = ['username', 'profile.fullname'];
|
||||
|
|
@ -259,14 +349,6 @@ if (Meteor.isServer) {
|
|||
});
|
||||
}
|
||||
|
||||
Users.before.insert((userId, doc) => {
|
||||
doc.profile = doc.profile || {};
|
||||
|
||||
if (!doc.username && doc.profile.fullname) {
|
||||
doc.username = doc.profile.fullname.toLowerCase().replace(/\s/g, '');
|
||||
}
|
||||
});
|
||||
|
||||
if (Meteor.isServer) {
|
||||
// Let mongoDB ensure username unicity
|
||||
Meteor.startup(() => {
|
||||
|
|
@ -306,32 +388,29 @@ if (Meteor.isServer) {
|
|||
incrementBoards(_.difference(newIds, oldIds), +1);
|
||||
});
|
||||
|
||||
// XXX i18n
|
||||
const fakeUserId = new Meteor.EnvironmentVariable();
|
||||
const getUserId = CollectionHooks.getUserId;
|
||||
CollectionHooks.getUserId = () => {
|
||||
return fakeUserId.get() || getUserId();
|
||||
};
|
||||
|
||||
Users.after.insert((userId, doc) => {
|
||||
const ExampleBoard = {
|
||||
title: 'Welcome Board',
|
||||
userId: doc._id,
|
||||
permission: 'private',
|
||||
const fakeUser = {
|
||||
extendAutoValueContext: {
|
||||
userId: doc._id,
|
||||
},
|
||||
};
|
||||
|
||||
// Insert the Welcome Board
|
||||
Boards.insert(ExampleBoard, (err, boardId) => {
|
||||
fakeUserId.withValue(doc._id, () => {
|
||||
// Insert the Welcome Board
|
||||
Boards.insert({
|
||||
title: TAPi18n.__('welcome-board'),
|
||||
permission: 'private',
|
||||
}, fakeUser, (err, boardId) => {
|
||||
|
||||
['Basics', 'Advanced'].forEach((title) => {
|
||||
const list = {
|
||||
title,
|
||||
boardId,
|
||||
userId: ExampleBoard.userId,
|
||||
|
||||
// XXX Not certain this is a bug, but we except these fields get
|
||||
// inserted by the Lists.before.insert collection-hook. Since this
|
||||
// hook is not called in this case, we have to dublicate the logic and
|
||||
// set them here.
|
||||
archived: false,
|
||||
createdAt: new Date(),
|
||||
};
|
||||
|
||||
Lists.insert(list);
|
||||
['welcome-list1', 'welcome-list2'].forEach((title) => {
|
||||
Lists.insert({ title: TAPi18n.__(title), boardId }, fakeUser);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue