mirror of
https://github.com/wekan/wekan.git
synced 2025-12-18 16:30:13 +01:00
The before.insert hooks have the problem, that they are executed in a different order if called from the client or from the server. If called from the client, the before.insert hook is called before validation of the schema, but if called from the server, the validation is called first and fails.
76 lines
1.7 KiB
JavaScript
76 lines
1.7 KiB
JavaScript
CardComments = new Mongo.Collection('card_comments');
|
|
|
|
CardComments.attachSchema(new SimpleSchema({
|
|
boardId: {
|
|
type: String,
|
|
},
|
|
cardId: {
|
|
type: String,
|
|
},
|
|
// XXX Rename in `content`? `text` is a bit vague...
|
|
text: {
|
|
type: String,
|
|
},
|
|
// XXX We probably don't need this information here, since we already have it
|
|
// in the associated comment creation activity
|
|
createdAt: {
|
|
type: Date,
|
|
denyUpdate: false,
|
|
autoValue() { // eslint-disable-line consistent-return
|
|
if (this.isInsert) {
|
|
return new Date();
|
|
} else {
|
|
this.unset();
|
|
}
|
|
},
|
|
},
|
|
// XXX Should probably be called `authorId`
|
|
userId: {
|
|
type: String,
|
|
autoValue() { // eslint-disable-line consistent-return
|
|
if (this.isInsert && !this.isSet) {
|
|
return this.userId;
|
|
}
|
|
},
|
|
},
|
|
}));
|
|
|
|
CardComments.allow({
|
|
insert(userId, doc) {
|
|
return allowIsBoardMember(userId, Boards.findOne(doc.boardId));
|
|
},
|
|
update(userId, doc) {
|
|
return userId === doc.userId;
|
|
},
|
|
remove(userId, doc) {
|
|
return userId === doc.userId;
|
|
},
|
|
fetch: ['userId', 'boardId'],
|
|
});
|
|
|
|
CardComments.helpers({
|
|
user() {
|
|
return Users.findOne(this.userId);
|
|
},
|
|
});
|
|
|
|
CardComments.hookOptions.after.update = { fetchPrevious: false };
|
|
|
|
if (Meteor.isServer) {
|
|
CardComments.after.insert((userId, doc) => {
|
|
Activities.insert({
|
|
userId,
|
|
activityType: 'addComment',
|
|
boardId: doc.boardId,
|
|
cardId: doc.cardId,
|
|
commentId: doc._id,
|
|
});
|
|
});
|
|
|
|
CardComments.after.remove((userId, doc) => {
|
|
const activity = Activities.findOne({ commentId: doc._id });
|
|
if (activity) {
|
|
Activities.remove(activity._id);
|
|
}
|
|
});
|
|
}
|