]>
Commit | Line | Data |
---|---|---|
d944805a SI |
1 | Ext.define('PMG.PBSScheduleEdit', { |
2 | extend: 'Proxmox.window.Edit', | |
3 | xtype: 'pmgPBSScheduleEdit', | |
4 | ||
5 | isAdd: true, | |
6 | method: 'POST', | |
7 | subject: gettext('Scheduled Backup'), | |
8 | autoLoad: true, | |
9 | items: [ | |
10 | { | |
11 | xtype: 'proxmoxKVComboBox', | |
12 | name: 'schedule', | |
13 | fieldLabel: gettext('Schedule'), | |
14 | comboItems: [ | |
15 | ['daily', 'daily'], | |
16 | ['hourly', 'hourly'], | |
17 | ['weekly', 'weekly'], | |
18 | ['monthly', 'monthly'], | |
19 | ], | |
20 | editable: true, | |
21 | emptyText: 'Systemd Calender Event', | |
22 | }, | |
23 | { | |
24 | xtype: 'proxmoxKVComboBox', | |
25 | name: 'delay', | |
26 | fieldLabel: gettext('Random Delay'), | |
27 | comboItems: [ | |
28 | ['0s', 'no delay'], | |
29 | ['15 minutes', '15 Minutes'], | |
30 | ['6 hours', '6 hours'], | |
31 | ], | |
32 | editable: true, | |
33 | emptyText: 'Systemd TimeSpan', | |
34 | }, | |
35 | ], | |
36 | initComponent: function() { | |
37 | let me = this; | |
38 | ||
2df1316d | 39 | me.url = `/nodes/${Proxmox.NodeName}/pbs/${me.remote}/timer`; |
d944805a SI |
40 | me.callParent(); |
41 | }, | |
42 | }); | |
43 | ||
d944805a SI |
44 | Ext.define('pmg-pbs-config', { |
45 | extend: 'Ext.data.Model', | |
46 | fields: ['remote', 'server', 'datastore', 'username', 'disabled'], | |
47 | proxy: { | |
48 | type: 'proxmox', | |
49 | url: '/api2/json/config/pbs', | |
50 | }, | |
51 | idProperty: 'remote', | |
52 | }); | |
53 | ||
54 | Ext.define('PMG.PBSConfigGrid', { | |
55 | extend: 'Ext.grid.GridPanel', | |
56 | xtype: 'pmgPBSConfigGrid', | |
57 | ||
58 | controller: { | |
59 | xclass: 'Ext.app.ViewController', | |
60 | ||
61 | run_editor: function() { | |
62 | let me = this; | |
63 | let view = me.getView(); | |
64 | let rec = view.getSelection()[0]; | |
65 | if (!rec) { | |
66 | return; | |
67 | } | |
68 | ||
69 | let win = Ext.createWidget('pmgPBSEdit', { | |
70 | remoteId: rec.data.remote, | |
71 | }); | |
72 | win.on('destroy', me.reload, me); | |
73 | win.load(); | |
74 | win.show(); | |
75 | }, | |
76 | ||
77 | newRemote: function() { | |
78 | let me = this; | |
79 | let win = Ext.createWidget('pmgPBSEdit', {}); | |
80 | win.on('destroy', me.reload, me); | |
81 | win.show(); | |
82 | }, | |
83 | ||
d944805a SI |
84 | reload: function() { |
85 | let me = this; | |
86 | let view = me.getView(); | |
87 | view.getStore().load(); | |
88 | view.fireEvent('load', view); | |
89 | }, | |
90 | ||
91 | createSchedule: function() { | |
92 | let me = this; | |
93 | let view = me.getView(); | |
94 | let rec = view.getSelection()[0]; | |
95 | let remotename = rec.data.remote; | |
96 | let win = Ext.createWidget('pmgPBSScheduleEdit', { | |
97 | remote: remotename, | |
98 | }); | |
99 | win.on('destroy', me.reload, me); | |
100 | win.show(); | |
101 | }, | |
102 | ||
103 | init: function(view) { | |
104 | let me = this; | |
105 | Proxmox.Utils.monStoreErrors(view, view.getStore(), true); | |
106 | }, | |
d944805a SI |
107 | }, |
108 | ||
109 | store: { | |
110 | model: 'pmg-pbs-config', | |
111 | sorters: [{ | |
112 | property: 'remote', | |
113 | order: 'DESC', | |
114 | }], | |
115 | }, | |
116 | ||
117 | tbar: [ | |
53dea017 TL |
118 | { |
119 | text: gettext('Add Remote'), | |
120 | handler: 'newRemote', | |
121 | }, | |
122 | '-', | |
d944805a SI |
123 | { |
124 | xtype: 'proxmoxButton', | |
125 | text: gettext('Edit'), | |
126 | disabled: true, | |
127 | handler: 'run_editor', | |
128 | }, | |
d944805a SI |
129 | { |
130 | xtype: 'proxmoxStdRemoveButton', | |
131 | baseurl: '/config/pbs', | |
132 | callback: 'reload', | |
133 | }, | |
53dea017 | 134 | '-', |
d944805a SI |
135 | { |
136 | xtype: 'proxmoxButton', | |
53dea017 | 137 | text: gettext('Set Schedule'), |
d944805a SI |
138 | enableFn: function(rec) { |
139 | return !rec.data.disable; | |
140 | }, | |
141 | disabled: true, | |
142 | handler: 'createSchedule', | |
143 | }, | |
144 | { | |
145 | xtype: 'proxmoxStdRemoveButton', | |
146 | baseurl: '/nodes/' + Proxmox.NodeName + '/pbs/', | |
147 | callback: 'reload', | |
148 | text: gettext('Remove Schedule'), | |
149 | confirmMsg: function(rec) { | |
150 | let me = this; | |
2df1316d TL |
151 | let remote = rec.getId(); |
152 | return Ext.String.format(gettext('Are you sure you want to remove the schedule for {0}'), `'${remote}'`); | |
d944805a SI |
153 | }, |
154 | getUrl: function(rec) { | |
155 | let me = this; | |
156 | return me.baseurl + '/' + rec.getId() + '/timer'; | |
157 | }, | |
158 | }, | |
159 | ], | |
160 | ||
161 | listeners: { | |
162 | itemdblclick: 'run_editor', | |
163 | activate: 'reload', | |
164 | }, | |
165 | ||
166 | columns: [ | |
167 | { | |
2df1316d | 168 | header: gettext('Remote'), |
d944805a SI |
169 | sortable: true, |
170 | dataIndex: 'remote', | |
171 | flex: 2, | |
172 | }, | |
173 | { | |
174 | header: gettext('Server'), | |
175 | sortable: true, | |
176 | dataIndex: 'server', | |
177 | flex: 2, | |
178 | }, | |
179 | { | |
180 | header: gettext('Datastore'), | |
181 | sortable: true, | |
182 | dataIndex: 'datastore', | |
183 | flex: 1, | |
184 | }, | |
185 | { | |
186 | header: gettext('User ID'), | |
187 | sortable: true, | |
188 | dataIndex: 'username', | |
189 | flex: 1, | |
190 | }, | |
191 | { | |
192 | header: gettext('Encryption'), | |
193 | width: 80, | |
194 | sortable: true, | |
1415738c | 195 | hidden: true, // for now |
d944805a SI |
196 | dataIndex: 'encryption-key', |
197 | renderer: Proxmox.Utils.format_boolean, | |
198 | }, | |
199 | { | |
200 | header: gettext('Enabled'), | |
201 | width: 80, | |
202 | sortable: true, | |
203 | dataIndex: 'disable', | |
204 | renderer: Proxmox.Utils.format_neg_boolean, | |
205 | }, | |
206 | ], | |
207 | ||
208 | }); |