summaryrefslogtreecommitdiffstats
path: root/models/customFields.js
diff options
context:
space:
mode:
authorAndrés Manelli <andresmanelli@gmail.com>2019-03-16 22:43:47 +0100
committerAndrés Manelli <andresmanelli@gmail.com>2019-03-16 22:49:45 +0100
commitd01fccd9497120613bf2c0b986963e67e7f3d6fa (patch)
tree0ad6cc465e427397b7125bb8f3ff0f0719d28c0b /models/customFields.js
parent4cd0d1c3971f001eccf023bb84f1bee113fed215 (diff)
downloadwekan-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.js61
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: {