modx.panel.access.policy.template.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318
  1. /**
  2. * Loads panel for editing an Access Policy Template
  3. *
  4. * @class MODx.panel.AccessPolicyTemplate
  5. * @extends MODx.FormPanel
  6. * @param {Object} config An object of config properties
  7. * @xtype modx-panel-access-policy-template
  8. */
  9. MODx.panel.AccessPolicyTemplate = function(config) {
  10. config = config || {};
  11. var r = config.record || {};
  12. Ext.applyIf(config,{
  13. url: MODx.config.connector_url
  14. ,baseParams: {
  15. action: 'security/access/policy/template/update'
  16. ,id: MODx.request.id
  17. }
  18. ,id: 'modx-panel-access-policy-template'
  19. ,cls: 'container form-with-labels'
  20. ,class_key: 'modAccessPolicyTemplate'
  21. ,plugin: ''
  22. ,bodyStyle: ''
  23. ,defaults: { collapsible: false ,autoHeight: true }
  24. ,items: [{
  25. html: _('policy_template')+(config.record ? ': '+config.record.name : '')
  26. ,id: 'modx-policy-template-header'
  27. ,xtype: 'modx-header'
  28. },{
  29. xtype: 'modx-tabs'
  30. ,defaults: {
  31. autoHeight: true
  32. ,border: true
  33. ,bodyCssClass: 'tab-panel-wrapper'
  34. }
  35. ,forceLayout: true
  36. ,deferredRender: false
  37. ,items: [{
  38. title: _('policy_template')
  39. ,layout: 'form'
  40. ,items: [{
  41. html: '<p>'+_('policy_template.desc')+'</p>'
  42. ,xtype: 'modx-description'
  43. },{
  44. xtype: 'panel'
  45. ,border: false
  46. ,cls:'main-wrapper'
  47. ,layout: 'form'
  48. ,defaults:{ anchor: '100%' }
  49. ,labelAlign: 'top'
  50. ,labelSeparator: ''
  51. ,items: [{
  52. xtype: 'hidden'
  53. ,name: 'id'
  54. },{
  55. xtype: 'textfield'
  56. ,fieldLabel: _('name')
  57. ,description: MODx.expandHelp ? '' : _('policy_template_desc_name')
  58. ,name: 'name'
  59. ,id: 'modx-policy-template-name'
  60. ,maxLength: 255
  61. ,enableKeyEvents: true
  62. ,allowBlank: false
  63. ,listeners: {
  64. 'keyup': {scope:this,fn:function(f,e) {
  65. Ext.getCmp('modx-policy-template-header').getEl().update(_('policy')+': '+f.getValue());
  66. }}
  67. }
  68. },{
  69. xtype: MODx.expandHelp ? 'label' : 'hidden'
  70. ,forId: 'modx-policy-template-name'
  71. ,html: _('policy_template_desc_name')
  72. ,cls: 'desc-under'
  73. },{
  74. xtype: 'textarea'
  75. ,fieldLabel: _('description')
  76. ,description: MODx.expandHelp ? '' : _('policy_template_desc_description')
  77. ,name: 'description'
  78. ,id: 'modx-policy-template-description'
  79. ,grow: true
  80. },{
  81. xtype: MODx.expandHelp ? 'label' : 'hidden'
  82. ,forId: 'modx-policy-template-description'
  83. ,html: _('policy_template_desc_description')
  84. ,cls: 'desc-under'
  85. },{
  86. xtype: 'textfield'
  87. ,fieldLabel: _('lexicon')
  88. ,description: MODx.expandHelp ? '' : _('policy_template_desc_lexicon')
  89. ,name: 'lexicon'
  90. ,id: 'modx-policy-template-lexicon'
  91. ,allowBlank: true
  92. ,value: 'permissions'
  93. },{
  94. xtype: MODx.expandHelp ? 'label' : 'hidden'
  95. ,forId: 'modx-policy-template-lexicon'
  96. ,html: _('policy_template_desc_lexicon')
  97. ,cls: 'desc-under'
  98. }]
  99. },{
  100. html: '<p>'+_('permissions_desc')+'</p>'
  101. ,xtype: 'modx-description'
  102. },{
  103. xtype: 'modx-grid-template-permissions'
  104. ,cls:'main-wrapper'
  105. ,policy: MODx.request.id
  106. ,autoHeight: true
  107. ,preventRender: true
  108. }]
  109. }]
  110. }]
  111. ,listeners: {
  112. 'setup': {fn:this.setup,scope:this}
  113. ,'success': {fn:this.success,scope:this}
  114. ,'beforeSubmit': {fn:this.beforeSubmit,scope:this}
  115. }
  116. });
  117. MODx.panel.AccessPolicyTemplate.superclass.constructor.call(this,config);
  118. };
  119. Ext.extend(MODx.panel.AccessPolicyTemplate,MODx.FormPanel,{
  120. initialized: false
  121. ,setup: function() {
  122. if (this.initialized) return;
  123. if (this.config.template === '' || this.config.template === 0) {
  124. this.fireEvent('ready');
  125. return false;
  126. }
  127. var r = this.config.record;
  128. this.getForm().setValues(r);
  129. var g = Ext.getCmp('modx-grid-template-permissions');
  130. if (g && r.permissions) { g.getStore().loadData(r.permissions); }
  131. this.fireEvent('ready');
  132. MODx.fireEvent('ready');
  133. this.initialized = true;
  134. }
  135. ,beforeSubmit: function(o) {
  136. var g = Ext.getCmp('modx-grid-template-permissions');
  137. Ext.apply(o.form.baseParams,{
  138. permissions: g ? g.encode() : {}
  139. });
  140. }
  141. ,success: function(o) {
  142. Ext.getCmp('modx-grid-template-permissions').getStore().commitChanges();
  143. }
  144. });
  145. Ext.reg('modx-panel-access-policy-template',MODx.panel.AccessPolicyTemplate);
  146. MODx.grid.TemplatePermissions = function(config) {
  147. config = config || {};
  148. Ext.applyIf(config,{
  149. id: 'modx-grid-template-permissions'
  150. ,fields: ['name','description','description_trans','value','menu']
  151. ,columns: [{
  152. header: _('name')
  153. ,dataIndex: 'name'
  154. ,width: 150
  155. ,editor: { xtype: 'textfield', renderer: true }
  156. },{
  157. header: _('description')
  158. ,dataIndex: 'description_trans'
  159. ,width: 250
  160. ,editable: false
  161. }]
  162. ,data: []
  163. ,width: '90%'
  164. ,height: 300
  165. ,maxHeight: 300
  166. ,autosave: false
  167. ,autoExpandColumn: 'name'
  168. ,tbar: [{
  169. text: _('permission_add_template')
  170. ,cls: 'primary-button'
  171. ,scope: this
  172. ,handler: this.createAttribute
  173. }]
  174. });
  175. MODx.grid.TemplatePermissions.superclass.constructor.call(this,config);
  176. this.propRecord = new Ext.data.Record.create(['name','description','value']);
  177. };
  178. Ext.extend(MODx.grid.TemplatePermissions,MODx.grid.LocalGrid,{
  179. createAttribute: function(btn,e) {
  180. this.loadWindow(btn,e,{
  181. xtype: 'modx-window-template-permission-create'
  182. ,record: {}
  183. ,blankValues: true
  184. ,listeners: {
  185. 'success': {fn:function(r) {
  186. var s = this.getStore();
  187. r.description_trans = r.description;
  188. var rec = new this.propRecord(r);
  189. s.add(rec);
  190. Ext.getCmp('modx-panel-access-policy-template').fireEvent('fieldChange');
  191. },scope:this}
  192. }
  193. });
  194. return true;
  195. }
  196. ,remove: function() {
  197. var r = this.getSelectionModel().getSelected();
  198. if (this.fireEvent('beforeRemoveRow',r)) {
  199. this.getStore().remove(r);
  200. this.fireEvent('afterRemoveRow',r);
  201. }
  202. }
  203. ,_showMenu: function(g,ri,e) {
  204. e.stopEvent();
  205. e.preventDefault();
  206. var m = this.menu;
  207. m.recordIndex = ri;
  208. m.record = this.getStore().getAt(ri).data;
  209. if (!this.getSelectionModel().isSelected(ri)) {
  210. this.getSelectionModel().selectRow(ri);
  211. }
  212. m.removeAll();
  213. m.add({
  214. text: _('permission_remove')
  215. ,scope: this
  216. ,handler: this.remove
  217. });
  218. m.show(e.target);
  219. }
  220. });
  221. Ext.reg('modx-grid-template-permissions',MODx.grid.TemplatePermissions);
  222. MODx.window.NewTemplatePermission = function(config) {
  223. config = config || {};
  224. this.ident = config.ident || 'polpc'+Ext.id();
  225. Ext.applyIf(config,{
  226. title: _('permission_add_template')
  227. // ,height: 150
  228. // ,width: 475
  229. ,url: MODx.config.connector_url
  230. ,action: 'security/access/policy/addProperty'
  231. ,saveBtnText: _('add')
  232. ,fields: [{
  233. xtype: 'modx-combo-permission'
  234. ,fieldLabel: _('name')
  235. ,name: 'name'
  236. ,hiddenName: 'name'
  237. ,id: 'modx-'+this.ident+'-name'
  238. ,anchor: '100%'
  239. },{
  240. xtype: 'textarea'
  241. ,fieldLabel: _('description')
  242. ,name: 'description'
  243. ,id: 'modx-'+this.ident+'-description'
  244. ,anchor: '100%'
  245. ,grow: true
  246. }]
  247. ,keys: []
  248. });
  249. MODx.window.NewTemplatePermission.superclass.constructor.call(this,config);
  250. };
  251. Ext.extend(MODx.window.NewTemplatePermission,MODx.Window,{
  252. submit: function() {
  253. var r = this.fp.getForm().getValues();
  254. var g = Ext.getCmp('modx-grid-template-permissions');
  255. var s = g.getStore();
  256. var v = s.findExact('name',r.name);
  257. if (v != -1) {
  258. MODx.msg.alert(_('error'),_('permission_err_ae'));
  259. return false;
  260. }
  261. var cb = Ext.getCmp('modx-'+this.ident+'-name');
  262. s = cb.getStore();
  263. var rec = s.getAt(s.find('name',r.name));
  264. if (rec) {
  265. r.description = rec.data.description;
  266. r.description_trans = rec.data.description;
  267. }
  268. r.value = 1;
  269. this.fireEvent('success',r);
  270. this.hide();
  271. return false;
  272. }
  273. });
  274. Ext.reg('modx-window-template-permission-create',MODx.window.NewTemplatePermission);
  275. MODx.combo.Permission = function(config) {
  276. config = config || {};
  277. Ext.applyIf(config,{
  278. name: 'permission'
  279. ,hiddenName: 'permission'
  280. ,displayField: 'name'
  281. ,valueField: 'name'
  282. ,fields: ['name','description']
  283. ,editable: true
  284. ,typeAhead: false
  285. ,forceSelection: false
  286. ,enableKeyEvents: true
  287. ,autoSelect: false
  288. ,pageSize: 20
  289. ,tpl: new Ext.XTemplate('<tpl for="."><div class="x-combo-list-item"><span style="font-weight: bold">{name:htmlEncode}</span>'
  290. ,'<p style="margin: 0; font-size: 11px; color: gray;">{description:htmlEncode}</p></div></tpl>')
  291. ,url: MODx.config.connector_url
  292. ,baseParams: {
  293. action: 'security/access/permission/getlist'
  294. }
  295. });
  296. MODx.combo.Permission.superclass.constructor.call(this,config);
  297. };
  298. Ext.extend(MODx.combo.Permission,MODx.combo.ComboBox);
  299. Ext.reg('modx-combo-permission',MODx.combo.Permission);