pmg-gui/js/QuarantineView.js
Dominik Csapak 033228c06d let the default token be chosen by the view
instead of the application, since we want a different default
token for the admin view and the quarantine view

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
2017-08-18 16:26:57 +02:00

241 lines
5.4 KiB
JavaScript

Ext.define('PMG.QuarantineNavigationTree', {
extend: 'Ext.list.Tree',
xtype: 'quarantinenavigationtree',
select: function(path) {
var me = this;
var item = me.getStore().findRecord('path', path, 0, false, true, true);
me.setSelection(item);
},
store: {
xcalss: 'Ext.data.TreeStore',
root: {
expanded: true,
children: [
{
text: gettext('Spam Quarantine'),
iconCls: 'fa fa-cubes',
path: 'pmgSpamQuarantine',
expanded: true,
children: [
{
text: gettext('Whitelist'),
//iconCls: 'fa fa-cubes',
path: 'pmgUserWhitelist',
leaf: true,
},
{
text: gettext('Blacklist'),
//iconCls: 'fa fa-cubes',
path: 'pmgUserBlacklist',
leaf: true,
}
]
}
]
}
},
animation: false,
expanderOnly: true,
expanderFirst: false,
ui: 'nav'
});
Ext.define('PMG.QuarantineView', {
extend: 'Ext.container.Container',
xtype: 'quarantineview',
title: 'Proxmox Mail Gateway Quarantine',
controller: {
xclass: 'Ext.app.ViewController',
routes: {
':path:subpath': {
action: 'changePath',
before: 'beforeChangePath',
conditions : {
':path' : '(?:([%a-zA-Z0-9\-\_\s,]+))',
':subpath' : '(?:(?::)([%a-zA-Z0-9\-\_\s,]+))?'
}
}
},
beforeChangePath: function(path, subpath, action) {
var me = this;
if (!Ext.ClassManager.getByAlias('widget.'+ path)) {
console.warn('xtype "'+path+'" not found');
action.stop();
return;
}
var lastpanel = me.lookupReference('contentpanel').getLayout().getActiveItem();
if (lastpanel && lastpanel.xtype === path) {
// we have the right component already,
// we just need to select the correct tab
// default to the first
subpath = subpath || 0;
if (lastpanel.getActiveTab) {
// we assume lastpanel is a tabpanel
if (lastpanel.getActiveTab().getItemId() === subpath) {
// we are already there
} else {
// set the active tab
lastpanel.setActiveTab(subpath);
}
}
action.stop();
return;
}
action.resume();
},
changePath: function(path,subpath) {
var me = this;
var contentpanel = me.lookupReference('contentpanel');
var lastpanel = contentpanel.getLayout().getActiveItem();
var obj = contentpanel.add({ xtype: path });
var treelist = me.lookupReference('navtree');
treelist.suspendEvents();
treelist.select(path);
treelist.resumeEvents();
if (Ext.isFunction(obj.setActiveTab)) {
obj.setActiveTab(subpath || 0);
obj.addListener('tabchange', function(tabpanel, newc, oldc) {
var newpath = path;
// only add the subpath part for the
// non-default tabs
if (tabpanel.items.findIndex('id', newc.id) !== 0) {
newpath += ":" + newc.getItemId();
}
me.redirectTo(newpath);
});
}
contentpanel.setActiveItem(obj);
if (lastpanel) {
contentpanel.remove(lastpanel, { destroy: true });
}
},
logout: function() {
var me = this;
Proxmox.Utils.authClear();
me.getView().destroy();
Ext.create({ xtype: 'loginview'});
},
navigate: function(treelist, item) {
this.redirectTo(item.get('path'));
},
execQuarantineAction: function(qa) {
Proxmox.Utils.API2Request({
url: '/api2/extjs/quarantine/content',
params: {
id: qa.cselect,
action: qa.action
},
method: 'POST',
success: function(response) {
Ext.Msg.alert(gettext('Info'), "Action " + qa.action + ' ' +
qa.cselect + ' successful');
},
failure: function(response, opts) {
Ext.Msg.alert(gettext('Error'), response.htmlStatus);
}
});
},
init: function(view) {
var me = this;
// load username
me.lookupReference('usernameinfo').update({username:Proxmox.UserName});
// show login on requestexception
// fixme: what about other errors
Ext.Ajax.on('requestexception', function(conn, response, options) {
if (response.status == 401) { // auth failure
me.logout();
}
});
var qa = PMG.Utils.extractQuarantineAction();
if (qa) {
var token = 'pmgSpamQuarantine';
if (qa.action === 'blacklist') { token = 'pmgUserBlacklist'; }
if (qa.action === 'whitelist') { token = 'pmgUserWhitelist'; }
this.redirectTo(token, true);
me.execQuarantineAction(qa);
} else {
// select treeitem and load page from url fragment
var token = Ext.util.History.getToken() || 'pmgSpamQuarantine';
this.redirectTo(token, true);
}
}
},
plugins: 'viewport',
layout: 'border',
items: [
{
region: 'north',
xtype: 'container',
layout: {
type: 'hbox',
align: 'middle'
},
margin: '4 5 4 5',
items: [
{
xtype: 'proxmoxlogo'
},
{
xtype: 'versioninfo'
},
{
flex: 1
},
{
baseCls: 'x-plain',
reference: 'usernameinfo',
padding: '0 5',
tpl: Ext.String.format(gettext("You are logged in as '{0}'"), '{username}')
}
]
},
{
xtype: 'quarantinenavigationtree',
reference: 'navtree',
minWidth: 177,
border: false,
region: 'west',
// we have to define it here until extjs 6.2
// because of a bug where a viewcontroller does not detect
// the selectionchange event of a treelist
listeners: {
selectionchange: 'navigate'
}
},
{
xtype: 'panel',
layout: 'card',
region: 'center',
border: false,
reference: 'contentpanel',
}
]
});