From 8fb8931b63521fc01250a29e2dc89059ffd87c70 Mon Sep 17 00:00:00 2001 From: Stoiko Ivanov Date: Thu, 27 Oct 2022 21:12:58 +0200 Subject: [PATCH] quarantine: use new controller for virus and attachment quarantines fixes #1674 (the comment about multiselect for the virus quarantine) fixes #3947 (multiselect for attachment quarantine) Signed-off-by: Stoiko Ivanov --- js/AttachmentQuarantine.js | 113 ++++++++++++++++--------------------- js/VirusQuarantine.js | 86 +++++++--------------------- 2 files changed, 70 insertions(+), 129 deletions(-) diff --git a/js/AttachmentQuarantine.js b/js/AttachmentQuarantine.js index 1e56420..8abfcad 100644 --- a/js/AttachmentQuarantine.js +++ b/js/AttachmentQuarantine.js @@ -18,87 +18,59 @@ Ext.define('pmg-attachment-list', { idProperty: 'id', }); -Ext.define('PMG.AttachmentQuarantine', { - extend: 'Ext.container.Container', - xtype: 'pmgAttachmentQuarantine', - - border: false, - layout: { type: 'border' }, - - defaults: { border: false }, - - controller: { - - xclass: 'Ext.app.ViewController', - - updatePreview: function(raw, rec) { - var preview = this.lookupReference('preview'); +Ext.define('PMG.AttachmentQuarantineController', { + extend: 'PMG.controller.QuarantineController', + alias: 'controller.attachmentquarantine', + xtype: 'pmgAttachmentQuarantineController', + + onSelectMail: function() { + let me = this; + let list = this.lookupReference('list'); + let selection = list.selModel.getSelection(); + if (selection.length <= 1) { + let rec = selection[0] || {}; + me.lookup('attachmentlist').setID(rec); + } - if (!rec || !rec.data || !rec.data.id) { - preview.update(''); - preview.setDisabled(true); - return; - } + me.callParent(); + }, - let url = `/api2/htmlmail/quarantine/content?id=${rec.data.id}`; - if (raw) { - url += '&raw=1'; - } - preview.setDisabled(false); - preview.update(""); + control: { + 'button[reference=raw]': { + click: 'toggleRaw', }, - - toggleRaw: function(button) { - var me = this; - var list = this.lookupReference('list'); - var rec = list.getSelection()[0] || {}; - me.lookup('mailinfo').setVisible(me.raw); - me.raw = !me.raw; - me.updatePreview(me.raw, rec); + 'pmgQuarantineList': { + selectionChange: 'onSelectMail', }, + }, - btnHandler: function(button, e) { - var list = this.lookupReference('list'); - var selected = list.getSelection(); - if (!selected.length) { - return; - } +}); - var action = button.reference; +Ext.define('PMG.AttachmentQuarantine', { + extend: 'Ext.container.Container', + xtype: 'pmgAttachmentQuarantine', - PMG.Utils.doQuarantineAction(action, selected[0].data.id, function() { - list.getController().load(); - }); - }, + border: false, + layout: { type: 'border' }, - onSelectMail: function() { - let me = this; - let list = me.lookup('list'); - let rec = list.getSelection()[0] || {}; - let mailinfo = me.lookup('mailinfo'); + defaults: { border: false }, - me.updatePreview(me.raw || false, rec); - me.lookup('attachmentlist').setID(rec); - mailinfo.setVisible(!!rec.data && !me.raw); - mailinfo.update(rec.data); + viewModel: { + parent: null, + data: { + mailid: '', }, - - control: { - 'button[reference=raw]': { - click: 'toggleRaw', - }, - 'pmgQuarantineList': { - selectionChange: 'onSelectMail', - }, + formulas: { + downloadMailURL: get => '/api2/json/quarantine/download?mailid=' + encodeURIComponent(get('mailid')), }, - }, - + controller: 'attachmentquarantine', items: [ { title: gettext('Attachment Quarantine'), xtype: 'pmgQuarantineList', emptyText: gettext('No data in database'), + selModel: 'checkboxmodel', emailSelection: false, reference: 'list', region: 'west', @@ -163,6 +135,19 @@ Ext.define('PMG.AttachmentQuarantine', { iconCls: 'fa fa-file-code-o', }, '->', + { + xtype: 'button', + reference: 'download', + text: gettext('Download'), + setDownload: function(id) { + this.el.dom.download = id + ".eml"; + }, + bind: { + href: '{downloadMailURL}', + download: '{mailid}', + }, + iconCls: 'fa fa-download', + }, { reference: 'deliver', text: gettext('Deliver'), diff --git a/js/VirusQuarantine.js b/js/VirusQuarantine.js index 4c1d0ba..47e055c 100644 --- a/js/VirusQuarantine.js +++ b/js/VirusQuarantine.js @@ -28,80 +28,23 @@ Ext.define('PMG.VirusQuarantine', { defaults: { border: false }, - controller: { - - xclass: 'Ext.app.ViewController', - - updatePreview: function(raw) { - var list = this.lookupReference('list'); - var rec = list.selModel.getSelection()[0]; - var preview = this.lookupReference('preview'); - - if (!rec || !rec.data || !rec.data.id) { - preview.update(''); - preview.setDisabled(true); - return; - } - - let url = `/api2/htmlmail/quarantine/content?id=${rec.data.id}`; - if (raw) { - url += '&raw=1'; - } - preview.setDisabled(false); - preview.update(""); - }, - - toggleRaw: function(button) { - var me = this; - me.lookup('mailinfo').setVisible(me.raw); - me.raw = !me.raw; - me.updatePreview(me.raw); + viewModel: { + parent: null, + data: { + mailid: '', }, - - btnHandler: function(button, e) { - var list = this.lookupReference('list'); - var selected = list.getSelection(); - if (!selected.length) { - return; - } - - var action = button.reference; - - PMG.Utils.doQuarantineAction(action, selected[0].data.id, function() { - list.getController().load(); - }); + formulas: { + downloadMailURL: get => '/api2/json/quarantine/download?mailid=' + encodeURIComponent(get('mailid')), }, - - onSelectMail: function() { - var me = this; - me.updatePreview(me.raw || false); - let mailinfo = me.lookup('mailinfo'); - let list = me.lookup('list'); - let selection = list.getSelection(); - if (selection.length < 1) { - mailinfo.setVisible(false); - return; - } - mailinfo.setVisible(!me.raw); - mailinfo.update(selection[0].data); - }, - - control: { - 'button[reference=raw]': { - click: 'toggleRaw', - }, - 'pmgQuarantineList': { - selectionChange: 'onSelectMail', - }, - }, - }, + controller: 'quarantine', items: [ { title: gettext('Virus Quarantine'), xtype: 'pmgQuarantineList', emptyText: gettext('No data in database'), + selModel: 'checkboxmodel', emailSelection: false, reference: 'list', region: 'west', @@ -172,6 +115,19 @@ Ext.define('PMG.VirusQuarantine', { iconCls: 'fa fa-file-code-o', }, '->', + { + xtype: 'button', + reference: 'download', + text: gettext('Download'), + setDownload: function(id) { + this.el.dom.download = id + ".eml"; + }, + bind: { + href: '{downloadMailURL}', + download: '{mailid}', + }, + iconCls: 'fa fa-download', + }, { reference: 'deliver', text: gettext('Deliver'), -- 2.39.5