|
@@ -119,3 +119,60 @@ Meteor.publish('dueCards', function(allUsers = false) {
|
|
|
Lists.find({ _id: { $in: lists } }),
|
|
|
];
|
|
|
});
|
|
|
+
|
|
|
+Meteor.publish('brokenCards', function() {
|
|
|
+ const user = Users.findOne(this.userId);
|
|
|
+
|
|
|
+ const permiitedBoards = [null];
|
|
|
+ let selector = {};
|
|
|
+ // if user is not an admin allow her to see cards only from boards where
|
|
|
+ // she is a member
|
|
|
+ if (!user.isAdmin) {
|
|
|
+ selector.$or = [
|
|
|
+ { permission: 'public' },
|
|
|
+ { members: { $elemMatch: { userId: user._id, isActive: true } } },
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ Boards.find(selector).forEach(board => {
|
|
|
+ permiitedBoards.push(board._id);
|
|
|
+ });
|
|
|
+
|
|
|
+ selector = {
|
|
|
+ boardId: { $in: permiitedBoards },
|
|
|
+ $or: [{ boardId: null }, { swimlaneId: null }, { listId: null }],
|
|
|
+ };
|
|
|
+
|
|
|
+ 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 = [];
|
|
|
+
|
|
|
+ cards.forEach(card => {
|
|
|
+ if (card.boardId) boards.push(card.boardId);
|
|
|
+ if (card.swimlaneId) swimlanes.push(card.swimlaneId);
|
|
|
+ if (card.listId) lists.push(card.listId);
|
|
|
+ });
|
|
|
+
|
|
|
+ return [
|
|
|
+ cards,
|
|
|
+ Boards.find({ _id: { $in: boards } }),
|
|
|
+ Swimlanes.find({ _id: { $in: swimlanes } }),
|
|
|
+ Lists.find({ _id: { $in: lists } }),
|
|
|
+ ];
|
|
|
+});
|