AdminTools.window.lastEditedElements = function (config) {
config = config || {};
if (!config.id) {
config.id = 'admintools-led-window';
}
Ext.applyIf(config, {
url: adminToolsSettings.config.connector_url,
title: _('admintools_last_edited'),
width: 1000,
maxHeight: 800,
height: 700,
//autoHeight: true,
stateful: true,
//layout: 'fit',
modal: true,
maximizable: false,
items: [{
xtype: 'admintools-led-elements-grid'
}],
buttons: [{
text: _('admintools_close'),
//id: 'admintools-led-window-close-btn',
handler: function(){this.hide();},
scope: this
}]
});
AdminTools.window.lastEditedElements.superclass.constructor.call(this, config);
/*this.on('show',function() {
this.center();
},this);*/
};
Ext.extend(AdminTools.window.lastEditedElements, MODx.Window);
Ext.reg('admintools-led-window', AdminTools.window.lastEditedElements);
/**************************************************************/
AdminTools.grid.lastEditedElements = function (config) {
config = config || {};
if (!config.id) {
config.id = 'admintools-led-elements-table';
}
Ext.applyIf(config, {
url: adminToolsSettings.config.connector_url,
baseParams: {
action: 'mgr/lastedited/getlist'
},
primaryKey: 'key',
//sm: new Ext.grid.CheckboxSelectionModel(),
viewConfig: {
forceFit: true,
enableRowBody: true,
autoFill: true,
showPreview: true,
scrollOffset: 0
},
fields: ['key','classKey','name','item','occurred','username','actions'],
columns: [{
header: 'Key',
dataIndex: 'key',
width: 50,
hidden: true
}, {
header: 'ID',
dataIndex: 'item',
fixed: true,
width: 50
}, {
header: _('admintools_type'),
dataIndex: 'classKey',
sortable: true,
width: 70
}, {
header: _('admintools_name'),
dataIndex: 'name',
sortable: false,
width: 200
}, {
header: _('admintools_date'),
dataIndex: 'occurred',
sortable: true,
width: 80
}, {
header: _('admintools_user'),
dataIndex: 'username',
sortable: true,
width: 100
}, {
header: '',
dataIndex: 'actions',
renderer: AdminTools.utils.renderActions,
sortable: false,
width: 40,
fixed: true,
id: 'actions'
}],
tbar: [{
xtype: 'modx-combo-user',
id: 'log-filter-user-id',
//fieldLabel: _('user'),
emptyText: _('user'),
width: 200,
listeners: {
'select': {fn: this._doSearch, scope: this}
}
},{
xtype: 'datefield',
emptyText: _('date_start'),
id: 'log-filter-datestart',
allowBlank: true,
format: 'd.m.Y',
startDay: 1,
width: 140,
listeners: {
'select': {fn: this._doSearch, scope: this},
'render': {
fn: function (tf) {
tf.getEl().addKeyListener(Ext.EventObject.ENTER, function () {
this._doSearch();
}, this);
}, scope: this
}
}
},{
xtype: 'datefield',
emptyText: _('date_end'),
id: 'log-filter-dateend',
format: 'd.m.Y',
startDay: 1,
allowBlank: true,
width: 140,
listeners: {
'select': {fn: this._doSearch, scope: this},
'render': {
fn: function (tf) {
tf.getEl().addKeyListener(Ext.EventObject.ENTER, function () {
this._doSearch();
}, this);
}, scope: this
}
}
}, {
xtype: 'textfield',
name: 'query',
width: 200,
id: 'log-filter-query-field',
emptyText: _('admintools_element_name'),
listeners: {
'render': {
fn: function (tf) {
tf.getEl().addKeyListener(Ext.EventObject.ENTER, function () {
this._doSearch();
}, this);
}, scope: this
}
}
}, {
xtype: 'button',
id: config.id + '-search-clear',
text: '',
listeners: {
click: {fn: this._clearSearch, scope: this}
}
}],
listeners: {
rowDblClick: function (grid, rowIndex, e) {
var row = grid.store.getAt(rowIndex);
this.openElement(grid,e,row);
}
},
height: '100%',
paging: true,
pageSize: 10,
remoteSort: true
});
AdminTools.grid.lastEditedElements.superclass.constructor.call(this, config);
};
Ext.extend(AdminTools.grid.lastEditedElements, MODx.grid.Grid, {
getMenu: function (grid, rowIndex) {
var ids = this._getSelectedIds();
var row = grid.getStore().getAt(rowIndex);
var menu = AdminTools.utils.getMenu(row.data['actions'], this, ids);
this.addContextMenuItem(menu);
},
openElement: function(o,e,row) {
//row = row || this.getSelectionModel().getSelected();
if (typeof(row) != 'undefined') {
this.menu.record = row.data;
}
else if (!this.menu.record) {
return false;
}
var grid = this,
type = this.menu.record.classKey.toLowerCase().substring(3);
if (type == 'templatevar') type = 'tv';
MODx.Ajax.request({
url: this.config.url,
params: {
action: 'mgr/lastedited/verify',
classKey: this.menu.record.classKey,
id: this.menu.record.item
},
listeners: {
success: {
fn: function(r) {
MODx.loadPage('element/'+ type +'/update', 'id='+ this.menu.record.item);
}
,scope: this
}
,failure: {
fn: function(r) {
var oldFn = MODx.form.Handler.showError;
MODx.form.Handler.showError = function(message) {
if (message === '') {
MODx.msg.hide();
} else {
Ext.MessageBox.show({
title: _('error'),
msg: message,
buttons: Ext.MessageBox.OK,
fn: function(btn) {
MODx.form.Handler.showError = oldFn;
}
});
}
};
}
,scope: this
}
}
});
},
removeItem: function () {
var ids = this._getSelectedIds();
if (!ids.length) {
return false;
}
MODx.msg.confirm({
title: _('admintools_item_remove'),
text: _('admintools_item_remove_confirm'),
url: this.config.url,
params: {
action: 'mgr/lastedited/remove',
ids: Ext.util.JSON.encode(ids)
},
listeners: {
success: {
fn: function (r) {
this.refresh();
}, scope: this
}
}
});
return true;
},
onClick: function (e) {
var elem = e.getTarget();
if (elem.nodeName == 'BUTTON') {
var row = this.getSelectionModel().getSelected();
if (typeof(row) != 'undefined') {
var action = elem.getAttribute('action');
if (action == 'showMenu') {
var ri = this.getStore().find('eid', row.data.eid);
return this._showMenu(this, ri, e);
}
else if (typeof this[action] === 'function') {
this.menu.record = row.data;
return this[action](this, e);
}
}
}
return this.processEvent('click', e);
},
_getSelectedIds: function () {
var ids = [];
var selected = this.getSelectionModel().getSelections();
for (var i in selected) {
if (!selected.hasOwnProperty(i)) {
continue;
}
ids.push(selected[i]['data']['key']);
}
return ids;
},
_doSearch: function (tf, nv, ov) {
this.getStore().baseParams.user = Ext.getCmp('log-filter-user-id').getValue();
this.getStore().baseParams.query = Ext.getCmp('log-filter-query-field').getValue();
this.getStore().baseParams.datestart = Ext.getCmp('log-filter-datestart').getValue();
this.getStore().baseParams.dateend = Ext.getCmp('log-filter-dateend').getValue();
//this.getStore().baseParams.query = tf.getValue();
this.getBottomToolbar().changePage(1);
//this.refresh();
},
_clearSearch: function (btn, e) {
this.getStore().baseParams.query = '';
this.getStore().baseParams.user = '';
this.getStore().baseParams.datestart = '';
this.getStore().baseParams.dateend = '';
Ext.getCmp('log-filter-user-id').setValue('');
Ext.getCmp('log-filter-query-field').setValue('');
Ext.getCmp('log-filter-datestart').setValue('');
Ext.getCmp('log-filter-dateend').setValue('');
this.getBottomToolbar().changePage(1);
//this.refresh();
}
});
Ext.reg('admintools-led-elements-grid', AdminTools.grid.lastEditedElements);
/** ******************************** **/
Ext.onReady(function () {
var tree = Ext.getCmp('modx-tree-element'),
tbar = tree.topToolbar;
tree.showLastEditedElements = function(){
var w = MODx.load({
xtype: 'admintools-led-window',
id: Ext.id(),
//closeAction: 'close',
listeners: {
hide: {fn: function () {setTimeout(function(){w.destroy()},200);}}
}
});
w.show(Ext.EventObject.target,function() {
Ext.isSafari ? w.setPosition(null,30) : w.setPosition(null,60);
},this);
};
var arr = [];
arr.push({xtype:'tbfill'});
arr.push({
cls: 'tree-last-edited',
tooltip: {text: _('admintools_last_edited')},
scope: tree,
handler: function() {
tree.showLastEditedElements();
}
});
tbar.addButton(arr);
tbar.doLayout();
});