diff options
author | Scott Ullrich <sullrich@pfsense.org> | 2007-07-06 18:46:44 +0000 |
---|---|---|
committer | Scott Ullrich <sullrich@pfsense.org> | 2007-07-06 18:46:44 +0000 |
commit | 8a58063d2829acd0186798fe2345b6fb647f3338 (patch) | |
tree | f77ac7d7cc4a111d381813048de408b1ce3f97d6 | |
parent | aa1ab1da895f3ad49163e6a6d2dcf3f399d6cefb (diff) | |
download | pfsense-8a58063d2829acd0186798fe2345b6fb647f3338.zip pfsense-8a58063d2829acd0186798fe2345b6fb647f3338.tar.gz |
Improve the load balancing pool edit screen.
Submitted-by: Chris Daniel
-rw-r--r-- | etc/inc/xmlparse.inc | 2 | ||||
-rwxr-xr-x | usr/local/www/load_balancer_pool_edit.php | 53 | ||||
-rwxr-xr-x | usr/local/www/pool.js | 112 |
3 files changed, 152 insertions, 15 deletions
diff --git a/etc/inc/xmlparse.inc b/etc/inc/xmlparse.inc index 5344640..0008458 100644 --- a/etc/inc/xmlparse.inc +++ b/etc/inc/xmlparse.inc @@ -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; } diff --git a/usr/local/www/load_balancer_pool_edit.php b/usr/local/www/load_balancer_pool_edit.php index 73a5064..c4d2dc9 100755 --- a/usr/local/www/load_balancer_pool_edit.php +++ b/usr/local/www/load_balancer_pool_edit.php @@ -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; ?> diff --git a/usr/local/www/pool.js b/usr/local/www/pool.js index 07cb2aa..b6f260e 100755 --- a/usr/local/www/pool.js +++ b/usr/local/www/pool.js @@ -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; + } + } +} |