mirror of
https://github.com/pfsense/pfsense.git
synced 2025-10-26 11:38:35 +00:00
Improve the load balancing pool edit screen.
This commit is contained in:
parent
aa1ab1da89
commit
8a58063d28
@ -35,7 +35,7 @@ function listtags() {
|
||||
$ret = explode(" ", "element alias aliasurl allowedip cacert config columnitem disk dnsserver domainoverrides " .
|
||||
"earlyshellcmd encryption-algorithm-option field fieldname hash-algorithm-option " .
|
||||
"hosts group interface_array item key lbpool menu mobilekey mount onetoone option package passthrumac priv proxyarpnet " .
|
||||
"queue pages pipe route row rule schedule service servernat servers earlyshellcmd shellcmd staticmap subqueue " .
|
||||
"queue pages pipe route row rule schedule service servernat servers serversdisabled earlyshellcmd shellcmd staticmap subqueue " .
|
||||
"timerange tunnel user vip virtual_server vlan winsserver ntpserver wolentry widget depends_on_package");
|
||||
return $ret;
|
||||
}
|
||||
|
||||
@ -48,6 +48,7 @@ if (isset($id) && $a_pool[$id]) {
|
||||
$pconfig['desc'] = $a_pool[$id]['desc'];
|
||||
$pconfig['port'] = $a_pool[$id]['port'];
|
||||
$pconfig['servers'] = &$a_pool[$id]['servers'];
|
||||
$pconfig['serversdisabled'] = &$a_pool[$id]['serversdisabled'];
|
||||
$pconfig['monitor'] = $a_pool[$id]['monitor'];
|
||||
}
|
||||
|
||||
@ -82,13 +83,24 @@ if ($_POST) {
|
||||
foreach($pconfig['servers'] as $svrent) {
|
||||
if (!is_ipaddr($svrent)) {
|
||||
if($_POST['type'] == "server") {
|
||||
$input_errors[] = "{$svrent} is not a valid IP address.";
|
||||
$input_errors[] = "{$svrent} is not a valid IP address (in \"enabled\" list).";
|
||||
} else {
|
||||
$split_ip = split("\|", $svrent);
|
||||
/* if(!is_ipaddr($split_ip[0]))
|
||||
$input_errors[] = "{$split_ip[0]} is not a valid IP address."; */
|
||||
if(!is_ipaddr($split_ip[1]))
|
||||
$input_errors[] = "{$split_ip[1]} is not a valid IP address.";
|
||||
$input_errors[] = "{$split_ip[1]} is not a valid IP address (in \"enabled\" list).";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (is_array($_POST['serversdisabled'])) {
|
||||
foreach($pconfig['serversdisabled'] as $svrent) {
|
||||
if (!is_ipaddr($svrent)) {
|
||||
if($_POST['type'] == "server") {
|
||||
$input_errors[] = "{$svrent} is not a valid IP address (in \"disabled\" list).";
|
||||
} else {
|
||||
$split_ip = split("\|", $svrent);
|
||||
if(!is_ipaddr($split_ip[1]))
|
||||
$input_errors[] = "{$split_ip[1]} is not a valid IP address (in \"disabled\" list).";
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -139,6 +151,7 @@ if ($_POST) {
|
||||
update_if_changed("description", $poolent['desc'], $_POST['desc']);
|
||||
update_if_changed("port", $poolent['port'], $_POST['port']);
|
||||
update_if_changed("servers", $poolent['servers'], $_POST['servers']);
|
||||
update_if_changed("serversdisabled", $poolent['serversdisabled'], $_POST['serversdisabled']);
|
||||
update_if_changed("monitor", $poolent['monitor'], $_POST['monitor']);
|
||||
|
||||
if (isset($id) && $a_pool[$id]) {
|
||||
@ -398,8 +411,7 @@ function clearcombo(){
|
||||
"balance") echo " CHECKED"; ?>><?=gettext("Load Balancing");?><br>
|
||||
<input type="radio" name="behaviour" id="behaviour" value="failover"<?php if($pconfig['behaviour'] ==
|
||||
"failover") echo " CHECKED"; ?>><?=gettext("Failover");?><br>
|
||||
Load Balancing: both active. Failover order: top -> down.<br>
|
||||
NOTE: Failover mode only applies to outgoing rules (multi-wan).
|
||||
Load Balancing: both active. Failover order: top -> down.
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@ -478,6 +490,28 @@ function clearcombo(){
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
Disabled<br/>
|
||||
<select id="serversDisabledSelect" name="serversdisabled[]" multiple="true" size="5">
|
||||
|
||||
<?php
|
||||
if (is_array($pconfig['serversdisabled'])) {
|
||||
foreach($pconfig['serversdisabled'] as $svrent) {
|
||||
if($svrent != '') echo " <option value=\"{$svrent}\">{$svrent}</option>\n";
|
||||
}
|
||||
}
|
||||
echo "</select>";
|
||||
?>
|
||||
<br/>
|
||||
<input class="formbtn" type="button" name="removeDisabled" value="Remove" onclick="RemoveServerFromPool(document.iform, 'serversdisabled[]');" />
|
||||
</td>
|
||||
|
||||
<td valign="middle">
|
||||
<input class="formbtn" type="button" name="moveToEnabled" value=">" onclick="moveOptions(document.iform.serversDisabledSelect, document.iform.serversSelect);" /><br/>
|
||||
<input class="formbtn" type="button" name="moveToDisabled" value="<" onclick="moveOptions(document.iform.serversSelect, document.iform.serversDisabledSelect);" />
|
||||
</td>
|
||||
|
||||
<td>
|
||||
Enabled (default)<br/>
|
||||
<select id="serversSelect" name="servers[]" multiple="true" size="5">
|
||||
|
||||
<?php
|
||||
@ -488,9 +522,12 @@ if (is_array($pconfig['servers'])) {
|
||||
}
|
||||
echo "</select>";
|
||||
?>
|
||||
<br/>
|
||||
<input class="formbtn" type="button" name="removeEnabled" value="Remove" onclick="RemoveServerFromPool(document.iform, 'servers[]');" />
|
||||
</td>
|
||||
<td valign="top">
|
||||
<input class="formbtn" type="button" name="button2" value="Remove from pool" onclick="RemoveServerFromPool(document.iform);">
|
||||
<input class="formbtn" type="button" name="moveUp" value="Move up" onclick="up(document.iform.serversSelect);" /><br/>
|
||||
<input class="formbtn" type="button" name="moveDown" value="Move down" onclick="down(document.iform.serversSelect);" />
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
@ -500,7 +537,7 @@ echo "</select>";
|
||||
<tr align="left">
|
||||
<td width="22%" valign="top"> </td>
|
||||
<td width="78%">
|
||||
<input name="Submit" type="submit" class="formbtn" value="Save" onClick="AllServers('serversSelect', true)">
|
||||
<input name="Submit" type="submit" class="formbtn" value="Save" onClick="AllServers('serversSelect', true); AllServers('serversDisabledSelect', true);">
|
||||
<?php if (isset($id) && $a_pool[$id]): ?>
|
||||
<input name="id" type="hidden" value="<?=$id;?>">
|
||||
<?php endif; ?>
|
||||
|
||||
@ -33,16 +33,27 @@
|
||||
function AddServerToPool(form) {
|
||||
|
||||
var IntOrIp
|
||||
var theSel = form['servers[]'];
|
||||
var enabledSel = form['servers[]'];
|
||||
var disabledSel = form['serversdisabled[]'];
|
||||
if (form.type.selectedIndex == 0)
|
||||
IntOrIp = form.ipaddr;
|
||||
else
|
||||
IntOrIp = form.interface;
|
||||
|
||||
for(i = theSel.length - 1; i >= 0; i--)
|
||||
// Check items in "enabled" list
|
||||
for(i = enabledSel.length - 1; i >= 0; i--)
|
||||
{
|
||||
if(theSel.options[i].value == IntOrIp.value) {
|
||||
alert("IP Address Already In List");
|
||||
if(enabledSel.options[i].value == IntOrIp.value) {
|
||||
alert("IP Address Already In 'Enabled' List");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// Check items in "disabled" list
|
||||
for(i = disabledSel.length - 1; i >= 0; i--)
|
||||
{
|
||||
if(disabledSel.options[i].value == IntOrIp.value) {
|
||||
alert("IP Address Already In 'Disabled' List");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -72,9 +83,9 @@ function AllServers(id, selectAll) {
|
||||
}
|
||||
|
||||
|
||||
function RemoveServerFromPool(form)
|
||||
function RemoveServerFromPool(form, field)
|
||||
{
|
||||
var theSel = form['servers[]'];
|
||||
var theSel = form[field];
|
||||
var selIndex = theSel.selectedIndex;
|
||||
if (selIndex != -1) {
|
||||
for(i=theSel.length-1; i>=0; i--)
|
||||
@ -89,3 +100,92 @@ function RemoveServerFromPool(form)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function addOption(theSel, theText, theValue)
|
||||
{
|
||||
var newOpt = new Option(theText, theValue);
|
||||
var selLength = theSel.length;
|
||||
theSel.options[selLength] = newOpt;
|
||||
}
|
||||
|
||||
function deleteOption(theSel, theIndex)
|
||||
{
|
||||
var selLength = theSel.length;
|
||||
if(selLength>0)
|
||||
{
|
||||
theSel.options[theIndex] = null;
|
||||
}
|
||||
}
|
||||
|
||||
function moveOptions(theSelFrom, theSelTo)
|
||||
{
|
||||
var selLength = theSelFrom.length;
|
||||
var selectedText = new Array();
|
||||
var selectedValues = new Array();
|
||||
var selectedCount = 0;
|
||||
|
||||
var i;
|
||||
|
||||
// Find the selected Options in reverse order
|
||||
// and delete them from the 'from' Select.
|
||||
for(i=selLength-1; i>=0; i--)
|
||||
{
|
||||
if(theSelFrom.options[i].selected)
|
||||
{
|
||||
selectedText[selectedCount] = theSelFrom.options[i].text;
|
||||
selectedValues[selectedCount] = theSelFrom.options[i].value;
|
||||
deleteOption(theSelFrom, i);
|
||||
selectedCount++;
|
||||
}
|
||||
}
|
||||
|
||||
// Add the selected text/values in reverse order.
|
||||
// This will add the Options to the 'to' Select
|
||||
// in the same order as they were in the 'from' Select.
|
||||
for(i=selectedCount-1; i>=0; i--)
|
||||
{
|
||||
addOption(theSelTo, selectedText[i], selectedValues[i]);
|
||||
}
|
||||
}
|
||||
|
||||
// functions up() and down() modified from http://www.babailiica.com/js/sorter/
|
||||
|
||||
function up(obj) {
|
||||
var sel = new Array();
|
||||
for (var i=0; i<obj.length; i++) {
|
||||
if (obj[i].selected == true) {
|
||||
sel[sel.length] = i;
|
||||
}
|
||||
}
|
||||
for (i in sel) {
|
||||
if (sel[i] != 0 && !obj[sel[i]-1].selected) {
|
||||
var tmp = new Array(obj[sel[i]-1].text, obj[sel[i]-1].value);
|
||||
obj[sel[i]-1].text = obj[sel[i]].text;
|
||||
obj[sel[i]-1].value = obj[sel[i]].value;
|
||||
obj[sel[i]].text = tmp[0];
|
||||
obj[sel[i]].value = tmp[1];
|
||||
obj[sel[i]-1].selected = true;
|
||||
obj[sel[i]].selected = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function down(obj) {
|
||||
var sel = new Array();
|
||||
for (var i=obj.length-1; i>-1; i--) {
|
||||
if (obj[i].selected == true) {
|
||||
sel[sel.length] = i;
|
||||
}
|
||||
}
|
||||
for (i in sel) {
|
||||
if (sel[i] != obj.length-1 && !obj[sel[i]+1].selected) {
|
||||
var tmp = new Array(obj[sel[i]+1].text, obj[sel[i]+1].value);
|
||||
obj[sel[i]+1].text = obj[sel[i]].text;
|
||||
obj[sel[i]+1].value = obj[sel[i]].value;
|
||||
obj[sel[i]].text = tmp[0];
|
||||
obj[sel[i]].value = tmp[1];
|
||||
obj[sel[i]+1].selected = true;
|
||||
obj[sel[i]].selected = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user