permissions.js 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314
  1. AdminTools.window.Permissions = function (config) {
  2. config = config || {};
  3. if (!config.id) {
  4. config.id = 'admintools-window-permissions';
  5. }
  6. Ext.applyIf(config, {
  7. url: adminToolsSettings.config.connector_url,
  8. action: config.action,
  9. title: _('admintools_permissions'),
  10. width: 500,
  11. autoHeight: true,
  12. //stateful: true,
  13. modal: true,
  14. maximizable: false,
  15. fields: [{
  16. xtype: 'hidden',
  17. name: 'id',
  18. id: config.id + '-id'
  19. }, {
  20. xtype: 'hidden',
  21. name: 'rid',
  22. id: config.id + '-rid'
  23. }, {
  24. xtype: 'admintools-combo-principals',
  25. fieldLabel: _('admintools_principal_name'),
  26. name: 'principal',
  27. id: config.id + '-principal',
  28. anchor: '100%',
  29. allowBlank: false,
  30. listeners: {'select': {fn: function() {
  31. var pricipalId = Ext.getCmp('admintools-window-permissions-principal').getValue();
  32. if (pricipalId.indexOf('grp') == 0) {
  33. Ext.getCmp('admintools-window-permissions-priority').enable();
  34. } else {
  35. Ext.getCmp('admintools-window-permissions-priority').disable();
  36. }
  37. }, scope: this}}
  38. }, {
  39. xtype: 'textfield',
  40. fieldLabel: _('admintools_priority'),
  41. name: 'priority',
  42. id: config.id + '-priority',
  43. disabled: true,
  44. anchor: '100%',
  45. allowBlank: true
  46. }, {
  47. xtype: 'radiogroup',
  48. fieldLabel: _('admintools_permissions_choose_action'),
  49. columns: 2,
  50. items: [{
  51. id: config.id + '-status-a',
  52. name: 'status',
  53. boxLabel: _('admintools_permissions_allow'),
  54. xtype: 'radio',
  55. value: 1,
  56. inputValue: 1,
  57. checked: config.status
  58. },{
  59. id: config.id + '-status-d',
  60. name: 'status',
  61. boxLabel: _('admintools_permissions_deny'),
  62. xtype: 'radio',
  63. value: 0,
  64. inputValue: 0,
  65. checked: !config.status
  66. }]
  67. }]
  68. });
  69. AdminTools.window.Permissions.superclass.constructor.call(this, config);
  70. this.on('render', function() {
  71. var principal = Ext.getCmp('admintools-window-permissions-principal'),
  72. pricipalId = principal.getValue();
  73. principal.focus(false, 300);
  74. if (pricipalId.indexOf('grp') == 0) Ext.getCmp('admintools-window-permissions-priority').enable();
  75. },this);
  76. };
  77. Ext.extend(AdminTools.window.Permissions, MODx.Window);
  78. Ext.reg('admintools-window-permissions', AdminTools.window.Permissions);
  79. /**************************************************************/
  80. AdminTools.grid.Permissions = function (config) {
  81. config = config || {};
  82. if (!config.id) {
  83. config.id = 'admintools-table-permissions';
  84. }
  85. Ext.applyIf(config, {
  86. url: adminToolsSettings.config.connector_url,
  87. baseParams: {
  88. action: 'mgr/permissions/getlist',
  89. resource: config.resource
  90. },
  91. //sm: new Ext.grid.CheckboxSelectionModel(),
  92. viewConfig: {
  93. forceFit: true,
  94. enableRowBody: true,
  95. autoFill: true,
  96. showPreview: true,
  97. scrollOffset: 0
  98. },
  99. fields: ['id','principal_name','principal_type','priority','status','actions'],
  100. columns: [{
  101. header: 'ID',
  102. dataIndex: 'id',
  103. width: 50,
  104. hidden: true
  105. }, {
  106. header: _('admintools_principal_type'),
  107. dataIndex: 'principal_type',
  108. sortable: false,
  109. renderer: AdminTools.utils.renderPrincipalType,
  110. fixed: true,
  111. width: 30
  112. }, {
  113. header: _('admintools_principal_name'),
  114. dataIndex: 'principal_name',
  115. sortable: false,
  116. width: 150
  117. }, {
  118. header: _('admintools_priority'),
  119. dataIndex: 'priority',
  120. sortable: false,
  121. width: 80
  122. }, {
  123. header: _('admintools_permissions_status_column'),
  124. dataIndex: 'status',
  125. renderer: AdminTools.utils.renderBoolean,
  126. sortable: false,
  127. width: 100
  128. }, {
  129. header: '<i class="icon icon-cog"></i>',
  130. dataIndex: 'actions',
  131. renderer: AdminTools.utils.renderActions,
  132. sortable: false,
  133. width: 70,
  134. fixed: true,
  135. id: 'actions'
  136. }],
  137. tbar: [{
  138. text: '<i class="icon icon-plus"></i>&nbsp;' + _('admintools_add_permission'),
  139. handler: this.addPermission,
  140. scope: this
  141. }],
  142. listeners: {
  143. rowDblClick: function (grid, rowIndex, e) {
  144. var row = grid.store.getAt(rowIndex);
  145. this.updatePermission(grid,e,row);
  146. }
  147. },
  148. height: '100%',
  149. paging: true,
  150. pageSize: 10,
  151. remoteSort: true
  152. });
  153. AdminTools.grid.Permissions.superclass.constructor.call(this, config);
  154. };
  155. Ext.extend(AdminTools.grid.Permissions, MODx.grid.Grid, {
  156. getMenu: function (grid, rowIndex) {
  157. var ids = this._getSelectedIds();
  158. var row = grid.getStore().getAt(rowIndex);
  159. var menu = AdminTools.utils.getMenu(row.data['actions'], this, ids);
  160. this.addContextMenuItem(menu);
  161. },
  162. addPermission: function (btn, e) {
  163. var w = MODx.load({
  164. xtype: 'admintools-window-permissions',
  165. action: 'mgr/permissions/add',
  166. status: true,
  167. listeners: {
  168. success: {
  169. fn: function () {
  170. this.refresh();
  171. }, scope: this
  172. },
  173. hide: {
  174. fn: function () {
  175. setTimeout(function () {
  176. w.destroy()
  177. }, 200);
  178. }
  179. }
  180. }
  181. });
  182. w.reset();
  183. w.setValues({principal:'all-0', priority:1, rid:MODx.request.id});
  184. w.show(e.target);
  185. },
  186. updatePermission: function(o,e,row) {
  187. if (typeof(row) != 'undefined') {
  188. this.menu.record = row.data;
  189. }
  190. else if (!this.menu.record) {
  191. return false;
  192. }
  193. var id = this.menu.record.id;
  194. MODx.Ajax.request({
  195. url: this.config.url,
  196. params: {
  197. action: 'mgr/permissions/get',
  198. id: id
  199. },
  200. listeners: {
  201. success: {
  202. fn: function (r) {
  203. var w = MODx.load({
  204. xtype: 'admintools-window-permissions',
  205. action: 'mgr/permissions/update',
  206. record: r,
  207. status: r.object.status,
  208. listeners: {
  209. success: {
  210. fn: function () {
  211. this.refresh();
  212. }, scope: this
  213. },
  214. hide: {
  215. fn: function () {
  216. setTimeout(function () {
  217. w.destroy()
  218. }, 200);
  219. }
  220. }
  221. }
  222. });
  223. w.reset();
  224. w.setValues(r.object);
  225. w.show(e.target);
  226. }, scope: this
  227. }
  228. }
  229. });
  230. },
  231. removePermission: function () {
  232. var ids = this._getSelectedIds();
  233. if (!ids.length) {
  234. return false;
  235. }
  236. MODx.msg.confirm({
  237. title: _('admintools_permission_remove'),
  238. text: _('admintools_permission_remove_confirm'),
  239. url: this.config.url,
  240. params: {
  241. action: 'mgr/permissions/remove',
  242. ids: Ext.util.JSON.encode(ids)
  243. },
  244. listeners: {
  245. success: {
  246. fn: function (r) {
  247. this.refresh();
  248. }, scope: this
  249. }
  250. }
  251. });
  252. return true;
  253. },
  254. onClick: function (e) {
  255. var elem = e.getTarget();
  256. if (elem.nodeName == 'BUTTON') {
  257. var row = this.getSelectionModel().getSelected();
  258. if (typeof(row) != 'undefined') {
  259. var action = elem.getAttribute('action');
  260. if (action == 'showMenu') {
  261. var ri = this.getStore().find('id', row.id);
  262. return this._showMenu(this, ri, e);
  263. }
  264. else if (typeof this[action] === 'function') {
  265. this.menu.record = row.data;
  266. return this[action](this, e);
  267. }
  268. }
  269. }
  270. return this.processEvent('click', e);
  271. },
  272. _getSelectedIds: function () {
  273. var ids = [];
  274. var selected = this.getSelectionModel().getSelections();
  275. for (var i in selected) {
  276. if (!selected.hasOwnProperty(i)) {
  277. continue;
  278. }
  279. ids.push(selected[i]['id']);
  280. }
  281. return ids;
  282. }
  283. });
  284. Ext.reg('admintools-grid-permissions', AdminTools.grid.Permissions);
  285. /** ******************************************** **/
  286. AdminTools.combo.Principals = function(config) {
  287. config = config || {};
  288. Ext.applyIf(config,{
  289. name: 'principal',
  290. hiddenName: 'principal',
  291. pageSize: 20,
  292. emptyText: _('admintools_choose_principal'),
  293. fields: ['id','name','class','icon'],
  294. url: adminToolsSettings.config.connector_url,
  295. baseParams: {
  296. action: 'mgr/permissions/getprincipals'
  297. },
  298. typeAhead: true,
  299. autoSelect: false,
  300. editable: true,
  301. tpl: new Ext.XTemplate('<tpl for="."><div class="x-combo-list-item {class}">{icon}{name}</div></tpl>')
  302. });
  303. AdminTools.combo.Principals.superclass.constructor.call(this,config);
  304. };
  305. Ext.extend(AdminTools.combo.Principals,MODx.combo.ComboBox);
  306. Ext.reg('admintools-combo-principals',AdminTools.combo.Principals);