modx.grid.user.group.js 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. /**
  2. * Loads a grid of groups for a user
  3. *
  4. * @class MODx.grid.UserGroups
  5. * @extends MODx.grid.Grid
  6. * @param {Object} config An object of options.
  7. * @xtype modx-grid-user-groups
  8. */
  9. MODx.grid.UserGroups = function(config) {
  10. config = config || {};
  11. this.exp = new Ext.grid.RowExpander({
  12. tpl : new Ext.Template(
  13. '<p class="desc">{user_group_desc}</p>'
  14. )
  15. });
  16. Ext.applyIf(config,{
  17. title: ''
  18. ,id: 'modx-grid-user-groups'
  19. ,url: MODx.config.connector_url
  20. ,baseParams: {
  21. action: 'security/group/getlist'
  22. }
  23. ,fields: ['usergroup','name','member','role','rolename','primary_group','rank','user_group_desc']
  24. ,cls: 'modx-grid modx-grid-draggable'
  25. ,columns: [this.exp,
  26. {
  27. header: _('user_group')
  28. ,dataIndex: 'name'
  29. ,width: 175
  30. },{
  31. header: _('role')
  32. ,dataIndex: 'rolename'
  33. ,width: 175
  34. },{
  35. header: _('rank')
  36. ,dataIndex: 'rank'
  37. ,width: 80
  38. ,editor: { xtype: 'numberfield', allowBlank: false, allowNegative: false }
  39. }]
  40. ,plugins: [new Ext.ux.dd.GridDragDropRowOrder({
  41. copy: false
  42. ,scrollable: true
  43. ,targetCfg: {}
  44. ,listeners: {
  45. 'afterrowmove': {fn:this.onAfterRowMove,scope:this}
  46. ,'beforerowmove': {fn:this.onBeforeRowMove,scope:this}
  47. }
  48. }),
  49. this.exp]
  50. ,tbar: [{
  51. text: _('user_group_user_add')
  52. ,cls:'primary-button'
  53. ,handler: this.addGroup
  54. }]
  55. });
  56. MODx.grid.UserGroups.superclass.constructor.call(this,config);
  57. this.userRecord = new Ext.data.Record.create(['usergroup','name','member','role','rolename','primary_group']);
  58. this.addEvents('beforeUpdateRole','afterUpdateRole','beforeAddGroup','afterAddGroup','beforeReorderGroup','afterReorderGroup');
  59. };
  60. Ext.extend(MODx.grid.UserGroups,MODx.grid.LocalGrid,{
  61. onBeforeRowMove: function(dt,sri,ri,sels) {
  62. if (!this.fireEvent('beforeReorderGroup',{dt:dt,sri:sri,ri:ri,sels:sels})) {
  63. return false;
  64. }
  65. return true;
  66. }
  67. ,onAfterRowMove: function(dt,sri,ri,sels) {
  68. var s = this.getStore();
  69. var sourceRec = s.getAt(sri);
  70. var belowRec = s.getAt(ri);
  71. var total = s.getTotalCount();
  72. sourceRec.set('rank',sri);
  73. sourceRec.commit();
  74. /* get all rows below ri, and up their rank by 1 */
  75. var brec;
  76. for (var x=(ri-1);x<total;x++) {
  77. brec = s.getAt(x);
  78. if (brec) {
  79. brec.set('rank',x);
  80. brec.commit();
  81. }
  82. }
  83. this.fireEvent('afterReorderGroup');
  84. return true;
  85. }
  86. ,updateRole: function(btn,e) {
  87. var r = this.menu.record;
  88. r.user = this.config.user;
  89. this.fireEvent('beforeUpdateRole',r);
  90. this.loadWindow(btn,e,{
  91. xtype: 'modx-window-user-groups-role-update'
  92. ,record: r
  93. ,listeners: {
  94. 'success': {fn:function(r) {
  95. var s = this.getStore();
  96. var rec = s.getAt(this.menu.recordIndex);
  97. rec.set('role',r.role);
  98. rec.set('rolename',r.rolename);
  99. this.fireEvent('afterUpdateRole',r);
  100. },scope:this}
  101. }
  102. });
  103. }
  104. ,addGroup: function(btn,e) {
  105. var r = {member:this.config.user};
  106. this.fireEvent('beforeUpdateRole',r);
  107. this.loadWindow(btn,e,{
  108. xtype: 'modx-window-user-addgroup'
  109. ,record: r
  110. ,listeners: {
  111. 'success': {fn:function(r) {
  112. var s = this.getStore();
  113. var rec = new this.userRecord(r);
  114. s.add(rec);
  115. this.fireEvent('afterAddGroup',r);
  116. },scope:this}
  117. }
  118. });
  119. }
  120. ,_showMenu: function(g,ri,e) {
  121. e.stopEvent();
  122. e.preventDefault();
  123. var m = this.menu;
  124. m.recordIndex = ri;
  125. m.record = this.getStore().getAt(ri).data;
  126. if (!this.getSelectionModel().isSelected(ri)) {
  127. this.getSelectionModel().selectRow(ri);
  128. }
  129. m.removeAll();
  130. m.add({
  131. text: _('user_role_update')
  132. ,handler: this.updateRole
  133. ,scope: this
  134. },'-',{
  135. text: _('user_group_user_remove')
  136. ,handler: this.remove.createDelegate(this,[{text: _('user_group_remove_confirm')}])
  137. ,scope: this
  138. });
  139. m.showAt(e.xy);
  140. }
  141. });
  142. Ext.reg('modx-grid-user-groups',MODx.grid.UserGroups);
  143. MODx.window.AddGroupToUser = function(config) {
  144. config = config || {};
  145. Ext.applyIf(config,{
  146. title: _('user_group_user_add')
  147. // ,height: 150
  148. // ,width: 375
  149. ,url: MODx.config.connector_url
  150. ,action: 'security/group/user/create'
  151. ,fields: [{
  152. fieldLabel: _('user_group')
  153. ,name: 'usergroup'
  154. ,hiddenName: 'usergroup'
  155. ,id: 'modx-agu-usergroup'
  156. ,xtype: 'modx-combo-usergroup'
  157. ,editable: false
  158. ,allowBlank: false
  159. ,anchor: '100%'
  160. },{
  161. fieldLabel: _('role')
  162. ,name: 'role'
  163. ,hiddenName: 'role'
  164. ,id: 'modx-agu-role'
  165. ,xtype: 'modx-combo-role'
  166. ,allowBlank: false
  167. ,anchor: '100%'
  168. },{
  169. name: 'member'
  170. ,xtype: 'hidden'
  171. }]
  172. });
  173. MODx.window.AddGroupToUser.superclass.constructor.call(this,config);
  174. };
  175. Ext.extend(MODx.window.AddGroupToUser,MODx.Window,{
  176. submit: function() {
  177. var r = this.fp.getForm().getValues();
  178. // Typecast user group ID (for strict match search)
  179. r.usergroup = ~~r.usergroup;
  180. var g = Ext.getCmp('modx-grid-user-groups');
  181. var s = g.getStore();
  182. var ae = s.findExact('usergroup', r.usergroup);
  183. if (ae != -1) {
  184. MODx.msg.alert(_('error'), _('user_err_ae_group'));
  185. return false;
  186. }
  187. r.rolename = Ext.getCmp('modx-agu-role').getRawValue();
  188. r.name = Ext.getCmp('modx-agu-usergroup').getRawValue();
  189. // Assume existing records have a correct rank
  190. r.rank = s.getCount();
  191. this.fireEvent('success', r);
  192. this.hide();
  193. return false;
  194. }
  195. });
  196. Ext.reg('modx-window-user-addgroup',MODx.window.AddGroupToUser);
  197. MODx.window.UpdateUserGroupsRole = function(config) {
  198. config = config || {};
  199. Ext.applyIf(config,{
  200. id: 'modx-window-user-groups-role-update'
  201. ,title: _('user_group_user_update_role')
  202. ,url: MODx.config.connector_url
  203. ,action: 'security/group/user/update'
  204. ,fields: [{
  205. xtype: 'hidden'
  206. ,name: 'user'
  207. ,value: config.user
  208. },{
  209. xtype: 'modx-combo-role'
  210. ,id: 'modx-uugrs-role'
  211. ,name: 'role'
  212. ,fieldLabel: _('role')
  213. ,anchor: '100%'
  214. }]
  215. });
  216. MODx.window.UpdateUserGroupsRole.superclass.constructor.call(this,config);
  217. };
  218. Ext.extend(MODx.window.UpdateUserGroupsRole,MODx.Window,{
  219. submit: function() {
  220. var r = this.fp.getForm().getValues();
  221. r.rolename = Ext.getCmp('modx-uugrs-role').getRawValue();
  222. this.fireEvent('success',r);
  223. this.hide();
  224. return false;
  225. }
  226. });
  227. Ext.reg('modx-window-user-groups-role-update',MODx.window.UpdateUserGroupsRole);