freenetis-github/application/views/js/devices_add.php @ 8baed187
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]);
|
|||
}
|
|||
});
|
|||