diff options
author | Lauri Ojansivu <x@xet7.org> | 2017-03-05 22:25:47 +0200 |
---|---|---|
committer | Lauri Ojansivu <x@xet7.org> | 2017-03-05 22:25:47 +0200 |
commit | 96a54f9384a41aa12883f87f135be7d0308926ef (patch) | |
tree | 88e668ec079626d517e441484239aec64048972e | |
parent | c775da8ccc38fd168b36ff1e72af20a9d3178343 (diff) | |
parent | 53a7ab0496f567a98a6a7da3f2de3a4a7158c4f2 (diff) | |
download | wekan-96a54f9384a41aa12883f87f135be7d0308926ef.tar.gz wekan-96a54f9384a41aa12883f87f135be7d0308926ef.tar.bz2 wekan-96a54f9384a41aa12883f87f135be7d0308926ef.zip |
Merge branch 'whodafly-checklist-import' into devel
-rw-r--r-- | models/import.js | 42 |
1 files changed, 41 insertions, 1 deletions
diff --git a/models/import.js b/models/import.js index 86ef75b3..41c2204b 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 = { @@ -241,6 +255,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 +296,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 +381,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 +484,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 +497,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; }, |