|
@@ -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;
|
|
|
},
|