AdminTools.window.Permissions = function (config) { config = config || {}; if (!config.id) { config.id = 'admintools-window-permissions'; } Ext.applyIf(config, { url: adminToolsSettings.config.connector_url, action: config.action, title: _('admintools_permissions'), width: 500, autoHeight: true, //stateful: true, modal: true, maximizable: false, fields: [{ xtype: 'hidden', name: 'id', id: config.id + '-id' }, { xtype: 'hidden', name: 'rid', id: config.id + '-rid' }, { xtype: 'admintools-combo-principals', fieldLabel: _('admintools_principal_name'), name: 'principal', id: config.id + '-principal', anchor: '100%', allowBlank: false, listeners: {'select': {fn: function() { var pricipalId = Ext.getCmp('admintools-window-permissions-principal').getValue(); if (pricipalId.indexOf('grp') == 0) { Ext.getCmp('admintools-window-permissions-priority').enable(); } else { Ext.getCmp('admintools-window-permissions-priority').disable(); } }, scope: this}} }, { xtype: 'textfield', fieldLabel: _('admintools_priority'), name: 'priority', id: config.id + '-priority', disabled: true, anchor: '100%', allowBlank: true }, { xtype: 'radiogroup', fieldLabel: _('admintools_permissions_choose_action'), columns: 2, items: [{ id: config.id + '-status-a', name: 'status', boxLabel: _('admintools_permissions_allow'), xtype: 'radio', value: 1, inputValue: 1, checked: config.status },{ id: config.id + '-status-d', name: 'status', boxLabel: _('admintools_permissions_deny'), xtype: 'radio', value: 0, inputValue: 0, checked: !config.status }] }] }); AdminTools.window.Permissions.superclass.constructor.call(this, config); this.on('render', function() { var principal = Ext.getCmp('admintools-window-permissions-principal'), pricipalId = principal.getValue(); principal.focus(false, 300); if (pricipalId.indexOf('grp') == 0) Ext.getCmp('admintools-window-permissions-priority').enable(); },this); }; Ext.extend(AdminTools.window.Permissions, MODx.Window); Ext.reg('admintools-window-permissions', AdminTools.window.Permissions); /**************************************************************/ AdminTools.grid.Permissions = function (config) { config = config || {}; if (!config.id) { config.id = 'admintools-table-permissions'; } Ext.applyIf(config, { url: adminToolsSettings.config.connector_url, baseParams: { action: 'mgr/permissions/getlist', resource: config.resource }, //sm: new Ext.grid.CheckboxSelectionModel(), viewConfig: { forceFit: true, enableRowBody: true, autoFill: true, showPreview: true, scrollOffset: 0 }, fields: ['id','principal_name','principal_type','priority','status','actions'], columns: [{ header: 'ID', dataIndex: 'id', width: 50, hidden: true }, { header: _('admintools_principal_type'), dataIndex: 'principal_type', sortable: false, renderer: AdminTools.utils.renderPrincipalType, fixed: true, width: 30 }, { header: _('admintools_principal_name'), dataIndex: 'principal_name', sortable: false, width: 150 }, { header: _('admintools_priority'), dataIndex: 'priority', sortable: false, width: 80 }, { header: _('admintools_permissions_status_column'), dataIndex: 'status', renderer: AdminTools.utils.renderBoolean, sortable: false, width: 100 }, { header: '', dataIndex: 'actions', renderer: AdminTools.utils.renderActions, sortable: false, width: 70, fixed: true, id: 'actions' }], tbar: [{ text: ' ' + _('admintools_add_permission'), handler: this.addPermission, scope: this }], listeners: { rowDblClick: function (grid, rowIndex, e) { var row = grid.store.getAt(rowIndex); this.updatePermission(grid,e,row); } }, height: '100%', paging: true, pageSize: 10, remoteSort: true }); AdminTools.grid.Permissions.superclass.constructor.call(this, config); }; Ext.extend(AdminTools.grid.Permissions, 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); }, addPermission: function (btn, e) { var w = MODx.load({ xtype: 'admintools-window-permissions', action: 'mgr/permissions/add', status: true, listeners: { success: { fn: function () { this.refresh(); }, scope: this }, hide: { fn: function () { setTimeout(function () { w.destroy() }, 200); } } } }); w.reset(); w.setValues({principal:'all-0', priority:1, rid:MODx.request.id}); w.show(e.target); }, updatePermission: function(o,e,row) { if (typeof(row) != 'undefined') { this.menu.record = row.data; } else if (!this.menu.record) { return false; } var id = this.menu.record.id; MODx.Ajax.request({ url: this.config.url, params: { action: 'mgr/permissions/get', id: id }, listeners: { success: { fn: function (r) { var w = MODx.load({ xtype: 'admintools-window-permissions', action: 'mgr/permissions/update', record: r, status: r.object.status, listeners: { success: { fn: function () { this.refresh(); }, scope: this }, hide: { fn: function () { setTimeout(function () { w.destroy() }, 200); } } } }); w.reset(); w.setValues(r.object); w.show(e.target); }, scope: this } } }); }, removePermission: function () { var ids = this._getSelectedIds(); if (!ids.length) { return false; } MODx.msg.confirm({ title: _('admintools_permission_remove'), text: _('admintools_permission_remove_confirm'), url: this.config.url, params: { action: 'mgr/permissions/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('id', row.id); 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]['id']); } return ids; } }); Ext.reg('admintools-grid-permissions', AdminTools.grid.Permissions); /** ******************************************** **/ AdminTools.combo.Principals = function(config) { config = config || {}; Ext.applyIf(config,{ name: 'principal', hiddenName: 'principal', pageSize: 20, emptyText: _('admintools_choose_principal'), fields: ['id','name','class','icon'], url: adminToolsSettings.config.connector_url, baseParams: { action: 'mgr/permissions/getprincipals' }, typeAhead: true, autoSelect: false, editable: true, tpl: new Ext.XTemplate('
{icon}{name}
') }); AdminTools.combo.Principals.superclass.constructor.call(this,config); }; Ext.extend(AdminTools.combo.Principals,MODx.combo.ComboBox); Ext.reg('admintools-combo-principals',AdminTools.combo.Principals);