浏览代码

Add new rules report

John R. Supplee 4 年之前
父节点
当前提交
1d4a65d0b4

+ 26 - 0
client/components/settings/adminReports.jade

@@ -21,6 +21,11 @@ template(name="adminReports")
                 i.fa.fa-paperclip
                 | {{_ 'filesReportTitle'}}
 
+            li
+              a.js-report-rules(data-id="report-rules")
+                i.fa.fa-paperclip
+                | {{_ 'rulesReportTitle'}}
+
         .main-body
           if loading.get
             +spinner
@@ -30,6 +35,8 @@ template(name="adminReports")
             +filesReport
           else if showOrphanedFilesReport.get
             +orphanedFilesReport
+          else if showRulesReport.get
+            +rulesReport
 
 
 template(name="brokenCardsReport")
@@ -40,6 +47,25 @@ template(name="brokenCardsReport")
     else
       div {{_ 'no-results' }}
 
+template(name="rulesReport")
+  h1 {{_ 'rulesReportTitle'}}
+  if resultsCount
+    table.table
+      tr
+        th Rule Title
+        th Board Title
+        th actionType
+        th activityType
+
+      each rule in rows
+        tr
+          td {{ rule.title }}
+          td {{ rule.boardTitle }}
+          td {{ rule.action.actionType }}
+          td {{ rule.trigger.activityType }}
+  else
+    div {{_ 'no-results' }}
+
 template(name="filesReport")
   h1 {{_ 'filesReportTitle'}}
   if resultsCount

+ 48 - 0
client/components/settings/adminReports.js

@@ -7,6 +7,7 @@ BlazeComponent.extendComponent({
   showFilesReport: new ReactiveVar(false),
   showBrokenCardsReport: new ReactiveVar(false),
   showOrphanedFilesReport: new ReactiveVar(false),
+  showRulesReport: new ReactiveVar(false),
 
   onCreated() {
     this.error = new ReactiveVar('');
@@ -19,6 +20,7 @@ BlazeComponent.extendComponent({
         'click a.js-report-broken': this.switchMenu,
         'click a.js-report-files': this.switchMenu,
         'click a.js-report-orphaned-files': this.switchMenu,
+        'click a.js-report-rules': this.switchMenu,
       },
     ];
   },
@@ -57,6 +59,11 @@ BlazeComponent.extendComponent({
         this.subscription = Meteor.subscribe('orphanedAttachments', () => {
           this.loading.set(false);
         });
+      } else if ('report-rules' === targetID) {
+        this.subscription = Meteor.subscribe('rulesReport', () => {
+          this.showRulesReport.set(true);
+          this.loading.set(false);
+        });
       }
     }
   },
@@ -70,6 +77,23 @@ Template.filesReport.helpers({
     return AttachmentStorage.find();
   },
 
+  rulesReport() {
+    const rules = [];
+
+    Rules.find().forEach(rule => {
+      rules.push({
+        _id: rule._id,
+        title: rule.title,
+        boardId: rule.boardId,
+        boardTitle: rule.board().title,
+        action: rule.action().fetch(),
+        trigger: rule.trigger().fetch(),
+      });
+    });
+
+    return rules;
+  },
+
   resultsCount() {
     return AttachmentStorage.find().count();
   },
@@ -100,6 +124,30 @@ Template.orphanedFilesReport.helpers({
   },
 });
 
+Template.rulesReport.helpers({
+  rows() {
+    const rules = [];
+
+    Rules.find().forEach(rule => {
+      rules.push({
+        _id: rule._id,
+        title: rule.title,
+        boardId: rule.boardId,
+        boardTitle: rule.board().title,
+        action: rule.action(),
+        trigger: rule.trigger(),
+      });
+    });
+
+    console.log('rows:', rules);
+    return rules;
+  },
+
+  resultsCount() {
+    return Rules.find().count();
+  },
+});
+
 class BrokenCardsComponent extends CardSearchPagedComponent {
   onCreated() {
     super.onCreated();

+ 9 - 0
models/rules.js

@@ -62,6 +62,15 @@ Rules.helpers({
   getTrigger() {
     return Triggers.findOne({ _id: this.triggerId });
   },
+  board() {
+    return Boards.findOne({ _id: this.boardId });
+  },
+  trigger() {
+    return Triggers.findOne({ _id: this.triggerId });
+  },
+  action() {
+    return Actions.findOne({ _id: this.actionId });
+  },
 });
 
 Rules.allow({

+ 25 - 0
server/publications/rules.js

@@ -1,3 +1,8 @@
+import Boards from '/models/boards';
+import Actions from '/models/actions';
+import Triggers from '/models/triggers';
+import Rules from '/models/rules';
+
 Meteor.publish('rules', ruleId => {
   check(ruleId, String);
   return Rules.find({
@@ -16,3 +21,23 @@ Meteor.publish('allTriggers', () => {
 Meteor.publish('allActions', () => {
   return Actions.find({});
 });
+
+Meteor.publish('rulesReport', () => {
+  const rules = Rules.find();
+  const actionIds = [];
+  const triggerIds = [];
+  const boardIds = [];
+
+  rules.forEach(rule => {
+    actionIds.push(rule.actionId);
+    triggerIds.push(rule.triggerId);
+    boardIds.push(rule.boardId);
+  });
+
+  return [
+    rules,
+    Actions.find({ _id: { $in: actionIds } }),
+    Triggers.find({ _id: { $in: triggerIds } }),
+    Boards.find({ _id: { $in: boardIds } }, { fields: { title: 1 } }),
+  ];
+});