summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--models/import.js42
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;
},