From e97df865146ead328cca4c815daa58056f0725e3 Mon Sep 17 00:00:00 2001 From: Renato Botelho Date: Tue, 26 Nov 2013 19:17:10 -0200 Subject: Show all gateway entries, even if interface doesn't exist, to avoid adding duplicate items or edit config by hand to remove old entries. While I'm here, allow multiple delete, and toggle enable/disable --- usr/local/www/system_gateways.php | 231 +++++++++++++++++++++++++++++--------- 1 file changed, 176 insertions(+), 55 deletions(-) diff --git a/usr/local/www/system_gateways.php b/usr/local/www/system_gateways.php index 7523b7e..e0141a5 100755 --- a/usr/local/www/system_gateways.php +++ b/usr/local/www/system_gateways.php @@ -44,7 +44,7 @@ require_once("functions.inc"); require_once("filter.inc"); require_once("shaper.inc"); -$a_gateways = return_gateways_array(true); +$a_gateways = return_gateways_array(true, false, true); $a_gateways_arr = array(); foreach ($a_gateways as $gw) $a_gateways_arr[] = $gw; @@ -55,8 +55,6 @@ if (!is_array($config['gateways']['gateway_item'])) $a_gateway_item = &$config['gateways']['gateway_item']; -$changedesc = "Gateways: "; - if ($_POST) { $pconfig = $_POST; @@ -76,55 +74,107 @@ if ($_POST) { } } -if ($_GET['act'] == "del") { - if ($a_gateways[$_GET['id']]) { - /* remove the real entry */ - $realid = $a_gateways[$_GET['id']]['attribute']; - $remove = true; - if (is_array($config['gateways']['gateway_group'])) { - foreach ($config['gateways']['gateway_group'] as $group) { - foreach ($group['item'] as $item) { - $items = explode("|", $item); - if ($items[0] == $a_gateways[$_GET['id']]['name']) { - $input_errors[] = "Gateway cannot be deleted because it is in use on Gateway Group '{$group['name']}'"; - $remove = false; - break; - } +function can_delete_gateway_item($id) { + global $config, $input_errors, $a_gateways; + if (!isset($a_gateways[$id])) + return false; + + if (is_array($config['gateways']['gateway_group'])) { + foreach ($config['gateways']['gateway_group'] as $group) { + foreach ($group['item'] as $item) { + $items = explode("|", $item); + if ($items[0] == $a_gateways[$id]['name']) { + $input_errors[] = sprintf(gettext("Gateway '%s' cannot be deleted because it is in use on Gateway Group '%s'"), $a_gateways[$id]['name'], $group['name']); + break; } } } - if (is_array($config['staticroutes']['route'])) { - foreach ($config['staticroutes']['route'] as $route) { - if ($route['gateway'] == $a_gateways[$_GET['id']]['name']) { - $input_errors[] = "Gateway cannot be deleted because it is in use on Static Routes '{$route['network']}'"; - $remove = false; - break; - } + } + + if (is_array($config['staticroutes']['route'])) { + foreach ($config['staticroutes']['route'] as $route) { + if ($route['gateway'] == $a_gateways[$id]['name']) { + $input_errors[] = sprintf(gettext("Gateway '%s' cannot be deleted because it is in use on Static Route '%s'"), $a_gateways[$id]['name'], $route['network']); + break; } } - if ($remove == true) { - /* NOTE: Cleanup static routes for the monitor ip if any */ - if (!empty($a_gateways[$_GET['id']]['monitor']) && $a_gateways[$_GET['id']]['monitor'] != "dynamic" && is_ipaddr($a_gateways[$_GET['id']]['monitor']) && - $a_gateways[$_GET['id']]['monitor'] != $a_gateways[$_GET['id']]['monitor'] && $a_gateways[$_GET['id']]['gateway'] != $a_gateways[$_GET['id']]['monitor']) { - if (is_ipaddrv4($a_gateways[$_GET['id']]['monitor'])) - mwexec("/sbin/route delete " . escapeshellarg($a_gateways[$_GET['id']]['monitor'])); - else - mwexec("/sbin/route delete -inet6 " . escapeshellarg($a_gateways[$_GET['id']]['monitor'])); - } + } + + if (isset($input_errors)) + return false; + + return true; +} + +function delete_gateway_item($id) { + if (!isset($a_gateways[$id])) + return; - if ($config['interfaces'][$a_gateways[$_GET['id']]['friendlyiface']]['gateway'] == $a_gateways[$_GET['id']]['name']) - unset($config['interfaces'][$a_gateways[$_GET['id']]['friendlyiface']]['gateway']); - $changedesc .= "removed gateway {$realid}"; - unset($a_gateway_item[$realid]); - write_config($changedesc); - mark_subsystem_dirty('staticroutes'); + /* NOTE: Cleanup static routes for the monitor ip if any */ + if (!empty($a_gateways[$id]['monitor']) && + $a_gateways[$id]['monitor'] != "dynamic" && + is_ipaddr($a_gateways[$id]['monitor']) && + $a_gateways[$id]['gateway'] != $a_gateways[$id]['monitor']) { + if (is_ipaddrv4($a_gateways[$id]['monitor'])) + mwexec("/sbin/route delete " . escapeshellarg($a_gateways[$id]['monitor'])); + else + mwexec("/sbin/route delete -inet6 " . escapeshellarg($a_gateways[$id]['monitor'])); + } + + if ($config['interfaces'][$a_gateways[$id]['friendlyiface']]['gateway'] == $a_gateways[$id]['name']) + unset($config['interfaces'][$a_gateways[$id]['friendlyiface']]['gateway']); + unset($config['gateways']['gateway_item'][$a_gateways[$id]['attribute']]); +} + +unset($input_errors); +if ($_GET['act'] == "del") { + if (can_delete_gateway_item($_GET['id'])) { + $realid = $a_gateways[$_GET['id']]['attribute']; + delete_gateway_item($_GET['id']); + write_config("Gateways: removed gateway {$realid}"); + mark_subsystem_dirty('staticroutes'); + header("Location: system_gateways.php"); + exit; + } +} + +if (isset($_POST['del_x'])) { + /* delete selected items */ + if (is_array($_POST['rule']) && count($_POST['rule'])) { + foreach ($_POST['rule'] as $rulei) + if(!can_delete_gateway_item($rulei)) + break; + + if (!isset($input_errors)) { + $items_deleted = ""; + foreach ($_POST['rule'] as $rulei) { + delete_gateway_item($rulei); + $items_deleted .= "{$rulei} "; + } + if (!empty($items_deleted)) { + write_config("Gateways: removed gateways {$items_deleted}"); + mark_subsystem_dirty('staticroutes'); + } header("Location: system_gateways.php"); exit; } } -} +} else if ($_GET['act'] == "toggle" && $a_gateways[$_GET['id']]) { + $realid = $a_gateways[$_GET['id']]['attribute']; + + if(isset($a_gateway_item[$realid]['disabled'])) + unset($a_gateway_item[$realid]['disabled']); + else + $a_gateway_item[$realid]['disabled'] = true; + + if (write_config("Gateways: enable/disable")) + mark_subsystem_dirty('staticroutes'); + + header("Location: system_gateways.php"); + exit; +} $pgtitle = array(gettext("System"),gettext("Gateways")); $shortcut_section = "gateways"; @@ -137,6 +187,7 @@ include("head.inc");
+

" . gettext("You must apply the changes in order for them to take effect."));?>

@@ -157,12 +208,14 @@ include("head.inc");
- + + + - - - - + + + +
   @@ -177,44 +230,97 @@ include("head.inc"); "; $i = 0; foreach ($a_gateways as $gateway): + if (isset($gateway['disabled']) || isset($gateway['inactive'])) { + $textss = ""; + $iconfn = "pass_d"; + } else { + $textss = ""; + $iconfn = "pass"; + } ?> - - + + + - - - -
+
+ + + +   + + + + " alt="icon" /> + + + " alt="icon" /> + + + " alt="icon" /> + + (default)"; + echo $textse; ?> + + + + - + -   @@ -256,11 +362,26 @@ include("head.inc"); endforeach; ?> - +
- +
+ + " border="0" alt="delete" /> + + " + onclick="return confirm('')" /> + + edit -- cgit v1.1