/** * Loads a grid of groups for a user * * @class MODx.grid.UserGroups * @extends MODx.grid.Grid * @param {Object} config An object of options. * @xtype modx-grid-user-groups */ MODx.grid.UserGroups = function(config) { config = config || {}; this.exp = new Ext.grid.RowExpander({ tpl : new Ext.Template( '
{user_group_desc}
' ) }); Ext.applyIf(config,{ title: '' ,id: 'modx-grid-user-groups' ,url: MODx.config.connector_url ,baseParams: { action: 'security/group/getlist' } ,fields: ['usergroup','name','member','role','rolename','primary_group','rank','user_group_desc'] ,cls: 'modx-grid modx-grid-draggable' ,columns: [this.exp, { header: _('user_group') ,dataIndex: 'name' ,width: 175 },{ header: _('role') ,dataIndex: 'rolename' ,width: 175 },{ header: _('rank') ,dataIndex: 'rank' ,width: 80 ,editor: { xtype: 'numberfield', allowBlank: false, allowNegative: false } }] ,plugins: [new Ext.ux.dd.GridDragDropRowOrder({ copy: false ,scrollable: true ,targetCfg: {} ,listeners: { 'afterrowmove': {fn:this.onAfterRowMove,scope:this} ,'beforerowmove': {fn:this.onBeforeRowMove,scope:this} } }), this.exp] ,tbar: [{ text: _('user_group_user_add') ,cls:'primary-button' ,handler: this.addGroup }] }); MODx.grid.UserGroups.superclass.constructor.call(this,config); this.userRecord = new Ext.data.Record.create(['usergroup','name','member','role','rolename','primary_group']); this.addEvents('beforeUpdateRole','afterUpdateRole','beforeAddGroup','afterAddGroup','beforeReorderGroup','afterReorderGroup'); }; Ext.extend(MODx.grid.UserGroups,MODx.grid.LocalGrid,{ onBeforeRowMove: function(dt,sri,ri,sels) { if (!this.fireEvent('beforeReorderGroup',{dt:dt,sri:sri,ri:ri,sels:sels})) { return false; } return true; } ,onAfterRowMove: function(dt,sri,ri,sels) { var s = this.getStore(); var sourceRec = s.getAt(sri); var belowRec = s.getAt(ri); var total = s.getTotalCount(); sourceRec.set('rank',sri); sourceRec.commit(); /* get all rows below ri, and up their rank by 1 */ var brec; for (var x=(ri-1);x