modx.panel.access.policy.js 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. /**
  2. *
  3. * @class MODx.panel.AccessPolicy
  4. * @extends MODx.FormPanel
  5. * @param {Object} config An object of config properties
  6. * @xtype modx-panel-access-policy
  7. */
  8. MODx.panel.AccessPolicy = function(config) {
  9. config = config || {};
  10. Ext.applyIf(config,{
  11. url: MODx.config.connector_url
  12. ,baseParams: {
  13. action: 'security/access/policy/update'
  14. ,id: MODx.request.id
  15. }
  16. ,id: 'modx-panel-access-policy'
  17. ,cls: 'container form-with-labels'
  18. ,class_key: 'modAccessPolicy'
  19. ,plugin: ''
  20. ,bodyStyle: ''
  21. ,defaults: { collapsible: false ,autoHeight: true }
  22. ,items: [{
  23. html: _('policy')+(config.record ? ': '+config.record.name : '')
  24. ,id: 'modx-policy-header'
  25. ,xtype: 'modx-header'
  26. },{
  27. xtype: 'modx-tabs'
  28. ,defaults: {
  29. autoHeight: true
  30. ,border: true
  31. ,bodyCssClass: 'tab-panel-wrapper'
  32. }
  33. ,forceLayout: true
  34. ,deferredRender: false
  35. ,items: [{
  36. title: _('policy')
  37. ,layout: 'form'
  38. ,items: [{
  39. html: '<p>'+_('policy_desc')+'</p>'
  40. ,xtype: 'modx-description'
  41. },{
  42. xtype: 'panel'
  43. ,border: false
  44. ,cls:'main-wrapper'
  45. ,layout: 'form'
  46. ,labelAlign: 'top'
  47. ,labelSeparator: ''
  48. ,items: [{
  49. xtype: 'hidden'
  50. ,name: 'id'
  51. ,value: config.plugin
  52. },{
  53. xtype: 'textfield'
  54. ,fieldLabel: _('name')+'<span class="required">*</span>'
  55. ,description: MODx.expandHelp ? '' : _('policy_desc_name')
  56. ,name: 'name'
  57. ,maxLength: 255
  58. ,enableKeyEvents: true
  59. ,allowBlank: false
  60. ,anchor: '100%'
  61. ,listeners: {
  62. 'keyup': {scope:this,fn:function(f,e) {
  63. Ext.getCmp('modx-policy-header').getEl().update(_('policy')+': '+f.getValue());
  64. }}
  65. }
  66. },{
  67. xtype: MODx.expandHelp ? 'label' : 'hidden'
  68. ,forId: 'modx-policy-name'
  69. ,html: _('policy_desc_name')
  70. ,cls: 'desc-under'
  71. },{
  72. xtype: 'textarea'
  73. ,fieldLabel: _('description')
  74. ,description: MODx.expandHelp ? '' : _('policy_desc_description')
  75. ,name: 'description'
  76. ,anchor: '100%'
  77. ,grow: true
  78. },{
  79. xtype: MODx.expandHelp ? 'label' : 'hidden'
  80. ,forId: 'modx-policy-description'
  81. ,html: _('policy_desc_description')
  82. ,cls: 'desc-under'
  83. },{
  84. xtype: 'textfield'
  85. ,fieldLabel: _('lexicon')
  86. ,description: MODx.expandHelp ? '' : _('policy_desc_lexicon')
  87. ,name: 'lexicon'
  88. ,allowBlank: true
  89. ,anchor: '100%'
  90. ,value: 'permissions'
  91. },{
  92. xtype: MODx.expandHelp ? 'label' : 'hidden'
  93. ,forId: 'modx-policy-lexicon'
  94. ,html: _('policy_desc_lexicon')
  95. ,cls: 'desc-under'
  96. }]
  97. },{
  98. html: '<p>'+_('permissions_desc')+'</p>'
  99. ,xtype: 'modx-description'
  100. },{
  101. xtype: 'modx-grid-policy-permissions'
  102. ,cls:'main-wrapper'
  103. ,policy: MODx.request.id
  104. ,autoHeight: true
  105. ,preventRender: true
  106. }]
  107. }]
  108. }]
  109. ,listeners: {
  110. 'setup': {fn:this.setup,scope:this}
  111. ,'success': {fn:this.success,scope:this}
  112. ,'beforeSubmit': {fn:this.beforeSubmit,scope:this}
  113. }
  114. });
  115. MODx.panel.AccessPolicy.superclass.constructor.call(this,config);
  116. };
  117. Ext.extend(MODx.panel.AccessPolicy,MODx.FormPanel,{
  118. initialized: false
  119. ,setup: function() {
  120. if (this.config.policy === '' || this.config.policy === 0) {
  121. this.fireEvent('ready');
  122. return false;
  123. }
  124. if (!this.initialized) {
  125. var r = this.config.record;
  126. this.getForm().setValues(r);
  127. var g = Ext.getCmp('modx-grid-policy-permissions');
  128. if (g) { g.getStore().loadData(r.permissions); }
  129. this.fireEvent('ready');
  130. MODx.fireEvent('ready');
  131. this.initialized = true;
  132. }
  133. }
  134. ,beforeSubmit: function(o) {
  135. var g = Ext.getCmp('modx-grid-policy-permissions');
  136. Ext.apply(o.form.baseParams,{
  137. permissions: g ? g.encode() : {}
  138. });
  139. }
  140. ,success: function(o) {
  141. Ext.getCmp('modx-grid-policy-permissions').getStore().commitChanges();
  142. }
  143. });
  144. Ext.reg('modx-panel-access-policy',MODx.panel.AccessPolicy);
  145. MODx.grid.PolicyPermissions = function(config) {
  146. config = config || {};
  147. var ac = new Ext.ux.grid.CheckColumn({
  148. header: _('enabled')
  149. ,dataIndex: 'enabled'
  150. ,width: 40
  151. ,sortable: true
  152. });
  153. Ext.applyIf(config,{
  154. id: 'modx-grid-policy-permissions'
  155. ,url: MODx.config.connector_url
  156. ,baseParams: {
  157. action: 'security/access/policy/getAttributes'
  158. }
  159. ,cls: 'modx-grid modx-policy-permissions-grid'
  160. ,fields: ['name','description','description_trans','value','enabled']
  161. ,plugins: ac
  162. ,columns: [{
  163. header: _('name')
  164. ,dataIndex: 'name'
  165. ,width: 100
  166. ,editor: { xtype: 'textfield', renderer: true }
  167. },{
  168. header: _('description')
  169. ,dataIndex: 'description_trans'
  170. ,width: 250
  171. ,editable: false
  172. },ac]
  173. ,data: []
  174. ,width: '90%'
  175. ,height: 300
  176. ,maxHeight: 300
  177. ,autosave: false
  178. ,autoExpandColumn: 'name'
  179. });
  180. MODx.grid.PolicyPermissions.superclass.constructor.call(this,config);
  181. this.propRecord = new Ext.data.Record.create(['name','description','access','value']);
  182. this.on('rowclick',this.onPermRowClick,this);
  183. };
  184. Ext.extend(MODx.grid.PolicyPermissions,MODx.grid.LocalGrid,{
  185. onPermRowClick: function(g,ri,e) {
  186. var s = this.getStore();
  187. if (!s || typeof ri == 'undefined') { return; }
  188. var r = s.getAt(ri);
  189. r.set('enabled',r.get('enabled') ? false : true);
  190. r.commit();
  191. }
  192. });
  193. Ext.reg('modx-grid-policy-permissions',MODx.grid.PolicyPermissions);
  194. MODx.combo.AccessPolicyTemplate = function(config) {
  195. config = config || {};
  196. Ext.applyIf(config,{
  197. name: 'template'
  198. ,hiddenName: 'template'
  199. ,fields: ['id','name','description']
  200. ,forceSelection: true
  201. ,typeAhead: false
  202. ,editable: false
  203. ,allowBlank: false
  204. // ,listWidth: 300
  205. ,pageSize: 20
  206. ,url: MODx.config.connector_url
  207. ,baseParams: {
  208. action: 'security/access/policy/template/getlist'
  209. }
  210. ,tpl: new Ext.XTemplate('<tpl for="."><div class="x-combo-list-item"><span style="font-weight: bold">{name:htmlEncode}</span>'
  211. ,'<p style="margin: 0; font-size: 11px; color: gray;">{description:htmlEncode}</p></div></tpl>')
  212. });
  213. MODx.combo.AccessPolicyTemplate.superclass.constructor.call(this,config);
  214. };
  215. Ext.extend(MODx.combo.AccessPolicyTemplate,MODx.combo.ComboBox);
  216. Ext.reg('modx-combo-access-policy-template',MODx.combo.AccessPolicyTemplate);