Projekt

Obecné

Profil

Stáhnout (37 KB) Statistiky
| Větev: | Tag: | Revize:
8baed187 Michal Kliment
<?php
/**
* JavaScript funcionality for adding ofdevice especially form building.
*
* @author Ondřej Fibich
*/

// IDE complementation
if (FALSE): ?><script type='text/javascript'><?php endif

?>
// WARNING! be very careful during changing of form in controller,
// this ID is dynamic, change of code in controller may broke it!
var $eth_ifaces_group = $('#group-5');
var $wlan_ifaces_group = $('#group-6');
var $port_group = $('#group-7');
var $internal_group = $('#group-8');
// values for dropdowns
var subnets_options = '<option value="">---- <?php echo __('Select subnet') ?> ----</option><?php foreach ($arr_subnets as $k => $v): ?><option value="<?php echo $k ?>"><?php echo $v ?></option><?php endforeach; ?>';
var devices_options = '<option value="">---- <?php echo __('Select device') ?> ----</option><?php foreach ($arr_devices as $k_u => $v_u): ?><optgroup label="<?php echo $k_u ?>"><?php foreach ($v_u as $k => $v): ?><option value="<?php echo $k ?>"><?php echo $v ?></option><?php endforeach; ?></optgroup><?php endforeach; ?>';
// port modes asociative array
var port_modes = new Array();
<?php foreach (Iface_Model::get_port_modes() as $k => $v): ?>
port_modes[<?php echo $k ?>] = '<?php echo $v ?>';
<?php endforeach; ?>
// connecting suggestions
var suggest_connected_to = new Array();
/**
* Opens dialog for specifing of details of IP address of iface. Data
* are stored in hidden fields.
*/
function add_detail_to_ip()
{
var $td = $(this).parent().parent();
$('#dialog_ip_address_detail form').validate();
// set form with current values
$('#gateway_input').val($td.find('input[name^="gateway["]').val());
$('#service_input').val($td.find('input[name^="service["]').val());
// dialog button action submit
$('#dialog_ip_address_detail form button').unbind('click').click(function ()
{
if ($('#dialog_ip_address_detail form').valid())
{
// fill in hidden fields
$td.find('input[name^="gateway["]').val($('#gateway_input').val())
$td.find('input[name^="service["]').val($('#service_input').val())
// close dialog
$('#dialog_ip_address_detail').dialog('close');
}
});
// open dialog
$('#dialog_ip_address_detail').dialog({
title: '<?php echo __('Add details to IP address') ?>',
modal: true,
position: ['center', 100]
});
return false;
}
/**
* Opens dialog for specifing of details of link of iface. Data are stored
* in hidden fields.
*/
function add_detail_to_link()
{
var $td = $(this).parent().parent();
$('#dialog_link_detail form').validate();
// set form with current values
$('#link_name_input').val($td.find('input[name^="link_name["]').val());
$('#link_comment_input').val($td.find('input[name^="link_comment["]').val());
$('#eth_medium_input').val($td.find('input[name^="medium["]').val());
$('#wl_medium_input').val($td.find('input[name^="medium["]').val());
$('#port_medium_input').val($td.find('input[name^="medium["]').val());
var bitrate = $td.find('input[name^="bitrate["]').val();
$('#bitrate_input').val(substr(bitrate, 0, bitrate.length-1));
$('#bitrate_unit_input').val(substr(bitrate, -1));
$('#duplex_input').val($td.find('input[name^="duplex["]').val());
$('#ssid_input').val($td.find('input[name^="wireless_ssid["]').val());
$('#norm_input').val($td.find('input[name^="wireless_norm["]').val());
$('#frequency_input').val($td.find('input[name^="wireless_frequency["]').val());
$('#channel_input').val($td.find('input[name^="wireless_channel["]').val());
$('#channel_width_input').val($td.find('input[name^="wireless_channel_width["]').val());
$('#polarization_input').val($td.find('input[name^="wireless_polarization["]').val());
// dialog button action submit
$('#dialog_link_detail form button').unbind('click').click(function ()
{
if ($('#dialog_link_detail form').valid())
{
// fill in hidden fields
switch (parseInt($td.find('input[name^="type["]').val()))
{
case <?php echo Iface_Model::TYPE_WIRELESS ?>:
$td.find('input[name^="medium["]').val($('#wl_medium_input').val());
break;
case <?php echo Iface_Model::TYPE_ETHERNET ?>:
$td.find('input[name^="medium["]').val($('#eth_medium_input').val());
break;
case <?php echo Iface_Model::TYPE_PORT ?>:
$td.find('input[name^="medium["]').val($('#port_medium_input').val());
break;
}
$td.find('input[name^="link_autosave["]').val('1');
$td.find('input[name^="link_name["]').val($('#link_name_input').val());
$td.find('input[name^="link_comment["]').val($('#link_comment_input').val());
$td.find('input[name^="bitrate["]').val($('#bitrate_input').val() + $('#bitrate_unit_input').val());
$td.find('input[name^="duplex["]').val($('#duplex_input').val());
$td.find('input[name^="wireless_ssid["]').val($('#ssid_input').val());
$td.find('input[name^="wireless_norm["]').val($('#norm_input').val());
$td.find('input[name^="wireless_frequency["]').val($('#frequency_input').val());
$td.find('input[name^="wireless_channel["]').val($('#channel_input').val());
$td.find('input[name^="wireless_channel_width["]').val($('#channel_width_input').val());
$td.find('input[name^="wireless_polarization["]').val($('#polarization_input').val());
// close dialog
$('#dialog_link_detail').dialog('close');
}
});
$('#eth_medium_input').parent().parent().show();
$('#wl_medium_input').parent().parent().show();
$('#port_medium_input').parent().parent().show();
$('#ssid_input').parent().parent().show();
$('#norm_input').parent().parent().show();
$('#frequency_input').parent().parent().show();
$('#channel_input').parent().parent().show();
$('#channel_width_input').parent().parent().show();
$('#polarization_input').parent().parent().show();
switch (parseInt($td.find('input[name^="type["]').val()))
{
case <?php echo Iface_Model::TYPE_WIRELESS ?>:
$('#eth_medium_input').parent().parent().hide();
$('#port_medium_input').parent().parent().hide();
break;
case <?php echo Iface_Model::TYPE_ETHERNET ?>:
$('#wl_medium_input').parent().parent().hide();
$('#port_medium_input').parent().parent().hide();
$('#ssid_input').parent().parent().hide();
$('#norm_input').parent().parent().hide();
$('#frequency_input').parent().parent().hide();
$('#channel_input').parent().parent().hide();
$('#channel_width_input').parent().parent().hide();
$('#polarization_input').parent().parent().hide();
break;
case <?php echo Iface_Model::TYPE_PORT ?>:
$('#wl_medium_input').parent().parent().hide();
$('#eth_medium_input').parent().parent().hide();
$('#ssid_input').parent().parent().hide();
$('#norm_input').parent().parent().hide();
$('#frequency_input').parent().parent().hide();
$('#channel_input').parent().parent().hide();
$('#channel_width_input').parent().parent().hide();
$('#polarization_input').parent().parent().hide();
break;
};
// open dialog
$('#dialog_link_detail').dialog({
title: '<?php echo __('Add details to link') ?>',
modal: true,
position: ['center', 100],
width: 500
});
return false;
}
/**
* Opens dialog for specifing of details of iface. Data are stored in hidden
* fields.
*/
function add_detail_to_iface()
{
var $td = $(this).parent().parent();
$('#dialog_iface_detail form').validate();
// set form with current values
$('#iface_name_input').val($td.find('input[name^="name["]').val());
$('#comment_input').val($td.find('input[name^="comment["]').val());
$('#port_number_input').val($td.find('input[name^="number["]').val());
$('#port_mode_input').val($td.find('input[name^="port_mode["]').val());
$('#wireless_mode_input').val($td.find('input[name^="wireless_mode["]').val());
$('#wireless_antenna_input').val($td.find('input[name^="wireless_antenna["]').val());
// dialog button action submit
$('#dialog_iface_detail form button').unbind('click').click(function ()
{
if ($('#dialog_iface_detail form').valid())
{
// fill in hidden fields
$td.find('input[name^="name["]').val($('#iface_name_input').val());
$td.find('input[name^="comment["]').val($('#comment_input').val());
$td.find('input[name^="number["]').val($('#port_number_input').val());
$td.find('input[name^="port_mode["]').val($('#port_mode_input').val());
$td.find('input[name^="wireless_mode["]').val($('#wireless_mode_input').val());
$td.find('input[name^="wireless_antenna["]').val($('#wireless_antenna_input').val());
// update connected to device
$td.find('select[name^="connected["]').trigger('change', $td.find('select[name^="connected_iface["]').val());
//set texts
if (parseInt($td.find('input[name^="type["]').val()) == <?php echo Iface_Model::TYPE_PORT ?>)
{
$td.find('.port_name').text('Port ' + $('#port_number_input').val() + ', <?php echo __('Mode') ?> ' + port_modes[$('#port_mode_input').val()]);
}
else
{
$td.find('.iface_name').text($('#iface_name_input').val());
}
// close dialog
$('#dialog_iface_detail').dialog('close');
}
return false;
});

$('#port_number_input').parent().parent().show();
$('#port_mode_input').parent().parent().show();
$('#wireless_mode_input').parent().parent().show();
$('#wireless_antenna_input').parent().parent().show();

switch (parseInt($td.find('input[name^="type["]').val()))
{
case <?php echo Iface_Model::TYPE_WIRELESS ?>:
$('#port_number_input').parent().parent().hide();
$('#port_mode_input').parent().parent().hide();
break;
case <?php echo Iface_Model::TYPE_ETHERNET ?>:
$('#port_number_input').parent().parent().hide();
$('#port_mode_input').parent().parent().hide();
$('#wireless_mode_input').parent().parent().hide();
$('#wireless_antenna_input').parent().parent().hide();
break;
case <?php echo Iface_Model::TYPE_PORT ?>:
$('#wireless_mode_input').parent().parent().hide();
$('#wireless_antenna_input').parent().parent().hide();
break;
case <?php echo Iface_Model::TYPE_INTERNAL ?>:
$('#port_number_input').parent().parent().hide();
$('#port_mode_input').parent().parent().hide();
$('#wireless_mode_input').parent().parent().hide();
$('#wireless_antenna_input').parent().parent().hide();
break;
};
// open dialog
$('#dialog_iface_detail').dialog({
title: '<?php echo __('Add details to interface') ?>',
modal: true,
position: ['center', 100],
width: 500
});
return false;
}
/**
* Opens dialog with filter for connected to devices.
*/
function filter_devices()
{
var $tr = $(this).parent().parent();
$('#loading-overlay').show();
setTimeout(function()
{
// dialog button action submit
$('#filter_form').unbind('submit').submit(function ()
{
var $i = $tr.find('input[name^="_device_filter["]');
$i.val($(this).serialize()).trigger('change');
$('#dialog_filter_devices').dialog('close');
return false;
});

// filter field subnet
var subnet_id = $tr.find('select[name^="subnet["]').val();
$('.filter_field_subnet').val(subnet_id);
// open dialog
$('#dialog_filter_devices').dialog({
title: '<?php echo __('Filter devices') ?>',
modal: true,
position: ['center', 100],
width: 700
});
$('#loading-overlay').hide();
});
return false;
}
/**
* On click to refresh button - reload connected ifaces
*/
function refresh_ifaces()
{
var $td = $(this).parent();
var $siface = $td.find('select[name^="connected_iface["]');
$siface.css('opacity', 0.5);
$td.find('select[name^="connected["]').trigger('change', $siface.val());
$siface.animate({'opacity': 1}, 100);
return false;
}
/**
* On change of connected to device dropdown, select suitable ifaces
*
* @param event Change event
* @param iface_id Iface Id for selecting loaded dependent fields
*/
function change_connected(event, iface_id)
{
var $eif = $(this).parent().find('select[name^="connected_iface["]');
var $ety = $(this).parent().parent().find('input[name^="type["]');
if (!$eif.length || !$ety.length)
{
return;
}
var value = $(this).val();
$(this).parent().find('a.device_show').remove();
var $popup_add_iface = $(this).parent().parent().find('.popup-add');
var $refresh_button_ifaces = $(this).parent().parent().find('.refresh_ifaces');
$popup_add_iface.hide();
$refresh_button_ifaces.hide();
if (!parseInt(value))
{
$eif.html('');
$eif.removeClass('required');
return;
}
if (!$eif.hasClass('required'))
{
$eif.addClass('required');
}
// add link for showing of device
$(this).parent().find('.a_filter_devices').after($('<a>', {
href: '<?php echo url_lang::base() ?>devices/show/' + value,
title: '<?php echo __('Show selected device') ?>'
}).addClass('device_add_detail_button popup_link device_show').html('<?php echo html::image(array('src' => '/media/images/icons/grid_action/show.png')) ?>'));
// show add button
var add_button_href = '<?php echo url_lang::base() ?>ifaces/add/';
add_button_href += value + '/null/1/';
add_button_href += $(this).parent().parent().find('input[name^="type["]').val();
$popup_add_iface.attr('href', add_button_href).show();
// show refresh button
$refresh_button_ifaces.show();
// change map button href for prefilled enum type in add form dialog
var map_a = $(this).parent().find('.device_map');
if (map_a.length)
{
var parts = map_a.attr('href').split('?');
map_a.attr('href', rtrim(parts[0], '0123456789/') + '/' + value + '?' + parts[1]);
}
var wmode = $(this).parent().parent().find('input[name^="wireless_mode["]').val();
$.getJSON('<?php echo url_lang::base() ?>json/get_ifaces?data='+value+'&itype='+
$ety.val()+'&wmode='+wmode, function (data)
{
var options = ['<option value="">---- <?php echo __('Select interface') ?> ---</option>'];
for (var i in data)
{
options.push('<option value="');
options.push(data[i].id);
options.push('"');
if (iface_id == data[i].id || data.length == 1)
{
options.push(' selected="selected"');
}
options.push('>');
options.push(data[i].name);
options.push('</option>');
}

$eif.html(options.join('')).trigger('change');
});
}
/**
* On change of connected iface to device dropdown, set link
*/
function change_connected_iface()
{
var iface_id = $(this).val();
var $p = $(this).parent().parent();
var made = false;
if (parseInt(iface_id))
{
$.ajax({
method: 'get',
dataType: 'json',
async: false,
url: '<?php echo url_lang::base(); ?>json/get_link_by_iface?iface_id=' + iface_id,
success: function (v)
{
if (v && parseInt(v.id))
{
made = true;
$p.find('input[name^="link_id["]').val(v.id);
$p.find('input[name^="medium["]').val(v.medium);
$p.find('input[name^="link_name["]').val(v.name);
$p.find('input[name^="link_comment["]').val(v.comment);
$p.find('input[name^="bitrate["]').val(v.bitrate);
$p.find('input[name^="duplex["]').val(v.duplex);
$p.find('input[name^="wireless_ssid["]').val(v.wireless_ssid);
$p.find('input[name^="wireless_norm["]').val(v.wireless_norm);
$p.find('input[name^="wireless_frequency["]').val(v.wireless_frequency);
$p.find('input[name^="wireless_channel["]').val(v.wireless_channel);
$p.find('input[name^="wireless_channel_width["]').val(v.wireless_channel_width);
$p.find('input[name^="wireless_polarization["]').val(v.wireless_polarization);
}
}
});
}

if (!made)
{
var type = $p.find('input[name^="type["]').val();
var default_name = (type == <?php echo Iface_Model::TYPE_WIRELESS ?>) ? '<?php echo __('air') ?>' : '<?php echo __('cable') ?>';
var device_id = $(this).parent().find('select[name^="connected["] option:selected').val();

$.ajax({
method: 'get',
dataType: 'json',
async: false,
url: '<?php echo url_lang::base(); ?>json/get_device_name?device_id=' + device_id,
success: function (v)
{
if (v && v.name)
{
default_name += ' ' + v.name;
}
}
});

default_name += ' - ' + $('#device_name').val();

$p.find('input[name^="link_id["]').val(null);
$p.find('input[name^="link_name["]').val(default_name);
$p.find('input[name^="link_comment["]').val(null);
$p.find('input[name^="medium["]').val((type == <?php echo Iface_Model::TYPE_WIRELESS ?>) ? <?php echo Link_Model::MEDIUM_AIR ?> : <?php echo Link_Model::MEDIUM_CABLE ?>);
$p.find('input[name^="bitrate["]').val((type == <?php echo Iface_Model::TYPE_WIRELESS ?>) ? '<?php echo Link_Model::get_wireless_max_bitrate(Link_Model::NORM_802_11_G) ?>M' : '100M');
$p.find('input[name^="duplex["]').val(0);
$p.find('input[name^="wireless_ssid["]').val(null);
$p.find('input[name^="wireless_norm["]').val((type == <?php echo Iface_Model::TYPE_WIRELESS ?>) ? '<?php echo Link_Model::NORM_802_11_G ?>' : null);
$p.find('input[name^="wireless_frequency["]').val(null);
$p.find('input[name^="wireless_channel["]').val(null);
$p.find('input[name^="wireless_channel_width["]').val(null);
$p.find('input[name^="wireless_polarization["]').val(null);
}
}
/**
* On any change in row select use button
*/
function use_row()
{
$(this).parent().parent().find('input[name^="use["]')
.attr('checked', true).trigger('change');
}
/**
* On change of use of row - change all fields to required or otherwise
*/
function change_use()
{
if (!$(this).is(':checked') && ($(this).attr('type') == 'checkbox'))
{
$(this).parent().parent().find('input, select').removeClass('error');
$(this).parent().parent().find('label.error').remove();
}
}
/**
* On change of device filter - change content of form
*/
function change_filter_connected()
{
var $tr = $(this).parent().parent();
var $select = $tr.find('select[name^="connected["]');
// loader
$select.html('<option value=""><?php echo __('Loading data, please wait') ?>...</option>');
// load filtered content
$.getJSON('<?php echo url_lang::base() ?>json/get_filtered_devices?' + urldecode($(this).val()), function (options)
{
// select suggestion
var type = $tr.find('input[name^="type["]').val();
// reload suggestions
reload_suggestions($select, false);
var sug = suggest_connected_to[type];
// update form
var options_html = ['<option value="">--- <?php echo __('Select device') ?> ---</option>'];
for (var i in options)
{
options_html.push('<optgroup label="');
options_html.push(options[i]['user_name']);
options_html.push('">');
for (var u in options[i]['devices'])
{
var device = options[i]['devices'][u];
options_html.push('<option value="');
options_html.push(device['id']);
options_html.push('"');

if (sug != undefined && device['id'] == sug.device_id)
{
options_html.push(' selected="selected"');
}

options_html.push('>');
options_html.push(device['name']);
options_html.push('</option>');
}
options_html.push('</optgroup>');
}
var iface_id = (sug == undefined || sug.iface_id == undefined) ? undefined : sug.iface_id;

$select.html(options_html.join('')).trigger('change', iface_id);
});
}
/**
* On change of IP address fields add require option to subnet if value is
* not empty.
*/
function change_ip_address()
{
var $subnet = $(this).parent().find('select[name="subnet["]');
if ($(this).val().length)
{
if (!$subnet.hasClass('required'))
{
$subnet.addClass('required');
}
}
else
{
$subnet.removeClass('required');
}
}
/**
* Reloads suggestions stored in suggest_connected_to by values of row of form
*
* @param e Element in row
* @param async Is request to server asynchronious [optional]
*/
function reload_suggestions(e, async)
{
if (async == undefined)
{
async = true;
}
suggest_connected_to = new Array();
if (parseInt($('#user_id').val()))
{
var qs = [];
qs.push('user_id=' + $('#user_id').val());
qs.push('gpsx=' + urlencode($('#gpsx').val()));
qs.push('gpsy=' + urlencode($('#gpsy').val()));
qs.push('wmode=' + $(e).parent().parent().find('input[name^="wireless_mode["]').val());
qs.push($(e).parent().parent().find('input[name^="_device_filter["]').val());
$.ajax({
method: 'get',
dataType: 'json',
async: (async == true),
url: '<?php echo url_lang::base() ?>json/get_suggestion_for_connecting_to?' + qs.join('&'),
success: function(data)
{
suggest_connected_to = data;
}
});
}
}
/**
* Creates hidden inputs by given array.
*
* @param inputs Definition of inputs (key is name and value is value of field)
*/
function create_hidden_inputs(inputs)
{
var html = [];
for (var k in inputs)
{
if(inputs.hasOwnProperty(k))
{
html.push('<input type="hidden" name="');
html.push(k);
html.push('" value="');
html.push(inputs[k]);
html.push('" />');
}
}
return html.join('');
}
/**
* Creates a from of group according to data. Form is indexem by global
* couter which initial value is given also by a parameter. The final
* value of the counter is returned.
*
* @param $group Group on which the form is created
* @param data Data (device templates form)
* @param start_index Start index of counter
* @return integer The value of counter after creating
*/
function create_form_of_group($group, data, start_index)
{
var html_buffer = ['<tr><td colspan="2">'];
html_buffer.push('<table class="extended" style="width: 100%"><tr>');
// header
if (data['count'] == undefined)
{
html_buffer.push('<th style="width:10px"><?php echo __('Use') ?>?</th>');
}
if (data['has_mac'])
{
html_buffer.push('<th style="width: 150px"><?php echo __('Interface') ?></th>');
}
else if (data['type'] == <?php echo Iface_Model::TYPE_PORT ?>)
{
html_buffer.push('<th><?php echo __('Port') ?></th>');
}
if (data['has_ip'])
{
html_buffer.push('<th style="width: 150px"><?php echo __('IP address') ?></th>');
}
if (data['has_link'])
{
html_buffer.push('<th style="width: 180px"><?php echo __('Connected to device') ?></th>');
}
html_buffer.push('</tr>');
// indicator of first row of group
var first_row = true;
// body
var count = (data['count'] == undefined) ? data['max_count'] : data['count'];
count += start_index;
for (var i = start_index; i < count; i++)
{
// get current item
var item = false;
if (data['items'] != undefined)
{
item = data['items'].shift();
}
// build hidden elements
var iface_hidden_a = new Array();
iface_hidden_a['name[' + i + ']'] = (item.name == undefined) ? null : item.name;
iface_hidden_a['comment[' + i + ']'] = null;
iface_hidden_a['number[' + i + ']'] = (item.number == undefined) ? null : item.number;
iface_hidden_a['port_mode[' + i + ']'] = (item.port_mode == undefined) ? null : item.port_mode;
iface_hidden_a['type[' + i + ']'] = data['type'];
iface_hidden_a['wireless_mode[' + i + ']'] = (item.wireless_mode == undefined) ? null : item.wireless_mode;
iface_hidden_a['wireless_antenna[' + i + ']'] = (item.wireless_antenna == undefined) ? null : item.wireless_antenna;
var iface_hid = create_hidden_inputs(iface_hidden_a);

if (data['has_ip'])
{
var ip_hidden_a = new Array();
ip_hidden_a['dhcp[' + i + ']'] = 0;
ip_hidden_a['gateway[' + i + ']'] = 0;
ip_hidden_a['service[' + i + ']'] = 0;
var ip_hiddden = create_hidden_inputs(ip_hidden_a);
}

if (data['has_link'])
{
var link_hidden_a = new Array();
link_hidden_a['link_autosave[' + i + ']'] = '0';
link_hidden_a['link_id[' + i + ']'] = null;
link_hidden_a['link_name[' + i + ']'] = null;
link_hidden_a['link_comment[' + i + ']'] = null;
link_hidden_a['medium[' + i + ']'] = (data['type'] == <?php echo Iface_Model::TYPE_WIRELESS ?>) ? <?php echo Link_Model::MEDIUM_AIR ?> : <?php echo Link_Model::MEDIUM_CABLE ?>;
link_hidden_a['bitrate[' + i + ']'] = (data['type'] == <?php echo Iface_Model::TYPE_WIRELESS ?>) ? '<?php echo Link_Model::get_wireless_max_bitrate(Link_Model::NORM_802_11_G) ?>M' : '100M';
link_hidden_a['duplex[' + i + ']'] = 0;
link_hidden_a['wireless_ssid[' + i + ']'] = null;
link_hidden_a['wireless_norm[' + i + ']'] = (data['type'] == <?php echo Iface_Model::TYPE_WIRELESS ?>) ? '<?php echo Link_Model::NORM_802_11_G ?>' : null;
link_hidden_a['wireless_frequency[' + i + ']'] = null;
link_hidden_a['wireless_channel[' + i + ']'] = null;
link_hidden_a['wireless_channel_width[' + i + ']'] = null;
link_hidden_a['wireless_polarization[' + i + ']'] = null;
link_hidden_a['_device_filter[' + i + ']'] = null;
var link_hid = create_hidden_inputs(link_hidden_a);
}

// make HTML
html_buffer.push('<tr>');
// not hard count => some fields may be optional
if (data['count'] == undefined)
{
html_buffer.push('<th style="width:10px">')
if (data['min_count'] <= (i - start_index)) // optional
{
html_buffer.push('<input type="checkbox" name="use[');
html_buffer.push(i);
html_buffer.push(']" value="1" style="width: auto;" />');
}
else // hard
{
html_buffer.push('<input type="hidden" name="use[');
html_buffer.push(i);
html_buffer.push(']" value="1" />');
}
html_buffer.push('</th>');
}
else
{
html_buffer.push('<input type="hidden" name="use[');
html_buffer.push(i);
html_buffer.push(']" value="1" />');
}
html_buffer.push('<td><label class="device_add_label"><?php echo __('Name') ?>: </label>');
html_buffer.push('<b class="iface_name">');
html_buffer.push(item['name']);
html_buffer.push('</b><br />');
if (data['has_mac'])
{
html_buffer.push('<label class="device_add_label">MAC: </label>');
html_buffer.push('<input type="text" name="mac[');
html_buffer.push(i);
html_buffer.push(']" class="mac_address" style="width: 12em" />');
}
else if (data['type'] == <?php echo Iface_Model::TYPE_PORT ?>)
{
var text = 'Port ' + item.number + ', <?php echo __('Mode') ?> ' + port_modes[item.port_mode];
html_buffer.push('<b class="port_name" width="font-size: 110%">' + text + '</b>');
}
html_buffer.push(iface_hid);
html_buffer.push('<a href="#" title="<?php echo __('Add details to interface') ?>" class="device_add_detail_button add_detail_to_iface">');
html_buffer.push('<?php echo html::image(array('src' => 'media/images/icons/settings.gif')) ?>');
html_buffer.push('</a>');
html_buffer.push('</td>');
if (data['has_ip'])
{
html_buffer.push('<td>');
html_buffer.push('<label class="device_add_label">IP: </label>');
html_buffer.push('<input type="text" name="ip[');
html_buffer.push(i);
html_buffer.push(']" style="width:11em" class="ip_address ip_address_check" />');
html_buffer.push(ip_hiddden);
html_buffer.push('<a href="#" class="device_add_detail_button add_detail_to_ip" title="<?php echo __('Add details to IP address') ?>">');
html_buffer.push('<?php echo html::image(array('src' => 'media/images/icons/settings.gif')) ?>');
html_buffer.push('</a><br />');
html_buffer.push('<label class="device_add_label"><?php echo __('Subnet') ?>: </label>');
html_buffer.push('<select name="subnet[');
html_buffer.push(i);
html_buffer.push(']" style="width: 11em">');
html_buffer.push(subnets_options);
html_buffer.push('</select>');
html_buffer.push('</td>');
}
if (data['has_link'])
{
html_buffer.push('<td style="width: 180px">');
html_buffer.push('<select name="connected[');
html_buffer.push(i);
html_buffer.push(']" style="width: 16em"');
if (first_row && data['type'] != '<?php echo Iface_Model::TYPE_PORT ?>')
{
html_buffer.push(' class="connected_first_' + data['type'] + '"');
}
html_buffer.push('>');
html_buffer.push(devices_options);
html_buffer.push('</select>');
html_buffer.push('<a href="#" class="device_add_detail_button a_filter_devices" title="<?php echo __('Filter devices') ?>">');
html_buffer.push('<?php echo html::image(array('src' => 'media/images/icons/filter.png')) ?>');
html_buffer.push('</a>');
/////////////////// Device map - waiting for improoving of functionality :-( ///
// html_buffer.push('<a href="<?php echo url_lang::base() ?>devices/map?action=devices_add&name=connected[');
// html_buffer.push(i);
// html_buffer.push(']" class="device_add_detail_button popup_link device_map" title="<?php echo __('Select device using device map') ?>">');
// html_buffer.push('<?php echo html::image(array('src' => 'media/images/icons/map_icon.gif')) ?>');
// html_buffer.push('</a>');
////////////////////////////////////////////////////////////////////////////////

html_buffer.push('<br />');
html_buffer.push(link_hid);
html_buffer.push('<select name="connected_iface[');
html_buffer.push(i);
html_buffer.push(']" style="width: 16em"');
if (first_row && data['type'] != '<?php echo Iface_Model::TYPE_PORT ?>')
{
html_buffer.push(' class="connected_iface_first_' + data['type'] + '"');
}
html_buffer.push('>');
html_buffer.push('<option value="">---- <?php echo __('Select interface') ?> ---</option>');
html_buffer.push('</select>');
html_buffer.push('<a href="<?php echo url_lang::base() ?>ifaces/add" id="popup-link-');
html_buffer.push(i + 100);
html_buffer.push('" class="device_add_detail_button popup-add popup_link isReloadOff dispNone" title="<?php echo __('Add new interface') ?>">');
html_buffer.push('<?php echo html::image(array('src' => 'media/images/icons/ico_add.gif', 'style' => 'width:10px;height:10px')) ?>');
html_buffer.push('</a>');
html_buffer.push('<a href="#" class="device_add_detail_button refresh_ifaces dispNone" title="<?php echo __('Refresh interfaces of device') ?>">');
html_buffer.push('<?php echo html::image(array('src' => 'media/images/icons/refresh.gif')) ?>');
html_buffer.push('</a>');
html_buffer.push('<a href="#" class="device_add_detail_button add_detail_to_link" title="<?php echo __('Add details to link') ?>">');
html_buffer.push('<?php echo html::image(array('src' => 'media/images/icons/settings.gif')) ?>');
html_buffer.push('</a><br />');
html_buffer.push('</td>');
}
html_buffer.push('</tr>');
first_row = false;
}
html_buffer.push('</table></td></tr>');
$group.after(html_buffer.join(''));
return i;
}
/**
* Creates form according to device template
*
* @param device_template_value Device template
*/
function create_form_from_device_template(device_template_value)
{
var eths = device_template_value[<?php echo Iface_Model::TYPE_ETHERNET ?>];
var wlans = device_template_value[<?php echo Iface_Model::TYPE_WIRELESS ?>];
var ports = device_template_value[<?php echo Iface_Model::TYPE_PORT ?>];
var internals = device_template_value[<?php echo Iface_Model::TYPE_INTERNAL ?>];
var i = 0;
// trade name
$eth_ifaces_group.before($('<input>', {
name: 'trade_name',
type: 'hidden',
value: $('#device_template_id').text()
}));
// ethernet
if (eths['count'] > 0)
{
i = create_form_of_group($eth_ifaces_group, eths, i);
$eth_ifaces_group.show();
}
else
{
$eth_ifaces_group.hide();
$('.eth-items').remove();
}
// wireless
if (wlans['max_count'] > 0)
{
i = create_form_of_group($wlan_ifaces_group, wlans, i);
$wlan_ifaces_group.show();
}
else
{
$wlan_ifaces_group.hide();
$('.' + $wlan_ifaces_group.attr('id') + '-items').remove();
}
// port
if (ports['count'] > 0)
{
i = create_form_of_group($port_group, ports, i);
$port_group.show();
}
else
{
$port_group.hide();
$('.' + $port_group.attr('id') + '-items').remove();
}
// internal
if (internals['count'] > 0)
{
i = create_form_of_group($internal_group, internals, i);
$internal_group.show();
}
else
{
$internal_group.hide();
$('.' + $internal_group.attr('id') + '-items').remove();
}
// activate all actions and events
$('.add_detail_to_iface').click(add_detail_to_iface);
$('.add_detail_to_ip').click(add_detail_to_ip);
$('.add_detail_to_link').click(add_detail_to_link);
$('.a_filter_devices').click(filter_devices);
$('.refresh_ifaces').click(refresh_ifaces);
$('input[name^="use["]').change(change_use);
$('input[name^="mac["], input[name^="ip["], select[name^="connected["]').change(use_row);
$('input[name^="ip["]').change(change_ip_address);
$('select[name^="connected["]').change(change_connected);
$('select[name^="connected_iface["]').change(change_connected_iface);
$('input[name^="_device_filter["]').change(change_filter_connected);
// set default value of filter
var $filters = $('input[name^="_device_filter["]');
if ($filters.length)
{
$('input[name^="_device_filter["]').val($('#filter_form').serialize());
// reload suggestions (all suggestions are same)
reload_suggestions($filters.get(0), false);
}

// set suggestion on first elements of each group
for (var i in suggest_connected_to)
{
var sug = suggest_connected_to[i];

if (sug.device_id != undefined && sug.iface_id != undefined)
{
$('.connected_first_' + i + ' option[value="' + sug.device_id + '"]').attr('selected', true);
$('.connected_first_' + i).trigger('change', sug.iface_id);
}
}
}
/**
* After confirming of first step of form, some fields must not be editable
* in second step. This function replace these fields by text elements
* and values of form stores in hidden fields with same names as previous
* fields.
*/
function disable_solid_fields()
{
var fields = [
'device_type', 'user_id', 'device_template_id', 'town_id',
'street_id', 'street_number', 'country_id', 'gpsx', 'gpsy'
];
for (var i in fields)
{
var $el = $('#' + fields[i]);
var text = $el.val();
if ($el[0].nodeName == 'SELECT')
{
text = $el.find('option:selected').text();
}
var $input = $('<input>', {
type: 'hidden',
name: $el.attr('name'),
value: $el.val()
});
$el.after($('<b>').text(text)).after($input).remove();
$input.attr('id', fields[i]);
}
}
/// triggers code //////////////////////////////////////////////////////////
// hide all
$eth_ifaces_group.hide();
$wlan_ifaces_group.hide();
$port_group.hide();
$internal_group.hide();
// disable posting of form => just go to next phase
$('#device_add_form').unbind('submit').submit(function ()
{
var $this = $(this);
// validate
if (!$this.validate().form())
{
return false;
}
// disable previous fields
disable_solid_fields();
// remove add buttons
$this.find('a.popup_link').remove();
// loader
$this.after('<?php echo html::image(array('src' => 'media/images/icons/animations/ajax-loader.gif', 'id' => 'da_loader', 'class' => 'ajax-loader')); ?>');
// build form
$.getJSON('<?php echo url_lang::base() ?>json/get_device_template_value', {
device_template_id: $('#device_template_id').val()
}, function (d)
{
create_form_from_device_template(d);
// change button
$this.find('.submit').text('<?php echo __('Save') ?>');
// remove this action
$this.unbind('submit');
// add new
$this.submit(function ()
{
if ($(this).validate().form())
{
// send form
return true;
}
return false;
});
// hide loader
$('#da_loader').hide();
});
// do not send form
return false;
});
// correct dropdown after adding of a template
$('#device_template_id').live('addOption', function (e, new_option_id)
{
$('#device_type').trigger('change');
$('#device_template_id').val(new_option_id);
});
// correct dropdown after adding of a iface
$('select[name^="connected_iface["]').live('addOption', function (e, new_option_id)
{
// reload ifaces
$(this).parent().find('select[name^="connected["]').trigger('change', new_option_id);
});
// on change type update form to proper functionality
$('#device_type').change(function ()
{
var value = $(this).val();
var text = $(this).find('option:selected').text();
// reload devices templates
$('#device_template_id').html('<option><?php echo __('Loading data, please wait') ?>...</option>');
$.getJSON('<?php echo url_lang::base() ?>json/get_device_templates_by_type?type='+value, function(data)
{
var options = [];
$.each(data, function(key, val)
{
options.push('<option value="' + val.id + '"');
if (val.isDefault)
{
options.push(' selected="selected"');
}
options.push('>' + val.name + '</option>');
});
$('#device_template_id').html(options.join(''));
var name_parts = $('#device_name').val().split(' ');
if (name_parts.length <= 2)
{
$('#device_name').val(name_parts[0] + ' ' + text);
}
});
// change add button href for prefilled enum type in add form dialog
var button = $('#device_template_id').parent().find('a');
if (button.length)
{
var parts = button.attr('href').split('?');
parts[1] = (parts[1] == undefined) ? '' : '?' + parts[1];
button.attr('href', rtrim(parts[0], '0123456789/') + '/' + value + parts[1]);
}
});