Files

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

275 lines
11 KiB
PHP
Raw Permalink Normal View History

2007-04-03 14:10:23 +00:00
<?php
2017-12-24 21:58:59 +02:00
/*
* 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
2021-02-09 00:29:04 +01:00
* @link https://www.librenms.org
2017-12-24 21:58:59 +02:00
* @copyright 2017 LibreNMS
* @author LibreNMS Contributors
*/
2007-04-03 14:10:23 +00:00
2019-12-30 12:11:26 +01:00
use App\Models\Port;
2020-04-16 09:19:58 -05:00
use Illuminate\Database\Eloquent\ModelNotFoundException;
2019-12-30 12:11:26 +01:00
2011-10-18 14:41:19 +00:00
$pagetitle[] = 'Ports';
2012-05-25 12:24:34 +00:00
// Set Defaults here
2007-04-03 14:10:23 +00:00
2016-08-18 20:28:22 -05:00
if (! isset($vars['format'])) {
2011-09-14 13:38:01 +00:00
$vars['format'] = 'list_basic';
}
2007-04-03 14:10:23 +00:00
2022-09-07 15:33:29 -05:00
$displayLists = '<span style="font-weight: bold;">Ports lists</span> &#187; ';
$menu_options = ['basic' => 'Basic', 'detail' => 'Detail'];
$sep = '';
foreach ($menu_options as $option => $text) {
2017-12-24 21:58:59 +02:00
$displayLists .= $sep;
if ($vars['format'] == 'list_' . $option) {
$displayLists .= '<span class="pagemenu-selected">';
}
2021-03-28 17:25:30 -05:00
$displayLists .= '<a href="' . \LibreNMS\Util\Url::generate($vars, ['format' => 'list_' . $option]) . '">' . $text . '</a>';
2017-12-24 21:58:59 +02:00
if ($vars['format'] == 'list_' . $option) {
$displayLists .= '</span>';
}
$sep = ' | ';
}
2018-01-08 21:54:21 +02:00
$displayLists .= '&nbsp;&nbsp;<span style="font-weight: bold;">Graphs</span> &#187;&nbsp;';
$menu_options = ['bits' => 'Bits',
'upkts' => 'Unicast Packets',
'nupkts' => 'Non-Unicast Packets',
'errors' => 'Errors', ];
$sep = '';
foreach ($menu_options as $option => $text) {
2017-12-24 21:58:59 +02:00
$displayLists .= $sep;
if ($vars['format'] == 'graph_' . $option) {
$displayLists .= '<span class="pagemenu-selected">';
}
2021-03-28 17:25:30 -05:00
$displayLists .= '<a href="' . \LibreNMS\Util\Url::generate($vars, ['format' => 'graph_' . $option]) . '">' . $text . '</a>';
2017-12-24 21:58:59 +02:00
if ($vars['format'] == 'graph_' . $option) {
$displayLists .= '</span>';
}
$sep = ' | ';
}
2017-12-24 21:58:59 +02:00
$displayLists .= '<div style="float: right;">';
2021-05-05 04:51:19 +02:00
$displayLists .= '<a href="' . \LibreNMS\Util\Url::generate($vars, ['format' => '', 'page' => 'csv.php', 'report' => 'ports']) . '" title="Export as CSV" target="_blank" rel="noopener">Export CSV</a> | <a href="' . \LibreNMS\Util\Url::generate($vars) . '" title="Update the browser URL to reflect the search criteria.">Update URL</a> | ';
if (isset($vars['searchbar']) && $vars['searchbar'] == 'hide') {
2021-03-28 17:25:30 -05:00
$displayLists .= '<a href="' . \LibreNMS\Util\Url::generate($vars, ['searchbar' => '']) . '">Search</a>';
2016-08-18 20:28:22 -05:00
} else {
2021-03-28 17:25:30 -05:00
$displayLists .= '<a href="' . \LibreNMS\Util\Url::generate($vars, ['searchbar' => 'hide']) . '">Search</a>';
}
2017-12-24 21:58:59 +02:00
$displayLists .= ' | ';
if (isset($vars['bare']) && $vars['bare'] == 'yes') {
2021-03-28 17:25:30 -05:00
$displayLists .= '<a href="' . \LibreNMS\Util\Url::generate($vars, ['bare' => '']) . '">Header</a>';
2016-08-18 20:28:22 -05:00
} else {
2021-03-28 17:25:30 -05:00
$displayLists .= '<a href="' . \LibreNMS\Util\Url::generate($vars, ['bare' => 'yes']) . '">Header</a>';
}
2017-12-24 21:58:59 +02:00
$displayLists .= ' | ';
$displayLists .= '<span style="font-weight: bold;">Bulk actions</span> &#187';
2021-09-30 02:41:12 -05:00
$displayLists .= '<a href="ports/deleted=1/purge=all" title="Delete ports"> Purge all deleted</a>';
2017-12-24 21:58:59 +02:00
$displayLists .= '</div>';
2016-08-18 20:28:22 -05:00
if ((isset($vars['searchbar']) && $vars['searchbar'] != 'hide') || ! isset($vars['searchbar'])) {
2022-09-07 15:33:29 -05:00
$output = "<form method='post' action='' class='form-inline' role='form'>";
2019-07-18 08:29:42 -05:00
$output .= addslashes(csrf_field());
2017-12-24 21:58:59 +02:00
$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'></select>&nbsp;";
2022-08-30 12:55:37 -05:00
$hasvalue = ! empty($vars['hostname']) ? "value='" . $vars['hostname'] . "'" : '';
2015-04-22 21:35:16 +01:00
2017-12-24 21:58:59 +02:00
$output .= "<input type='text' name='hostname' id='hostname' title='Hostname' class='form-control input-sm' " . $hasvalue . " placeholder='Hostname'>";
$output .= '</div>&nbsp;';
2022-08-30 12:55:37 -05:00
switch ($vars['state'] ?? '') {
2017-12-24 21:58:59 +02:00
case 'up':
$isup = 'selected';
$isdown = '';
$admindown = '';
break;
case 'down':
$isup = '';
$isdown = 'selected';
$admindown = '';
break;
case 'admindown':
$isup = '';
$isdown = '';
$admindown = 'selected';
break;
2022-08-30 12:55:37 -05:00
default:
$isup = '';
$isdown = '';
$admindown = '';
2011-09-14 13:38:01 +00:00
}
2015-04-22 21:35:16 +01:00
2017-12-24 21:58:59 +02:00
$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='ifSpeed' id='ifSpeed' class='form-control input-sm'>";
2017-12-24 21:58:59 +02:00
$output .= "<option value=''>All Speeds</option>";
2019-12-30 12:11:26 +01:00
$ifSpeed = Port::select('ifSpeed')
->hasAccess(Auth::user())
->groupBy('ifSpeed')
->orderBy('ifSpeed')
->get();
2017-12-24 21:58:59 +02:00
2019-12-30 12:11:26 +01:00
foreach ($ifSpeed as $data) {
2017-12-24 21:58:59 +02:00
if ($data['ifSpeed']) {
2022-08-30 12:55:37 -05:00
$speedselected = isset($vars['ifSpeed']) && $data['ifSpeed'] == $vars['ifSpeed'] ? 'selected' : '';
2021-03-28 17:25:30 -05:00
$output .= "<option value='" . $data['ifSpeed'] . "'" . $speedselected . '>' . \LibreNMS\Util\Number::formatSi($data['ifSpeed'], 2, 3, 'bps') . '</option>';
2011-09-14 13:38:01 +00:00
}
}
2015-04-22 21:35:16 +01:00
2017-12-24 21:58:59 +02:00
$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>";
2019-12-30 12:11:26 +01:00
$ifType = Port::select('ifType')
->hasAccess(Auth::user())
->groupBy('ifType')
->orderBy('ifType')
->get();
2019-12-30 12:11:26 +01:00
foreach ($ifType as $data) {
2017-12-24 21:58:59 +02:00
if ($data['ifType']) {
2022-08-30 12:55:37 -05:00
$dataselected = isset($vars['ifType']) && $data['ifType'] == $vars['ifType'] ? 'selected' : '';
$output .= "<option value='" . clean_bootgrid($data['ifType']) . "' " . $dataselected . '>' . clean_bootgrid($data['ifType']) . '</option>';
}
}
2015-07-13 20:10:26 +02:00
2017-12-24 21:58:59 +02:00
$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>";
if (Auth::user()->hasGlobalRead()) {
2017-12-24 21:58:59 +02:00
$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[] = [Auth::id(), Auth::id()];
2011-09-19 11:15:01 +00:00
}
2019-12-30 12:11:26 +01:00
$port_descr_type = Port::select('port_descr_type')
->hasAccess(Auth::user())
->groupBy('port_descr_type')
->orderBy('port_descr_type')
->get();
2017-12-24 21:58:59 +02:00
2019-12-30 12:11:26 +01:00
foreach ($port_descr_type as $data) {
2017-12-24 21:58:59 +02:00
if ($data['port_descr_type']) {
2022-08-30 12:55:37 -05:00
if (isset($vars['port_descr_type']) && $data['port_descr_type'] == $vars['port_descr_type']) {
2017-12-24 21:58:59 +02:00
$portdescrib = 'selected';
} else {
$portdescrib = '';
}
$output .= "<option value='" . clean_bootgrid($data['port_descr_type']) . "' " . $portdescrib . '>' . ucfirst(clean_bootgrid($data['port_descr_type'])) . '</option>';
2017-12-24 21:58:59 +02:00
}
}
$output .= '</select>&nbsp;';
$output .= '</div>';
$output .= "<div class='form-group'>";
2022-08-30 12:55:37 -05:00
$ifaliasvalue = isset($vars['ifAlias']) ? "value='" . $vars['ifAlias'] . "'" : '';
2017-12-24 21:58:59 +02:00
$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_row) {
$location = $location_row['location'];
$location_id = $location_row['id'];
2017-12-24 21:58:59 +02:00
if ($location) {
2022-08-30 12:55:37 -05:00
if (isset($vars['location']) && $location_id == $vars['location']) {
2017-12-24 21:58:59 +02:00
$locationselected = 'selected';
} else {
$locationselected = '';
}
2017-12-24 21:58:59 +02:00
$ui_location = strlen($location) > 15 ? substr($location, 0, 15) . '...' : $location;
$output .= "<option value='$location_id' $locationselected>" . clean_bootgrid($ui_location) . '</option>';
2017-12-24 21:58:59 +02:00
}
}
2011-09-14 13:38:01 +00:00
2017-12-24 21:58:59 +02:00
$output .= '</select>&nbsp;';
2022-08-30 12:55:37 -05:00
$ignorecheck = isset($vars['ignore']) ? 'checked' : '';
$disabledcheck = isset($vars['disabled']) ? 'checked' : '';
$deletedcheck = isset($vars['deleted']) ? 'checked' : '';
2017-12-24 21:58:59 +02:00
$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;";
2022-08-30 12:55:37 -05:00
$output .= "<a class='btn btn-default btn-sm' href='" . \LibreNMS\Util\Url::generate(['page' => 'ports', 'section' => $vars['section'] ?? '', 'bare' => $vars['bare'] ?? '']) . "' title='Reset critera to default.'>Reset</a>";
2017-12-24 21:58:59 +02:00
$output .= '</div>';
$output .= '</form>';
}
2011-09-14 13:38:01 +00:00
2016-08-18 20:28:22 -05:00
if (! isset($vars['ignore'])) {
2011-09-19 11:15:01 +00:00
$vars['ignore'] = '0';
}
2016-08-18 20:28:22 -05:00
if (! isset($vars['disabled'])) {
2011-09-19 11:15:01 +00:00
$vars['disabled'] = '0';
}
2016-08-18 20:28:22 -05:00
if (! isset($vars['deleted'])) {
2011-09-19 11:15:01 +00:00
$vars['deleted'] = '0';
}
2022-09-07 15:33:29 -05:00
if (isset($vars['purge'])) {
if ($vars['purge'] === 'all') {
Port::hasAccess(Auth::user())->with(['device' => function ($query) {
$query->select('device_id', 'hostname');
}])->isDeleted()->chunk(100, function ($ports) {
foreach ($ports as $port) {
$port->delete();
}
});
} else {
try {
Port::hasAccess(Auth::user())->where('port_id', $vars['purge'])->firstOrFail()->delete();
} catch (ModelNotFoundException $e) {
echo "<div class='alert alert-danger'>Port ID {$vars['purge']} not found! Could not purge port.</div>";
}
2011-09-20 16:03:54 +00:00
}
2011-09-14 13:38:01 +00:00
}
2019-04-11 23:26:42 -05:00
[$format, $subformat] = explode('_', basename($vars['format']));
2012-05-25 10:34:01 +00:00
2019-04-11 23:26:42 -05:00
if (file_exists('includes/html/pages/ports/' . $format . '.inc.php')) {
require 'includes/html/pages/ports/' . $format . '.inc.php';
2011-09-14 13:38:01 +00:00
}