]> git.proxmox.com Git - pmg-gui.git/blame - js/AttachmentQuarantine.js
code cleanup
[pmg-gui.git] / js / AttachmentQuarantine.js
CommitLineData
0023ef6a
DC
1Ext.define('pmg-attachment-list', {
2 extend: 'Ext.data.Model',
c87d46fb 3 fields: ['id', 'envelope_sender', 'from', 'sender', 'receiver', 'subject',
0023ef6a
DC
4 { type: 'integer', name: 'bytes' },
5 { type: 'date', dateFormat: 'timestamp', name: 'time' },
6 {
7 type: 'string',
8 name: 'day',
9 convert: function(v, rec) {
10 return Ext.Date.format(rec.get('time'), 'Y-m-d');
c87d46fb
TL
11 }, depends: ['time'],
12 },
0023ef6a
DC
13 ],
14 proxy: {
15 type: 'proxmox',
c87d46fb 16 url: "/api2/json/quarantine/attachment",
0023ef6a 17 },
c87d46fb 18 idProperty: 'id',
0023ef6a
DC
19});
20
21Ext.define('PMG.AttachmentQuarantine', {
22 extend: 'Ext.container.Container',
23 xtype: 'pmgAttachmentQuarantine',
24
25 border: false,
26 layout: { type: 'border' },
27
28 defaults: { border: false },
29
30 controller: {
31
32 xclass: 'Ext.app.ViewController',
33
34 updatePreview: function(raw, rec) {
35 var preview = this.lookupReference('preview');
36
c87d46fb 37 if (!rec || !rec.data || !rec.data.id) {
0023ef6a
DC
38 preview.update('');
39 preview.setDisabled(true);
40 return;
41 }
42
0e26e20a
TL
43 let url = `/api2/htmlmail/quarantine/content?id=${rec.data.id}`;
44 if (raw) {
45 url += 'raw=1';
46 }
0023ef6a
DC
47 preview.setDisabled(false);
48 preview.update("<iframe frameborder=0 width=100% height=100% sandbox='allow-same-origin' src='" + url +"'></iframe>");
49 },
50
51 toggleRaw: function(button) {
52 var me = this;
53 var list = this.lookupReference('list');
54 var rec = list.getSelection()[0] || {};
4935e8fb 55 me.lookup('mailinfo').setVisible(me.raw);
0023ef6a
DC
56 me.raw = !me.raw;
57 me.updatePreview(me.raw, rec);
58 },
59
60 btnHandler: function(button, e) {
61 var list = this.lookupReference('list');
62 var selected = list.getSelection();
63 if (!selected.length) {
64 return;
65 }
66
67 var action = button.reference;
68
69 PMG.Utils.doQuarantineAction(action, selected[0].data.id, function() {
70 list.getController().load();
71 });
72 },
73
74 onSelectMail: function() {
ac6c1fb8
DC
75 let me = this;
76 let list = me.lookup('list');
77 let rec = list.getSelection()[0] || {};
78 let mailinfo = me.lookup('mailinfo');
0023ef6a
DC
79
80 me.updatePreview(me.raw || false, rec);
ac6c1fb8 81 me.lookup('attachmentlist').setID(rec);
72d8403c 82 mailinfo.setVisible(!!rec.data && !me.raw);
ac6c1fb8 83 mailinfo.update(rec.data);
0023ef6a
DC
84 },
85
86 control: {
87 'button[reference=raw]': {
c87d46fb 88 click: 'toggleRaw',
0023ef6a
DC
89 },
90 'pmgQuarantineList': {
c87d46fb
TL
91 selectionChange: 'onSelectMail',
92 },
93 },
0023ef6a
DC
94
95 },
96
97 items: [
98 {
99 title: gettext('Attachment Quarantine'),
100 xtype: 'pmgQuarantineList',
101 emptyText: gettext('No data in database'),
102 emailSelection: false,
103 reference: 'list',
104 region: 'west',
105 width: 500,
106 split: true,
107 collapsible: false,
108 store: {
109 model: 'pmg-attachment-list',
110 groupField: 'day',
111 groupDir: 'DESC',
112 sorters: [{
113 property: 'time',
c87d46fb
TL
114 direction: 'DESC',
115 }],
0023ef6a
DC
116 },
117
118 columns: [
119 {
120 header: gettext('Sender/Subject'),
121 dataIndex: 'subject',
122 renderer: PMG.Utils.sender_renderer,
c87d46fb 123 flex: 1,
0023ef6a
DC
124 },
125 {
126 header: gettext('Size') + ' (KB)',
127 renderer: function(v) { return Ext.Number.toFixed(v/1024, 0); },
128 dataIndex: 'bytes',
129 align: 'right',
c87d46fb 130 width: 90,
0023ef6a
DC
131 },
132 {
133 header: gettext('Date'),
134 dataIndex: 'day',
c87d46fb 135 hidden: true,
0023ef6a
DC
136 },
137 {
138 xtype: 'datecolumn',
139 header: gettext('Time'),
140 dataIndex: 'time',
c87d46fb
TL
141 format: 'H:i:s',
142 },
143 ],
0023ef6a
DC
144 },
145 {
146 title: gettext('Selected Mail'),
147 border: false,
148 region: 'center',
149 split: true,
150 reference: 'preview',
151 disabled: true,
152 dockedItems: [
153 {
154 xtype: 'toolbar',
155 dock: 'top',
156 items: [
157 {
158 xtype: 'button',
159 reference: 'raw',
160 text: gettext('Toggle Raw'),
161 enableToggle: true,
c87d46fb 162 iconCls: 'fa fa-file-code-o',
0023ef6a
DC
163 },
164 '->',
165 {
166 reference: 'deliver',
167 text: gettext('Deliver'),
168 iconCls: 'fa fa-paper-plane-o',
c87d46fb 169 handler: 'btnHandler',
0023ef6a
DC
170 },
171 {
172 reference: 'delete',
173 text: gettext('Delete'),
174 iconCls: 'fa fa-trash-o',
c87d46fb
TL
175 handler: 'btnHandler',
176 },
177 ],
0023ef6a
DC
178 },
179 {
180 xtype: 'pmgAttachmentGrid',
181 minHeight: 50,
182 maxHeight: 250,
183 scrollable: true,
184 reference: 'attachmentlist',
ac6c1fb8
DC
185 },
186 {
187 xtype: 'pmgMailInfo',
188 hidden: true,
189 reference: 'mailinfo',
190 },
c87d46fb
TL
191 ],
192 },
193 ],
0023ef6a 194});