2019-12-22 09:44:58 +02:00
|
|
|
Meteor.publish('card', cardId => {
|
|
|
|
check(cardId, String);
|
|
|
|
return Cards.find({ _id: cardId });
|
|
|
|
});
|
2020-12-31 19:14:55 +02:00
|
|
|
|
|
|
|
Meteor.publish('myCards', function() {
|
2021-01-10 18:08:03 +02:00
|
|
|
const userId = Meteor.userId();
|
2020-12-31 19:14:55 +02:00
|
|
|
|
2021-01-10 18:08:03 +02:00
|
|
|
const archivedBoards = [];
|
|
|
|
Boards.find({ archived: true }).forEach(board => {
|
|
|
|
archivedBoards.push(board._id);
|
|
|
|
});
|
|
|
|
|
|
|
|
const archivedSwimlanes = [];
|
|
|
|
Swimlanes.find({ archived: true }).forEach(swimlane => {
|
|
|
|
archivedSwimlanes.push(swimlane._id);
|
|
|
|
});
|
|
|
|
|
|
|
|
const archivedLists = [];
|
|
|
|
Lists.find({ archived: true }).forEach(list => {
|
|
|
|
archivedLists.push(list._id);
|
|
|
|
});
|
|
|
|
|
|
|
|
selector = {
|
|
|
|
archived: false,
|
|
|
|
boardId: { $nin: archivedBoards },
|
|
|
|
swimlaneId: { $nin: archivedSwimlanes },
|
|
|
|
listId: { $nin: archivedLists },
|
|
|
|
$or: [{ members: userId }, { assignees: userId }],
|
|
|
|
};
|
|
|
|
|
|
|
|
const cards = Cards.find(selector, {
|
|
|
|
fields: {
|
|
|
|
_id: 1,
|
|
|
|
archived: 1,
|
|
|
|
boardId: 1,
|
|
|
|
swimlaneId: 1,
|
|
|
|
listId: 1,
|
|
|
|
title: 1,
|
|
|
|
type: 1,
|
|
|
|
sort: 1,
|
|
|
|
members: 1,
|
|
|
|
assignees: 1,
|
|
|
|
colors: 1,
|
|
|
|
dueAt: 1,
|
2020-12-31 19:14:55 +02:00
|
|
|
},
|
2021-01-10 18:08:03 +02:00
|
|
|
});
|
|
|
|
|
|
|
|
const boards = [];
|
|
|
|
const swimlanes = [];
|
|
|
|
const lists = [];
|
|
|
|
const users = [];
|
|
|
|
|
|
|
|
cards.forEach(card => {
|
|
|
|
if (card.boardId) boards.push(card.boardId);
|
|
|
|
if (card.swimlaneId) swimlanes.push(card.swimlaneId);
|
|
|
|
if (card.listId) lists.push(card.listId);
|
|
|
|
if (card.members) {
|
|
|
|
card.members.forEach(userId => {
|
|
|
|
users.push(userId);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
if (card.assignees) {
|
|
|
|
card.assignees.forEach(userId => {
|
|
|
|
users.push(userId);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
return [
|
|
|
|
cards,
|
|
|
|
Boards.find({ _id: { $in: boards } }),
|
|
|
|
Swimlanes.find({ _id: { $in: swimlanes } }),
|
|
|
|
Lists.find({ _id: { $in: lists } }),
|
2021-01-16 19:20:31 +02:00
|
|
|
Users.find({ _id: { $in: users } }, { fields: Users.safeFields }),
|
2021-01-10 18:08:03 +02:00
|
|
|
];
|
2020-12-31 19:14:55 +02:00
|
|
|
});
|
2021-01-07 22:36:10 +02:00
|
|
|
|
|
|
|
Meteor.publish('dueCards', function(allUsers = false) {
|
|
|
|
check(allUsers, Boolean);
|
|
|
|
|
2021-01-09 18:36:27 +02:00
|
|
|
// eslint-disable-next-line no-console
|
|
|
|
// console.log('all users:', allUsers);
|
|
|
|
|
2021-01-16 19:20:31 +02:00
|
|
|
const user = Users.findOne({ _id: this.userId });
|
2021-01-07 22:36:10 +02:00
|
|
|
|
|
|
|
const archivedBoards = [];
|
|
|
|
Boards.find({ archived: true }).forEach(board => {
|
|
|
|
archivedBoards.push(board._id);
|
|
|
|
});
|
|
|
|
|
|
|
|
const permiitedBoards = [];
|
|
|
|
let selector = {
|
|
|
|
archived: false,
|
|
|
|
};
|
2021-01-16 19:20:31 +02:00
|
|
|
|
2021-01-11 05:23:11 +02:00
|
|
|
selector.$or = [
|
|
|
|
{ permission: 'public' },
|
|
|
|
{ members: { $elemMatch: { userId: user._id, isActive: true } } },
|
|
|
|
];
|
2021-01-16 19:20:31 +02:00
|
|
|
|
2021-01-07 22:36:10 +02:00
|
|
|
Boards.find(selector).forEach(board => {
|
|
|
|
permiitedBoards.push(board._id);
|
|
|
|
});
|
|
|
|
|
|
|
|
const archivedSwimlanes = [];
|
|
|
|
Swimlanes.find({ archived: true }).forEach(swimlane => {
|
|
|
|
archivedSwimlanes.push(swimlane._id);
|
|
|
|
});
|
|
|
|
|
|
|
|
const archivedLists = [];
|
|
|
|
Lists.find({ archived: true }).forEach(list => {
|
|
|
|
archivedLists.push(list._id);
|
|
|
|
});
|
|
|
|
|
|
|
|
selector = {
|
|
|
|
archived: false,
|
|
|
|
boardId: { $nin: archivedBoards, $in: permiitedBoards },
|
|
|
|
swimlaneId: { $nin: archivedSwimlanes },
|
|
|
|
listId: { $nin: archivedLists },
|
|
|
|
dueAt: { $ne: null },
|
|
|
|
endAt: null,
|
|
|
|
};
|
|
|
|
|
|
|
|
if (!allUsers) {
|
|
|
|
selector.$or = [{ members: user._id }, { assignees: user._id }];
|
|
|
|
}
|
|
|
|
|
|
|
|
const cards = Cards.find(selector, {
|
|
|
|
fields: {
|
|
|
|
_id: 1,
|
|
|
|
archived: 1,
|
|
|
|
boardId: 1,
|
|
|
|
swimlaneId: 1,
|
|
|
|
listId: 1,
|
|
|
|
title: 1,
|
|
|
|
type: 1,
|
|
|
|
sort: 1,
|
|
|
|
members: 1,
|
|
|
|
assignees: 1,
|
|
|
|
colors: 1,
|
|
|
|
dueAt: 1,
|
|
|
|
},
|
|
|
|
});
|
|
|
|
|
|
|
|
const boards = [];
|
|
|
|
const swimlanes = [];
|
|
|
|
const lists = [];
|
2021-01-10 18:08:03 +02:00
|
|
|
const users = [];
|
2021-01-07 22:36:10 +02:00
|
|
|
|
|
|
|
cards.forEach(card => {
|
2021-01-08 21:51:28 +02:00
|
|
|
if (card.boardId) boards.push(card.boardId);
|
|
|
|
if (card.swimlaneId) swimlanes.push(card.swimlaneId);
|
|
|
|
if (card.listId) lists.push(card.listId);
|
2021-01-10 18:08:03 +02:00
|
|
|
if (card.members) {
|
|
|
|
card.members.forEach(userId => {
|
|
|
|
users.push(userId);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
if (card.assignees) {
|
|
|
|
card.assignees.forEach(userId => {
|
|
|
|
users.push(userId);
|
|
|
|
});
|
|
|
|
}
|
2021-01-07 22:36:10 +02:00
|
|
|
});
|
|
|
|
|
|
|
|
return [
|
|
|
|
cards,
|
|
|
|
Boards.find({ _id: { $in: boards } }),
|
|
|
|
Swimlanes.find({ _id: { $in: swimlanes } }),
|
|
|
|
Lists.find({ _id: { $in: lists } }),
|
2021-01-16 19:20:31 +02:00
|
|
|
Users.find({ _id: { $in: users } }, { fields: Users.safeFields }),
|
2021-01-07 22:36:10 +02:00
|
|
|
];
|
|
|
|
});
|
2021-01-10 22:58:29 +02:00
|
|
|
|
|
|
|
Meteor.publish('globalSearch', function(queryParams) {
|
|
|
|
check(queryParams, Object);
|
|
|
|
|
|
|
|
// eslint-disable-next-line no-console
|
2021-01-15 00:33:24 +02:00
|
|
|
// console.log('queryParams:', queryParams);
|
2021-01-10 22:58:29 +02:00
|
|
|
|
2021-01-13 01:14:49 +02:00
|
|
|
const cards = Cards.globalSearch(queryParams).cards;
|
2021-01-10 22:58:29 +02:00
|
|
|
|
2021-01-17 16:01:42 +02:00
|
|
|
if (!cards) {
|
|
|
|
return [];
|
|
|
|
}
|
|
|
|
|
2021-01-16 19:20:31 +02:00
|
|
|
SessionData.upsert(
|
|
|
|
{ userId: this.userId },
|
|
|
|
{
|
|
|
|
$set: {
|
|
|
|
totalHits: cards.count(),
|
|
|
|
lastHit: cards.count() > 50 ? 50 : cards.count(),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
);
|
|
|
|
|
2021-01-10 22:58:29 +02:00
|
|
|
const boards = [];
|
|
|
|
const swimlanes = [];
|
|
|
|
const lists = [];
|
2021-01-15 00:33:24 +02:00
|
|
|
const users = [this.userId];
|
2021-01-10 22:58:29 +02:00
|
|
|
|
|
|
|
cards.forEach(card => {
|
|
|
|
if (card.boardId) boards.push(card.boardId);
|
|
|
|
if (card.swimlaneId) swimlanes.push(card.swimlaneId);
|
|
|
|
if (card.listId) lists.push(card.listId);
|
|
|
|
if (card.members) {
|
|
|
|
card.members.forEach(userId => {
|
|
|
|
users.push(userId);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
if (card.assignees) {
|
|
|
|
card.assignees.forEach(userId => {
|
|
|
|
users.push(userId);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2021-01-15 00:33:24 +02:00
|
|
|
// eslint-disable-next-line no-console
|
|
|
|
// console.log('users:', users);
|
2021-01-10 22:58:29 +02:00
|
|
|
return [
|
|
|
|
cards,
|
|
|
|
Boards.find({ _id: { $in: boards } }),
|
|
|
|
Swimlanes.find({ _id: { $in: swimlanes } }),
|
|
|
|
Lists.find({ _id: { $in: lists } }),
|
2021-01-16 19:20:31 +02:00
|
|
|
Users.find({ _id: { $in: users } }, { fields: Users.safeFields }),
|
|
|
|
SessionData.find({ userId: this.userId }),
|
2021-01-10 22:58:29 +02:00
|
|
|
];
|
|
|
|
});
|
2021-01-13 01:29:46 +02:00
|
|
|
|
2021-01-10 00:17:59 +02:00
|
|
|
Meteor.publish('brokenCards', function() {
|
2021-01-16 19:20:31 +02:00
|
|
|
const user = Users.findOne({ _id: this.userId });
|
2021-01-10 00:17:59 +02:00
|
|
|
|
|
|
|
const permiitedBoards = [null];
|
|
|
|
let selector = {};
|
2021-01-11 05:23:11 +02:00
|
|
|
selector.$or = [
|
|
|
|
{ permission: 'public' },
|
|
|
|
{ members: { $elemMatch: { userId: user._id, isActive: true } } },
|
|
|
|
];
|
2021-01-16 19:20:31 +02:00
|
|
|
|
2021-01-10 00:17:59 +02:00
|
|
|
Boards.find(selector).forEach(board => {
|
|
|
|
permiitedBoards.push(board._id);
|
|
|
|
});
|
|
|
|
|
|
|
|
selector = {
|
|
|
|
boardId: { $in: permiitedBoards },
|
2021-01-10 15:35:16 +02:00
|
|
|
$or: [
|
|
|
|
{ boardId: { $in: [null, ''] } },
|
|
|
|
{ swimlaneId: { $in: [null, ''] } },
|
|
|
|
{ listId: { $in: [null, ''] } },
|
|
|
|
],
|
2021-01-10 00:17:59 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
const cards = Cards.find(selector, {
|
|
|
|
fields: {
|
|
|
|
_id: 1,
|
|
|
|
archived: 1,
|
|
|
|
boardId: 1,
|
|
|
|
swimlaneId: 1,
|
|
|
|
listId: 1,
|
|
|
|
title: 1,
|
|
|
|
type: 1,
|
|
|
|
sort: 1,
|
|
|
|
members: 1,
|
|
|
|
assignees: 1,
|
|
|
|
colors: 1,
|
|
|
|
dueAt: 1,
|
|
|
|
},
|
|
|
|
});
|
|
|
|
|
|
|
|
const boards = [];
|
|
|
|
const swimlanes = [];
|
|
|
|
const lists = [];
|
2021-01-13 01:29:46 +02:00
|
|
|
const users = [];
|
2021-01-10 00:17:59 +02:00
|
|
|
|
|
|
|
cards.forEach(card => {
|
|
|
|
if (card.boardId) boards.push(card.boardId);
|
|
|
|
if (card.swimlaneId) swimlanes.push(card.swimlaneId);
|
|
|
|
if (card.listId) lists.push(card.listId);
|
2021-01-13 01:29:46 +02:00
|
|
|
if (card.members) {
|
|
|
|
card.members.forEach(userId => {
|
|
|
|
users.push(userId);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
if (card.assignees) {
|
|
|
|
card.assignees.forEach(userId => {
|
|
|
|
users.push(userId);
|
|
|
|
});
|
|
|
|
}
|
2021-01-10 00:17:59 +02:00
|
|
|
});
|
|
|
|
|
|
|
|
return [
|
|
|
|
cards,
|
|
|
|
Boards.find({ _id: { $in: boards } }),
|
|
|
|
Swimlanes.find({ _id: { $in: swimlanes } }),
|
|
|
|
Lists.find({ _id: { $in: lists } }),
|
2021-01-16 19:20:31 +02:00
|
|
|
Users.find({ _id: { $in: users } }, { fields: Users.safeFields }),
|
2021-01-10 00:17:59 +02:00
|
|
|
];
|
|
|
|
});
|