]> git.proxmox.com Git - pmg-gui.git/blob - js/AttachmentQuarantine.js
mobile: set button color in mail view similar to quarantine list
[pmg-gui.git] / js / AttachmentQuarantine.js
1 Ext.define('pmg-attachment-list', {
2 extend: 'Ext.data.Model',
3 fields: ['id', 'envelope_sender', 'from', 'sender', 'receiver', 'subject',
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');
11 }, depends: ['time'],
12 },
13 ],
14 proxy: {
15 type: 'proxmox',
16 url: "/api2/json/quarantine/attachment",
17 },
18 idProperty: 'id',
19 });
20
21 Ext.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
37 if (!rec || !rec.data || !rec.data.id) {
38 preview.update('');
39 preview.setDisabled(true);
40 return;
41 }
42
43 let url = `/api2/htmlmail/quarantine/content?id=${rec.data.id}`;
44 if (raw) {
45 url += '&raw=1';
46 }
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] || {};
55 me.lookup('mailinfo').setVisible(me.raw);
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() {
75 let me = this;
76 let list = me.lookup('list');
77 let rec = list.getSelection()[0] || {};
78 let mailinfo = me.lookup('mailinfo');
79
80 me.updatePreview(me.raw || false, rec);
81 me.lookup('attachmentlist').setID(rec);
82 mailinfo.setVisible(!!rec.data && !me.raw);
83 mailinfo.update(rec.data);
84 },
85
86 control: {
87 'button[reference=raw]': {
88 click: 'toggleRaw',
89 },
90 'pmgQuarantineList': {
91 selectionChange: 'onSelectMail',
92 },
93 },
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',
114 direction: 'DESC',
115 }],
116 },
117
118 columns: [
119 {
120 header: gettext('Sender/Subject'),
121 dataIndex: 'subject',
122 renderer: PMG.Utils.sender_renderer,
123 flex: 1,
124 },
125 {
126 header: gettext('Size') + ' (KB)',
127 renderer: function(v) { return Ext.Number.toFixed(v/1024, 0); },
128 dataIndex: 'bytes',
129 align: 'right',
130 width: 90,
131 },
132 {
133 header: gettext('Date'),
134 dataIndex: 'day',
135 hidden: true,
136 },
137 {
138 xtype: 'datecolumn',
139 header: gettext('Time'),
140 dataIndex: 'time',
141 format: 'H:i:s',
142 },
143 ],
144 },
145 {
146 title: gettext('Selected Mail'),
147 border: false,
148 region: 'center',
149 layout: 'fit',
150 split: true,
151 reference: 'preview',
152 disabled: true,
153 dockedItems: [
154 {
155 xtype: 'toolbar',
156 dock: 'top',
157 items: [
158 {
159 xtype: 'button',
160 reference: 'raw',
161 text: gettext('Toggle Raw'),
162 enableToggle: true,
163 iconCls: 'fa fa-file-code-o',
164 },
165 '->',
166 {
167 reference: 'deliver',
168 text: gettext('Deliver'),
169 iconCls: 'fa fa-paper-plane-o',
170 handler: 'btnHandler',
171 },
172 {
173 reference: 'delete',
174 text: gettext('Delete'),
175 iconCls: 'fa fa-trash-o',
176 handler: 'btnHandler',
177 },
178 ],
179 },
180 {
181 xtype: 'pmgAttachmentGrid',
182 minHeight: 50,
183 maxHeight: 250,
184 scrollable: true,
185 reference: 'attachmentlist',
186 },
187 {
188 xtype: 'pmgMailInfo',
189 hidden: true,
190 reference: 'mailinfo',
191 },
192 ],
193 },
194 ],
195 });