From 6cb366de714bd8a81d7d54fcaf5cf1ef5bf455d2 Mon Sep 17 00:00:00 2001 From: Stephen Beaver Date: Tue, 15 Sep 2015 08:46:41 -0400 Subject: [PATCH] Double-click to edit, click to select, multi-delete and drag to re-order now supported on: firewall-nat.php firewall-nat-out.php firewall_nat-1to1.php firewall_rules.php --- src/usr/local/www/firewall_aliases.php | 3 +- src/usr/local/www/firewall_nat.php | 85 +++------- src/usr/local/www/firewall_nat_1to1.php | 197 +++++++++++------------- src/usr/local/www/firewall_nat_out.php | 163 ++++++-------------- src/usr/local/www/firewall_rules.php | 165 ++++++++++++++------ 5 files changed, 276 insertions(+), 337 deletions(-) diff --git a/src/usr/local/www/firewall_aliases.php b/src/usr/local/www/firewall_aliases.php index 83d1c3c3f4..89fe0e7b3c 100644 --- a/src/usr/local/www/firewall_aliases.php +++ b/src/usr/local/www/firewall_aliases.php @@ -189,7 +189,8 @@ $shortcut_section = "aliases"; include("head.inc"); if ($savemsg) - print_info_box($savemsg); + print_info_box($savemsg, 'success'); + if (is_subsystem_dirty('aliases')) print_info_box_np(gettext("The alias list has been changed.") . "
" . gettext("You must apply the changes in order for them to take effect.")); diff --git a/src/usr/local/www/firewall_nat.php b/src/usr/local/www/firewall_nat.php index df6bef5ee7..2545072a56 100644 --- a/src/usr/local/www/firewall_nat.php +++ b/src/usr/local/www/firewall_nat.php @@ -80,20 +80,22 @@ if (!is_array($config['nat']['rule'])) { $a_nat = &$config['nat']['rule']; /* update rule order, POST[rule] is an array of ordered IDs */ -if (is_array($_POST['rule']) && !empty($_POST['rule'])) { - $a_nat_new = array(); +if($_POST['order-store']) { + if (is_array($_POST['rule']) && !empty($_POST['rule'])) { + $a_nat_new = array(); - // if a rule is not in POST[rule], it has been deleted by the user - foreach ($_POST['rule'] as $id) - $a_nat_new[] = $a_nat[$id]; + // if a rule is not in POST[rule], it has been deleted by the user + foreach ($_POST['rule'] as $id) + $a_nat_new[] = $a_nat[$id]; - $a_nat = $a_nat_new; + $a_nat = $a_nat_new; - if (write_config()) - mark_subsystem_dirty('filter'); + if (write_config()) + mark_subsystem_dirty('filter'); - header("Location: firewall_nat.php"); - exit; + header("Location: firewall_nat.php"); + exit; + } } /* if a custom message has been passed along, lets process it */ @@ -102,7 +104,6 @@ if ($_GET['savemsg']) { } if ($_POST) { - $pconfig = $_POST; if ($_POST['apply']) { @@ -154,63 +155,17 @@ if (isset($_POST['del_x'])) { mark_subsystem_dirty('filter'); } + unset($a_nat[$rulei]); } + if (write_config()) { mark_subsystem_dirty('natconf'); } + header("Location: firewall_nat.php"); exit; } - -} else { - /* yuck - IE won't send value attributes for image buttons, while Mozilla does - so we use .x/.y to find move button clicks instead... */ - unset($movebtn); - foreach ($_POST as $pn => $pd) { - if (preg_match("/move_(\d+)_x/", $pn, $matches)) { - $movebtn = $matches[1]; - break; - } - } - /* move selected rules before this rule */ - if (isset($movebtn) && is_array($_POST['rule']) && count($_POST['rule'])) { - $a_nat_new = array(); - - /* copy all rules < $movebtn and not selected */ - for ($i = 0; $i < $movebtn; $i++) { - if (!in_array($i, $_POST['rule'])) { - $a_nat_new[] = $a_nat[$i]; - } - } - - /* copy all selected rules */ - for ($i = 0; $i < count($a_nat); $i++) { - if ($i == $movebtn) { - continue; - } - if (in_array($i, $_POST['rule'])) { - $a_nat_new[] = $a_nat[$i]; - } - } - - /* copy $movebtn rule */ - if ($movebtn < count($a_nat)) { - $a_nat_new[] = $a_nat[$movebtn]; - } - - /* copy all rules > $movebtn and not selected */ - for ($i = $movebtn+1; $i < count($a_nat); $i++) { - if (!in_array($i, $_POST['rule'])) { - $a_nat_new[] = $a_nat[$i]; - } - } - $a_nat = $a_nat_new; - if (write_config()) { - mark_subsystem_dirty('natconf'); - } - header("Location: firewall_nat.php"); - exit; - } } $closehead = false; @@ -301,7 +256,6 @@ foreach ($a_nat as $natent): - @@ -415,8 +369,8 @@ endforeach;
- " /> - " disabled="disabled" /> + " /> + " disabled="disabled" />
@@ -454,6 +408,11 @@ events.push(function() { $('#order-store').removeAttr('disabled'); } }); + + // Check all of the rule checkboxes so that their values are posted + $('#order-store').click(function () { + $('[id^=frc]').prop('checked', true); + }); }); + * Copyright (c) 2004-2015 Electric Sheep Fencing, LLC. All rights reserved. + * Copyright (c) 2003-2004 Manuel Kasper * part of m0n0wall (http://m0n0.ch/wall) * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. * - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgment: - * "This product includes software developed by the pfSense Project - * for use in the pfSense software distribution. (http://www.pfsense.org/). + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * "This product includes software developed by the pfSense Project + * for use in the pfSense software distribution. (http://www.pfsense.org/). * - * 4. The names "pfSense" and "pfSense Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * coreteam@pfsense.org. + * 4. The names "pfSense" and "pfSense Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * coreteam@pfsense.org. * - * 5. Products derived from this software may not be called "pfSense" - * nor may "pfSense" appear in their names without prior written - * permission of the Electric Sheep Fencing, LLC. + * 5. Products derived from this software may not be called "pfSense" + * nor may "pfSense" appear in their names without prior written + * permission of the Electric Sheep Fencing, LLC. * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: * - * "This product includes software developed by the pfSense Project - * for use in the pfSense software distribution (http://www.pfsense.org/). + * "This product includes software developed by the pfSense Project + * for use in the pfSense software distribution (http://www.pfsense.org/). * - * THIS SOFTWARE IS PROVIDED BY THE pfSense PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE pfSense PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. + * THIS SOFTWARE IS PROVIDED BY THE pfSense PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE pfSense PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. * - * ==================================================================== + * ==================================================================== * */ /* @@ -78,20 +78,22 @@ if (!is_array($config['nat']['onetoone'])) { $a_1to1 = &$config['nat']['onetoone']; /* update rule order, POST[rule] is an array of ordered IDs */ -if (is_array($_POST['rule']) && !empty($_POST['rule'])) { - $a_1to1_new = array(); +if($_POST['order-store']) { + if (is_array($_POST['rule']) && !empty($_POST['rule'])) { + $a_1to1_new = array(); - // if a rule is not in POST[rule], it has been deleted by the user - foreach ($_POST['rule'] as $id) - $a_1to1_new[] = $a_1to1[$id]; + // if a rule is not in POST[rule], it has been deleted by the user + foreach ($_POST['rule'] as $id) + $a_1to1_new[] = $a_1to1[$id]; - $a_1to1 = $a_1to1_new; - - if (write_config()) - mark_subsystem_dirty('filter'); - - header("Location: firewall_nat_1to1.php"); - exit; + $a_1to1 = $a_1to1_new; + + if (write_config()) + mark_subsystem_dirty('natconf'); + + header("Location: firewall_nat_1to1.php"); + exit; + } } if ($_POST) { @@ -115,6 +117,7 @@ if ($_GET['act'] == "del") { if (write_config()) { mark_subsystem_dirty('natconf'); } + header("Location: firewall_nat_1to1.php"); exit; } @@ -126,9 +129,11 @@ if (isset($_POST['del_x'])) { foreach ($_POST['rule'] as $rulei) { unset($a_1to1[$rulei]); } + if (write_config()) { mark_subsystem_dirty('natconf'); } + header("Location: firewall_nat_1to1.php"); exit; } @@ -146,57 +151,6 @@ if (isset($_POST['del_x'])) { header("Location: firewall_nat_1to1.php"); exit; } -} else { - /* yuck - IE won't send value attributes for image buttons, while Mozilla does - so we use .x/.y to find move button clicks instead... */ - unset($movebtn); - foreach ($_POST as $pn => $pd) { - if (preg_match("/move_(\d+)_x/", $pn, $matches)) { - $movebtn = $matches[1]; - break; - } - } - /* move selected rules before this rule */ - if (isset($movebtn) && is_array($_POST['rule']) && count($_POST['rule'])) { - $a_1to1_new = array(); - - /* copy all rules < $movebtn and not selected */ - for ($i = 0; $i < $movebtn; $i++) { - if (!in_array($i, $_POST['rule'])) { - $a_1to1_new[] = $a_1to1[$i]; - } - } - - /* copy all selected rules */ - for ($i = 0; $i < count($a_1to1); $i++) { - if ($i == $movebtn) { - continue; - } - if (in_array($i, $_POST['rule'])) { - $a_1to1_new[] = $a_1to1[$i]; - } - } - - /* copy $movebtn rule */ - if ($movebtn < count($a_1to1)) { - $a_1to1_new[] = $a_1to1[$movebtn]; - } - - /* copy all rules > $movebtn and not selected */ - for ($i = $movebtn+1; $i < count($a_1to1); $i++) { - if (!in_array($i, $_POST['rule'])) { - $a_1to1_new[] = $a_1to1[$i]; - } - } - if (count($a_1to1_new) > 0) { - $a_1to1 = $a_1to1_new; - } - - if (write_config()) { - mark_subsystem_dirty('natconf'); - } - header("Location: firewall_nat_1to1.php"); - exit; - } } $pgtitle = array(gettext("Firewall"), gettext("NAT"), gettext("1:1")); @@ -223,6 +177,7 @@ display_top_tabs($tab_array); + @@ -245,7 +200,11 @@ display_top_tabs($tab_array); $iconfn = "pass"; } ?> - + + + - + @@ -428,7 +347,7 @@ print($form); - "title=""> + " title=""> @@ -442,7 +361,6 @@ print($form); @@ -594,9 +512,9 @@ print($form); + + @@ -762,6 +682,11 @@ events.push(function() { $('#order-store').removeAttr('disabled'); } }); + + // Check all of the rule checkboxes so that their values are posted + $('#order-store').click(function () { + $('[id^=frc]').prop('checked', true); + }); }); diff --git a/src/usr/local/www/firewall_rules.php b/src/usr/local/www/firewall_rules.php index f3b4b007b1..87703f18ff 100644 --- a/src/usr/local/www/firewall_rules.php +++ b/src/usr/local/www/firewall_rules.php @@ -4,56 +4,56 @@ firewall_rules.php */ /* ==================================================================== - * Copyright (c) 2004-2015 Electric Sheep Fencing, LLC. All rights reserved. - * Copyright (c) 2004 Scott Ullrich - * Copyright (c) 2003-2004 Manuel Kasper + * Copyright (c) 2004-2015 Electric Sheep Fencing, LLC. All rights reserved. + * Copyright (c) 2004 Scott Ullrich + * Copyright (c) 2003-2004 Manuel Kasper * Originally part of pfSense (https://www.pfsense.org) * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. * - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgment: - * "This product includes software developed by the pfSense Project - * for use in the pfSense software distribution. (http://www.pfsense.org/). + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * "This product includes software developed by the pfSense Project + * for use in the pfSense software distribution. (http://www.pfsense.org/). * - * 4. The names "pfSense" and "pfSense Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * coreteam@pfsense.org. + * 4. The names "pfSense" and "pfSense Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * coreteam@pfsense.org. * - * 5. Products derived from this software may not be called "pfSense" - * nor may "pfSense" appear in their names without prior written - * permission of the Electric Sheep Fencing, LLC. + * 5. Products derived from this software may not be called "pfSense" + * nor may "pfSense" appear in their names without prior written + * permission of the Electric Sheep Fencing, LLC. * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: * - * "This product includes software developed by the pfSense Project - * for use in the pfSense software distribution (http://www.pfsense.org/). + * "This product includes software developed by the pfSense Project + * for use in the pfSense software distribution (http://www.pfsense.org/). * - * THIS SOFTWARE IS PROVIDED BY THE pfSense PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE pfSense PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. + * THIS SOFTWARE IS PROVIDED BY THE pfSense PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE pfSense PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. * - * ==================================================================== + * ==================================================================== * */ /* @@ -177,6 +177,7 @@ if ($_POST) { } } + if ($_GET['act'] == "del") { if ($a_filter[$_GET['id']]) { if (!empty($a_filter[$_GET['id']]['associated-rule-id'])) { @@ -186,6 +187,7 @@ if ($_GET['act'] == "del") { if (write_config()) { mark_subsystem_dirty('filter'); } + header("Location: firewall_rules.php?if=" . htmlspecialchars($if)); exit; } @@ -196,7 +198,27 @@ if ($_REQUEST['savemsg']) { $savemsg = htmlentities($_REQUEST['savemsg']); } -if ($_GET['act'] == "toggle") { +if (isset($_POST['del_x'])) { + /* delete selected rules */ + $deleted = false; + + if (is_array($_POST['rule']) && count($_POST['rule'])) { + foreach ($_POST['rule'] as $rulei) { + delete_nat_association($a_filter[$rulei]['associated-rule-id']); + unset($a_filter[$rulei]); + $deleted = true; + } + + if($deleted) { + if (write_config()) { + mark_subsystem_dirty('filter'); + } + } + + header("Location: firewall_rules.php?if=" . htmlspecialchars($if)); + exit; + } +} else if ($_GET['act'] == "toggle") { if ($a_filter[$_GET['id']]) { if (isset($a_filter[$_GET['id']]['disabled'])) { unset($a_filter[$_GET['id']]['disabled']); @@ -206,10 +228,11 @@ if ($_GET['act'] == "toggle") { if (write_config()) { mark_subsystem_dirty('filter'); } + header("Location: firewall_rules.php?if=" . htmlspecialchars($if)); exit; } -} else { +} else if($_POST['order-store']) { /* update rule order, POST[rule] is an array of ordered IDs */ if (is_array($_POST['rule']) && !empty($_POST['rule'])) { $a_filter_new = array(); @@ -222,6 +245,7 @@ if ($_GET['act'] == "toggle") { if (write_config()) { mark_subsystem_dirty('filter'); } + header("Location: firewall_rules.php?if=" . htmlspecialchars($if)); exit; } @@ -251,6 +275,7 @@ display_top_tabs($tab_array);
+ + " title=""> @@ -263,7 +222,6 @@ display_top_tabs($tab_array); ?> - - + " /> + @@ -320,6 +279,31 @@ print_info_box(gettext('Depending on the way your WAN connection is setup, you m ?> + + \ No newline at end of file diff --git a/src/usr/local/www/firewall_nat_out.php b/src/usr/local/www/firewall_nat_out.php index df8f1564ca..2c8f22c234 100644 --- a/src/usr/local/www/firewall_nat_out.php +++ b/src/usr/local/www/firewall_nat_out.php @@ -85,21 +85,27 @@ if (!is_array($config['nat']['outbound']['rule'])) { $a_out = &$config['nat']['outbound']['rule']; -/* update rule order, POST[rule] is an array of ordered IDs */ -if (is_array($_POST['rule']) && !empty($_POST['rule'])) { - $a_out_new = array(); +// update rule order, POST[rule] is an array of ordered IDs +// All rule are 'checked' before posting +if (isset($_POST['order-store'])) { + if(is_array($_POST['rule']) && !empty($_POST['rule'])) { - // if a rule is not in POST[rule], it has been deleted by the user - foreach ($_POST['rule'] as $id) - $a_out_new[] = $a_out[$id]; + $a_out_new = array(); - $a_out = $a_out_new; + // if a rule is not in POST[rule], it has been deleted by the user + foreach ($_POST['rule'] as $id) { + $a_out_new[] = $a_out[$id]; + } - if (write_config()) - mark_subsystem_dirty('filter'); + $a_out = $a_out_new; - header("Location: firewall_nat_out.php"); - exit; + if (write_config()) + mark_subsystem_dirty('natconf'); + + header("Location: firewall_nat_out.php"); + exit; + + } } if (!isset($config['nat']['outbound']['mode'])) @@ -175,30 +181,41 @@ if (isset($_POST['save']) && $_POST['save'] == "Save") { if (write_config()) { mark_subsystem_dirty('natconf'); } + header("Location: firewall_nat_out.php"); exit; } +// Delete a single rule/map if ($_GET['act'] == "del") { + if ($a_out[$_GET['id']]) { unset($a_out[$_GET['id']]); if (write_config()) { mark_subsystem_dirty('natconf'); } - header("Location: firewall_nat_out.php"); - exit; + + header("Location: firewall_nat_out.php"); + exit; } } +// Delete multiple maps Only checked rules will be in the +// POST if (isset($_POST['del_x'])) { /* delete selected rules */ + print('Deleting rows
'); + if (is_array($_POST['rule']) && count($_POST['rule'])) { foreach ($_POST['rule'] as $rulei) { + print('Deleting ' . $rulei . '
'); unset($a_out[$rulei]); } + if (write_config()) { mark_subsystem_dirty('natconf'); } + header("Location: firewall_nat_out.php"); exit; } @@ -213,109 +230,10 @@ if (isset($_POST['del_x'])) { if (write_config("Firewall: NAT: Outbound, enable/disable NAT rule")) { mark_subsystem_dirty('natconf'); } + header("Location: firewall_nat_out.php"); exit; } -} else { - /* yuck - IE won't send value attributes for image buttons, while Mozilla does - so we use .x/.y to find move button clicks instead... */ - unset($movebtn); - foreach ($_POST as $pn => $pd) { - if (preg_match("/move_(\d+)_x/", $pn, $matches)) { - $movebtn = $matches[1]; - break; - } - } - /* move selected rules before this rule */ - if (isset($movebtn) && is_array($_POST['rule']) && count($_POST['rule'])) { - $a_out_new = array(); - - /* copy all rules < $movebtn and not selected */ - for ($i = 0; $i < $movebtn; $i++) { - if (!in_array($i, $_POST['rule'])) { - $a_out_new[] = $a_out[$i]; - } - } - - /* copy all selected rules */ - for ($i = 0; $i < count($a_out); $i++) { - if ($i == $movebtn) { - continue; - } - if (in_array($i, $_POST['rule'])) { - $a_out_new[] = $a_out[$i]; - } - } - - /* copy $movebtn rule */ - if ($movebtn < count($a_out)) { - $a_out_new[] = $a_out[$movebtn]; - } - - /* copy all rules > $movebtn and not selected */ - for ($i = $movebtn+1; $i < count($a_out); $i++) { - if (!in_array($i, $_POST['rule'])) { - $a_out_new[] = $a_out[$i]; - } - } - if (count($a_out_new) > 0) { - $a_out = $a_out_new; - } - - if (write_config()) { - mark_subsystem_dirty('natconf'); - } - header("Location: firewall_nat_out.php"); - exit; - } -} - -function rule_popup($src, $srcport, $dst, $dstport) { - global $config, $g; - $aliases_array = array(); - if ($config['aliases']['alias'] <> "" and is_array($config['aliases']['alias'])) { - $descriptions = array (); - - foreach ($config['aliases']['alias'] as $alias_id => $alias_name) { - $loading_image="\'loader\' " .gettext("loading...").""; - - switch ($alias_name['type']) { - case "port": - $width="250"; - break; - case "urltable": - $width="500"; - break; - default: - $width="350"; - - break; - } - $span_begin = ""; - $span_end = ""; - - if ($alias_name['name'] == $src) { - $descriptions['src'] = $span_begin; - $descriptions['src_end'] = $span_end; - } - - if ($alias_name['name'] == $srcport) { - $descriptions['srcport'] = $span_begin; - $descriptions['srcport_end'] = $span_end; - } - - if ($alias_name['name'] == $dst) { - $descriptions['dst'] = $span_begin; - $descriptions['dst_end'] = $span_end; - } - - if ($alias_name['name'] == $dstport) { - $descriptions['dstport'] = $span_begin; - $descriptions['dstport_end'] = $span_end; - } - } - - return $descriptions; - } } $pgtitle = array(gettext("Firewall"), gettext("NAT"), gettext("Outbound")); @@ -404,6 +322,7 @@ print($form);
-
+ @@ -268,11 +293,12 @@ display_top_tabs($tab_array); 1, or WAN with an if count of 1. if (!isset($config['system']['webgui']['noantilockout']) && - (((count($config['interfaces']) > 1) && ($if == 'lan')) || - ((count($config['interfaces']) == 1) && ($if == 'wan')))): + (((count($config['interfaces']) > 1) && ($if == 'lan')) || + ((count($config['interfaces']) == 1) && ($if == 'wan')))): $alports = implode('
', filter_get_antilockout_ports(true)); ?> + @@ -290,6 +316,7 @@ display_top_tabs($tab_array); + @@ -307,6 +334,7 @@ display_top_tabs($tab_array); + @@ -325,19 +353,23 @@ display_top_tabs($tab_array); - - > + > + + @@ -626,7 +659,8 @@ display_top_tabs($tab_array);
"> * *
"> *
"> *
+ + "> -