diff options
Diffstat (limited to 'models/import.js')
-rw-r--r-- | models/import.js | 44 |
1 files changed, 43 insertions, 1 deletions
diff --git a/models/import.js b/models/import.js index 86ef75b3..4e78c53a 100644 --- a/models/import.js +++ b/models/import.js @@ -25,6 +25,8 @@ class TrelloCreator { this.labels = {}; // Map of lists Trello ID => Wekan ID this.lists = {}; + // Map of cards Trello ID => Wekan ID + this.cards = {}; // The comments, indexed by Trello card id (to map when importing cards) this.comments = {}; // the members, indexed by Trello member id => Wekan user ID @@ -119,6 +121,18 @@ class TrelloCreator { })]); } + checkChecklists(trelloChecklists) { + check(trelloChecklists, [Match.ObjectIncluding({ + idBoard: String, + idCard: String, + name: String, + checkItems: [Match.ObjectIncluding({ + state: String, + name: String, + })], + })]); + } + // You must call parseActions before calling this one. createBoardAndLabels(trelloBoard) { const boardToCreate = { @@ -131,6 +145,7 @@ class TrelloCreator { userId: Meteor.userId(), isAdmin: true, isActive: true, + isCommentOnly: false, }], permission: this.getPermission(trelloBoard.prefs.permissionLevel), slug: getSlug(trelloBoard.name) || 'board', @@ -156,6 +171,7 @@ class TrelloCreator { userId: wekanId, isAdmin: this.getAdmin(trelloMembership.memberType), isActive: true, + isCommentOnly: false, }); } } @@ -241,6 +257,8 @@ class TrelloCreator { } // insert card const cardId = Cards.direct.insert(cardToCreate); + // keep track of Trello id => WeKan id + this.cards[card.id] = cardId; // log activity Activities.direct.insert({ activityType: 'importCard', @@ -280,7 +298,7 @@ class TrelloCreator { createdAt: this._now(commentToCreate.createdAt), // we attribute the addComment (not the import) // to the original author - it is needed by some UI elements. - userId: commentToCreate.userId, + userId: this._user(commentToCreate.userId), }); }); } @@ -365,6 +383,28 @@ class TrelloCreator { }); } + createChecklists(trelloChecklists) { + trelloChecklists.forEach((checklist) => { + // Create the checklist + const checklistToCreate = { + cardId: this.cards[checklist.idCard], + title: checklist.name, + createdAt: this._now(), + }; + const checklistId = Checklists.direct.insert(checklistToCreate); + // Now add the items to the checklist + const itemsToCreate = []; + checklist.checkItems.forEach((item) => { + itemsToCreate.push({ + _id: checklistId + itemsToCreate.length, + title: item.name, + isFinished: item.state === 'complete', + }); + }); + Checklists.direct.update(checklistId, {$set: {items: itemsToCreate}}); + }); + } + getAdmin(trelloMemberType) { return trelloMemberType === 'admin'; } @@ -446,6 +486,7 @@ Meteor.methods({ trelloCreator.checkLabels(trelloBoard.labels); trelloCreator.checkLists(trelloBoard.lists); trelloCreator.checkCards(trelloBoard.cards); + trelloCreator.checkChecklists(trelloBoard.checklists); } catch (e) { throw new Meteor.Error('error-json-schema'); } @@ -458,6 +499,7 @@ Meteor.methods({ const boardId = trelloCreator.createBoardAndLabels(trelloBoard); trelloCreator.createLists(trelloBoard.lists, boardId); trelloCreator.createCards(trelloBoard.cards, boardId); + trelloCreator.createChecklists(trelloBoard.checklists); // XXX add members return boardId; }, |