| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649 |
- MODx.grid.SettingsGrid = function(config) {
- config = config || {};
- this.exp = new Ext.grid.RowExpander({
- tpl : new Ext.XTemplate(
- '<p class="desc">{[MODx.util.safeHtml(values.description_trans)]}</p>'
- )
- });
- if (!config.tbar) {
- config.tbar = [{
- text: _('setting_create')
- ,scope: this
- ,cls:'primary-button'
- ,handler: {
- xtype: 'modx-window-setting-create'
- ,url: config.url || MODx.config.connector_url
- ,blankValues: true
- }
- }];
- }
- config.tbar.push('->',{
- xtype: 'modx-combo-namespace'
- ,name: 'namespace'
- ,id: 'modx-filter-namespace'
- ,emptyText: _('namespace_filter')
- ,preselectValue: MODx.request['ns'] ? MODx.request['ns'] : 'core'
- ,allowBlank: false
- ,editable: true
- ,typeAhead: true
- ,forceSelection: true
- ,queryParam: 'search'
- ,width: 150
- ,listeners: {
- 'select': {fn: this.filterByNamespace, scope:this}
- }
- },{
- xtype: 'modx-combo-area'
- ,name: 'area'
- ,id: 'modx-filter-area'
- ,emptyText: _('area_filter')
- ,value: MODx.request['area']
- ,baseParams: {
- action: 'system/settings/getAreas'
- ,namespace: MODx.request['ns'] ? MODx.request['ns'] : 'core'
- }
- ,width: 250
- ,allowBlank: true
- ,editable: true
- ,typeAhead: true
- ,forceSelection: true
- ,listeners: {
- 'select': {fn: this.filterByArea, scope:this}
- }
- },{
- xtype: 'textfield'
- ,name: 'filter_key'
- ,id: 'modx-filter-key'
- ,cls: 'x-form-filter'
- ,emptyText: _('search_by_key')
- ,listeners: {
- 'change': {fn: this.filterByKey, scope: this}
- ,'render': {fn: function(cmp) {
- new Ext.KeyMap(cmp.getEl(), {
- key: Ext.EventObject.ENTER
- ,fn: this.blur
- ,scope: cmp
- });
- },scope:this}
- }
- },{
- xtype: 'button'
- ,id: 'modx-filter-clear'
- ,cls: 'x-form-filter-clear'
- ,text: _('filter_clear')
- ,listeners: {
- 'click': {fn: this.clearFilter, scope: this},
- 'mouseout': { fn: function(evt){
- this.removeClass('x-btn-focus');
- }
- }
- }
- });
- this.cm = new Ext.grid.ColumnModel({
- columns: [this.exp,{
- header: _('name')
- ,dataIndex: 'name_trans'
- ,sortable: true
- ,editable: false
- ,width: 175
- },{
- header: _('key')
- ,dataIndex: 'key'
- ,sortable: true
- ,editable: false
- ,width: 150
- },{
- header: _('value')
- ,dataIndex: 'value'
- ,sortable: true
- ,editable: true
- ,renderer: this.renderDynField.createDelegate(this,[this],true)
- ,width: 260
- },{
- header: _('last_modified')
- ,dataIndex: 'editedon'
- ,sortable: true
- ,editable: false
- ,renderer: this.renderLastModDate.createDelegate(this,[this],true)
- ,width: 100
- },{
- header: _('area')
- ,dataIndex: 'area_text'
- ,sortable: true
- ,hidden: true
- ,editable: false
- }]
- /* Editors are pushed here. I think that they should be in general grid
- * definitions (modx.grid.js) and activated via a config property (loadEditor: true) */
- ,getCellEditor: function(colIndex, rowIndex) {
- var field = this.getDataIndex(colIndex);
- if (field == 'value') {
- var rec = config.store.getAt(rowIndex);
- var xt = {xtype: 'textfield'};
- if (rec) {
- xt.xtype = rec.get('xtype');
- if (xt == 'text-password') {
- xt.xtype = 'textfield';
- xt.inputType = 'password';
- }
- }
- var o = MODx.load(xt);
- return new Ext.grid.GridEditor(o);
- }
- return Ext.grid.ColumnModel.prototype.getCellEditor.call(this, colIndex, rowIndex);
- }
- });
- Ext.applyIf(config, {
- cm: this.cm
- ,fields: ['key','name','value','description','xtype','namespace','area','area_text','editedon','oldkey','menu','name_trans','description_trans']
- ,url: MODx.config.connector_url
- ,baseParams: {
- action: 'system/settings/getList'
- ,namespace: MODx.request['ns'] ? MODx.request['ns'] : 'core'
- ,area: MODx.request['area']
- }
- ,clicksToEdit: 2
- ,grouping: true
- ,groupBy: 'area_text'
- ,singleText: _('setting')
- ,pluralText: _('settings')
- ,sortBy: 'key'
- ,plugins: this.exp
- ,primaryKey: 'key'
- ,autosave: true
- ,save_action: 'system/settings/updatefromgrid'
- ,pageSize: parseInt(MODx.config.default_per_page) || 20
- ,paging: true
- ,collapseFirst: false
- ,tools: [{
- id: 'plus'
- ,qtip: _('expand_all')
- ,handler: this.expandAll
- ,scope: this
- },{
- id: 'minus'
- ,hidden: true
- ,qtip: _('collapse_all')
- ,handler: this.collapseAll
- ,scope: this
- }]
- });
- this.view = new Ext.grid.GroupingView({
- emptyText: config.emptyText || _('ext_emptymsg')
- ,forceFit: true
- ,autoFill: true
- ,showPreview: true
- ,enableRowBody: true
- ,scrollOffset: 0
- });
- MODx.grid.SettingsGrid.superclass.constructor.call(this,config);
- };
- Ext.extend(MODx.grid.SettingsGrid,MODx.grid.Grid,{
- _addEnterKeyHandler: function() {
- this.getEl().addKeyListener(Ext.EventObject.ENTER,function() {
- this.fireEvent('change');
- },this);
- }
- ,_showMenu: function(g,ri,e) {
- e.stopEvent();
- e.preventDefault();
- this.menu.record = this.getStore().getAt(ri).data;
- if (!this.getSelectionModel().isSelected(ri)) {
- this.getSelectionModel().selectRow(ri);
- }
- this.menu.removeAll();
- var m = [];
- if (this.menu.record.menu) {
- m = this.menu.record.menu;
- } else {
- m.push({
- text: _('setting_update')
- ,handler: this.updateSetting
- },'-',{
- text: _('setting_remove')
- ,handler: this.removeSetting
- });
- }
- if (m.length > 0) {
- this.addContextMenuItem(m);
- this.menu.showAt(e.xy);
- }
- }
- ,removeSetting: function() {
- return this.remove('setting_remove_confirm', 'system/settings/remove');
- }
- ,updateSetting: function(btn,e) {
- var r = this.menu.record;
- r.fk = Ext.isDefined(this.config.fk) ? this.config.fk : 0;
- var uss = MODx.load({
- xtype: 'modx-window-setting-update'
- ,record: r
- ,grid: this
- ,listeners: {
- 'success': {fn:function(r) {
- this.refresh();
- },scope:this}
- }
- });
- uss.reset();
- uss.setValues(r);
- uss.show(e.target);
- }
- ,clearFilter: function() {
- var ns = MODx.request['ns'] ? MODx.request['ns'] : Ext.getCmp('modx-filter-namespace').getValue();
- var area = MODx.request['area'] ? MODx.request['area'] : '';
- this.getStore().baseParams = this.initialConfig.baseParams;
- var acb = Ext.getCmp('modx-filter-area');
- if (acb) {
- acb.store.baseParams['namespace'] = ns;
- acb.store.load();
- acb.reset();
- }
- Ext.getCmp('modx-filter-namespace').setValue(ns);
- Ext.getCmp('modx-filter-key').reset();
- this.getStore().baseParams.namespace = ns;
- this.getStore().baseParams.area = area;
- this.getStore().baseParams.key = '';
- this.getBottomToolbar().changePage(1);
- // this.refresh();
- }
- ,filterByKey: function(tf,newValue,oldValue) {
- this.getStore().baseParams.key = newValue;
- this.getStore().baseParams.namespace = '';
- this.getBottomToolbar().changePage(1);
- //this.refresh();
- return true;
- }
- ,filterByNamespace: function(cb,rec,ri) {
- this.getStore().baseParams['namespace'] = rec.data['name'];
- this.getStore().baseParams['area'] = '';
- this.getBottomToolbar().changePage(1);
- //this.refresh();
- var acb = Ext.getCmp('modx-filter-area');
- if (acb) {
- var s = acb.store;
- s.baseParams['namespace'] = rec.data.name;
- s.removeAll();
- s.load();
- acb.setValue('');
- }
- }
- ,filterByArea: function(cb,rec,ri) {
- this.getStore().baseParams['area'] = rec.data['v'];
- this.getBottomToolbar().changePage(1);
- // this.refresh();
- }
- ,renderDynField: function(v,md,rec,ri,ci,s,g) {
- var r = s.getAt(ri).data;
- v = Ext.util.Format.htmlEncode(v);
- var f;
- if (r.xtype == 'combo-boolean' || r.xtype == 'modx-combo-boolean') {
- f = MODx.grid.Grid.prototype.rendYesNo;
- return f(v,md,rec,ri,ci,s,g);
- } else if (r.xtype === 'datefield') {
- f = Ext.util.Format.dateRenderer(MODx.config.manager_date_format);
- return f(v,md,rec,ri,ci,s,g);
- } else if (r.xtype === 'text-password' || r.xtype == 'modx-text-password') {
- f = MODx.grid.Grid.prototype.rendPassword;
- return f(v,md,rec,ri,ci,s,g);
- } else if (r.xtype.substr(0,5) == 'combo' || r.xtype.substr(0,10) == 'modx-combo') {
- var cm = g.getColumnModel();
- var ed = cm.getCellEditor(ci,ri);
- if (!ed) {
- var o = Ext.ComponentMgr.create({xtype: r.xtype || 'textfield'});
- ed = new Ext.grid.GridEditor(o);
- cm.setEditor(ci,ed);
- }
- if (ed.store && !ed.store.isLoaded && ed.config.mode != 'local') {
- ed.store.load();
- ed.store.isLoaded = true;
- }
- f = Ext.util.Format.comboRenderer(ed.field,v);
- return f(v,md,rec,ri,ci,s,g);
- }
- return v;
- }
- /**
- * Prevent display updated date for unmodified records
- *
- * @param {String} value
- *
- * @returns {String}
- */
- ,renderLastModDate: function(value) {
- if (Ext.isEmpty(value)) {
- return '—';
- }
- // Return formatted date (server side)
- return value;
- // JavaScripts time is in milliseconds
- //return new Date(value*1000).format(MODx.config.manager_date_format + ' ' + MODx.config.manager_time_format);
- }
- });
- Ext.reg('modx-grid-settings',MODx.grid.SettingsGrid);
- MODx.combo.Area = function(config) {
- config = config || {};
- Ext.applyIf(config,{
- name: 'area'
- ,hiddenName: 'area'
- ,displayField: 'd'
- ,valueField: 'v'
- ,fields: ['d','v']
- ,url: MODx.config.connector_url
- ,baseParams: {
- action: 'system/settings/getAreas'
- }
- });
- MODx.combo.Area.superclass.constructor.call(this,config);
- };
- Ext.extend(MODx.combo.Area,MODx.combo.ComboBox);
- Ext.reg('modx-combo-area',MODx.combo.Area);
- MODx.window.CreateSetting = function(config) {
- config = config || {};
- config.keyField = config.keyField || {};
- Ext.applyIf(config,{
- title: _('setting_create')
- ,width: 600
- ,url: config.url
- ,action: 'system/settings/create'
- ,autoHeight: true
- ,fields: [{
- layout: 'column'
- ,border: false
- ,defaults: {
- layout: 'form'
- ,labelAlign: 'top'
- ,anchor: '100%'
- ,border: false
- }
- ,autoHeight: true
- ,items: [{
- columnWidth: .5
- ,items: [{
- xtype: 'hidden'
- ,name: 'fk'
- ,id: 'modx-cs-fk'
- ,value: config.fk || 0
- },Ext.applyIf(config.keyField, {
- xtype: 'textfield'
- ,fieldLabel: _('key')
- ,name: 'key'
- ,id: 'modx-cs-key'
- ,maxLength: 100
- ,anchor: '100%'
- }),{
- xtype: 'label'
- ,forId: 'modx-cs-key'
- ,html: _('key_desc')
- ,cls: 'desc-under'
- },{
- xtype: 'textfield'
- ,fieldLabel: _('name')
- ,name: 'name'
- ,id: 'modx-cs-name'
- ,anchor: '100%'
- },{
- xtype: 'label'
- ,forId: 'modx-cs-name'
- ,html: _('name_desc')
- ,cls: 'desc-under'
- },{
- xtype: 'textarea'
- ,fieldLabel: _('description')
- ,name: 'description'
- ,id: 'modx-cs-description'
- ,allowBlank: true
- ,anchor: '100%'
- },{
- xtype: 'label'
- ,forId: 'modx-cs-description'
- ,html: _('description_desc')
- ,cls: 'desc-under'
- }]
- },{
- columnWidth: .5
- ,items: [{
- xtype: 'modx-combo-xtype-spec'
- ,fieldLabel: _('xtype')
- ,description: MODx.expandHelp ? '' : _('xtype_desc')
- ,id: 'modx-cs-xtype'
- ,anchor: '100%'
- },{
- xtype: 'label'
- ,forId: 'modx-cs-xtype'
- ,html: _('xtype_desc')
- ,cls: 'desc-under'
- },{
- xtype: 'modx-combo-namespace'
- ,fieldLabel: _('namespace')
- ,name: 'namespace'
- ,id: 'modx-cs-namespace'
- ,value: Ext.getCmp('modx-filter-namespace').getValue()
- ,anchor: '100%'
- },{
- xtype: 'label'
- ,forId: 'modx-cs-namespace'
- ,html: _('namespace_desc')
- ,cls: 'desc-under'
- },{
- xtype: 'textfield'
- ,fieldLabel: _('area_lexicon_string')
- ,description: _('area_lexicon_string_msg')
- ,name: 'area'
- ,id: 'modx-cs-area'
- ,anchor: '100%'
- ,value: Ext.getCmp('modx-filter-area').getValue()
- },{
- xtype: 'label'
- ,forId: 'modx-cs-area'
- ,html: _('area_lexicon_string_msg')
- ,cls: 'desc-under'
- }]
- }]
- },{
- xtype: 'textarea'
- ,fieldLabel: _('value')
- ,name: 'value'
- ,id: 'modx-cs-value'
- ,autoHeight: true
- ,anchor: '100%'
- }]
- ,keys: []
- });
- MODx.window.CreateSetting.superclass.constructor.call(this,config);
- this.on('show',function() {
- this.reset();
- this.setValues({
- namespace: Ext.getCmp('modx-filter-namespace').value
- ,area: Ext.getCmp('modx-filter-area').value
- });
- },this);
- };
- Ext.extend(MODx.window.CreateSetting,MODx.Window);
- Ext.reg('modx-window-setting-create',MODx.window.CreateSetting);
- MODx.combo.xType = function(config) {
- config = config || {};
- Ext.applyIf(config,{
- store: new Ext.data.SimpleStore({
- fields: ['d','v']
- ,data: [[_('textfield'),'textfield']
- ,[_('textarea'),'textarea']
- ,[_('yesno'),'combo-boolean']
- ,[_('password'),'text-password']
- ,[_('category'),'modx-combo-category']
- ,[_('charset'),'modx-combo-charset']
- ,[_('country'),'modx-combo-country']
- ,[_('context'),'modx-combo-context']
- ,[_('namespace'),'modx-combo-namespace']
- ,[_('template'),'modx-combo-template']
- ,[_('user'),'modx-combo-user']
- ,[_('usergroup'),'modx-combo-usergroup']
- ,[_('language'),'modx-combo-language']
- ,[_('source'),'modx-combo-source']
- ,[_('source_type'),'modx-combo-source-type']
- ,[_('setting_manager_theme'),'modx-combo-manager-theme']
- ]
- })
- ,displayField: 'd'
- ,valueField: 'v'
- ,mode: 'local'
- ,name: 'xtype'
- ,hiddenName: 'xtype'
- ,triggerAction: 'all'
- ,editable: false
- ,selectOnFocus: false
- ,value: 'textfield'
- });
- MODx.combo.xType.superclass.constructor.call(this,config);
- };
- Ext.extend(MODx.combo.xType,Ext.form.ComboBox);
- Ext.reg('modx-combo-xtype-spec',MODx.combo.xType);
- MODx.window.UpdateSetting = function(config) {
- config = config || {};
- this.ident = config.ident || 'modx-uss-'+Ext.id();
- Ext.applyIf(config,{
- title: _('setting_update')
- ,width: 600
- ,url: config.grid.config.url
- ,action: 'system/settings/update'
- ,autoHeight: true
- ,fields: [{
- layout: 'column'
- ,border: false
- ,defaults: {
- layout: 'form'
- ,labelAlign: 'top'
- ,anchor: '100%'
- ,border: false
- }
- ,autoHeight: true
- ,items: [{
- columnWidth: .5
- ,items: [{
- xtype: 'hidden'
- ,name: 'fk'
- ,id: 'modx-'+this.ident+'-fk'
- ,value: config.fk || 0
- },{
- xtype: 'statictextfield'
- ,fieldLabel: _('key')
- ,description: MODx.expandHelp ? '' : _('key_desc')
- ,name: 'key'
- ,id: 'modx-'+this.ident+'-key'
- ,maxLength: 100
- ,submitValue: true
- ,anchor: '100%'
- },{
- xtype: MODx.expandHelp ? 'label' : 'hidden'
- ,forId: 'modx-'+this.ident+'-key'
- ,html: _('key_desc')
- ,cls: 'desc-under'
- },{
- xtype: 'textfield'
- ,fieldLabel: _('name')
- ,description: MODx.expandHelp ? '' : _('name_desc')
- ,name: 'name'
- ,id: 'modx-'+this.ident+'-name'
- ,anchor: '100%'
- },{
- xtype: MODx.expandHelp ? 'label' : 'hidden'
- ,forId: 'modx-'+this.ident+'-name'
- ,html: _('name_desc')
- ,cls: 'desc-under'
- },{
- xtype: 'textarea'
- ,fieldLabel: _('description')
- ,description: MODx.expandHelp ? '' : _('description_desc')
- ,name: 'description'
- ,id: 'modx-'+this.ident+'-description'
- ,allowBlank: true
- ,anchor: '100%'
- },{
- xtype: MODx.expandHelp ? 'label' : 'hidden'
- ,forId: 'modx-'+this.ident+'-description'
- ,html: _('description_desc')
- ,cls: 'desc-under'
- }]
- },{
- columnWidth: .5
- ,items: [{
- xtype: 'modx-combo-xtype-spec'
- ,fieldLabel: _('xtype')
- ,description: MODx.expandHelp ? '' : _('xtype_desc')
- ,id: 'modx-'+this.ident+'-xtype'
- ,anchor: '100%'
- },{
- xtype: MODx.expandHelp ? 'label' : 'hidden'
- ,forId: 'modx-'+this.ident+'-xtype'
- ,html: _('xtype_desc')
- ,cls: 'desc-under'
- },{
- xtype: 'modx-combo-namespace'
- ,fieldLabel: _('namespace')
- ,description: MODx.expandHelp ? '' : _('namespace_desc')
- ,name: 'namespace'
- ,id: 'modx-'+this.ident+'-namespace'
- ,value: 'core'
- ,anchor: '100%'
- },{
- xtype: MODx.expandHelp ? 'label' : 'hidden'
- ,forId: 'modx-'+this.ident+'-namespace'
- ,html: _('namespace_desc')
- ,cls: 'desc-under'
- },{
- xtype: 'textfield'
- ,fieldLabel: _('area_lexicon_string')
- ,description: MODx.expandHelp ? '' : _('area_lexicon_string_msg')
- ,name: 'area'
- ,id: 'modx-'+this.ident+'-area'
- ,anchor: '100%'
- },{
- xtype: MODx.expandHelp ? 'label' : 'hidden'
- ,forId: 'modx-'+this.ident+'-area'
- ,html: _('area_lexicon_string_msg')
- ,cls: 'desc-under'
- }]
- }]
- },{
- xtype: config.record ? config.record.xtype : 'textarea'
- ,fieldLabel: _('value')
- ,name: 'value'
- ,hiddenName: 'value'
- ,id: 'modx-'+this.ident+'-value'
- ,autoHeight: true
- ,anchor: '100%'
- }]
- ,keys: []
- });
- MODx.window.UpdateSetting.superclass.constructor.call(this,config);
- };
- Ext.extend(MODx.window.UpdateSetting,MODx.Window);
- Ext.reg('modx-window-setting-update',MODx.window.UpdateSetting);
|