sibprogrammer/owp

View on GitHub
app/views/admin/server_templates/list.html.erb

Summary

Maintainability
Test Coverage
<% @page_title = t('admin.server_templates.title', { :name => @hardware_server.host }) %>
<% @page_icon = 'package.png' %>

<% javascript_tag do -%>
Ext.onReady(function() {

  function showServerTemplateEditForm(mode) {
    var storeLimits = new Ext.data.JsonStore({
      id: 'storeLimits',
      fields: [
        { name: 'name' },
        { name: 'soft_limit' },
        { name: 'hard_limit' }
      ],
      data: <%= @advanced_limits.to_json %>
    });
  
    var formEditServerTemplate = new Owp.form.BasicForm({
      labelWidth: 180,
      waitMsgTarget: !Ext.isGecko,
      url: '<%= url_for :controller => 'admin/server-templates', :action => 'save', :hardware_server_id => @hardware_server.id %>',
      autoHeight: true,
      keys: [{
        key: Ext.EventObject.ENTER,
        fn: function() {
          windowEditServerTemplate.submitButton.handler();
        }
      }],
      items: [{
        name: 'id',
        xtype: 'hidden'
      }, {
        xtype: 'tabpanel',
        activeTab: 0,
        baseCls: 'x-plain',
        plain: true,
        deferredRender: false,
        defaults: {
          hideMode: 'offsets',
          autoHeight: true,
          bodyStyle: 'padding: 5px; background-color: transparent'
        },
        listeners: {
          tabchange: function(tabPanel, activePanel) {
            windowEditServerTemplate.syncSize();
          }
        },
        items: [{
          title: '<%= tjs('admin.server_templates.form.create_server.tab.main_settings') %>',
          layout: 'form',
          items: [{
            xtype: 'fieldset',
            title: '<%= tjs('admin.server_templates.form.create_server.fieldset.general') %>',
            autoHeight: true,
            defaults: { width: 155 },
            defaultType: 'textfield',
            items: [{
              fieldLabel: '<%= tjs('admin.server_templates.form.create_server.field.name') %>',
              id: 'fieldName',
              allowBlank: false,
              name: 'name'
            }]
          }, {
            xtype: 'fieldset',
            title: '<%= tjs('admin.server_templates.form.create_server.fieldset.limits') %>',
            autoHeight: true,
            defaults: { width: 155 },
            defaultType: 'numberfield',
            items: [{
              fieldLabel: '<%= tjs('admin.server_templates.form.create_server.field.diskspace') %>',
              id: 'fieldDiskspace',
              emptyText: '<%= tjs('admin.virtual_servers.limits.unlimited') %>',
              name: 'diskspace'
            }, {
              fieldLabel: '<%= tjs('admin.server_templates.form.create_server.field.memory') %>',
              id: 'fieldMemory',
              emptyText: '<%= tjs('admin.virtual_servers.limits.unlimited') %>',
              name: 'memory'
            <% if @hardware_server.vswap %>
            }, {
              fieldLabel: '<%= tjs('admin.server_templates.form.create_server.field.vswap') %>',
              id: 'fieldVswap',
              name: 'vswap'
            <% end %>
            }, {
              fieldLabel: '<%= tjs('admin.server_templates.form.create_server.field.cpu_units') %>',
              id: 'fieldCpuUnits',
              name: 'cpu_units'
            }, {
              fieldLabel: '<%= tjs('admin.server_templates.form.create_server.field.cpus') %>',
              id: 'fieldCpus',
              name: 'cpus'
            }, {
              fieldLabel: '<%= tjs('admin.server_templates.form.create_server.field.cpu_limit') %>',
              id: 'fieldCpuLimit',
              name: 'cpu_limit'
            }]
          }, {
            xtype: 'fieldset',
            title: '<%= tjs('admin.server_templates.form.create_server.fieldset.dns_settings') %>',
            autoHeight: true,
            defaults: { width: 155 },
            defaultType: 'textfield',
            items: [{
              fieldLabel: '<%= tjs('admin.server_templates.form.create_server.field.nameserver') %>',
              name: 'nameserver'
            }, {
              fieldLabel: '<%= tjs('admin.server_templates.form.create_server.field.search_domain') %>',
              name: 'search_domain'
            }]
          }, {
            xtype: 'fieldset',
            title: '<%= tjs('admin.server_templates.form.create_server.fieldset.start_options') %>',
            autoHeight: true,
            defaultType: 'checkbox',
            labelWidth: 180,
            items: [{
              fieldLabel: '<%= tjs('admin.server_templates.form.create_server.field.start_on_boot') %>',
              xtype: 'checkbox',
              checked: true,
              name: 'start_on_boot',
              id: 'checkboxStartOnBoot'
            }]
          }]
        }, {
          title: '<%= tjs('admin.server_templates.form.create_server.tab.advanced_settings') %>',
          items: [{
            xtype: 'editorgrid',
            layout: 'fit',
            height: 350,
            width: 390,
            loadMask: true,
            ref: '../limitsGrid',
            store: storeLimits,
            cm: new Ext.grid.ColumnModel([{
              id: 'name',
              header: '<%= tjs('admin.server_templates.form.create_server.grid.column.name') %>',
              sortable: true,
              dataIndex: 'name'
            }, {
              id: 'soft_limit',
              header: '<%= tjs('admin.server_templates.form.create_server.grid.column.soft_limit') %>',
              width: 100,
              sortable: true,
              dataIndex: 'soft_limit',
              renderer: function(value) {
                return '' == value ? '<%= tjs('admin.virtual_servers.limits.unlimited') %>' : value;
              },
              editor: new Ext.form.TextField({
                maskRe: /\d+/
              })
            }, {
              id: 'hard_limit',
              header: '<%= tjs('admin.server_templates.form.create_server.grid.column.hard_limit') %>',
              width: 100,
              sortable: true,
              dataIndex: 'hard_limit',
              renderer: function(value) {
                return '' == value ? '<%= tjs('admin.virtual_servers.limits.unlimited') %>' : value;
              },
              editor: new Ext.form.TextField({
                maskRe: /\d+/
              })
            }]),
            stripeRows: true,
            autoExpandColumn: 'name',
            stripeRows: true,
            iconCls: 'icon-items-list'
          }]
        }]
      }]
    });
    
    var windowEditServerTemplate = new Owp.form.BasicFormWindow({
      title: ('add' == mode)
        ? '<%= tjs('admin.server_templates.form.create_server.title') %>'
        : '<%= tjs('admin.server_templates.form.create_server.edit_title') %>',
      iconCls: ('add' == mode) ? 'icon-window-add' : 'icon-window-edit',
      width: 420,
      autoHeight: true,
      modal: true,
      layout: 'fit',
      plain: true,
      border: false,
      bodyStyle: 'padding: 5px;',
      resizable: false,
      items: formEditServerTemplate,
      buttons: [{
        text: ('add' == mode)
          ? '<%= tjs('admin.server_templates.form.create_server.button_create') %>'
          : '<%= tjs('form.button.save') %>',
        iconCls: ('add' == mode) ? 'icon-button-add' : 'icon-button-save',
        ref: '../submitButton',
        handler: function() {
          var limits = [];
          Ext.StoreMgr.get('storeLimits').query().each(function(item) {
            limits.push(item.data);
          });
        
          formEditServerTemplate.form.submit({
            params: { 'raw_limits': Ext.util.JSON.encode(limits) },
            waitMsg: '<%= tjs('form.loading') %>',
            success: function() {
              serverTemplatesGrid.store.reload();
              windowEditServerTemplate.close();
              serverTemplatesGrid.getSelectionModel().clearSelections();
            },
            failure: function(form, action) {
              Owp.form.errorHandler(form, action);
            }
          });
        }
      }, {
        text: '<%= tjs('form.button.cancel') %>',
        iconCls: 'icon-button-cancel',
        handler: function() {
          windowEditServerTemplate.close();
        }
      }]
    });
    
    windowEditServerTemplate.on('show', function() {
      if ('add' == mode) {
        formEditServerTemplate.getForm().reset();
        Ext.getCmp('fieldCpuUnits').setValue(1000);
        Ext.getCmp('fieldCpus').setValue(1);
        Ext.getCmp('fieldCpuLimit').setValue(50);
        windowEditServerTemplate.focus();
      } else {
        var selectedNode = Ext.getCmp('serverTemplatesGrid').getSelectionModel().getSelected();
        formEditServerTemplate.getForm().load({
          waitMsg: '<%= tjs('form.loading') %>',
          success: function(form, action) {
            var limits = Ext.decode(action.result.data.raw_limits);
            storeLimits.loadData(limits);
            
            windowEditServerTemplate.focus();
          },
          url: '<%= url_for :controller => 'admin/server-templates', :action => 'load_data' %>',
          params: {
            id: selectedNode.id
          }
        });
        formEditServerTemplate.getForm().findField('id').setValue(selectedNode.id);
      }
    });
    
    windowEditServerTemplate.show();
  }

  function addTemplate() {
    showServerTemplateEditForm('add');
  }
  
  function editTemplate() {
    showServerTemplateEditForm('edit');
  }
  
  function removeTemplate() {
    Ext.MessageBox.confirm(
      '<%= tjs('form.confirmation') %>',
      '<%= tjs('admin.server_templates.form.remove_template.sure_to_remove') %>',
      function(button, text) {
        if ('yes' == button) { 
          Owp.list.groupAction({
            gridName: 'serverTemplatesGrid',
            url: '<%= url_for :controller => 'admin/server-templates', :action => 'delete' %>',
            waitMsg: '<%= tjs('form.performing_task') %>',
            failure: {
              title: '<%= tjs('form.error.title') %>',
              msg: '<%= tjs('admin.server_templates.form.remove_template.deletion_failed') %>'
            }
          });
        }
      }
    );
  }
  
  var store = new Ext.data.JsonStore({
    url: '<%= url_for :controller => 'admin/server-templates', :action => 'list_data', :hardware_server_id => @hardware_server.id %>',
    root: 'data',
    autoLoad: true,
    data: <%= { :data => @server_templates_list }.to_json %>,
    sortInfo: { field: 'name', direction: 'ASC' },
    fields: [
      { name: 'id' },
      { name: 'name' },
      { name: 'is_default' },
      { name: 'virtual_servers' }
    ]
  });
  
  var selectionModel = new Ext.grid.CheckboxSelectionModel({
    listeners: {
      selectionchange: function(selectionModel) {
        if (selectionModel.getCount()) {
          serverTemplatesGrid.removeButton.enable();
        } else {
          serverTemplatesGrid.removeButton.disable();
        }
        
        if (1 == selectionModel.getCount()) {
          serverTemplatesGrid.editButton.enable();
        } else {
          serverTemplatesGrid.editButton.disable();
        }
      }
    }
  });
  
  var serverTemplatesGrid = new Ext.grid.GridPanel({
    id: 'serverTemplatesGrid',
    store: store,
    title: '<%= tjs('admin.server_templates.grid.title') %>',
    loadMask: true,
    tools: [{ 
      id: 'refresh',
      handler: function() {
        serverTemplatesGrid.getStore().reload();
      }
    }],
    cm: new Ext.grid.ColumnModel([
      selectionModel, 
      {
        id: 'name',
        header: '<%= tjs('admin.server_templates.grid.column.name') %>',
        sortable: true,
        dataIndex: 'name',
        renderer: function(name, metadata, record) {
          if (record.data.is_default) {
            return '<b>' + name + '</b> (<%= tjs('admin.server_templates.grid.column.template_default') %>)';
          } else {
            return name;
          }
        }
      }, {
        id: 'virtual_servers',
        header: '<%= tjs('admin.server_templates.grid.column.virtual_servers') %>',
        sortable: true,
        dataIndex: 'virtual_servers'
      }
    ]),
    sm: selectionModel,
    stripeRows: true,
    autoExpandColumn: 'name',
    autoWidth: true,
    stripeRows: true,
    frame: true,
    iconCls: 'icon-items-list',
    tbar: [{
      text: '<%= tjs('admin.server_templates.grid.button.add') %>',
      handler: addTemplate,
      cls: 'x-btn-text-icon',
      icon: '<%= image_path 'add.png' %>'
    }, {
      text: '<%= tjs('admin.server_templates.grid.button.remove') %>',
      handler: removeTemplate,
      cls: 'x-btn-text-icon',
      icon: '<%= image_path 'delete.png' %>',
      ref: '../removeButton',
      disabled: true
    }, {
      text: '<%= tjs('admin.server_templates.grid.button.edit') %>',
      handler: editTemplate,
      cls: 'x-btn-text-icon',
      icon: '<%= image_path 'wrench.png' %>',
      ref: '../editButton',
      disabled: true
    }]
  });

  Owp.layout.addToCenter(serverTemplatesGrid);

});
<% end -%>