app/views/admin/server_templates/list.html.erb
<% @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 -%>