improve alias popup in firewall_rules

include url_table list up to 10000 items
read alias only on mouseover
use table to list columns
show edit shortcut
show total items value on popup description
This commit is contained in:
Charlie Root 2012-06-16 17:58:51 +00:00
parent 2229d94e84
commit 4e8854c66a
4 changed files with 118 additions and 74 deletions

View File

@ -294,11 +294,6 @@ if (isset($_POST['del_x'])) {
$closehead = false;
include("head.inc");
echo "<script type=\"text/javascript\" language=\"javascript\" src=\"/javascript/domTT/domLib.js\"></script>";
echo "<script type=\"text/javascript\" language=\"javascript\" src=\"/javascript/domTT/domTT.js\"></script>";
echo "<script type=\"text/javascript\" language=\"javascript\" src=\"/javascript/domTT/behaviour.js\"></script>";
echo "<script type=\"text/javascript\" language=\"javascript\" src=\"/javascript/domTT/fadomatic.js\"></script>";
?>
<link rel="stylesheet" href="/javascript/chosen/chosen.css" />
</head>
@ -410,7 +405,7 @@ if($_REQUEST['undodrag']) {
<tr valign="top" id="antilockout">
<td class="list">&nbsp;</td>
<td class="listt" align="center"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_pass.gif" width="11" height="11" border="0"></td>
<td class="listlr" style="background-color: #E0E0E0"></td>
<td class="listlr" style="background-color: #E0E0E0">&nbsp;</td>
<?php
pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/pre_id_tr_antilockout");
?>
@ -421,7 +416,7 @@ if($_REQUEST['undodrag']) {
<td class="listr" style="background-color: #E0E0E0"><?= $alports ?></td>
<td class="listr" style="background-color: #E0E0E0">*</td>
<td class="listr" style="background-color: #E0E0E0">*</td>
<td class="listr" style="background-color: #E0E0E0"></td>
<td class="listr" style="background-color: #E0E0E0">&nbsp;</td>
<td class="listbg"><?=gettext("Anti-Lockout Rule");?></td>
<td valign="middle" nowrap class="list">
<table border="0" cellspacing="0" cellpadding="1">
@ -442,7 +437,7 @@ if($_REQUEST['undodrag']) {
<tr valign="top" id="frrfc1918">
<td class="list">&nbsp;</td>
<td class="listt" align="center"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_block.gif" width="11" height="11" border="0"></td>
<td class="listlr" style="background-color: #E0E0E0"></td>
<td class="listlr" style="background-color: #E0E0E0">&nbsp;</td>
<td class="listr" style="background-color: #E0E0E0">*</td>
<td class="listr" style="background-color: #E0E0E0"><?=gettext("RFC 1918 networks");?></td>
<td class="listr" style="background-color: #E0E0E0">*</td>
@ -450,7 +445,7 @@ if($_REQUEST['undodrag']) {
<td class="listr" style="background-color: #E0E0E0">*</td>
<td class="listr" style="background-color: #E0E0E0">*</td>
<td class="listr" style="background-color: #E0E0E0">*</td>
<td class="listr" style="background-color: #E0E0E0"></td>
<td class="listr" style="background-color: #E0E0E0">&nbsp;</td>
<td class="listbg"><?=gettext("Block private networks");?></td>
<td valign="middle" nowrap class="list">
<table border="0" cellspacing="0" cellpadding="1">
@ -470,7 +465,7 @@ if($_REQUEST['undodrag']) {
<tr valign="top" id="frrfc1918">
<td class="list">&nbsp;</td>
<td class="listt" align="center"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_block.gif" width="11" height="11" border="0"></td>
<td class="listlr" style="background-color: #E0E0E0"></td>
<td class="listlr" style="background-color: #E0E0E0">&nbsp;</td>
<td class="listr" style="background-color: #E0E0E0">*</td>
<td class="listr" style="background-color: #E0E0E0"><?=gettext("Reserved/not assigned by IANA");?></td>
<td class="listr" style="background-color: #E0E0E0">*</td>
@ -697,7 +692,7 @@ if($_REQUEST['undodrag']) {
}
?>
<td class="listlr" onClick="fr_toggle(<?=$nrules;?>)" id="frd<?=$nrules;?>" ondblclick="document.location='firewall_rules_edit.php?id=<?=$i;?>';">
<?=$textss;?><?php if (isset($filterent['id'])) echo $filterent['id']; else echo ""; ?><?=$textse;?>
<?=$textss;?><?php if (isset($filterent['id'])) echo $filterent['id']."&nbsp;"; else echo "&nbsp;"; ?><?=$textse;?>
</td>
<?php
pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/pre_id_tr");

View File

@ -1014,70 +1014,102 @@ function add_package_tabs($tabgroup, & $tab_array) {
}
}
function rule_popup($src,$srcport,$dst,$dstport){
function alias_info_popup($alias_id){
global $config;
$maxlength = 60;
$close_title="title='".gettext('move mouse out this alias to hide')."'";
if (is_array($config['aliases']['alias'][$alias_id])){
$alias_name=$config['aliases']['alias'][$alias_id];
$alias_objects_with_details = "<table width='100%' border='0' cellpadding='2' cellspacing='0'>";
if ($alias_name['url']) {
exec("/sbin/pfctl -t {$alias_name['name']} -T show | wc -l", $total_entries);
$counter=preg_replace("/\D/","",$total_entries[0]);
exec("/sbin/pfctl -t {$alias_name['name']} -T show | head -10002", $alias_addresses);
$alias_objects_with_details .= "<tr><td colspan='3' $close_title class='vncell'>{$alias_name['url']}</td></tr>";
$x=0;
foreach ($alias_addresses as $alias_ports_address ){
switch ($x){
case 0:
$x++;
$alias_objects_with_details .= "<tr><td $close_title class='vncell' width='33%' style='background: #FFFFFF;color: #000000;'>{$alias_ports_address}</td>";
break;
case 1:
$x++;
$alias_objects_with_details .= "<td $close_title class='vncell' width='33%' style='background: #FFFFFF;color: #000000;'>{$alias_ports_address}</td>";
break;
default:
$x=0;
$alias_objects_with_details .= "<td $close_title class='vncell' width='33%' style='background: #FFFFFF;color: #000000;'>{$alias_ports_address}</td><tr>";
break;
}
}
for ($y=$x;$y<=$x;$y++){
$alias_objects_with_details .= "<td $close_title class='vncell' width='33%'>&nbsp;</td>";
}
if ($x > 0)
$alias_objects_with_details .= "</tr>";
if ($counter > 10002){
$alias_objects_with_details .= "<tr><td colspan='3'> listing only first 10k items</td><tr>";
}
}
else{
$alias_addresses = explode (" ", $alias_name['address']);
$alias_details = explode ("||", $alias_name['detail']);
$counter=0;
foreach($alias_addresses as $alias_ports_address)
{
$alias_objects_with_details .= "<tr><td $close_title width='5%' class='vncell' style='background: #FFFFFF;color: #000000;'>{$alias_addresses[$counter]}</td>";
$alias_detail_default = strpos ($alias_details[$counter],"Entry added");
if ($alias_details[$counter] != "" && $alias_detail_default === False)
$alias_objects_with_details .="<td $close_title width='95%' class='vncell' style='background: #FFFFFF;color: #000000;'>{$alias_details[$counter]}</td>";
else
$alias_objects_with_details .="<td $close_title width='95%' class='vncell' style='background: #FFFFFF;color: #000000;'>&nbsp;</td>";
$alias_objects_with_details .= "</tr>";
$counter++;
}
}
$alias_objects_with_details .="</table>";
}
$alias_descr_substr = $alias_name['descr'];
if ($strlength >= $maxlength)
$alias_descr_substr = substr($alias_descr_substr, 0, $maxlength) . "...";
$item_text=($counter > 1 ? "items" : "item");
$alias_caption = "{$alias_descr_substr} - {$counter} {$item_text}<a href='/firewall_aliases_edit.php?id={$alias_id}' title='".gettext('edit this alias')."'>&nbsp;&nbsp;edit </a>";
$strlength = strlen ($alias_caption);
print "<h1>{$alias_caption}</h1>".$alias_objects_with_details;
}
function rule_popup($src,$srcport,$dst,$dstport){
global $config,$g;
$aliases_array = array();
if($config['aliases']['alias'] <> "" and is_array($config['aliases']['alias']))
{
$span_begin = "";
$alias_src_span_begin = "";
$alias_src_span_end = "";
$alias_src_port_span_begin = "";
$alias_src_port_span_end = "";
$alias_dst_span_begin = "";
$alias_dst_span_end = "";
$alias_dst_port_span_begin = "";
$alias_dst_port_span_end = "";
$alias_content_text = "";
foreach($config['aliases']['alias'] as $alias_name)
{
$alias_addresses = explode (" ", $alias_name['address']);
$alias_details = explode ("||", $alias_name['detail']);
$alias_objects_with_details = "";
$counter = 0;
if ($alias_name['url']) {
$alias_objects_with_details .= $alias_name['url'] . "<br/>";
}
foreach($alias_addresses as $alias_ports_address)
{
$alias_objects_with_details .= $alias_addresses[$counter];
$alias_detail_default = strpos ($alias_details[$counter],"Entry added");
if ($alias_details[$counter] != "" && $alias_detail_default === False){
$alias_objects_with_details .=" - " . $alias_details[$counter];
}
$alias_objects_with_details .= "<br>";
$counter++;
}
//max character length for caption field
$maxlength = 60;
$alias_descr_substr = $alias_name['descr'];
$alias_content_text = htmlspecialchars($alias_objects_with_details);
$alias_caption = htmlspecialchars($alias_descr_substr . ":");
$strlength = strlen ($alias_caption);
if ($strlength >= $maxlength)
$alias_caption = substr($alias_caption, 0, $maxlength) . "...";
$alias_caption_escaped = str_replace("'", "\'", $alias_caption);
$alias_content_escaped = str_replace("'", "\'", $alias_content_text);
$span_begin = "<span style=\"cursor: help;\" onmouseover=\"domTT_activate(this, event, 'content', '<h1>$alias_caption_escaped</h1><p>$alias_content_escaped</p>', 'trail', true, 'delay', 0, 'fade', 'both', 'fadeMax', 93, 'styleClass', 'niceTitle');\" onmouseout=\"this.style.color = ''; domTT_mouseout(this, event);\"><U>";
if ($alias_name['name'] == $src)
$alias_src_span_begin = $span_begin;
if ($alias_name['name'] == $srcport)
$alias_src_port_span_begin = $span_begin;
if ($alias_name['name'] == $dst)
$alias_dst_span_begin = $span_begin;
if ($alias_name['name'] == $dstport)
$alias_dst_port_span_begin = $span_begin;
}
$descriptions = array ();
$descriptions['src'] = $alias_src_span_begin;
$descriptions['srcport'] = $alias_src_port_span_begin;
$descriptions['dst'] = $alias_dst_span_begin;
$descriptions['dstport'] = $alias_dst_port_span_begin;
return $descriptions;
{
$descriptions = array ();
foreach($config['aliases']['alias'] as $alias_id=>$alias_name){
$loading_image="<a><img src=\'/themes/{$g['theme']}/images/misc/loader.gif\'> " .gettext("loading...")."</a>";
switch ($alias_name['type']){
case "port":
$width="250";
break;
case "urltable":
$width="500";
break;
default:
$width="350";
break;
}
$span_begin = "<span style=\"cursor: help;\" onmouseover=\"var response_html=domTT_activate(this, event, 'id','ttalias_{$alias_id}','content','{$loading_image}', 'trail', true, 'delay', 300, 'fade', 'both', 'fadeMax', 93, 'styleClass', 'niceTitle','type','velcro','width',{$width});alias_popup('{$alias_id}','{$g["theme"]}','".gettext('loading...')."');\" domTT_mouseout(this, close);\"><U>";
if ($alias_name['name'] == $src)
$descriptions['src']= $span_begin;
if ($alias_name['name'] == $srcport)
$descriptions['srcport'] = $span_begin;
if ($alias_name['name'] == $dst )
$descriptions['dst'] = $span_begin;
if ($alias_name['name'] == $dstport)
$descriptions['dstport'] = $span_begin;
}
return $descriptions;
}
}

View File

@ -58,11 +58,14 @@ require_once('guiconfig.inc');
require_once('notices.inc');
if(isset($_REQUEST['closenotice'])){
include("functions.inc");
close_notice($_REQUEST['closenotice']);
echo get_menu_messages();
exit;
}
if ($_REQUEST['act'] == 'alias_info_popup' && !preg_match("/\D/",$_REQUEST['aliasid'])){
alias_info_popup($_REQUEST['aliasid']);
exit;
}
if($g['disablecrashreporter'] != true) {
// Check to see if we have a crash report

View File

@ -1,6 +1,6 @@
/* $Id$ */
/*
functions.inc
ticker.js
Copyright (C) 2012 Marcello Coutinho
Copyright (C) 2012 Carlos Cesario - carloscesario@gmail.com
All rights reserved.
@ -57,3 +57,17 @@ jQuery(document).ready(function() {
jQuery(this).css('cursor','pointer');
});
});
function alias_popup(alias_id,theme,loading) {
domTT_update('ttalias_'+alias_id,"<a><img src='/themes/"+theme+"/images/misc/loader.gif'>"+loading+"</a>");
jQuery.ajax({
type: 'post',
cache: false,
url: "/index.php",
data: {aliasid:alias_id, act:'alias_info_popup'},
success: function(response) {
//alert('<div>'+response.match(/<h1>.*<\/table>/i)+'<div>');
domTT_update('ttalias_'+alias_id,'<div>'+response.match(/<h1>.*<\/table>/i)+'<div>');
}
});
}