From: Stoiko Ivanov <s.ivanov@proxmox.com>
To: pmg-devel@lists.proxmox.com
Subject: [pmg-devel] [PATCH pmg-gui v2 2/2] quarantine: use new controller for virus and attachment quarantines
Date: Thu, 27 Oct 2022 21:12:58 +0200 [thread overview]
Message-ID: <20221027191258.11594-3-s.ivanov@proxmox.com> (raw)
In-Reply-To: <20221027191258.11594-1-s.ivanov@proxmox.com>
fixes #1674 (the comment about multiselect for the virus quarantine)
fixes #3947 (multiselect for attachment quarantine)
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
---
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("<iframe frameborder=0 width=100% height=100% sandbox='allow-same-origin' src='" + url +"'></iframe>");
+ 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("<iframe frameborder=0 width=100% height=100% sandbox='allow-same-origin' src='" + url +"'></iframe>");
- },
-
- 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.30.2
next prev parent reply other threads:[~2022-10-27 19:13 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-27 19:12 [pmg-devel] [PATCH pmg-gui v2 0/2] low-hanging improvments for the quarantine interface Stoiko Ivanov
2022-10-27 19:12 ` [pmg-devel] [PATCH pmg-gui v2 1/2] quarantine: refactor spamquarantine controller Stoiko Ivanov
2022-10-27 19:12 ` Stoiko Ivanov [this message]
2022-10-28 9:35 ` [pmg-devel] applied-series: Re: [PATCH pmg-gui v2 0/2] low-hanging improvments for the quarantine interface Thomas Lamprecht
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20221027191258.11594-3-s.ivanov@proxmox.com \
--to=s.ivanov@proxmox.com \
--cc=pmg-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.