modxcms/revolution

View on GitHub
manager/assets/modext/widgets/system/modx.grid.system.event.js

Summary

Maintainability
C
1 day
Test Coverage
/**
 * Loads a grid of System Events
 *
 * @class MODx.grid.SystemEvent
 * @extends MODx.grid.Grid
 * @param {Object} config An object of options.
 * @xtype modx-grid-system-event
 */
MODx.grid.SystemEvent = function(config) {
    config = config || {};
    Ext.applyIf(config,{
        title: _('system_events')
        ,url: MODx.config.connector_url
        ,baseParams: {
            action: 'system/event/getlist'
        }
        ,fields: ['id','name','service','groupname','plugins']
        ,autosave: true
        ,paging: true
        ,clicksToEdit: 2
        ,grouping: true
        ,groupBy: 'groupname'
        ,singleText: _('system_event')
        ,pluralText: _('system_events')
        ,columns: [{
            header: _('name')
            ,dataIndex: 'name'
        },{
            header: _('system_events.service')
            ,dataIndex: 'service'
            ,renderer: this.renderServiceField.createDelegate(this,[this],true)
        },{
            header: _('system_events.plugins')
            ,dataIndex: 'plugins'
            ,width: 150
            ,renderer: this.renderPluginsField.createDelegate(this,[this],true)
        },{
            header: _('system_events.groupname')
            ,dataIndex: 'groupname'
            ,width: 150
            ,hidden: true
        }]
        ,tbar: [{
            text: _('system_events.create')
            ,scope: this
            ,cls:'primary-button'
            ,handler: {
                xtype: 'modx-window-events-create-update'
                ,url: config.url || MODx.config.connector_url
                ,blankValues: true
                ,isUpdate: false
            }
        },'->',{
            xtype: 'textfield'
            ,name: 'filter_key'
            ,id: 'modx-filter-event'
            ,cls: 'x-form-filter'
            ,emptyText: _('system_events.search_by_name')+'...'
            ,listeners: {
                'change': {fn: this.filterByName, scope: this}
                ,'render': {fn: function(cmp) {
                    new Ext.KeyMap(cmp.getEl(), {
                        key: Ext.EventObject.ENTER
                        ,fn: this.blur
                        ,scope: cmp
                    });
                },scope:this}
            }
        },{
            xtype: 'button'
            ,cls: 'x-form-filter-clear'
            ,text: _('filter_clear')
            ,listeners: {
                'click': {fn: this.clearFilter, scope: this},
                'mouseout': { fn: function(evt){
                    this.removeClass('x-btn-focus');
                }
                }
            }
        }]
    });
    MODx.grid.SystemEvent.superclass.constructor.call(this,config);
};
Ext.extend(MODx.grid.SystemEvent,MODx.grid.Grid,{
    getMenu: function(btn, e) {
        var m = [];
        if (this.menu.record.service == 6) { /* user defined */
            m.push({
                text: _('system_events.remove')
                ,handler: this.removeEvent
            });
        }
        return m;
    }

    ,filterByName: function(tf,newValue,oldValue) {
        this.getStore().baseParams.query = newValue;
        this.getBottomToolbar().changePage(1);
        this.refresh();
        return true;
    }
    ,clearFilter: function() {
        Ext.getCmp('modx-filter-event').reset();

        this.getStore().baseParams = this.initialConfig.baseParams;
        this.getStore().baseParams.query = '';

        this.getBottomToolbar().changePage(1);
        this.refresh();
    }

    ,removeEvent: function(btn, e) {
        MODx.msg.confirm({
            title: _('system_events.remove')
            ,text: _('system_events.remove_confirm', { name: this.menu.record.name })
            ,url: this.config.url
            ,params: {
                action: 'system/event/remove'
                ,name: this.menu.record.name
            }
            ,listeners: {
                'success': { fn: this.refresh ,scope: this }
            }
        });
    }

    ,renderServiceField: function(v,md,rec,ri,ci,s,g) {
        return _('system_events.service_' + v);
    }

    ,renderPluginsField: function(v,md,rec,ri,ci,s,g) {
        var output = [];
        Ext.each(v, function(elem) {
            if (!elem) { return; }
            output.push(elem.name);
        });

        return output.join(', ');
    }
});
Ext.reg('modx-grid-system-event',MODx.grid.SystemEvent);



MODx.window.CreateUpdateEvent = function(config) {
    config = config || {};
    Ext.applyIf(config,{
        title: _('system_events.create')
        ,width: 450
        ,autoHeight: true
        ,url: config.url
        ,action: 'system/event/create'
        ,fields: [{
            xtype: 'hidden'
            ,name: 'service'
            ,value: 6 /* user defined */
        },{
            xtype: 'textfield'
            ,fieldLabel: _('name')
            ,name: 'name'
            ,id: 'modx-se-name'
            ,allowBlank: false
            ,maxLength: 50
            ,anchor: '100%'
        },{
            xtype: 'label'
            ,forId: 'modx-se-name'
            ,html: _('system_events.name_desc')
            ,cls: 'desc-under'
        },{
            xtype: 'modx-combo-event-groups'
            ,fieldLabel: _('system_events.groupname')
            ,name: 'groupname'
            ,id: 'modx-se-groupname'
            ,anchor: '100%'
        },{
            xtype: 'label'
            ,forId: 'modx-se-groupname'
            ,html: _('system_events.groupname_desc')
            ,cls: 'desc-under'
        }]
        ,keys: []
    });
    MODx.window.CreateUpdateEvent.superclass.constructor.call(this,config);
};
Ext.extend(MODx.window.CreateUpdateEvent,MODx.Window);
Ext.reg('modx-window-events-create-update',MODx.window.CreateUpdateEvent);



MODx.combo.SystemEventGroups = function(config) {
    config = config || {};
    Ext.applyIf(config, {
        name: 'groupname'
        ,hiddenName: 'groupname'
        ,displayField: 'name'
        ,valueField: 'name'
        ,fields: ['name']
        ,forceSelection: false
        ,typeAhead: true
        ,editable: true
        ,allowBlank: false
        ,autocomplete: true
        ,pageSize: 10
        ,url: MODx.config.connector_url
        ,baseParams: {
            action: 'system/event/groupList'
            ,combo: true
        }
    });
    MODx.combo.SystemEventGroups.superclass.constructor.call(this, config);
};
Ext.extend(MODx.combo.SystemEventGroups, MODx.combo.ComboBox);
Ext.reg('modx-combo-event-groups', MODx.combo.SystemEventGroups);