From ce4fcbfae4ce6dac340811d87c217dbdfae13288 Mon Sep 17 00:00:00 2001 From: Alexander Sulfrian Date: Tue, 16 Aug 2016 19:00:04 +0200 Subject: Models: Fix remove member activity The member is only set to inactive, so we could not test for $pull. Instead we have to look into the $set modified and check whether the member was deactivated. --- models/boards.js | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/models/boards.js b/models/boards.js index 029ff7d1..9fef92a7 100644 --- a/models/boards.js +++ b/models/boards.js @@ -449,17 +449,28 @@ if (Meteor.isServer) { ); }); + const foreachRemovedMember = (doc, modifier, callback) => { + Object.keys(modifier).forEach((set) => { + if (modifier[set] !== false) { + return; + } + + const parts = set.split('.'); + if (parts.length === 3 && parts[0] === 'members' && parts[2] === 'isActive') { + callback(doc.members[parts[1]].userId); + } + }); + }; + // Add a new activity if we add or remove a member to the board Boards.after.update((userId, doc, fieldNames, modifier) => { if (!_.contains(fieldNames, 'members')) { return; } - let memberId; - // Say hello to the new member if (modifier.$push && modifier.$push.members) { - memberId = modifier.$push.members.userId; + const memberId = modifier.$push.members.userId; Activities.insert({ userId, memberId, @@ -470,14 +481,15 @@ if (Meteor.isServer) { } // Say goodbye to the former member - if (modifier.$pull && modifier.$pull.members) { - memberId = modifier.$pull.members.userId; - Activities.insert({ - userId, - memberId, - type: 'member', - activityType: 'removeBoardMember', - boardId: doc._id, + if (modifier.$set) { + foreachRemovedMember(doc, modifier.$set, (memberId) => { + Activities.insert({ + userId, + memberId, + type: 'member', + activityType: 'removeBoardMember', + boardId: doc._id, + }); }); } }); -- cgit v1.2.3-1-g7c22 From 7b0e57380aee122f19aea64e09b63670a51662fb Mon Sep 17 00:00:00 2001 From: Alexander Sulfrian Date: Tue, 16 Aug 2016 17:29:01 +0200 Subject: Models: Remove user from all objects on board leave (Fixes: #667) Remove the user as member and watcher of all lists, cards and the board itself when leaving the board. --- models/boards.js | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/models/boards.js b/models/boards.js index 9fef92a7..02f28b5a 100644 --- a/models/boards.js +++ b/models/boards.js @@ -462,6 +462,42 @@ if (Meteor.isServer) { }); }; + // Remove a member from all objects of the board before leaving the board + Boards.before.update((userId, doc, fieldNames, modifier) => { + if (!_.contains(fieldNames, 'members')) { + return; + } + + if (modifier.$set) { + const boardId = doc._id; + foreachRemovedMember(doc, modifier.$set, (memberId) => { + Cards.update( + { boardId }, + { + $pull: { + members: memberId, + watchers: memberId, + }, + }, + { multi: true } + ); + + Lists.update( + { boardId }, + { + $pull: { + watchers: memberId, + }, + }, + { multi: true } + ); + + const board = Boards._transform(doc); + board.setWatcher(memberId, false); + }); + } + }); + // Add a new activity if we add or remove a member to the board Boards.after.update((userId, doc, fieldNames, modifier) => { if (!_.contains(fieldNames, 'members')) { -- cgit v1.2.3-1-g7c22 From 4013184801fba254ff5e76d28a7b9293fd4ef14a Mon Sep 17 00:00:00 2001 From: Alexander Sulfrian Date: Tue, 16 Aug 2016 17:45:53 +0200 Subject: Models: Remove board from starred list This will fix the starred counter. If the board is not public, the user is unable to see the board and remove it from the list of starred boards. --- models/boards.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/models/boards.js b/models/boards.js index 02f28b5a..3051ef1e 100644 --- a/models/boards.js +++ b/models/boards.js @@ -494,6 +494,18 @@ if (Meteor.isServer) { const board = Boards._transform(doc); board.setWatcher(memberId, false); + + // Remove board from users starred list + if (!board.isPublic()) { + Users.update( + memberId, + { + $pull: { + 'profile.starredBoards': boardId, + }, + } + ); + } }); } }); -- cgit v1.2.3-1-g7c22