diff --git a/client/components/settings/adminReports.jade b/client/components/settings/adminReports.jade index c4b6b93d8..9c0a2123c 100644 --- a/client/components/settings/adminReports.jade +++ b/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 diff --git a/client/components/settings/adminReports.js b/client/components/settings/adminReports.js index ad999af14..e8ba75fc0 100644 --- a/client/components/settings/adminReports.js +++ b/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(); diff --git a/models/rules.js b/models/rules.js index 2e6729ccf..d82bf9270 100644 --- a/models/rules.js +++ b/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({ diff --git a/server/publications/rules.js b/server/publications/rules.js index 2a593067c..1b4ce0ca0 100644 --- a/server/publications/rules.js +++ b/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 } }), + ]; +});