mirror of
https://github.com/wekan/wekan.git
synced 2025-06-27 17:00:47 -04:00
198 lines
5 KiB
JavaScript
198 lines
5 KiB
JavaScript
import { ReactiveCache } from '/imports/reactiveCache';
|
|
import { TAPi18n } from '/imports/i18n';
|
|
import { AttachmentStorage } from '/models/attachments';
|
|
import { CardSearchPagedComponent } from '/client/lib/cardSearch';
|
|
import SessionData from '/models/usersessiondata';
|
|
import { QueryParams } from '/config/query-classes';
|
|
import { OPERATOR_LIMIT } from '/config/search-const';
|
|
const filesize = require('filesize');
|
|
|
|
BlazeComponent.extendComponent({
|
|
subscription: null,
|
|
showFilesReport: new ReactiveVar(false),
|
|
showBrokenCardsReport: new ReactiveVar(false),
|
|
showOrphanedFilesReport: new ReactiveVar(false),
|
|
showRulesReport: new ReactiveVar(false),
|
|
showCardsReport: new ReactiveVar(false),
|
|
showBoardsReport: new ReactiveVar(false),
|
|
sessionId: null,
|
|
|
|
onCreated() {
|
|
this.error = new ReactiveVar('');
|
|
this.loading = new ReactiveVar(false);
|
|
this.sessionId = SessionData.getSessionId();
|
|
},
|
|
|
|
events() {
|
|
return [
|
|
{
|
|
'click a.js-report-broken': this.switchMenu,
|
|
'click a.js-report-files': this.switchMenu,
|
|
'click a.js-report-rules': this.switchMenu,
|
|
'click a.js-report-cards': this.switchMenu,
|
|
'click a.js-report-boards': this.switchMenu,
|
|
},
|
|
];
|
|
},
|
|
|
|
switchMenu(event) {
|
|
const target = $(event.target);
|
|
if (!target.hasClass('active')) {
|
|
this.loading.set(true);
|
|
this.showFilesReport.set(false);
|
|
this.showBrokenCardsReport.set(false);
|
|
this.showOrphanedFilesReport.set(false);
|
|
this.showRulesReport.set(false)
|
|
this.showBoardsReport.set(false);
|
|
this.showCardsReport.set(false);
|
|
if (this.subscription) {
|
|
this.subscription.stop();
|
|
}
|
|
|
|
$('.side-menu li.active').removeClass('active');
|
|
target.parent().addClass('active');
|
|
const targetID = target.data('id');
|
|
|
|
if ('report-broken' === targetID) {
|
|
this.showBrokenCardsReport.set(true);
|
|
this.subscription = Meteor.subscribe(
|
|
'brokenCards',
|
|
SessionData.getSessionId(),
|
|
() => {
|
|
this.loading.set(false);
|
|
},
|
|
);
|
|
} else if ('report-files' === targetID) {
|
|
this.showFilesReport.set(true);
|
|
this.subscription = Meteor.subscribe('attachmentsList', () => {
|
|
this.loading.set(false);
|
|
});
|
|
} else if ('report-rules' === targetID) {
|
|
this.subscription = Meteor.subscribe('rulesReport', () => {
|
|
this.showRulesReport.set(true);
|
|
this.loading.set(false);
|
|
});
|
|
} else if ('report-boards' === targetID) {
|
|
this.subscription = Meteor.subscribe('boardsReport', () => {
|
|
this.showBoardsReport.set(true);
|
|
this.loading.set(false);
|
|
});
|
|
} else if ('report-cards' === targetID) {
|
|
const qp = new QueryParams();
|
|
qp.addPredicate(OPERATOR_LIMIT, 300);
|
|
this.subscription = Meteor.subscribe(
|
|
'globalSearch',
|
|
this.sessionId,
|
|
qp.getParams(),
|
|
qp.text,
|
|
() => {
|
|
this.showCardsReport.set(true);
|
|
this.loading.set(false);
|
|
},
|
|
);
|
|
}
|
|
}
|
|
},
|
|
}).register('adminReports');
|
|
|
|
class AdminReport extends BlazeComponent {
|
|
collection;
|
|
|
|
results() {
|
|
// eslint-disable-next-line no-console
|
|
return this.collection.find();
|
|
}
|
|
|
|
yesOrNo(value) {
|
|
if (value) {
|
|
return TAPi18n.__('yes');
|
|
} else {
|
|
return TAPi18n.__('no');
|
|
}
|
|
}
|
|
|
|
resultsCount() {
|
|
return this.collection.find().count();
|
|
}
|
|
|
|
fileSize(size) {
|
|
let ret = "";
|
|
if (_.isNumber(size)) {
|
|
ret = filesize(size);
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
abbreviate(text) {
|
|
if (text.length > 30) {
|
|
return `${text.substr(0, 29)}...`;
|
|
}
|
|
return text;
|
|
}
|
|
}
|
|
|
|
(class extends AdminReport {
|
|
collection = Attachments;
|
|
}.register('filesReport'));
|
|
|
|
(class extends AdminReport {
|
|
collection = Rules;
|
|
|
|
results() {
|
|
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(),
|
|
});
|
|
});
|
|
|
|
// eslint-disable-next-line no-console
|
|
console.log('rows:', rules);
|
|
return rules;
|
|
}
|
|
}.register('rulesReport'));
|
|
|
|
(class extends AdminReport {
|
|
collection = Boards;
|
|
|
|
userNames(members) {
|
|
let text = '';
|
|
members.forEach(member => {
|
|
const user = ReactiveCache.getUser(member.userId);
|
|
text += text ? ', ' : '';
|
|
if (user) {
|
|
text += user.username;
|
|
} else {
|
|
text += member.userId
|
|
}
|
|
});
|
|
return text;
|
|
}
|
|
}.register('boardsReport'));
|
|
|
|
(class extends AdminReport {
|
|
collection = Cards;
|
|
|
|
userNames(userIds) {
|
|
let text = '';
|
|
userIds.forEach(userId => {
|
|
const user = ReactiveCache.getUser(userId);
|
|
text += text ? ', ' : '';
|
|
text += user.username;
|
|
});
|
|
return text;
|
|
}
|
|
}.register('cardsReport'));
|
|
|
|
class BrokenCardsComponent extends CardSearchPagedComponent {
|
|
onCreated() {
|
|
super.onCreated();
|
|
}
|
|
}
|
|
BrokenCardsComponent.register('brokenCardsReport');
|