Forráskód Böngészése

Close #873 by importing checklists from Trello

Raoul Snyman 8 éve
szülő
commit
4414582a35
1 módosított fájl, 41 hozzáadás és 1 törlés
  1. 41 1
      models/import.js

+ 41 - 1
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;
   },