mirror of https://github.com/wekan/wekan
* Broken cards * Attachments * Orphaned Attachmentsreviewable/pr3705/r1
parent
4de830d663
commit
0e593c7d81
@ -0,0 +1,85 @@ |
||||
template(name="adminReports") |
||||
.setting-content |
||||
unless currentUser.isAdmin |
||||
| {{_ 'error-notAuthorized'}} |
||||
else |
||||
.content-body |
||||
.side-menu |
||||
ul |
||||
li |
||||
a.js-report-broken(data-id="report-broken") |
||||
i.fa.fa-chain-broken |
||||
| {{_ 'broken-cards'}} |
||||
|
||||
li |
||||
a.js-report-files(data-id="report-orphaned-files") |
||||
i.fa.fa-paperclip |
||||
| {{_ 'orphanedFilesReportTitle'}} |
||||
|
||||
li |
||||
a.js-report-files(data-id="report-files") |
||||
i.fa.fa-paperclip |
||||
| {{_ 'filesReportTitle'}} |
||||
|
||||
.main-body |
||||
if loading.get |
||||
+spinner |
||||
else if showBrokenCardsReport.get |
||||
+brokenCardsReport |
||||
else if showFilesReport.get |
||||
+filesReport |
||||
else if showOrphanedFilesReport.get |
||||
+orphanedFilesReport |
||||
|
||||
|
||||
template(name="brokenCardsReport") |
||||
.global-search-results-list-wrapper |
||||
h1 {{_ 'broken-cards'}} |
||||
if resultsCount |
||||
+resultsPaged(this) |
||||
else |
||||
div {{_ 'no-results' }} |
||||
|
||||
template(name="filesReport") |
||||
h1 {{_ 'filesReportTitle'}} |
||||
if resultsCount |
||||
table.table |
||||
tr |
||||
th Filename |
||||
th.right Size (kB) |
||||
th MIME Type |
||||
th.center Usage |
||||
th MD5 Sum |
||||
th ID |
||||
|
||||
each att in attachmentFiles |
||||
tr |
||||
td {{ att.filename }} |
||||
td.right {{fileSize att.length }} |
||||
td {{ att.contentType }} |
||||
td.center {{usageCount att._id.toHexString }} |
||||
td {{ att.md5 }} |
||||
td {{ att._id.toHexString }} |
||||
else |
||||
div {{_ 'no-results' }} |
||||
|
||||
template(name="orphanedFilesReport") |
||||
h1 {{_ 'orphanedFilesReportTitle'}} |
||||
if resultsCount |
||||
table.table |
||||
tr |
||||
th Filename |
||||
th.right Size (kB) |
||||
th MIME Type |
||||
th MD5 Sum |
||||
th ID |
||||
|
||||
each att in attachmentFiles |
||||
tr |
||||
td {{ att.filename }} |
||||
td.right {{fileSize att.length }} |
||||
td {{ att.contentType }} |
||||
td {{ att.md5 }} |
||||
td {{ att._id.toHexString }} |
||||
else |
||||
div {{_ 'no-results' }} |
@ -0,0 +1,108 @@ |
||||
import { AttachmentStorage } from '/models/attachments'; |
||||
import { CardSearchPagedComponent } from '/client/lib/cardSearch'; |
||||
import SessionData from '/models/usersessiondata'; |
||||
|
||||
BlazeComponent.extendComponent({ |
||||
subscription: null, |
||||
showFilesReport: new ReactiveVar(false), |
||||
showBrokenCardsReport: new ReactiveVar(false), |
||||
showOrphanedFilesReport: new ReactiveVar(false), |
||||
|
||||
onCreated() { |
||||
this.error = new ReactiveVar(''); |
||||
this.loading = new ReactiveVar(false); |
||||
}, |
||||
|
||||
events() { |
||||
return [ |
||||
{ |
||||
'click a.js-report-broken': this.switchMenu, |
||||
'click a.js-report-files': this.switchMenu, |
||||
'click a.js-report-orphaned-files': 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); |
||||
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-orphaned-files' === targetID) { |
||||
this.showOrphanedFilesReport.set(true); |
||||
this.subscription = Meteor.subscribe('orphanedAttachments', () => { |
||||
this.loading.set(false); |
||||
}); |
||||
} |
||||
} |
||||
}, |
||||
}).register('adminReports'); |
||||
|
||||
Template.filesReport.helpers({ |
||||
attachmentFiles() { |
||||
// eslint-disable-next-line no-console
|
||||
// console.log('attachments:', AttachmentStorage.find());
|
||||
// console.log('attachments.count:', AttachmentStorage.find().count());
|
||||
return AttachmentStorage.find(); |
||||
}, |
||||
|
||||
resultsCount() { |
||||
return AttachmentStorage.find().count(); |
||||
}, |
||||
|
||||
fileSize(size) { |
||||
return Math.round(size / 1024); |
||||
}, |
||||
|
||||
usageCount(key) { |
||||
return Attachments.find({ 'copies.attachments.key': key }).count(); |
||||
}, |
||||
}); |
||||
|
||||
Template.orphanedFilesReport.helpers({ |
||||
attachmentFiles() { |
||||
// eslint-disable-next-line no-console
|
||||
// console.log('attachments:', AttachmentStorage.find());
|
||||
// console.log('attachments.count:', AttachmentStorage.find().count());
|
||||
return AttachmentStorage.find(); |
||||
}, |
||||
|
||||
resultsCount() { |
||||
return AttachmentStorage.find().count(); |
||||
}, |
||||
|
||||
fileSize(size) { |
||||
return Math.round(size / 1024); |
||||
}, |
||||
}); |
||||
|
||||
class BrokenCardsComponent extends CardSearchPagedComponent { |
||||
onCreated() { |
||||
super.onCreated(); |
||||
} |
||||
} |
||||
BrokenCardsComponent.register('brokenCardsReport'); |
Loading…
Reference in new issue