diff --git a/models/wekanCreator.js b/models/wekanCreator.js index 9914f8171..0dbc2dfcf 100644 --- a/models/wekanCreator.js +++ b/models/wekanCreator.js @@ -15,6 +15,7 @@ export class WekanCreator { cards: {}, lists: {}, swimlanes: {}, + customFields: {}, }; // The object creator Wekan Id, indexed by the object Wekan id // (so we only parse actions once!) @@ -30,6 +31,8 @@ export class WekanCreator { this.lists = {}; // Map of cards Wekan ID => Wekan ID this.cards = {}; + // Map of custom fields Wekan ID => Wekan ID + this.customFields = {}; // Map of comments Wekan ID => Wekan ID this.commentIds = {}; // Map of attachments Wekan ID => Wekan ID @@ -356,6 +359,17 @@ export class WekanCreator { if (card.color) { cardToCreate.color = card.color; } + + // add custom fields + if (card.customFields) { + cardToCreate.customFields = card.customFields.map(field => { + return { + _id: this.customFields[field._id], + value: field.value, + }; + }); + } + // insert card const cardId = Cards.direct.insert(cardToCreate); // keep track of Wekan id => Wekan id @@ -481,6 +495,39 @@ export class WekanCreator { return result; } + /** + * Create the Wekan custom fields corresponding to the supplied Wekan + * custom fields. + * @param wekanCustomFields + * @param boardId + */ + createCustomFields(wekanCustomFields, boardId) { + wekanCustomFields.forEach((field, fieldIndex) => { + const fieldToCreate = { + boardIds: [boardId], + name: field.name, + type: field.type, + settings: field.settings, + showOnCard: field.showOnCard, + showLabelOnMiniCard: field.showLabelOnMiniCard, + automaticallyOnCard: field.automaticallyOnCard, + //use date "now" if now created at date is provided (e.g. for very old boards) + createdAt: this._now(this.createdAt.customFields[field._id]), + modifiedAt: field.modifiedAt, + }; + //insert copy of custom field + const fieldId = CustomFields.direct.insert(fieldToCreate); + //set modified date to now + CustomFields.direct.update(fieldId, { + $set: { + modifiedAt: this._now(), + }, + }); + //store mapping of old id to new id + this.customFields[field._id] = fieldId; + }); + } + // Create labels if they do not exist and load this.labels. createLabels(wekanLabels, board) { wekanLabels.forEach(label => { @@ -690,6 +737,11 @@ export class WekanCreator { this.createdAt.swimlanes[swimlaneId] = activity.createdAt; break; } + case 'createCustomField': { + const customFieldId = activity.customFieldId; + this.createdAt.customFields[customFieldId] = activity.createdAt; + break; + } } }); } @@ -840,6 +892,7 @@ export class WekanCreator { const boardId = this.createBoardAndLabels(board); this.createLists(board.lists, boardId); this.createSwimlanes(board.swimlanes, boardId); + this.createCustomFields(board.customFields, boardId); this.createCards(board.cards, boardId); this.createChecklists(board.checklists); this.createChecklistItems(board.checklistItems);