summaryrefslogtreecommitdiffstats
path: root/models/import.js
diff options
context:
space:
mode:
Diffstat (limited to 'models/import.js')
-rw-r--r--models/import.js44
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;
},