diff options
-rw-r--r-- | client/components/sidebar/sidebarCustomFields.js | 5 | ||||
-rw-r--r-- | models/cards.js | 2 | ||||
-rw-r--r-- | models/customFields.js | 10 | ||||
-rw-r--r-- | models/export.js | 2 | ||||
-rw-r--r-- | server/migrations.js | 13 | ||||
-rw-r--r-- | server/publications/boards.js | 2 |
6 files changed, 24 insertions, 10 deletions
diff --git a/client/components/sidebar/sidebarCustomFields.js b/client/components/sidebar/sidebarCustomFields.js index ccc8ffb9..bdd8e7a0 100644 --- a/client/components/sidebar/sidebarCustomFields.js +++ b/client/components/sidebar/sidebarCustomFields.js @@ -2,7 +2,7 @@ BlazeComponent.extendComponent({ customFields() { return CustomFields.find({ - boardId: Session.get('currentBoard'), + boardIds: {$in: [Session.get('currentBoard')]}, }); }, @@ -103,7 +103,6 @@ const CreateCustomFieldPopup = BlazeComponent.extendComponent({ evt.preventDefault(); const data = { - boardId: Session.get('currentBoard'), name: this.find('.js-field-name').value.trim(), type: this.type.get(), settings: this.getSettings(), @@ -114,8 +113,10 @@ const CreateCustomFieldPopup = BlazeComponent.extendComponent({ // insert or update if (!this.data()._id) { + data.boardIds = [Session.get('currentBoard')]; CustomFields.insert(data); } else { + data.boardIds = {$in: [Session.get('currentBoard')]}; CustomFields.update(this.data()._id, {$set: data}); } diff --git a/models/cards.js b/models/cards.js index c3bae400..2caecb46 100644 --- a/models/cards.js +++ b/models/cards.js @@ -476,7 +476,7 @@ Cards.helpers({ // get all definitions const definitions = CustomFields.find({ - boardId: this.boardId, + boardIds: {$in: [this.boardId]}, }).fetch(); // match right definition to each field diff --git a/models/customFields.js b/models/customFields.js index b7ad5467..79f96708 100644 --- a/models/customFields.js +++ b/models/customFields.js @@ -4,11 +4,11 @@ CustomFields = new Mongo.Collection('customFields'); * A custom field on a card in the board */ CustomFields.attachSchema(new SimpleSchema({ - boardId: { + boardIds: { /** * the ID of the board */ - type: String, + type: [String], }, name: { /** @@ -135,7 +135,7 @@ if (Meteor.isServer) { const paramBoardId = req.params.boardId; JsonRoutes.sendResult(res, { code: 200, - data: CustomFields.find({ boardId: paramBoardId }).map(function (cf) { + data: CustomFields.find({ boardIds: {$in: [paramBoardId]} }).map(function (cf) { return { _id: cf._id, name: cf.name, @@ -159,7 +159,7 @@ if (Meteor.isServer) { const paramCustomFieldId = req.params.customFieldId; JsonRoutes.sendResult(res, { code: 200, - data: CustomFields.findOne({ _id: paramCustomFieldId, boardId: paramBoardId }), + data: CustomFields.findOne({ _id: paramCustomFieldId, boardIds: {$in: [paramBoardId]} }), }); }); @@ -189,7 +189,7 @@ if (Meteor.isServer) { boardId: paramBoardId, }); - const customField = CustomFields.findOne({_id: id, boardId: paramBoardId }); + const customField = CustomFields.findOne({_id: id, boardIds: {$in: [paramBoardId]} }); customFieldCreation(req.body.authorId, customField); JsonRoutes.sendResult(res, { diff --git a/models/export.js b/models/export.js index 76f2da06..f281b34a 100644 --- a/models/export.js +++ b/models/export.js @@ -75,7 +75,7 @@ class Exporter { result.lists = Lists.find(byBoard, noBoardId).fetch(); result.cards = Cards.find(byBoardNoLinked, noBoardId).fetch(); result.swimlanes = Swimlanes.find(byBoard, noBoardId).fetch(); - result.customFields = CustomFields.find(byBoard, noBoardId).fetch(); + result.customFields = CustomFields.find({boardIds: {$in: [this.boardId]}}, {fields: {boardId: 0}}).fetch(); result.comments = CardComments.find(byBoard, noBoardId).fetch(); result.activities = Activities.find(byBoard, noBoardId).fetch(); result.rules = Rules.find(byBoard, noBoardId).fetch(); diff --git a/server/migrations.js b/server/migrations.js index b8915fe9..ced67218 100644 --- a/server/migrations.js +++ b/server/migrations.js @@ -525,3 +525,16 @@ Migrations.add('fix-circular-reference_', () => { } }); }); + +Migrations.add('mutate-boardIds-in-customfields', () => { + CustomFields.find().forEach((cf) => { + CustomFields.update(cf, { + $set: { + boardIds: [cf.boardId], + }, + $unset: { + boardId: "", + }, + }, noValidateMulti); + }); +}); diff --git a/server/publications/boards.js b/server/publications/boards.js index 18c44d2b..6d9d2b9e 100644 --- a/server/publications/boards.js +++ b/server/publications/boards.js @@ -78,7 +78,7 @@ Meteor.publishRelations('board', function(boardId) { this.cursor(Lists.find({ boardId })); this.cursor(Swimlanes.find({ boardId })); this.cursor(Integrations.find({ boardId })); - this.cursor(CustomFields.find({ boardId }, { sort: { name: 1 } })); + this.cursor(CustomFields.find({ boardIds: {$in: [boardId]} }, { sort: { name: 1 } })); // Cards and cards comments // XXX Originally we were publishing the card documents as a child of the |