summaryrefslogtreecommitdiffstats
path: root/usr
diff options
context:
space:
mode:
authorScott Ullrich <sullrich@pfsense.org>2007-07-06 18:46:44 +0000
committerScott Ullrich <sullrich@pfsense.org>2007-07-06 18:46:44 +0000
commit8a58063d2829acd0186798fe2345b6fb647f3338 (patch)
treef77ac7d7cc4a111d381813048de408b1ce3f97d6 /usr
parentaa1ab1da895f3ad49163e6a6d2dcf3f399d6cefb (diff)
downloadpfsense-8a58063d2829acd0186798fe2345b6fb647f3338.zip
pfsense-8a58063d2829acd0186798fe2345b6fb647f3338.tar.gz
Improve the load balancing pool edit screen. Submitted-by: Chris Daniel
Diffstat (limited to 'usr')
-rwxr-xr-xusr/local/www/load_balancer_pool_edit.php53
-rwxr-xr-xusr/local/www/pool.js112
2 files changed, 151 insertions, 14 deletions
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 -&gt; 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">&nbsp;</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;
+ }
+ }
+}
OpenPOWER on IntegriCloud