diff options
author | Andrés Manelli <andresmanelli@gmail.com> | 2019-03-16 22:43:47 +0100 |
---|---|---|
committer | Andrés Manelli <andresmanelli@gmail.com> | 2019-03-16 22:49:45 +0100 |
commit | d01fccd9497120613bf2c0b986963e67e7f3d6fa (patch) | |
tree | 0ad6cc465e427397b7125bb8f3ff0f0719d28c0b /models/customFields.js | |
parent | 4cd0d1c3971f001eccf023bb84f1bee113fed215 (diff) | |
download | wekan-d01fccd9497120613bf2c0b986963e67e7f3d6fa.tar.gz wekan-d01fccd9497120613bf2c0b986963e67e7f3d6fa.tar.bz2 wekan-d01fccd9497120613bf2c0b986963e67e7f3d6fa.zip |
- Fix card copy & move between boards with customFields
- Fix card copy & move between boards with labels with same name
- Fix activities for labels when copying and moving card
- Fix activities for customFields when copying and moving card
Diffstat (limited to 'models/customFields.js')
-rw-r--r-- | models/customFields.js | 61 |
1 files changed, 51 insertions, 10 deletions
diff --git a/models/customFields.js b/models/customFields.js index 79f96708..a67ddb7d 100644 --- a/models/customFields.js +++ b/models/customFields.js @@ -72,17 +72,37 @@ CustomFields.attachSchema(new SimpleSchema({ }, })); +CustomFields.mutations({ + addBoard(boardId) { + if (boardId) { + return { + $push: { + boardIds: boardId, + }, + }; + } else { + return null; + } + }, +}); + CustomFields.allow({ insert(userId, doc) { - return allowIsBoardMember(userId, Boards.findOne(doc.boardId)); + return allowIsAnyBoardMember(userId, Boards.find({ + _id: {$in: doc.boardIds}, + }).fetch()); }, update(userId, doc) { - return allowIsBoardMember(userId, Boards.findOne(doc.boardId)); + return allowIsAnyBoardMember(userId, Boards.find({ + _id: {$in: doc.boardIds}, + }).fetch()); }, remove(userId, doc) { - return allowIsBoardMember(userId, Boards.findOne(doc.boardId)); + return allowIsAnyBoardMember(userId, Boards.find({ + _id: {$in: doc.boardIds}, + }).fetch()); }, - fetch: ['userId', 'boardId'], + fetch: ['userId', 'boardIds'], }); // not sure if we need this? @@ -92,27 +112,48 @@ function customFieldCreation(userId, doc){ Activities.insert({ userId, activityType: 'createCustomField', - boardId: doc.boardId, + boardId: doc.boardIds[0], // We are creating a customField, it has only one boardId customFieldId: doc._id, }); } if (Meteor.isServer) { Meteor.startup(() => { - CustomFields._collection._ensureIndex({ boardId: 1 }); + CustomFields._collection._ensureIndex({ boardIds: 1 }); }); CustomFields.after.insert((userId, doc) => { customFieldCreation(userId, doc); }); - CustomFields.after.remove((userId, doc) => { + CustomFields.before.update((userId, doc, fieldNames, modifier) => { + if (_.contains(fieldNames, 'boardIds') && modifier.$pull) { + Cards.update( + {boardId: modifier.$pull.boardIds, 'customFields._id': doc._id}, + {$pull: {'customFields': {'_id': doc._id}}}, + {multi: true} + ); + Activities.remove({ + customFieldId: doc._id, + boardId: modifier.$pull.boardIds, + }); + } else if (_.contains(fieldNames, 'boardIds') && modifier.$push) { + Activities.insert({ + userId, + activityType: 'createCustomField', + boardId: modifier.$push.boardIds, + customFieldId: doc._id, + }); + } + }); + + CustomFields.before.remove((userId, doc) => { Activities.remove({ customFieldId: doc._id, }); Cards.update( - {'boardId': doc.boardId, 'customFields._id': doc._id}, + {boardId: {$in: doc.boardIds}, 'customFields._id': doc._id}, {$pull: {'customFields': {'_id': doc._id}}}, {multi: true} ); @@ -186,7 +227,7 @@ if (Meteor.isServer) { showOnCard: req.body.showOnCard, automaticallyOnCard: req.body.automaticallyOnCard, showLabelOnMiniCard: req.body.showLabelOnMiniCard, - boardId: paramBoardId, + boardIds: {$in: [paramBoardId]}, }); const customField = CustomFields.findOne({_id: id, boardIds: {$in: [paramBoardId]} }); @@ -214,7 +255,7 @@ if (Meteor.isServer) { Authentication.checkUserId( req.userId); const paramBoardId = req.params.boardId; const id = req.params.customFieldId; - CustomFields.remove({ _id: id, boardId: paramBoardId }); + CustomFields.remove({ _id: id, boardIds: {$in: [paramBoardId]} }); JsonRoutes.sendResult(res, { code: 200, data: { |