webui: Ports table refresh (#7827)

* initial release

* removed duplicate div tag

* deleted ports reworks

* more header optimizations, added status entries

* more header optimizations, added status entries

* added purge all, testing needed, try once again to fix overflowing filtering bar

* fix purge all, another try to break option bar in two for longer inputs

* fix indentation
This commit is contained in:
crcro 2017-12-24 21:58:59 +02:00 committed by Neil Lathwood
parent 7a0f8c02b6
commit 3f0ad0360e
5 changed files with 339 additions and 280 deletions

View File

@ -346,7 +346,7 @@ foreach (dbFetchRows("SELECT * FROM `ports` AS P, `devices` as D WHERE P.`delete
<?php
if ($deleted_ports) {
echo(' <li><a href="deleted-ports/"><i class="fa fa-minus-circle fa-fw fa-lg" aria-hidden="true"></i> Deleted ('.$deleted_ports.')</a></li>');
echo(' <li><a href="ports/deleted=yes/"><i class="fa fa-minus-circle fa-fw fa-lg" aria-hidden="true"></i> Deleted ('.$deleted_ports.')</a></li>');
}
?>

View File

@ -141,21 +141,47 @@ foreach (dbFetchRows($query, $param) as $port) {
$device = device_by_id_cache($port['device_id']);
$port = cleanPort($port, $device);
switch ($port['ifOperStatus']) {
case 'up':
$status = '<span class="alert-status label-success">&nbsp;</span>';
break;
case 'down':
switch ($port['ifAdminStatus']) {
case 'up':
$status = '<span class="alert-status label-danger">&nbsp;</span>';
break;
case 'down':
$status = '<span class="alert-status label-warning">&nbsp;</span>';
break;
}
break;
}
// FIXME what actions should we have?
$actions = '<div class="container-fluid"><div class="row">';
$actions .= '<div class="col-xs-1"><a href="';
$actions .= generate_device_url($device, array('tab' => 'alerts'));
$actions .= '"><i class="fa fa-exclamation-circle fa-lg icon-theme" title="View alerts" aria-hidden="true"></i></a></div>';
if ($_SESSION['userlevel'] >= '7') {
if ($_POST['deleted'] !== 'yes') {
$actions .= '<div class="col-xs-1"><a href="';
$actions .= generate_device_url($device, array('tab' => 'edit', 'section' => 'ports'));
$actions .= '"><i class="fa fa-pencil fa-lg icon-theme" title="Edit ports" aria-hidden="true"></i></a></div>';
$actions .= generate_device_url($device, array('tab' => 'alerts'));
$actions .= '" title="View alerts"><i class="fa fa-exclamation-circle fa-lg icon-theme" aria-hidden="true"></i></a></div>';
if ($_SESSION['userlevel'] >= '7') {
$actions .= '<div class="col-xs-1"><a href="';
$actions .= generate_device_url($device, array('tab' => 'edit', 'section' => 'ports'));
$actions .= '" title="Edit ports"><i class="fa fa-pencil fa-lg icon-theme" aria-hidden="true"></i></a></div>';
}
}
if ($_POST['deleted'] === 'yes') {
if (port_permitted($port['port_id'], $device['device_id'])) {
$actions .= '<div class="col-xs-1"><a href="ports/deleted=yes/purge=' . $port['port_id'] . '" title="Delete port"><i class="fa fa-times fa-lg icon-theme"></i></a></div>';
}
}
$actions .= '</div></div>';
$response[] = array(
'status' => $status,
'device' => generate_device_link($device),
'port' => generate_port_link($port),
'ifLastChange' => ceil($port['secondsIfLastChange']),

View File

@ -1,37 +0,0 @@
<?php
$pagetitle[] = 'Deleted ports';
if ($vars['purge'] == 'all') {
foreach (dbFetchRows("SELECT * FROM `ports` AS P, `devices` as D WHERE P.`deleted` = '1' AND D.device_id = P.device_id") as $interface) {
$interface = cleanPort($interface);
if (port_permitted($interface['port_id'], $interface['device_id'])) {
delete_port($interface['port_id']);
echo '<div class=infobox>Deleted '.generate_device_link($interface).' - '.generate_port_link($interface).'</div>';
}
}
} elseif ($vars['purge']) {
$interface = dbFetchRow('SELECT * from `ports` AS P, `devices` AS D WHERE `port_id` = ? AND D.device_id = P.device_id', array($vars['purge']));
$interface = cleanPort($interface);
if (port_permitted($interface['port_id'], $interface['device_id'])) {
delete_port($interface['port_id']);
}
echo '<div class=infobox>Deleted '.generate_device_link($interface).' - '.generate_port_link($interface).'</div>';
}
echo '<table class="table table-hover table-condensed">';
echo "<tr><td>Device</td><td>Port</td><td></td><td><a href='deleted-ports/purge=all/'><i class='fa fa-times'></i> Purge All</a></td></tr>";
foreach (dbFetchRows("SELECT * FROM `ports` AS P, `devices` as D WHERE P.`deleted` = '1' AND D.device_id = P.device_id", array()) as $interface) {
$interface = cleanPort($interface, $interface);
if (port_permitted($interface['port_id'], $interface['device_id'])) {
echo '<tr class=list>';
echo '<td width=250>'.generate_device_link($interface).'</td>';
echo '<td width=250>'.generate_port_link($interface).'</td>';
echo '<td></td>';
echo "<td width=100><a href='deleted-ports/purge=".$interface['port_id']."/'><i class='fa fa-times'></i> Purge</a></td>";
}
}
echo '</table>';

View File

@ -1,4 +1,17 @@
<?php
/*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version. Please see LICENSE.txt at the top level of
* the source code distribution for details.
*
* @package LibreNMS
* @subpackage webui
* @link http://librenms.org
* @copyright 2017 LibreNMS
* @author LibreNMS Contributors
*/
$pagetitle[] = "Ports";
@ -8,31 +21,24 @@ if (!isset($vars['format'])) {
$vars['format'] = "list_basic";
}
print_optionbar_start();
echo('<span style="font-weight: bold;">Lists</span> &#187; ');
$displayLists = '';
$displayLists .= '<span style="font-weight: bold;">Ports lists</span> &#187; ';
$menu_options = array('basic' => 'Basic', 'detail' => 'Detail');
$sep = "";
foreach ($menu_options as $option => $text) {
echo($sep);
if ($vars['format'] == "list_".$option) {
echo("<span class='pagemenu-selected'>");
$displayLists .= $sep;
if ($vars['format'] == "list_" . $option) {
$displayLists .= '<span class="pagemenu-selected">';
}
echo('<a href="' . generate_url($vars, array('format' => "list_".$option)) . '">' . $text . '</a>');
if ($vars['format'] == "list_".$option) {
echo("</span>");
$displayLists .= '<a href="' . generate_url($vars, array('format' => "list_" . $option)) . '">' . $text . '</a>';
if ($vars['format'] == "list_" . $option) {
$displayLists .= '</span>';
}
$sep = " | ";
}
?>
|
<span style="font-weight: bold;">Graphs</span> &#187;
<?php
$displayLists .= '&nbsp;&nbsp;<span style="font-weight: bold;">Graphs</span> &#187';
$menu_options = array('bits' => 'Bits',
'upkts' => 'Unicast Packets',
@ -41,235 +47,250 @@ $menu_options = array('bits' => 'Bits',
$sep = "";
foreach ($menu_options as $option => $text) {
echo($sep);
if ($vars['format'] == 'graph_'.$option) {
echo('<span class="pagemenu-selected">');
$displayLists .= $sep;
if ($vars['format'] == 'graph_' . $option) {
$displayLists .= '<span class="pagemenu-selected">';
}
echo('<a href="' . generate_url($vars, array('format' => 'graph_'.$option)) . '">' . $text . '</a>');
if ($vars['format'] == 'graph_'.$option) {
echo("</span>");
$displayLists .= '<a href="' . generate_url($vars, array('format' => 'graph_' . $option)) . '">' . $text . '</a>';
if ($vars['format'] == 'graph_' . $option) {
$displayLists .= '</span>';
}
$sep = " | ";
}
echo('<div style="float: right;">');
?>
$displayLists .= '<div style="float: right;">';
$displayLists .= '<a href="csv.php/report=' . generate_url($vars, array('format' => '')) . '" title="Export as CSV" target="_blank" rel="noopener">Export CSV</a> | <a href="' . generate_url($vars) . '" title="Update the browser URL to reflect the search criteria.">Update URL</a>';
<a href="csv.php/report=<?php echo generate_url($vars, array('format'=>'')); ?>" title="Export as CSV" target="_blank" rel="noopener">Export CSV</a> |
<a href="<?php echo(generate_url($vars)); ?>" title="Update the browser URL to reflect the search criteria." >Update URL</a> |
<?php
if (isset($vars['searchbar']) && $vars['searchbar'] == "hide") {
echo('<a href="'. generate_url($vars, array('searchbar' => '')).'">Search</a>');
$displayLists .= '<a href="' . generate_url($vars, array('searchbar' => '')) . '">Search</a>';
} else {
echo('<a href="'. generate_url($vars, array('searchbar' => 'hide')).'">Search</a>');
$displayLists .= '<a href="' . generate_url($vars, array('searchbar' => 'hide')) . '">Search</a>';
}
echo(" | ");
$displayLists .= ' | ';
if (isset($vars['bare']) && $vars['bare'] == "yes") {
echo('<a href="'. generate_url($vars, array('bare' => '')).'">Header</a>');
$displayLists .= '<a href="' . generate_url($vars, array('bare' => '')) . '">Header</a>';
} else {
echo('<a href="'. generate_url($vars, array('bare' => 'yes')).'">Header</a>');
$displayLists .= '<a href="' . generate_url($vars, array('bare' => 'yes')) . '">Header</a>';
}
echo('</div>');
$displayLists .= ' | ';
$displayLists .= '<span style="font-weight: bold;">Bulk actions</span> &#187';
print_optionbar_end();
print_optionbar_start();
$displayLists .= '<a href="ports/deleted=yes/purge=all" title="Delete ports"> Purge all deleted</a>';
$displayLists .= '</div>';
if ((isset($vars['searchbar']) && $vars['searchbar'] != "hide") || !isset($vars['searchbar'])) {
?>
<form method='post' action='' class='form-inline' role='form'>
<div class="form-group">
<select name='device_id' id='device_id' class='form-control input-sm'>
<option value=''>All Devices</option>
<?php
$output = "<div class='pull-left'>";
$output .= "<form method='post' action='' class='form-inline' role='form'>";
if ($_SESSION['userlevel'] >= 5) {
$results = dbFetchRows("SELECT `device_id`,`hostname`, `sysName` FROM `devices` ORDER BY `hostname`");
} else {
$results = dbFetchRows("SELECT `D`.`device_id`,`D`.`hostname`, `D`.`sysname` FROM `devices` AS `D`, `devices_perms` AS `P` WHERE `P`.`user_id` = ? AND `P`.`device_id` = `D`.`device_id` ORDER BY `hostname`", array($_SESSION['user_id']));
}
foreach ($results as $data) {
echo(' <option value="'.$data['device_id'].'"');
if ($data['device_id'] == $vars['device_id']) {
echo("selected");
$output .= "<div style='margin-bottom:4px;text-align:left;'>";
$output .= "<div class='form-group'>";
$output .= "<select name='device_id' id='device_id' class='form-control input-sm'>";
$output .= "<option value=''>All Devices</option>";
if ($_SESSION['userlevel'] >= 5) {
$results = dbFetchRows("SELECT `device_id`,`hostname`, `sysName` FROM `devices` ORDER BY `hostname`");
} else {
$results = dbFetchRows("SELECT `D`.`device_id`,`D`.`hostname`, `D`.`sysname` FROM `devices` AS `D`, `devices_perms` AS `P` WHERE `P`.`user_id` = ? AND `P`.`device_id` = `D`.`device_id` ORDER BY `hostname`", array($_SESSION['user_id']));
}
echo(">".format_hostname($data)."</option>");
}
if ($_SESSION['userlevel'] < 5) {
$results = dbFetchRows("SELECT `D`.`device_id`,`D`.`hostname`, `D`.`sysName` FROM `ports` AS `I` JOIN `devices` AS `D` ON `D`.`device_id`=`I`.`device_id` JOIN `ports_perms` AS `PP` ON `PP`.`port_id`=`I`.`port_id` WHERE `PP`.`user_id` = ? AND `PP`.`port_id` = `I`.`port_id` ORDER BY `hostname`", array($_SESSION['user_id']));
} else {
$results = array();
}
foreach ($results as $data) {
echo(' <option value="'.$data['device_id'].'"');
if ($data['device_id'] == $vars['device_id']) {
echo("selected");
}
echo(">".format_hostname($data)."</option>");
}
?>
</select>
<input type="text" name="hostname" id="hostname" title="Hostname" class="form-control input-sm"
<?php
if (strlen($vars['hostname'])) {
echo('value="' . $vars['hostname'] . '"');
}
?> placeholder="Hostname"/>
</div>
<div class="form-group">
<select name="state" id="state" class="form-control input-sm">
<option value="">All States</option>
<option value="up"
<?php
if ($vars['state'] == "up") {
echo("selected");
}
?>>Up
</option>
<option value="down"
<?php
if ($vars['state'] == "down") {
echo("selected");
}
?>>Down
</option>
<option value="admindown"
<?php
if ($vars['state'] == "admindown") {
echo("selected");
}
?>>Shutdown
</option>
</select>
<select name="ifSpeed" id="ifSpeed" class="form-control input-sm">
<option value="">All Speeds</option>
<?php
if (is_admin() === true || is_read() === true) {
$sql = "SELECT `ifSpeed` FROM `ports` GROUP BY `ifSpeed` ORDER BY `ifSpeed`";
} else {
$sql = "SELECT `ifSpeed` FROM `ports` AS `I`, `devices` AS `D`, `devices_perms` AS `P`, `ports_perms` AS `PP` WHERE ((`P`.`user_id` = ? AND `P`.`device_id` = `D`.`device_id`) OR (`PP`.`user_id` = ? AND `PP`.`port_id` = `I`.`port_id` AND `I`.`device_id` = `D`.`device_id`)) AND `D`.`device_id` = `I`.`device_id` GROUP BY `ifSpeed` ORDER BY `ifSpeed`";
$param[] = array($_SESSION['user_id'],$_SESSION['user_id']);
}
foreach (dbFetchRows($sql, $param) as $data) {
if ($data['ifSpeed']) {
echo("<option value='".$data['ifSpeed']."'");
if ($data['ifSpeed'] == $vars['ifSpeed']) {
echo("selected");
foreach ($results as $data) {
if ($data['device_id'] == $vars['device_id']) {
$deviceselected = "selected";
} else {
$deviceselected = "";
}
echo(">".humanspeed($data['ifSpeed'])."</option>");
$ui_device = strlen(format_hostname($data)) > 15 ? substr(format_hostname($data), 0, 15) . "..." : format_hostname($data);
$output .= "<option value='" . $data['device_id'] . "' " . $deviceselected . ">" . $ui_device . "</option>";
}
}
?>
</select>
</div>
<div class="form-group">
<select name="ifType" id="ifType" class="form-control input-sm">
<option value="">All Media</option>
<?php
if (is_admin() === true || is_read() === true) {
$sql = "SELECT `ifType` FROM `ports` GROUP BY `ifType` ORDER BY `ifType`";
} else {
$sql = "SELECT `ifType` FROM `ports` AS `I`, `devices` AS `D`, `devices_perms` AS `P`, `ports_perms` AS `PP` WHERE ((`P`.`user_id` = ? AND `P`.`device_id` = `D`.`device_id`) OR (`PP`.`user_id` = ? AND `PP`.`port_id` = `I`.`port_id` AND `I`.`device_id` = `D`.`device_id`)) AND `D`.`device_id` = `I`.`device_id` GROUP BY `ifType` ORDER BY `ifType`";
$param[] = array($_SESSION['user_id'],$_SESSION['user_id']);
}
foreach (dbFetchRows($sql, $param) as $data) {
if ($data['ifType']) {
echo(' <option value="'.$data['ifType'].'"');
if ($data['ifType'] == $vars['ifType']) {
echo("selected");
if ($_SESSION['userlevel'] < 5) {
$results = dbFetchRows("SELECT `D`.`device_id`,`D`.`hostname`, `D`.`sysName` FROM `ports` AS `I` JOIN `devices` AS `D` ON `D`.`device_id`=`I`.`device_id` JOIN `ports_perms` AS `PP` ON `PP`.`port_id`=`I`.`port_id` WHERE `PP`.`user_id` = ? AND `PP`.`port_id` = `I`.`port_id` ORDER BY `hostname`", array($_SESSION['user_id']));
} else {
$results = array();
}
foreach ($results as $data) {
if ($data['device_id'] == $vars['device_id']) {
$deviceselected = "selected";
} else {
$deviceselected = "";
}
echo(">".$data['ifType']."</option>");
$output .= "<option value='" . $data['device_id'] . "' " . $deviceselected . ">" . format_hostname($data) . "</option>";
}
}
?>
</select>
<select name="port_descr_type" id="port_descr_type" class="form-control input-sm">
<option value="">All Port Types</option>
<?php
if (is_admin() === true || is_read() === true) {
$sql = "SELECT `port_descr_type` FROM `ports` GROUP BY `port_descr_type` ORDER BY `port_descr_type`";
} else {
$sql = "SELECT `port_descr_type` FROM `ports` AS `I`, `devices` AS `D`, `devices_perms` AS `P`, `ports_perms` AS `PP` WHERE ((`P`.`user_id` = ? AND `P`.`device_id` = `D`.`device_id`) OR (`PP`.`user_id` = ? AND `PP`.`port_id` = `I`.`port_id` AND `I`.`device_id` = `D`.`device_id`)) AND `D`.`device_id` = `I`.`device_id` GROUP BY `port_descr_type` ORDER BY `port_descr_type`";
$param[] = array($_SESSION['user_id'],$_SESSION['user_id']);
}
$output .= "</select>&nbsp;";
$ports = dbFetchRows($sql, $param);
foreach ($ports as $data) {
if ($data['port_descr_type']) {
echo(' <option value="'.$data['port_descr_type'].'"');
if ($data['port_descr_type'] == $vars['port_descr_type']) {
echo("selected");
if (strlen($vars['hostname'])) {
$hasvalue = "value='" . $vars['hostname'] . "'";
} else {
$hasvalue = "";
}
$output .= "<input type='text' name='hostname' id='hostname' title='Hostname' class='form-control input-sm' " . $hasvalue . " placeholder='Hostname'>";
$output .= "</div>&nbsp;";
switch ($vars['state']) {
case "up":
$isup = "selected";
$isdown = "";
$admindown = "";
break;
case "down":
$isup = "";
$isdown = "selected";
$admindown = "";
break;
case "admindown":
$isup = "";
$isdown = "";
$admindown = "selected";
break;
}
$output .= "<div class='form-group'>";
$output .= "<select name='state' id='state' class='form-control input-sm'>";
$output .= "<option value=''>All States</option>";
$output .= "<option value='up' " . $isup . ">Up</option>";
$output .= "<option value='down' " . $isdown . ">Down</option>";
$output .= "<option value='admindown' " . $admindown . ">Shutdown</option>";
$output .= "</select>&nbsp;";
$output .= "<select name='fSpeed' id='ifSpeed' class='form-control input-sm'>";
$output .= "<option value=''>All Speeds</option>";
if (is_admin() === true || is_read() === true) {
$sql = "SELECT `ifSpeed` FROM `ports` GROUP BY `ifSpeed` ORDER BY `ifSpeed`";
} else {
$sql = "SELECT `ifSpeed` FROM `ports` AS `I`, `devices` AS `D`, `devices_perms` AS `P`, `ports_perms` AS `PP` WHERE ((`P`.`user_id` = ? AND `P`.`device_id` = `D`.`device_id`) OR (`PP`.`user_id` = ? AND `PP`.`port_id` = `I`.`port_id` AND `I`.`device_id` = `D`.`device_id`)) AND `D`.`device_id` = `I`.`device_id` GROUP BY `ifSpeed` ORDER BY `ifSpeed`";
$param[] = array($_SESSION['user_id'], $_SESSION['user_id']);
}
foreach (dbFetchRows($sql, $param) as $data) {
if ($data['ifSpeed']) {
if ($data['ifSpeed'] == $vars['ifSpeed']) {
$speedselected = "selected";
} else {
$speedselected = "";
}
$output .= "<option value='" . $data['ifSpeed'] . "'" . $speedselected . ">" . humanspeed($data['ifSpeed']) . "</option>";
}
echo(">".ucfirst(display($data['port_descr_type']))."</option>");
}
}
?>
</select>
</div>
<div class="form-group">
<input title="Port Description" type="text" name="ifAlias" id="ifAlias" class="form-control input-sm"
<?php
if (strlen($vars['ifAlias'])) {
echo('value="' . $vars['ifAlias'] . '"');
}
?> placeholder="Port Description"/>
<select title="Location" name="location" id="location" class="form-control input-sm">
<option value="">All Locations</option>
<?php
// FIXME function?
foreach (getlocations() as $location) {
if ($location) {
echo('<option value="'.$location.'"');
if ($location == $vars['location']) {
echo(" selected");
$output .= "</select>&nbsp;";
$output .= "</div>";
$output .= "<div class='form-group'>";
$output .= "<select name='ifType' id='ifType' class='form-control input-sm'>";
$output .= "<option value=''>All Media</option>";
if (is_admin() === true || is_read() === true) {
$sql = "SELECT `ifType` FROM `ports` GROUP BY `ifType` ORDER BY `ifType`";
} else {
$sql = "SELECT `ifType` FROM `ports` AS `I`, `devices` AS `D`, `devices_perms` AS `P`, `ports_perms` AS `PP` WHERE ((`P`.`user_id` = ? AND `P`.`device_id` = `D`.`device_id`) OR (`PP`.`user_id` = ? AND `PP`.`port_id` = `I`.`port_id` AND `I`.`device_id` = `D`.`device_id`)) AND `D`.`device_id` = `I`.`device_id` GROUP BY `ifType` ORDER BY `ifType`";
$param[] = array($_SESSION['user_id'], $_SESSION['user_id']);
}
foreach (dbFetchRows($sql, $param) as $data) {
if ($data['ifType']) {
if ($data['ifType'] == $vars['ifType']) {
$dataselected = "selected";
} else {
$dataselected = "";
}
$output .= "<option value='" . $data['ifType'] . "' " . $dataselected . ">" . $data['ifType'] . "</option>";
}
echo(">".$location."</option>");
}
}
?>
</select>
</div>
<div class="form-group">
<label for="ignore">Ignored</label>
<input type=checkbox id="ignore" name="ignore" value="1"
<?php
if ($vars['ignore']) {
echo("checked");
}
?> >
<label for="disabled">Disabled</label>
<input type=checkbox id="disabled" name="disabled" value=1
<?php
if ($vars['disabled']) {
echo("checked");
}
?> >
<label for="deleted">Deleted</label>
<input type=checkbox id="deleted" name="deleted" value=1
<?php
if ($vars['deleted']) {
echo("checked");
}
?> >
</div>
<button type="submit" class="btn btn-default btn-sm">Search</button>
<a class="btn btn-default btn-sm" href="<?php echo(generate_url(array('page' => 'ports', 'section' => $vars['section'], 'bare' => $vars['bare']))); ?>" title="Reset critera to default." >Reset</a>
</form>
<?php
}
$output .= "</select>&nbsp;";
$output .= "<select name='port_descr_type' id='port_descr_type' class='form-control input-sm'>";
$output .= "<option value=''>All Port Types</option>";
print_optionbar_end();
if (is_admin() === true || is_read() === true) {
$sql = "SELECT `port_descr_type` FROM `ports` GROUP BY `port_descr_type` ORDER BY `port_descr_type`";
} else {
$sql = "SELECT `port_descr_type` FROM `ports` AS `I`, `devices` AS `D`, `devices_perms` AS `P`, `ports_perms` AS `PP` WHERE ((`P`.`user_id` = ? AND `P`.`device_id` = `D`.`device_id`) OR (`PP`.`user_id` = ? AND `PP`.`port_id` = `I`.`port_id` AND `I`.`device_id` = `D`.`device_id`)) AND `D`.`device_id` = `I`.`device_id` GROUP BY `port_descr_type` ORDER BY `port_descr_type`";
$param[] = array($_SESSION['user_id'], $_SESSION['user_id']);
}
$ports = dbFetchRows($sql, $param);
foreach ($ports as $data) {
if ($data['port_descr_type']) {
if ($data['port_descr_type'] == $vars['port_descr_type']) {
$portdescrib = "selected";
} else {
$portdescrib = "";
}
$output .= "<option value='" . $data['port_descr_type'] . "' " . $portdescrib . ">" . ucfirst(display($data['port_descr_type'])) . "</option>";
}
}
$output .= "</select>&nbsp;";
$output .= "</div>";
$output .= "<div class='form-group'>";
if (strlen($vars['ifAlias'])) {
$ifaliasvalue = "value='" . $vars['ifAlias'] . "'";
}
$output .= "</div>";
$output .= "</div>";
$output .= "<div style='text-align:left;'>";
$output .= "<input title='Port Description' type='text' name='ifAlias' id='ifAlias' class='form-control input-sm' " . $ifaliasvalue . " placeholder='Port Description'>&nbsp;";
$output .= "<select title='Location' name='location' id='location' class='form-control input-sm'>&nbsp;";
$output .= "<option value=''>All Locations</option>";
foreach (getlocations() as $location) {
if ($location) {
if ($location == $vars['location']) {
$locationselected = "selected";
} else {
$locationselected = "";
}
$ui_location = strlen($location) > 15 ? substr($location, 0, 15) . "..." : $location;
$output .= "<option value='" . $location . "' " . $locationselected . ">" . $ui_location . "</option>";
}
}
$output .= "</select>&nbsp;";
if ($vars['ignore']) {
$ignorecheck = "checked";
} else {
$ignorecheck = "";
}
if ($vars['disabled']) {
$disabledcheck = "checked";
} else {
$disabledcheck = "";
}
if ($vars['deleted']) {
$deletedcheck = "checked";
} else {
$deletedcheck = "";
}
$output .= "<label for='ignore'>Ignored</label>&nbsp;";
$output .= "<input type='checkbox' id='ignore' name='ignore' value='1' " . $ignorecheck . ">&nbsp;";
$output .= "<label for='disabled'>Disabled</label>&nbsp;";
$output .= "<input type='checkbox' id='disabled' name='disabled' value='1' " . $disabledcheck . ">&nbsp;";
$output .= "<label for='deleted'>Deleted</label>&nbsp;";
$output .= "<input type='checkbox' id='deleted' name='deleted' value='1' " . $deletedcheck . ">&nbsp;";
$output .= "<button type='submit' class='btn btn-default btn-sm'>Search</button>&nbsp;";
$output .= "<a class='btn btn-default btn-sm' href='" . generate_url(array('page' => 'ports', 'section' => $vars['section'], 'bare' => $vars['bare'])) . "' title='Reset critera to default.'>Reset</a>";
$output .= "</div>";
$output .= "</form>";
$output .= "</div>";
}
$param = array();
@ -292,11 +313,11 @@ foreach ($vars as $var => $value) {
switch ($var) {
case 'hostname':
$where .= " AND D.hostname LIKE ?";
$param[] = "%".$value."%";
$param[] = "%" . $value . "%";
break;
case 'location':
$where .= " AND D.location LIKE ?";
$param[] = "%".$value."%";
$param[] = "%" . $value . "%";
break;
case 'device_id':
$where .= " AND D.device_id = ?";
@ -333,7 +354,7 @@ foreach ($vars as $var => $value) {
case 'ifAlias':
case 'port_descr_type':
$where .= " AND I.$var LIKE ?";
$param[] = "%".$value."%";
$param[] = "%" . $value . "%";
break;
case 'errors':
if ($value == 1) {
@ -354,6 +375,23 @@ foreach ($vars as $var => $value) {
$param[] = "down";
}
break;
case 'purge':
if ($vars['purge'] === 'all') {
$interfaces = dbFetchRows('SELECT * from `ports` AS P, `devices` AS D WHERE `deleted` = 1 AND D.device_id = P.device_id');
foreach ($interfaces as $interface) {
$interface = cleanPort($interface);
if (port_permitted($interface['port_id'], $interface['device_id'])) {
delete_port($interface['port_id']);
}
}
} else {
$interface = dbFetchRow('SELECT * from `ports` AS P, `devices` AS D WHERE `port_id` = ? AND D.device_id = P.device_id', array($vars['purge']));
$interface = cleanPort($interface);
if (port_permitted($interface['port_id'], $interface['device_id'])) {
delete_port($interface['port_id']);
}
}
break;
}
}
}
@ -362,7 +400,7 @@ if ($ignore_filter == 0 && $disabled_filter == 0) {
$where .= " AND `I`.`ignore` = 0 AND `I`.`disabled` = 0 AND `I`.`deleted` = 0";
}
$query = "SELECT * FROM `ports` AS I, `devices` AS D WHERE I.device_id = D.device_id ".$where." ".$query_sort;
$query = "SELECT * FROM `ports` AS I, `devices` AS D WHERE I.device_id = D.device_id " . $where . " " . $query_sort;
$row = 1;
@ -409,8 +447,6 @@ switch ($vars['sort']) {
$ports = array_sort($ports, 'hostname', SORT_ASC);
}
if (file_exists('pages/ports/'.$format.'.inc.php')) {
require 'pages/ports/'.$format.'.inc.php';
if (file_exists('pages/ports/' . $format . '.inc.php')) {
require 'pages/ports/' . $format . '.inc.php';
}
?>

View File

@ -1,4 +1,18 @@
<?php
/*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version. Please see LICENSE.txt at the top level of
* the source code distribution for details.
*
* @package LibreNMS
* @subpackage webui
* @link http://librenms.org
* @copyright 2017 LibreNMS
* @author LibreNMS Contributors
*/
$details_visible = var_export($vars['format'] == 'list_detail', 1);
$errors_visible = var_export($vars['format'] == 'list_detail' || $vars['errors'], 1);
$no_refresh = true;
@ -12,26 +26,44 @@ if ($vars['errors']) {
}
?>
<div class="panel panel-default panel-condensed">
<div class="panel-heading">
<?php echo $displayLists; ?>
</div>
<div class="table-responsive">
<table id="ports" class="table table-condensed table-hover">
<thead>
<tr>
<th data-column-id="device">Device</th>
<th data-column-id="port"<?php echo $sort ?>>Port</th>
<th data-column-id="ifLastChange" data-converter="duration">Status Changed</th>
<th data-column-id="ifConnectorPresent" data-visible="false">Connected</th>
<th data-column-id="ifSpeed" data-converter="human-bps">Speed</th>
<th data-column-id="ifMtu" data-visible="false">MTU</th>
<th data-column-id="ifInOctets_rate" data-searchable="false" data-css-class="green" data-converter="human-bps">Down</th>
<th data-column-id="ifOutOctets_rate" data-searchable="false" data-css-class="blue" data-converter="human-bps">Up</th>
<th data-column-id="ifInUcastPkts_rate" data-searchable="false" data-visible="<?php echo $details_visible ?>" data-css-class="green" data-converter="human-pps">Packets In</th>
<th data-column-id="ifOutUcastPkts_rate" data-searchable="false" data-visible="<?php echo $details_visible ?>" data-css-class="blue" data-converter="human-pps">Packets Out</th>
<th data-column-id="ifInErrors" data-searchable="false" data-visible="<?php echo $errors_visible ?>" data-css-class="red"<?php echo $error_sort ?>>Errors In</th>
<th data-column-id="ifOutErrors" data-searchable="false" data-visible="<?php echo $errors_visible ?>" data-css-class="red">Errors Out</th>
<th data-column-id="ifType">Media</th>
<th data-column-id="description">Description</th>
<th data-column-id="actions" data-sortable="false" data-searchable="false">Actions</th>
</tr>
<tr>
<th data-column-id="status"></th>
<th data-column-id="device">Device</th>
<th data-column-id="port"<?php echo $sort ?>>Port</th>
<th data-column-id="ifLastChange" data-converter="duration">Status Changed</th>
<th data-column-id="ifConnectorPresent" data-visible="false">Connected</th>
<th data-column-id="ifSpeed" data-converter="human-bps">Speed</th>
<th data-column-id="ifMtu" data-visible="false">MTU</th>
<th data-column-id="ifInOctets_rate" data-searchable="false" data-css-class="green"
data-converter="human-bps">Down
</th>
<th data-column-id="ifOutOctets_rate" data-searchable="false" data-css-class="blue"
data-converter="human-bps">Up
</th>
<th data-column-id="ifInUcastPkts_rate" data-searchable="false"
data-visible="<?php echo $details_visible ?>" data-css-class="green" data-converter="human-pps">
Packets In
</th>
<th data-column-id="ifOutUcastPkts_rate" data-searchable="false"
data-visible="<?php echo $details_visible ?>" data-css-class="blue" data-converter="human-pps">
Packets Out
</th>
<th data-column-id="ifInErrors" data-searchable="false" data-visible="<?php echo $errors_visible ?>"
data-css-class="red"<?php echo $error_sort ?>>Errors In
</th>
<th data-column-id="ifOutErrors" data-searchable="false" data-visible="<?php echo $errors_visible ?>"
data-css-class="red">Errors Out
</th>
<th data-column-id="ifType">Media</th>
<th data-column-id="description">Description</th>
<th data-column-id="actions" data-sortable="false" data-searchable="false">Actions</th>
</tr>
</thead>
</table>
</div>
@ -88,4 +120,6 @@ var grid = $("#ports").bootgrid({
url: "ajax_table.php"
});
$(".actionBar").append("<?php echo $output; ?>");
</script>