summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLauri Ojansivu <x@xet7.org>2017-03-05 22:12:59 +0200
committerLauri Ojansivu <x@xet7.org>2017-03-05 22:12:59 +0200
commit53a7ab0496f567a98a6a7da3f2de3a4a7158c4f2 (patch)
tree88e668ec079626d517e441484239aec64048972e
parentc775da8ccc38fd168b36ff1e72af20a9d3178343 (diff)
parentbc9e093e07e81c75bc94277b7dd3aff9936e3c28 (diff)
downloadwekan-53a7ab0496f567a98a6a7da3f2de3a4a7158c4f2.tar.gz
wekan-53a7ab0496f567a98a6a7da3f2de3a4a7158c4f2.tar.bz2
wekan-53a7ab0496f567a98a6a7da3f2de3a4a7158c4f2.zip
Merge branch 'checklist-import' of https://github.com/whodafly/wekan into whodafly-checklist-import
-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;
},