diff options
author | Renato Botelho <garga@FreeBSD.org> | 2013-11-26 19:17:10 -0200 |
---|---|---|
committer | Renato Botelho <garga@FreeBSD.org> | 2013-11-26 19:17:10 -0200 |
commit | e97df865146ead328cca4c815daa58056f0725e3 (patch) | |
tree | 1d8a81817b50694af801b3b544d90b87000ae576 /usr/local/www | |
parent | 96ef7db0312e76540fffda7092df4be9d97dfe6e (diff) | |
download | pfsense-e97df865146ead328cca4c815daa58056f0725e3.zip pfsense-e97df865146ead328cca4c815daa58056f0725e3.tar.gz |
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
Diffstat (limited to 'usr/local/www')
-rwxr-xr-x | usr/local/www/system_gateways.php | 231 |
1 files 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"); <?php include("fbegin.inc"); ?> <?php if ($input_errors) print_input_errors($input_errors); ?> <form action="system_gateways.php" method="post"> +<script type="text/javascript" language="javascript" src="/javascript/row_toggle.js"></script> <?php if ($savemsg) print_info_box($savemsg); ?> <?php if (is_subsystem_dirty('staticroutes')): ?><p> <?php print_info_box_np(gettext("The gateway configuration has been changed.") . "<br/>" . gettext("You must apply the changes in order for them to take effect."));?><br/></p> @@ -157,12 +208,14 @@ include("head.inc"); <td> <div id="mainarea"> <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area"> - <tr> + <tr id="frheader"> + <td width="2%" class="list"> </td> + <td width="2%" class="list"> </td> <td width="15%" class="listhdrr"><?=gettext("Name"); ?></td> - <td width="15%" class="listhdrr"><?=gettext("Interface"); ?></td> - <td width="20%" class="listhdrr"><?=gettext("Gateway"); ?></td> - <td width="20%" class="listhdrr"><?=gettext("Monitor IP"); ?></td> - <td width="30%" class="listhdr"><?=gettext("Description"); ?></td> + <td width="10%" class="listhdrr"><?=gettext("Interface"); ?></td> + <td width="15%" class="listhdrr"><?=gettext("Gateway"); ?></td> + <td width="15%" class="listhdrr"><?=gettext("Monitor IP"); ?></td> + <td width="31%" class="listhdr"><?=gettext("Description"); ?></td> <td width="10%" class="list"> <table border="0" cellspacing="0" cellpadding="1" summary="add"> <tr> @@ -177,44 +230,97 @@ include("head.inc"); </td> </tr> <?php + $textse = "</span>"; $i = 0; foreach ($a_gateways as $gateway): + if (isset($gateway['disabled']) || isset($gateway['inactive'])) { + $textss = "<span class=\"gray\">"; + $iconfn = "pass_d"; + } else { + $textss = "<span>"; + $iconfn = "pass"; + } ?> - <tr> - <td class="listlr" ondblclick="document.location='system_gateways_edit.php?id=<?=$i;?>';"> + <tr valign="top" id="fr<?=$i;?>"> + <td class="listt"> +<?php + if (is_numeric($gateway['attribute'])): +?> + <input type="checkbox" id="frc<?=$i;?>" name="rule[]" value="<?=$i;?>" onclick="fr_bgcolor('<?=$i;?>')" style="margin: 0; padding: 0; width: 15px; height: 15px;" /> +<?php + else: +?> + +<?php + endif; +?> + </td> + <td class="listt" align="center"> +<?php + if (isset($gateway['inactive'])): +?> + <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_reject_d.gif" width="11" height="11" border="0" + title="<?=gettext("This gateway is inactive because interface is missing");?>" alt="icon" /> +<?php + elseif (is_numeric($gateway['attribute'])): +?> + <a href="?act=toggle&id=<?=$i;?>"> + <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_<?=$iconfn;?>.gif" width="11" height="11" border="0" + title="<?=gettext("click to toggle enabled/disabled status");?>" alt="icon" /> + </a> +<?php + else: +?> + <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_<?=$iconfn;?>.gif" width="11" height="11" border="0" + title="<?=gettext("click to toggle enabled/disabled status");?>" alt="icon" /> +<?php + endif; +?> + </td> + <td class="listlr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>" ondblclick="document.location='system_gateways_edit.php?id=<?=$i;?>';"> <?php + echo $textss; echo $gateway['name']; if(isset($gateway['defaultgw'])) echo " <strong>(default)</strong>"; + echo $textse; ?> </td> - <td class="listr" ondblclick="document.location='system_gateways_edit.php?id=<?=$i;?>';"> + <td class="listr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>" ondblclick="document.location='system_gateways_edit.php?id=<?=$i;?>';"> <?php + echo $textss; echo htmlspecialchars(convert_friendly_interface_to_friendly_descr($gateway['friendlyiface'])); + echo $textse; ?> </td> - <td class="listr" ondblclick="document.location='system_gateways_edit.php?id=<?=$i;?>';"> + <td class="listr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>" ondblclick="document.location='system_gateways_edit.php?id=<?=$i;?>';"> <?php + echo $textss; echo $gateway['gateway'] . " "; + echo $textse; ?> </td> - <td class="listr" ondblclick="document.location='system_gateways_edit.php?id=<?=$i;?>';"> + <td class="listr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>" ondblclick="document.location='system_gateways_edit.php?id=<?=$i;?>';"> <?php + echo $textss; echo htmlspecialchars($gateway['monitor']) . " "; + echo $textse; ?> </td> <?php if (is_numeric($gateway['attribute'])): ?> - <td class="listbg" ondblclick="document.location='system_gateways_edit.php?id=<?=$i;?>';"> + <td class="listbg" onclick="fr_toggle(<?=$i;?>)" ondblclick="document.location='system_gateways_edit.php?id=<?=$i;?>';"> <?php else: ?> - <td class="listbgns" ondblclick="document.location='system_gateways_edit.php?id=<?=$i;?>';"> + <td class="listbgns" onclick="fr_toggle(<?=$i;?>)" ondblclick="document.location='system_gateways_edit.php?id=<?=$i;?>';"> <?php endif; + echo $textss; + echo htmlspecialchars($gateway['descr']) . " "; + echo $textse; ?> - <?=htmlspecialchars($gateway['descr']);?> </td> <td valign="middle" class="list nowrap"> <table border="0" cellspacing="0" cellpadding="1" summary="icons"> @@ -256,11 +362,26 @@ include("head.inc"); endforeach; ?> <tr> - <td class="list" colspan="5"></td> + <td class="list" colspan="7"></td> <td class="list"> <table border="0" cellspacing="0" cellpadding="1" summary="edit"> <tr> - <td width="17"></td> + <td> +<?php + if ($i == 0): +?> + <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_x_d.gif" width="17" height="17" + title="<?=gettext("delete selected items");?>" border="0" alt="delete" /> +<?php + else: +?> + <input name="del" type="image" src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" + style="width:17;height:17" title="<?=gettext("delete selected items");?>" + onclick="return confirm('<?=gettext("Do you really want to delete the selected gateway items?");?>')" /> +<?php + endif; +?> + </td> <td> <a href="system_gateways_edit.php"> <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="edit" /> |