Merge branch 'fix-merge-5' into pr/60

This commit is contained in:
jokob-sk
2022-08-02 21:25:13 +10:00
40 changed files with 1727 additions and 537 deletions

View File

@@ -594,7 +594,42 @@ input[type="password"]::-webkit-caps-lock-indicator {
}
/*** Additional fixes For Pi.Alert UI ***/
.small-box {
border-radius: 10px;
border-top: 0px;
}
.pa-small-box-aqua .inner {
background-color: rgb(45,108,133);
border-top-left-radius: 10px;
border-top-right-radius: 10px;
}
.pa-small-box-green .inner {
background-color: rgb(31,76,46);
border-top-left-radius: 10px;
border-top-right-radius: 10px;
}
.pa-small-box-yellow .inner {
background-color: rgb(151,104,37);
border-top-left-radius: 10px;
border-top-right-radius: 10px;
}
.pa-small-box-red .inner {
background-color: rgb(120,50,38);
border-top-left-radius: 10px;
border-top-right-radius: 10px;
}
.pa-small-box-gray .inner {
background-color: #777;
/* color: rgba(20,20,20,30%); */
border-top-left-radius: 10px;
border-top-right-radius: 10px;
}
.pa-small-box-gray .inner h3 {
color: #bbb;
}
.text-gray-20 {
color: rgba(220,220,220,30%);
}
.bg-gray {
background-color: #888888 !important;
}
@@ -670,4 +705,21 @@ input[type="password"]::-webkit-caps-lock-indicator {
.login-box-body {
color: #bec5cb;
background-color: #272c30;
}
}
/* Add border radius to bottom of the status boxes*/
.pa-small-box-footer {
border-bottom-left-radius: 10px;
border-bottom-right-radius: 10px;
}
.small-box > .inner h3, .small-box > .inner p {
margin-bottom: 0px;
margin-left: 0px;
}
.small-box:hover .icon {
font-size: 3.74em;
}
.small-box .icon {
top: 0.01em;
font-size: 3.25em;
}

View File

@@ -263,17 +263,29 @@ if ($_REQUEST['mac'] == 'Internet') { $DevDetail_Tap_temp = "Tools"; } else { $D
<textarea class="form-control" rows="3" id="txtComments"></textarea>
</div>
</div>
<!-- Network -->
<h4 class="bottom-border-aqua"><?php echo $pia_lang['DevDetail_MainInfo_Network_Title'];?></h4>
<div class="form-group">
<label class="col-sm-6 control-label"><?php echo $pia_lang['DevDetail_MainInfo_Network'];?></label>
<div class="col-sm-6">
<input class="form-control" id="txtInfrastructure" type="text" value="--">
<div class="col-sm-6">
<div class="input-group">
<input class="form-control" id="txtNetworkNodeMac" type="text" value="--">
<div class="input-group-btn">
<button type="button" class="btn btn-info dropdown-toggle" data-toggle="dropdown" aria-expanded="false" id="buttonNetworkNodeMac">
<span class="fa fa-caret-down"></span></button>
<ul id="dropdownNetworkNodeMac" class="dropdown-menu dropdown-menu-right">
</ul>
</div>
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-6 control-label"><?php echo $pia_lang['DevDetail_MainInfo_Network_Port'];?></label>
<div class="col-sm-6">
<input class="form-control" id="txtInfrastructurePort" type="text" value="--">
<input class="form-control" id="txtNetworkPort" type="text" value="--">
</div>
</div>
@@ -704,7 +716,6 @@ function main () {
// Read Cookies
devicesList = getCookie('devicesList');
deleteCookie ('devicesList');
if (devicesList != '') {
devicesList = JSON.parse (devicesList);
} else {
@@ -804,10 +815,11 @@ function initializeiCheck () {
// -----------------------------------------------------------------------------
function initializeCombos () {
// Initialize combos with queries
initializeCombo ( $('#dropdownOwner')[0], 'getOwners', 'txtOwner');
initializeCombo ( $('#dropdownDeviceType')[0], 'getDeviceTypes', 'txtDeviceType');
initializeCombo ( $('#dropdownGroup')[0], 'getGroups', 'txtGroup');
initializeCombo ( $('#dropdownLocation')[0], 'getLocations', 'txtLocation');
initializeCombo ( $('#dropdownOwner')[0], 'getOwners', 'txtOwner');
initializeCombo ( $('#dropdownDeviceType')[0], 'getDeviceTypes', 'txtDeviceType');
initializeCombo ( $('#dropdownGroup')[0], 'getGroups', 'txtGroup');
initializeCombo ( $('#dropdownLocation')[0], 'getLocations', 'txtLocation');
initializeCombo ( $('#dropdownNetworkNodeMac')[0], 'getNetworkNodes', 'txtNetworkNodeMac');
// Initialize static combos
initializeComboSkipRepeated ();
@@ -828,10 +840,17 @@ function initializeCombo (HTMLelement, queryAction, txtDataField) {
order = item['order'];
}
id = item['name'];
// use explicitly specified id (value) if avaliable
if(item['id'])
{
id = item['id'];
}
// add dropdown item
HTMLelement.innerHTML +=
'<li><a href="javascript:void(0)" onclick="setTextValue(\''+
txtDataField +'\',\''+ item['name'] +'\')">'+ item['name'] + '</a></li>'
txtDataField +'\',\''+ id +'\')">'+ item['name'] + '</a></li>'
});
});
}
@@ -1121,8 +1140,8 @@ function getDeviceData (readAllData=false) {
$('#txtGroup').val ('--');
$('#txtLocation').val ('--');
$('#txtComments').val ('--');
$('#txtInfrastructure').val ('--');
$('#txtInfrastructurePort').val ('--');
$('#txtNetworkNodeMac').val ('--');
$('#txtNetworkPort').val ('--');
$('#txtFirstConnection').val ('--');
$('#txtLastConnection').val ('--');
@@ -1193,6 +1212,13 @@ function getDeviceData (readAllData=false) {
mac =deviceData['dev_MAC'];
// update the mac parameter in the URL, this makes the selected device persistent when the page is reloaded
var searchParams = new URLSearchParams(window.location.search);
searchParams.set("mac", mac);
var newRelativePathQuery = window.location.pathname + '?' + searchParams.toString();
history.pushState(null, '', newRelativePathQuery);
getSessionsPresenceEvents();
$('#txtMAC').val (deviceData['dev_MAC']);
$('#txtName').val (deviceData['dev_Name']);
$('#txtOwner').val (deviceData['dev_Owner']);
@@ -1203,8 +1229,8 @@ function getDeviceData (readAllData=false) {
$('#txtGroup').val (deviceData['dev_Group']);
$('#txtLocation').val (deviceData['dev_Location']);
$('#txtComments').val (deviceData['dev_Comments']);
$('#txtInfrastructure').val (deviceData['dev_Infrastructure']);
$('#txtInfrastructurePort').val (deviceData['dev_Infrastructure_port']);
$('#txtNetworkNodeMac').val (deviceData['dev_Network_Node_MAC']);
$('#txtNetworkPort').val (deviceData['dev_Network_Node_port']);
$('#txtFirstConnection').val (deviceData['dev_FirstConnection']);
$('#txtLastConnection').val (deviceData['dev_LastConnection']);
@@ -1254,7 +1280,7 @@ function getDeviceData (readAllData=false) {
$('#btnNext').removeAttr ('disabled');
$('#btnNext').removeClass ('text-gray50');
}
// Timer for refresh data
$("body").css("cursor", "default");
newTimerRefreshData (getDeviceData);
@@ -1313,8 +1339,8 @@ function setDeviceData (refreshCallback='') {
+ '&group=' + $('#txtGroup').val()
+ '&location=' + $('#txtLocation').val()
+ '&comments=' + $('#txtComments').val()
+ '&infrastructure=' + $('#txtInfrastructure').val()
+ '&infrastructureport=' + $('#txtInfrastructurePort').val()
+ '&networknode=' + $('#txtNetworkNodeMac').val()
+ '&networknodeport=' + $('#txtNetworkPort').val()
+ '&staticIP=' + ($('#chkStaticIP')[0].checked * 1)
+ '&scancycle=' + $('#txtScanCycle').val().split(' ')[0]
+ '&alertevents=' + ($('#chkAlertEvents')[0].checked * 1)
@@ -1336,6 +1362,7 @@ function setDeviceData (refreshCallback='') {
}
// -----------------------------------------------------------------------------
function askSkipNotifications () {
// Check MAC
@@ -1422,13 +1449,16 @@ function deleteDevice () {
// -----------------------------------------------------------------------------
function getSessionsPresenceEvents () {
// Check MAC in url
var urlParams = new URLSearchParams(window.location.search);
mac = urlParams.get ('mac');
// Define Sessions datasource and query dada
$('#tableSessions').DataTable().ajax.url('php/server/events.php?action=getDeviceSessions&mac=' + mac +'&period='+ period).load();
// Define Presence datasource and query data
$('#calendar').fullCalendar('removeEventSources');
$('#calendar').fullCalendar('addEventSource',
{ url: 'php/server/events.php?action=getDevicePresence&mac=' + mac +'&period='+ period });
{ url: 'php/server/events.php?action=getDevicePresence&mac=' + mac});
// Query events
getDeviceEvents();

View File

@@ -114,7 +114,7 @@ if ($_SESSION["login"] != 1)
<div class="col-md-12">
<div class="box" id="clients">
<div class="box-header with-border">
<h3 class="box-title"><?php echo $pia_lang['Device_Shortcut_OnlineChart_a'];?> <span class="maxlogage-interval">12</span> <?php echo $pia_lang['Device_Shortcut_OnlineChart_b'];?></h3>
<h3 class="box-title"><?php echo $pia_lang['Device_Shortcut_OnlineChart'];?> </h3>
</div>
<div class="box-body">
<div class="chart">
@@ -237,6 +237,12 @@ function main () {
// -----------------------------------------------------------------------------
function initializeDatatable () {
// If the device has a small width (mobile) only show name, ip, and status columns.
if (window.screen.width < 400) {
var tableColumnShow = [10,11,12,1,2,3,4,5,6,8];
} else {
var tableColumnShow = [10, 11, 12];
};
var table=
$('#tableDevices').DataTable({
'paging' : true,
@@ -254,7 +260,7 @@ function initializeDatatable () {
// 'order' : [[3,'desc'], [0,'asc']],
'columnDefs' : [
{visible: false, targets: [10, 11, 12] },
{visible: false, targets: tableColumnShow },
{className: 'text-center', targets: [3, 8, 9] },
{width: '80px', targets: [5, 6] },
{width: '0px', targets: 9 },

View File

@@ -338,9 +338,9 @@ if (submit && isset($_POST['langselector_set'])) {
</div>
<div class="db_tools_table_cell_b"><?php echo $pia_lang['Maintenance_Tool_purgebackup_text'];?></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div style="width: 100%; height: 20px;"></div>

View File

@@ -1,368 +1,343 @@
<?php
session_start();
if ($_SESSION["login"] != 1)
session_start();
if ($_SESSION["login"] != 1)
{
header('Location: /pialert/index.php');
exit;
}
require 'php/templates/header.php';
require 'php/server/db.php';
require 'php/templates/header.php';
require 'php/server/db.php';
require 'php/server/util.php';
$DBFILE = '../db/pialert.db';
OpenDB();
// #####################################
// ## Create Table if not exists'
// #####################################
$sql = 'CREATE TABLE IF NOT EXISTS "network_infrastructure" (
"device_id" INTEGER,
"net_device_name" TEXT NOT NULL,
"net_device_typ" TEXT NOT NULL,
"net_device_port" INTEGER,
PRIMARY KEY("device_id" AUTOINCREMENT)
)';
$result = $db->query($sql);
// #####################################
// ## Expand Devices Table
// #####################################
$sql = 'ALTER TABLE "Devices" ADD "dev_Infrastructure" INTEGER';
$result = $db->query($sql);
$sql = 'ALTER TABLE "Devices" ADD "dev_Infrastructure_port" INTEGER';
$result = $db->query($sql);
// #####################################
// Add New Network Devices
// #####################################
if ($_REQUEST['Networkinsert'] == "yes") {
if (isset($_REQUEST['NetworkDeviceName']) && isset($_REQUEST['NetworkDeviceTyp']))
{
$sql = 'INSERT INTO "network_infrastructure" ("net_device_name", "net_device_typ", "net_device_port") VALUES("'.$_REQUEST['NetworkDeviceName'].'", "'.$_REQUEST['NetworkDeviceTyp'].'", "'.$_REQUEST['NetworkDevicePort'].'")';
$result = $db->query($sql);
}
}
// #####################################
// Add New Network Devices
// #####################################
if ($_REQUEST['Networkedit'] == "yes") {
if (isset($_REQUEST['NewNetworkDeviceName']) && isset($_REQUEST['NewNetworkDeviceTyp']))
{
$sql = 'UPDATE "network_infrastructure" SET "net_device_name" = "'.$_REQUEST['NewNetworkDeviceName'].'", "net_device_typ" = "'.$_REQUEST['NewNetworkDeviceTyp'].'", "net_device_port" = "'.$_REQUEST['NewNetworkDevicePort'].'" WHERE "device_id"="'.$_REQUEST['NetworkDeviceID'].'"';
//$sql = 'INSERT INTO "network_infrastructure" ("net_device_name", "net_device_typ", "net_device_port") VALUES("'.$_REQUEST['NetworkDeviceName'].'", "'.$_REQUEST['NetworkDeviceTyp'].'", "'.$_REQUEST['NetworkDevicePort'].'")';
$result = $db->query($sql);
}
}
// #####################################
// remove Network Devices
// #####################################
if ($_REQUEST['Networkdelete'] == "yes") {
if (isset($_REQUEST['NetworkDeviceID']))
{
$sql = 'DELETE FROM "network_infrastructure" WHERE "device_id"="'.$_REQUEST['NetworkDeviceID'].'"';
$result = $db->query($sql);
}
}
// online / offline badges HTML snippets
define('badge_online', '<div class="badge bg-green text-white" style="width: 60px;">Online</div>');
define('badge_offline', '<div class="badge bg-red text-white" style="width: 60px;">Offline</div>');
define('circle_online', '<div class="badge bg-green text-white" style="width: 10px; height: 10px; padding:2px; margin-top: -25px;">&nbsp;</div>');
define('circle_offline', '<div class="badge bg-red text-white" style="width: 10px; height: 10px; padding:2px; margin-top: -25px;">&nbsp;</div>');
$DBFILE = '../db/pialert.db';
$NETWORKTYPES = getNetworkTypes();
OpenDB();
// #####################################
// ## Expand Devices Table
// #####################################
$sql = 'ALTER TABLE "Devices" ADD "dev_Network_Node_MAC" INTEGER';
$result = $db->query($sql);
$sql = 'ALTER TABLE "Devices" ADD "dev_Network_Node_port" INTEGER';
$result = $db->query($sql);
?>
<!-- Page ------------------------------------------------------------------ -->
<div class="content-wrapper">
<!-- Content header--------------------------------------------------------- -->
<section class="content-header">
<?php require 'php/templates/notification.php'; ?>
<h1 id="pageTitle">
<?php echo $pia_lang['Network_Title'];?>
</h1>
</section>
<!-- Content header--------------------------------------------------------- -->
<section class="content-header">
<?php require 'php/templates/notification.php'; ?>
<h1 id="pageTitle">
<?php echo $pia_lang['Network_Title'];?>
</h1>
</section>
<?php
echo $_REQUEST['device_id'];
?>
<!-- Main content ---------------------------------------------------------- -->
<section class="content">
<div class="box box-default collapsed-box"> <!-- collapsed-box -->
<div class="box-header with-border" data-widget="collapse">
<h3 class="box-title"><?php echo $pia_lang['Network_ManageDevices'];?></h3>
<div class="box-tools pull-right">
<button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-plus"></i></button>
</div>
</div>
<!-- /.box-header -->
<div class="box-body" style="">
<div class="row">
<div class="col-md-4">
<h4 class="box-title"><?php echo $pia_lang['Network_ManageAdd'];?></h4>
<form role="form" method="post" action="./network.php">
<div class="form-group">
<label for="NetworkDeviceName"><?php echo $pia_lang['Network_ManageAdd_Name'];?>:</label>
<input type="text" class="form-control" id="NetworkDeviceName" name="NetworkDeviceName" placeholder="<?php echo $pia_lang['Network_ManageAdd_Name_text'];?>">
</div>
<!-- /.form-group -->
<div class="form-group">
<label><?php echo $pia_lang['Network_ManageAdd_Type'];?>:</label>
<select class="form-control" name="NetworkDeviceTyp">
<option value=""><?php echo $pia_lang['Network_ManageAdd_Type_text'];?></option>
<option value="Router">Router</option>
<option value="Switch">Switch</option>
<option value="WLAN">WLAN</option>
<option value="Powerline">Powerline</option>
</select>
</div>
<div class="form-group">
<label for="NetworkDevicePort"><?php echo $pia_lang['Network_ManageAdd_Port'];?>:</label>
<input type="text" class="form-control" id="NetworkDevicePort" name="NetworkDevicePort" placeholder="<?php echo $pia_lang['Network_ManageAdd_Port_text'];?>">
</div>
<div class="form-group">
<button type="submit" class="btn btn-success" name="Networkinsert" value="yes"><?php echo $pia_lang['Network_ManageAdd_Submit'];?></button>
</div>
</form>
<!-- /.form-group -->
</div>
<!-- /.col -->
<div class="col-md-4">
<h4 class="box-title"><?php echo $pia_lang['Network_ManageEdit'];?></h4>
<form role="form" method="post" action="./network.php">
<div class="form-group">
<label><?php echo $pia_lang['Network_ManageEdit_ID'];?>:</label>
<select class="form-control" name="NetworkDeviceID">
<option value=""><?php echo $pia_lang['Network_ManageEdit_ID_text'];?></option>
<?php
$sql = 'SELECT "device_id", "net_device_name", "net_device_typ" FROM "network_infrastructure"';
$result = $db->query($sql);//->fetchArray(SQLITE3_ASSOC);
while($res = $result->fetchArray(SQLITE3_ASSOC)){
if(!isset($res['device_id'])) continue;
echo '<option value="'.$res['device_id'].'">'.$res['net_device_name'].' / '.$res['net_device_typ'].'</option>';
}
?>
</select>
</div>
<div class="form-group">
<label for="NetworkDeviceName"><?php echo $pia_lang['Network_ManageEdit_Name'];?>:</label>
<input type="text" class="form-control" id="NewNetworkDeviceName" name="NewNetworkDeviceName" placeholder="<?php echo $pia_lang['Network_ManageEdit_Name_text'];?>">
</div>
<div class="form-group">
<label><?php echo $pia_lang['Network_ManageEdit_Type'];?>:</label>
<select class="form-control" name="NewNetworkDeviceTyp">
<option value=""><?php echo $pia_lang['Network_ManageEdit_Type_text'];?></option>
<option value="Router">Router</option>
<option value="Switch">Switch</option>
<option value="WLAN">WLAN</option>
<option value="Powerline">Powerline</option>
</select>
</div>
<div class="form-group">
<label for="NetworkDevicePort"><?php echo $pia_lang['Network_ManageEdit_Port'];?>:</label>
<input type="text" class="form-control" id="NewNetworkDevicePort" name="NewNetworkDevicePort" placeholder="<?php echo $pia_lang['Network_ManageEdit_Port_text'];?>">
</div>
<!-- /.form-group -->
<div class="form-group">
<button type="submit" class="btn btn-primary" name="Networkedit" value="yes"><?php echo $pia_lang['Network_ManageEdit_Submit'];?></button>
</div>
</form>
<!-- /.form-group -->
</div>
<!-- /.col -->
<div class="col-md-4">
<h4 class="box-title"><?php echo $pia_lang['Network_ManageDel'];?></h4>
<form role="form" method="post" action="./network.php">
<div class="form-group">
<label><?php echo $pia_lang['Network_ManageDel_Name'];?>:</label>
<select class="form-control" name="NetworkDeviceID">
<option value=""><?php echo $pia_lang['Network_ManageDel_Name_text'];?></option>
<?php
$sql = 'SELECT "device_id", "net_device_name", "net_device_typ" FROM "network_infrastructure"';
$result = $db->query($sql);//->fetchArray(SQLITE3_ASSOC);
while($res = $result->fetchArray(SQLITE3_ASSOC)){
if(!isset($res['device_id'])) continue;
echo '<option value="'.$res['device_id'].'">'.$res['net_device_name'].' / '.$res['net_device_typ'].'</option>';
}
?>
</select>
</div>
<!-- /.form-group -->
<div class="form-group">
<button type="submit" class="btn btn-danger" name="Networkdelete" value="yes"><?php echo $pia_lang['Network_ManageDel_Submit'];?></button>
</div>
</form>
<!-- /.form-group -->
</div>
</div>
<!-- /.row -->
</div>
<!-- /.box-body -->
</div>
<?php
echo $_REQUEST['net_MAC'];
?>
<?php
// #####################################
// ## Start Function Setup
// #####################################
function createnetworktab($pia_func_netdevid, $pia_func_netdevname, $pia_func_netdevtyp, $pia_func_netdevport, $activetab) {
echo '<li class="'.$activetab.'"><a href="#'.$pia_func_netdevid.'" data-toggle="tab">'.$pia_func_netdevname.' / '.$pia_func_netdevtyp;
if ($pia_func_netdevport != "") {echo ' ('.$pia_func_netdevport.')';}
echo '</a></li>';
}
function createnetworktabcontent($pia_func_netdevid, $pia_func_netdevname, $pia_func_netdevtyp, $pia_func_netdevport, $activetab) {
global $pia_lang;
echo '<div class="tab-pane '.$activetab.'" id="'.$pia_func_netdevid.'">
<h4>'.$pia_func_netdevname.' (ID: '.$pia_func_netdevid.')</h4><br>';
echo '<div class="box-body no-padding">
<table class="table table-striped">
<tbody><tr>
<th style="width: 40px">Port</th>
<th style="width: 100px">'.$pia_lang['Network_Table_State'].'</th>
<th>'.$pia_lang['Network_Table_Hostname'].'</th>
<th>'.$pia_lang['Network_Table_IP'].'</th>
</tr>';
// Prepare Array for Devices with Port value
// If no Port is set, the Port number is set to 1
if ($pia_func_netdevport == "") {$pia_func_netdevport = 1;}
// Create Array with specific length
$network_device_portname = array();
$network_device_portmac = array();
$network_device_portip = array();
$network_device_portstate = array();
// make sql query for Network Hardware ID
global $db;
$func_sql = 'SELECT * FROM "Devices" WHERE "dev_Infrastructure" = "'.$pia_func_netdevid.'"';
$func_result = $db->query($func_sql);//->fetchArray(SQLITE3_ASSOC);
while($func_res = $func_result->fetchArray(SQLITE3_ASSOC)) {
//if(!isset($func_res['dev_Name'])) continue;
if ($func_res['dev_PresentLastScan'] == 1) {$port_state = '<div class="badge bg-green text-white" style="width: 60px;">Online</div>';} else {$port_state = '<div class="badge bg-red text-white" style="width: 60px;">Offline</div>';}
// Prepare Table with Port > push values in array
if ($pia_func_netdevport > 1)
{
if (stristr($func_res['dev_Infrastructure_port'], ',') == '') {
if ($network_device_portname[$func_res['dev_Infrastructure_port']] != '') {$network_device_portname[$func_res['dev_Infrastructure_port']] = $network_device_portname[$func_res['dev_Infrastructure_port']].','.$func_res['dev_Name'];} else {$network_device_portname[$func_res['dev_Infrastructure_port']] = $func_res['dev_Name'];}
if ($network_device_portmac[$func_res['dev_Infrastructure_port']] != '') {$network_device_portmac[$func_res['dev_Infrastructure_port']] = $network_device_portmac[$func_res['dev_Infrastructure_port']].','.$func_res['dev_MAC'];} else {$network_device_portmac[$func_res['dev_Infrastructure_port']] = $func_res['dev_MAC'];}
if ($network_device_portip[$func_res['dev_Infrastructure_port']] != '') {$network_device_portip[$func_res['dev_Infrastructure_port']] = $network_device_portip[$func_res['dev_Infrastructure_port']].','.$func_res['dev_LastIP'];} else {$network_device_portip[$func_res['dev_Infrastructure_port']] = $func_res['dev_LastIP'];}
if (isset($network_device_portstate[$func_res['dev_Infrastructure_port']])) {$network_device_portstate[$func_res['dev_Infrastructure_port']] = $network_device_portstate[$func_res['dev_Infrastructure_port']].','.$func_res['dev_PresentLastScan'];} else {$network_device_portstate[$func_res['dev_Infrastructure_port']] = $func_res['dev_PresentLastScan'];}
} else {
$multiport = array();
$multiport = explode(',',$func_res['dev_Infrastructure_port']);
foreach($multiport as $row) {
$network_device_portname[trim($row)] = $func_res['dev_Name'];
$network_device_portmac[trim($row)] = $func_res['dev_MAC'];
$network_device_portip[trim($row)] = $func_res['dev_LastIP'];
$network_device_portstate[trim($row)] = $func_res['dev_PresentLastScan'];
}
unset($multiport);
<!-- Main content ---------------------------------------------------------- -->
<section class="content">
<?php
// Create top-level node (network devices) tabs
function createDeviceTabs($node_mac, $node_name, $node_status, $node_type, $node_ports_count, $activetab) {
global $pia_lang; //language strings
// prepare string with port number in brackets if available
$str_port = "";
if ($node_ports_count != "") {
$str_port = ' ('.$node_ports_count.')';
}
} else {
// Table without Port > echo values
// Specific icon for devicetype
if ($pia_func_netdevtyp == "WLAN") {$dev_port_icon = 'fa-wifi';}
if ($pia_func_netdevtyp == "Powerline") {$dev_port_icon = 'fa-flash';}
echo '<tr><td style="text-align: center;"><i class="fa '.$dev_port_icon.'"></i></td><td>'.$port_state.'</td><td style="padding-left: 10px;"><a href="./deviceDetails.php?mac='.$func_res['dev_MAC'].'"><b>'.$func_res['dev_Name'].'</b></a></td><td>'.$func_res['dev_LastIP'].'</td></tr>';
}
}
// Create table with Port
if ($pia_func_netdevport > 1)
{
for ($x=1; $x<=$pia_func_netdevport; $x++)
// online/offline status circle (red/green)
$node_badge = "";
if($node_status == 1) // 1 means online, 0 offline
{
// Prepare online/offline badge for later functions
$online_badge = '<div class="badge bg-green text-white" style="width: 60px;">Online</div>';
$offline_badge = '<div class="badge bg-red text-white" style="width: 60px;">Offline</div>';
// Set online/offline badge
echo '<tr>';
echo '<td style="text-align: right; padding-right:16px;">'.$x.'</td>';
// Set online/offline badge
// Check if multiple badges necessary
if (stristr($network_device_portstate[$x],',') == '') {
// Set single online/offline badge
if ($network_device_portstate[$x] == 1) {$port_state = $online_badge;} else {$port_state = $offline_badge;}
echo '<td>'.$port_state.'</td>';
} else {
// Set multiple online/offline badges
$multistate = array();
$multistate = explode(',',$network_device_portstate[$x]);
echo '<td>';
foreach($multistate as $key => $value) {
if ($value == 1) {$port_state = $online_badge;} else {$port_state = $offline_badge;}
echo $port_state.'<br>';
}
echo '</td>';
unset($multistate);
}
// Check if multiple Hostnames are set
// print single hostname
if (stristr($network_device_portmac[$x],',') == '') {
echo '<td style="padding-left: 10px;"><a href="./deviceDetails.php?mac='.$network_device_portmac[$x].'"><b>'.$network_device_portname[$x].'</b></a></td>';
} else {
// print multiple hostnames with separate links
$multimac = array();
$multimac = explode(',',$network_device_portmac[$x]);
$multiname = array();
$multiname = explode(',',$network_device_portname[$x]);
echo '<td style="padding-left: 10px;">';
foreach($multiname as $key => $value) {
echo '<a href="./deviceDetails.php?mac='.$multimac[$key].'"><b>'.$value.'</b></a><br>';
}
echo '</td>';
unset($multiname, $multimac);
}
// Check if multiple IP are set
// print single IP
if (stristr($network_device_portip[$x],',') == '') {
echo '<td style="padding-left: 10px;">'.$network_device_portip[$x].'</td>';
} else {
// print multiple IPs
$multiip = array();
$multiip = explode(',',$network_device_portip[$x]);
echo '<td style="padding-left: 10px;">';
foreach($multiip as $key => $value) {
echo $value.'<br>';
}
echo '</td>';
unset($multiip);
}
echo '</tr>';
$node_badge = circle_online;
} else
{
$node_badge = circle_offline;
}
}
echo ' </tbody></table>
</div>';
echo '</div> ';
}
// #####################################
// ## End Function Setup
// #####################################
// #####################################
// ## Create Tabs
// #####################################
$sql = 'SELECT "device_id", "net_device_name", "net_device_typ", "net_device_port" FROM "network_infrastructure"';
$result = $db->query($sql);//->fetchArray(SQLITE3_ASSOC);
?>
<div class="nav-tabs-custom" style="margin-bottom: 0px;">
<ul class="nav nav-tabs">
<?php
$i = 0;
while($res = $result->fetchArray(SQLITE3_ASSOC)){
if(!isset($res['device_id'])) continue;
if ($i == 0) {$active = 'active';} else {$active = '';}
createnetworktab($res['device_id'], $res['net_device_name'], $res['net_device_typ'], $res['net_device_port'], $active);
$i++;
}
?>
</ul>
<div class="tab-content">
<?php
// #####################################
// ## Ctreate Tab Content
// #####################################
$i = 0;
while($res = $result->fetchArray(SQLITE3_ASSOC)){
if(!isset($res['device_id'])) continue;
if ($i == 0) {$active = 'active';} else {$active = '';}
createnetworktabcontent($res['device_id'], $res['net_device_name'], $res['net_device_typ'], $res['net_device_port'], $active);
$i++;
}
unset($i);
?>
<!-- /.tab-pane -->
</div>
<!-- /.tab-content -->
</div>
<div style="width: 100%; height: 20px;"></div>
</section>
$str_tab_header = '<li class="'.$activetab.'">
<a href="#'.str_replace(":", "_", $node_mac).'" data-toggle="tab">'
.$node_name.' ' .$str_port.$node_badge.
'</a>
</li>';
echo $str_tab_header;
}
// Create pane content (displayed inside of the tabs)
function createPane($node_mac, $node_name, $node_status, $node_type, $node_ports_count, $activetab){
global $pia_lang; //language strings
// online/offline status circle (red/green)
$node_badge = "";
if($node_status == 1) // 1 means online, 0 offline
{
$node_badge = badge_online;
} else
{
$node_badge = badge_offline;
}
$str_tab_pane = '<div class="tab-pane '.$activetab.'" id="'.str_replace(":", "_", $node_mac).'">
<a href="./deviceDetails.php?mac='.$node_mac.'">
<h4>'.$node_name.'</h4>
</a>
<table class="table table-striped" style="width:200px;">
<tbody>
<tr>
<td>
<b>MAC:</b>
</td>
<td>'
.$node_mac.
'</td>
</tr>
<tr>
<td>
<b>'.$pia_lang['Device_TableHead_Type'].'</b>
</td>
<td>
' .$node_type. '
</td>
</tr>
<tr>
<td>
<b>'.$pia_lang['Network_Table_State'].':</b>
</td>
<td> '
.$node_badge.
'</td>
</tr>
</tbody>
</table>
<br>
<div class="box-body no-padding">';
$str_table = ' <h4>
'.$pia_lang['Device_Title'].'
</h4>
<table class="table table-striped">
<tbody>
<tr>
<th style="width: 40px">Port</th>
<th style="width: 100px">'.$pia_lang['Network_Table_State'].'</th>
<th>'.$pia_lang['Network_Table_Hostname'].'</th>
<th>'.$pia_lang['Network_Table_IP'].'</th>
</tr>';
// Prepare Array for Devices with Port value
// If no Port is set, the Port number is set to 0
if ($node_ports_count == "") {
$node_ports_count = 0;
}
// Get all leafs connected to a node based on the node_mac
$func_sql = 'SELECT dev_Network_Node_port as port,
dev_MAC as mac,
dev_PresentLastScan as online,
dev_Name as name,
dev_DeviceType as type,
dev_LastIP as last_ip,
(select dev_DeviceType from Devices a where dev_MAC = "'.$node_mac.'") as node_type
FROM Devices WHERE dev_Network_Node_MAC = "'.$node_mac.'" order by port asc';
global $db;
$func_result = $db->query($func_sql);
// array
$tableData = array();
while ($row = $func_result -> fetchArray (SQLITE3_ASSOC)) {
// Push row data
$tableData[] = array( 'port' => $row['port'],
'mac' => $row['mac'],
'online' => $row['online'],
'name' => $row['name'],
'type' => $row['type'],
'last_ip' => $row['last_ip'],
'node_type' => $row['node_type']);
}
// Control no rows
if (empty($tableData)) {
$tableData = [];
}
$str_table_rows = "";
foreach ($tableData as $row) {
if ($row['online'] == 1) {
$port_state = badge_online;
} else {
$port_state = badge_offline;
}
// prepare HTML for the port table column cell
$port_content = "N/A";
if ($row['node_type'] == "WLAN" || $row['node_type'] == "AP" ) {
$port_content = '<i class="fa fa-wifi"></i>';
} elseif ($row['node_type'] == "Powerline")
{
$port_content = '<i class="fa fa-flash"></i>';
} elseif ($row['port'] != NULL && $row['port'] != "")
{
$port_content = $row['port'];
}
$str_table_rows = $str_table_rows.
'<tr>
<td style="text-align: center;">
'.$port_content.'
</td>
<td>'
.$port_state.
'</td>
<td style="padding-left: 10px;">
<a href="./deviceDetails.php?mac='.$row['mac'].'">
<b>'.$row['name'].'</b>
</a>
</td>
<td>'
.$row['last_ip'].
'</td>
</tr>';
}
$str_table_close = '</tbody>
</table>';
// no connected device - don't render table, just dispaly some info
if($str_table_rows == "")
{
$str_table = "<div>
<h4>
".$pia_lang['Device_Title']."
</h4>
<div>
This network device (node) doesn't have any assigned devices (leaf nodes).
Go to <a href='./devices.php'><b>".$pia_lang['Device_Title']."</b></a>, select a device you want to attach to this node and assign it in the <b>Details</b> tab by selecting it in the <b>".$pia_lang['DevDetail_MainInfo_Network'] ."</b> dropdown.
</div>
</div>";
$str_table_close = "";
}
$str_close_pane = '</div>
</div>';
// write the HTML
echo ''.$str_tab_header.
$str_tab_pane.
$str_table.
$str_table_rows.
$str_table_close.
$str_close_pane;
}
// Create Top level tabs (List of network devices), explanation of the terminology below:
//
// Switch 1 (node)
// /(p1) \ (p2) <----- port numbers
// / \
// Smart TV (leaf) Switch 2 (node (for the PC) and leaf (for Switch 1))
// \
// PC (leaf)
$sql = "SELECT node_name, node_mac, online, node_type, node_ports_count
FROM
(
SELECT a.dev_Name as node_name,
a.dev_MAC as node_mac,
a.dev_PresentLastScan as online,
a.dev_DeviceType as node_type
FROM Devices a
WHERE a.dev_DeviceType in ('AP', 'Gateway', 'Powerline', 'Switch', 'WLAN', 'PLC', 'Router','USB LAN Adapter', 'USB WIFI Adapter', 'Internet')
) t1
LEFT JOIN
(
SELECT b.dev_Network_Node_MAC as node_mac_2,
count() as node_ports_count
FROM Devices b
WHERE b.dev_Network_Node_MAC NOT NULL group by b.dev_Network_Node_MAC
) t2
ON (t1.node_mac = t2.node_mac_2);
";
$result = $db->query($sql);
// array
$tableData = array();
while ($row = $result -> fetchArray (SQLITE3_ASSOC)) {
// Push row data
$tableData[] = array( 'node_mac' => $row['node_mac'],
'node_name' => $row['node_name'],
'online' => $row['online'],
'node_type' => $row['node_type'],
'node_ports_count' => $row['node_ports_count']);
}
// Control no rows
if (empty($tableData)) {
$tableData = [];
}
echo '<div class="nav-tabs-custom" style="margin-bottom: 0px;">
<ul class="nav nav-tabs">';
$activetab='active';
foreach ($tableData as $row) {
createDeviceTabs( $row['node_mac'],
$row['node_name'],
$row['online'],
$row['node_type'],
$row['node_ports_count'],
$activetab);
$activetab = ""; // reset active tab indicator, only the first tab is active
}
echo ' </ul> <div class="tab-content">';
$activetab='active';
foreach ($tableData as $row) {
createPane($row['node_mac'],
$row['node_name'],
$row['online'],
$row['node_type'],
$row['node_ports_count'],
$activetab);
$activetab = ""; // reset active tab indicator, only the first tab is active
}
$db->close();
?>
<!-- /.tab-pane -->
</div>
</section>
<!-- /.content -->
</div>
@@ -371,4 +346,4 @@ unset($i);
<!-- ----------------------------------------------------------------------- -->
<?php
require 'php/templates/footer.php';
?>
?>

View File

@@ -8,6 +8,13 @@
// Puche 2021 pi.alert.application@gmail.com GNU GPLv3
//------------------------------------------------------------------------------
// ## TimeZone processing
$config_file = "../../../config/pialert.conf";
$config_file_lines = file($config_file);
$config_file_lines_timezone = array_values(preg_grep('/^TIMEZONE\s.*/', $config_file_lines));
$timezone_line = explode("'", $config_file_lines_timezone[0]);
$Pia_TimeZone = $timezone_line[1];
date_default_timezone_set($Pia_TimeZone);
//------------------------------------------------------------------------------
// DB File Path
@@ -51,10 +58,11 @@ function OpenDB () {
}
$db = SQLite3_connect(true);
$db->exec('PRAGMA journal_mode = wal;');
if(!$db)
{
die ('Error connecting to database');
}
}
?>
?>

View File

@@ -7,6 +7,13 @@
//------------------------------------------------------------------------------
// Puche 2021 pi.alert.application@gmail.com GNU GPLv3
//------------------------------------------------------------------------------
// ## TimeZone processing
$config_file = "../../../config/pialert.conf";
$config_file_lines = file($config_file);
$config_file_lines_timezone = array_values(preg_grep('/^TIMEZONE\s.*/', $config_file_lines));
$timezone_line = explode("'", $config_file_lines_timezone[0]);
$Pia_TimeZone = $timezone_line[1];
date_default_timezone_set($Pia_TimeZone);
foreach (glob("../../../db/setting_language*") as $filename) {
$pia_lang_selected = str_replace('setting_language_','',basename($filename));
@@ -34,8 +41,9 @@ if (strlen($pia_lang_selected) == 0) {$pia_lang_selected = 'en_us';}
switch ($action) {
case 'getDeviceData': getDeviceData(); break;
case 'setDeviceData': setDeviceData(); break;
case 'getNetworkNodes': getNetworkNodes(); break;
case 'deleteDevice': deleteDevice(); break;
case 'deleteAllWithEmptyMACs': deleteAllWithEmptyMACs(); break;
case 'deleteAllWithEmptyMACs': deleteAllWithEmptyMACs(); break;
case 'createBackupDB': createBackupDB(); break;
case 'restoreBackupDB': restoreBackupDB(); break;
case 'deleteAllDevices': deleteAllDevices(); break;
@@ -49,7 +57,7 @@ if (strlen($pia_lang_selected) == 0) {$pia_lang_selected = 'en_us';}
case 'PiaRestoreDBfromArchive': PiaRestoreDBfromArchive(); break;
case 'PiaPurgeDBBackups': PiaPurgeDBBackups(); break;
case 'PiaEnableDarkmode': PiaEnableDarkmode(); break;
case 'PiaToggleArpScan': PiaToggleArpScan(); break;
case 'PiaToggleArpScan': PiaToggleArpScan(); break;
case 'getDevicesTotals': getDevicesTotals(); break;
case 'getDevicesList': getDevicesList(); break;
@@ -87,8 +95,8 @@ function getDeviceData() {
$deviceData = $row;
$mac = $deviceData['dev_MAC'];
$deviceData['dev_Infrastructure'] = $row['dev_Infrastructure'];
$deviceData['dev_Infrastructure_port'] = $row['dev_Infrastructure_port'];
$deviceData['dev_Network_Node_MAC'] = $row['dev_Network_Node_MAC'];
$deviceData['dev_Network_Node_port'] = $row['dev_Network_Node_port'];
$deviceData['dev_FirstConnection'] = formatDate ($row['dev_FirstConnection']); // Date formated
$deviceData['dev_LastConnection'] = formatDate ($row['dev_LastConnection']); // Date formated
@@ -119,8 +127,10 @@ function getDeviceData() {
$row = $result -> fetchArray (SQLITE3_NUM);
$deviceData['dev_DownAlerts'] = $row[0];
// Get current date using php, sql datetime does not return time respective to timezone.
$currentdate = date("Y-m-d H:i:s");
// Presence hours
$sql = 'SELECT CAST(( MAX (0, SUM (julianday (IFNULL (ses_DateTimeDisconnection, DATETIME("now","localtime")))
$sql = 'SELECT CAST(( MAX (0, SUM (julianday (IFNULL (ses_DateTimeDisconnection,"'. $currentdate .'" ))
- julianday (CASE WHEN ses_DateTimeConnection < '. $periodDate .' THEN '. $periodDate .'
ELSE ses_DateTimeConnection END)) *24 )) AS INT)
FROM Sessions
@@ -156,8 +166,8 @@ function setDeviceData() {
dev_Group = "'. quotes($_REQUEST['group']) .'",
dev_Location = "'. quotes($_REQUEST['location']) .'",
dev_Comments = "'. quotes($_REQUEST['comments']) .'",
dev_Infrastructure = "'. quotes($_REQUEST['infrastructure']).'",
dev_Infrastructure_port = "'. quotes($_REQUEST['infrastructureport']).'",
dev_Network_Node_MAC = "'. quotes($_REQUEST['networknode']).'",
dev_Network_Node_port = "'. quotes($_REQUEST['networknodeport']).'",
dev_StaticIP = "'. quotes($_REQUEST['staticIP']) .'",
dev_ScanCycle = "'. quotes($_REQUEST['scancycle']) .'",
dev_AlertEvents = "'. quotes($_REQUEST['alertevents']) .'",
@@ -590,12 +600,43 @@ function getOwners() {
}
//------------------------------------------------------------------------------
// Query Device Data
//------------------------------------------------------------------------------
function getNetworkNodes() {
global $db;
// Device Data
$sql = 'SELECT * FROM Devices WHERE dev_DeviceType in ( "AP", "Gateway", "Powerline", "Switch", "WLAN", "PLC", "Router","USB LAN Adapter", "USB WIFI Adapter")';
$result = $db->query($sql);
// arrays of rows
$tableData = array();
while ($row = $result -> fetchArray (SQLITE3_ASSOC)) {
// Push row data
$tableData[] = array('id' => $row['dev_MAC'],
'name' => $row['dev_Name'] );
}
// Control no rows
if (empty($tableData)) {
$tableData = [];
}
// Return json
echo (json_encode ($tableData));
}
//------------------------------------------------------------------------------
// Query the List of types
//------------------------------------------------------------------------------
function getDeviceTypes() {
global $db;
$networkTypes = getNetworkTypes();
// SQL
$sql = 'SELECT DISTINCT 9 as dev_Order, dev_DeviceType
FROM Devices
@@ -604,7 +645,7 @@ function getDeviceTypes() {
"Laptop", "Mini PC", "PC", "Printer", "Server", "Singleboard Computer (SBC)",
"Game Console", "SmartTV", "TV Decoder", "Virtual Assistance",
"Clock", "House Appliance", "Phone", "Radio",
"AP", "NAS", "PLC", "Router")
"AP", "Gateway", "Powerline", "Switch", "WLAN", "PLC", "Router","USB LAN Adapter", "USB WIFI Adapter" )
UNION SELECT 1 as dev_Order, "Smartphone"
UNION SELECT 1 as dev_Order, "Tablet"
@@ -615,6 +656,7 @@ function getDeviceTypes() {
UNION SELECT 2 as dev_Order, "Printer"
UNION SELECT 2 as dev_Order, "Server"
UNION SELECT 2 as dev_Order, "Singleboard Computer (SBC)"
UNION SELECT 2 as dev_Order, "NAS"
UNION SELECT 3 as dev_Order, "Domotic"
UNION SELECT 3 as dev_Order, "Game Console"
@@ -627,8 +669,12 @@ function getDeviceTypes() {
UNION SELECT 4 as dev_Order, "Phone"
UNION SELECT 4 as dev_Order, "Radio"
-- network devices
UNION SELECT 5 as dev_Order, "AP"
UNION SELECT 5 as dev_Order, "NAS"
UNION SELECT 5 as dev_Order, "Gateway"
UNION SELECT 5 as dev_Order, "Powerline"
UNION SELECT 5 as dev_Order, "Switch"
UNION SELECT 5 as dev_Order, "WLAN"
UNION SELECT 5 as dev_Order, "PLC"
UNION SELECT 5 as dev_Order, "Router"
UNION SELECT 5 as dev_Order, "USB LAN Adapter"
@@ -637,6 +683,8 @@ function getDeviceTypes() {
UNION SELECT 10 as dev_Order, "Other"
ORDER BY 1,2';
$result = $db->query($sql);
// arrays of rows
@@ -649,8 +697,6 @@ function getDeviceTypes() {
// Return json
echo (json_encode ($tableData));
}
//------------------------------------------------------------------------------
// Query the List of groups
//------------------------------------------------------------------------------

View File

@@ -7,7 +7,13 @@
//------------------------------------------------------------------------------
// Puche 2021 pi.alert.application@gmail.com GNU GPLv3
//------------------------------------------------------------------------------
// ## TimeZone processing
$config_file = "../../../config/pialert.conf";
$config_file_lines = file($config_file);
$config_file_lines_timezone = array_values(preg_grep('/^TIMEZONE\s.*/', $config_file_lines));
$timezone_line = explode("'", $config_file_lines_timezone[0]);
$Pia_TimeZone = $timezone_line[1];
date_default_timezone_set($Pia_TimeZone);
//------------------------------------------------------------------------------
// External files
@@ -217,15 +223,15 @@ function getDeviceSessions() {
// Disconnection DateTime
if ($row['ses_StillConnected'] == true) {
$end = '...';
$end = '...';
} elseif ($row['ses_EventTypeDisconnection'] == '<missing event>') {
$end = $row['ses_EventTypeDisconnection'];
$end = $row['ses_EventTypeDisconnection'];
} else {
$end = formatDate ($row['ses_DateTimeDisconnection']);
}
// Duration
if ($row['ses_EventTypeConnection'] == '<missing event>' || $row['ses_EventTypeDisconnection'] == '<missing event>') {
if ($row['ses_EventTypeConnection'] == '<missing event>' || $row['ses_EventTypeConnection'] == NULL || $row['ses_EventTypeDisconnection'] == '<missing event>' || $row['ses_EventTypeDisconnection'] == NULL) {
$dur = '...';
} elseif ($row['ses_StillConnected'] == true) {
$dur = formatDateDiff ($row['ses_DateTimeConnection'], ''); //***********
@@ -261,7 +267,6 @@ function getDevicePresence() {
// Request Parameters
$mac = $_REQUEST['mac'];
$periodDate = getDateFromPeriod();
$startDate = '"'. formatDateISO ($_REQUEST ['start']) .'"';
$endDate = '"'. formatDateISO ($_REQUEST ['end']) .'"';
@@ -276,7 +281,7 @@ function getDevicePresence() {
END AS ses_DateTimeConnectionCorrected,
CASE
WHEN ses_EventTypeDisconnection = "<missing event>" THEN
WHEN ses_EventTypeDisconnection = "<missing event>" OR ses_EventTypeDisconnection = NULL THEN
(SELECT MIN(ses_DateTimeConnection) FROM Sessions AS SES2 WHERE SES2.ses_MAC = SES1.ses_MAC AND SES2.ses_DateTimeConnection > SES1.ses_DateTimeConnection)
ELSE ses_DateTimeDisconnection
END AS ses_DateTimeDisconnectionCorrected
@@ -290,13 +295,14 @@ function getDevicePresence() {
// arrays of rows
while ($row = $result -> fetchArray (SQLITE3_ASSOC)) {
// Event color
if ($row['ses_EventTypeConnection'] == '<missing event>' || $row['ses_EventTypeDisconnection'] == '<missing event>') {
$color = '#f39c12';
} elseif ($row['ses_StillConnected'] == 1 ) {
$color = '#00a659';
} else {
$color = '#0073b7';
}
if ($row['ses_EventTypeConnection'] == '<missing event>' || $row['ses_EventTypeDisconnection'] == '<missing event>') {
$color = '#f39c12';
} elseif ($row['ses_StillConnected'] == 1 ) {
$color = '#00a659';
} else {
$color = '#0073b7';
}
// tooltip
$tooltip = 'Connection: ' . formatEventDate ($row['ses_DateTimeConnection'], $row['ses_EventTypeConnection']) . chr(13) .
@@ -333,7 +339,7 @@ function getEventsCalendar() {
$startDate = '"'. $_REQUEST ['start'] .'"';
$endDate = '"'. $_REQUEST ['end'] .'"';
// SQL
// SQL
$SQL = 'SELECT ses_MAC, ses_EventTypeConnection, ses_DateTimeConnection,
ses_EventTypeDisconnection, ses_DateTimeDisconnection, ses_IP, ses_AdditionalInfo, ses_StillConnected,
@@ -358,12 +364,12 @@ function getEventsCalendar() {
while ($row = $result -> fetchArray (SQLITE3_ASSOC)) {
// Event color
if ($row['ses_EventTypeConnection'] == '<missing event>' || $row['ses_EventTypeDisconnection'] == '<missing event>') {
$color = '#f39c12';
} elseif ($row['ses_StillConnected'] == 1 ) {
$color = '#00a659';
} else {
$color = '#0073b7';
}
$color = '#f39c12';
} elseif ($row['ses_StillConnected'] == 1 ) {
$color = '#00a659';
} else {
$color = '#0073b7';
}
// tooltip
$tooltip = 'Connection: ' . formatEventDate ($row['ses_DateTimeConnection'], $row['ses_EventTypeConnection']) . chr(13) .

View File

@@ -8,6 +8,13 @@
// Puche 2021 pi.alert.application@gmail.com GNU GPLv3
//------------------------------------------------------------------------------
// ## TimeZone processing
$config_file = "../../../config/pialert.conf";
$config_file_lines = file($config_file);
$config_file_lines_timezone = array_values(preg_grep('/^TIMEZONE\s.*/', $config_file_lines));
$timezone_line = explode("'", $config_file_lines_timezone[0]);
$Pia_TimeZone = $timezone_line[1];
date_default_timezone_set($Pia_TimeZone);
//------------------------------------------------------------------------------
// Formatting data functions
@@ -58,4 +65,12 @@ function logServerConsole ($text) {
$y = $x['__________'. $text .'__________'];
}
function getNetworkTypes(){
$array = array(
"AP", "Gateway", "Powerline", "Switch", "WLAN", "PLC", "Router","USB LAN Adapter", "USB WIFI Adapter"
);
return $array;
}
?>

View File

@@ -1,10 +1,16 @@
<?php
require 'php/server/db.php';
$DBFILE = '../db/pialert.db';
OpenDB();
$Pia_Graph_Device_Time = array();
$Pia_Graph_Device_All = array();
$Pia_Graph_Device_Online = array();
$Pia_Graph_Device_Down = array();
$Pia_Graph_Device_Arch = array();
$db = new SQLite3('../db/pialert.db');
//$db = new SQLite3('../db/pialert.db');
$results = $db->query('SELECT * FROM Online_History ORDER BY Scan_Date DESC LIMIT 144');
while ($row = $results->fetchArray()) {
$time_raw = explode(' ', $row['Scan_Date']);

View File

@@ -102,6 +102,7 @@ if ($ENABLED_DARKMODE === True) {
?>
<!-- Servertime to the right of the hostname -->
<script>
var pia_servertime = new Date(<?php echo date("Y, n, j, G, i, s") ?>);
function show_pia_servertime() {
@@ -232,7 +233,6 @@ function show_pia_servertime() {
<li class=" <?php if (in_array (basename($_SERVER['SCRIPT_NAME']), array('maintenance.php') ) ){ echo 'active'; } ?>">
<a href="maintenance.php"><i class="fa fa-cog"></i> <span><?php echo $pia_lang['Navigation_Maintenance'];?></span></a>
</li>
<!--
<li class="treeview">
<a href="#"><i class="fa fa-link"></i> <span>Config</span>

View File

@@ -27,8 +27,7 @@ $pia_lang['Device_Shortcut_NewDevices'] = 'Neue Geräte';
$pia_lang['Device_Shortcut_DownAlerts'] = 'Down Meldungen';
$pia_lang['Device_Shortcut_Archived'] = 'Archiviert';
$pia_lang['Device_Shortcut_Devices'] = 'Geräte';
$pia_lang['Device_Shortcut_OnlineChart_a'] = 'Netzwerkaktivität über die letzten';
$pia_lang['Device_Shortcut_OnlineChart_b'] = 'Stunden';
$pia_lang['Device_Shortcut_OnlineChart'] = 'Gerätepräsenz im Laufe der Zeit';
$pia_lang['Device_TableHead_Name'] = 'Name';
$pia_lang['Device_TableHead_Owner'] = 'Eigentümer';
$pia_lang['Device_TableHead_Type'] = 'Typ';

View File

@@ -10,6 +10,7 @@ $pia_lang['Gen_Backup'] = 'Run Backup';
$pia_lang['Gen_Restore'] = 'Run Restore';
$pia_lang['Gen_Switch'] = 'Switch';
//////////////////////////////////////////////////////////////////
// Device Page
//////////////////////////////////////////////////////////////////
@@ -27,8 +28,7 @@ $pia_lang['Device_Shortcut_NewDevices'] = 'New Devices';
$pia_lang['Device_Shortcut_DownAlerts'] = 'Down Alerts';
$pia_lang['Device_Shortcut_Archived'] = 'Archived';
$pia_lang['Device_Shortcut_Devices'] = 'Devices';
$pia_lang['Device_Shortcut_OnlineChart_a'] = 'Network activity over last';
$pia_lang['Device_Shortcut_OnlineChart_b'] = 'hours';
$pia_lang['Device_Shortcut_OnlineChart'] = 'Device presence over time';
$pia_lang['Device_TableHead_Name'] = 'Name';
$pia_lang['Device_TableHead_Owner'] = 'Owner';
$pia_lang['Device_TableHead_Type'] = 'Type';
@@ -133,8 +133,9 @@ $pia_lang['DevDetail_MainInfo_Favorite'] = 'Favorite';
$pia_lang['DevDetail_MainInfo_Group'] = 'Group';
$pia_lang['DevDetail_MainInfo_Location'] = 'Location';
$pia_lang['DevDetail_MainInfo_Comments'] = 'Comments';
$pia_lang['DevDetail_MainInfo_Network'] = 'Network Hardware (ID)';
$pia_lang['DevDetail_MainInfo_Network_Port'] = 'Network HW Port';
$pia_lang['DevDetail_MainInfo_Network_Title'] = 'Network';
$pia_lang['DevDetail_MainInfo_Network'] = 'Network Node (MAC)';
$pia_lang['DevDetail_MainInfo_Network_Port'] = 'Connected to Port';
$pia_lang['DevDetail_SessionInfo_Title'] = 'Session Info';
$pia_lang['DevDetail_SessionInfo_Status'] = 'Status';
$pia_lang['DevDetail_SessionInfo_FirstSession'] = 'First Session';
@@ -152,6 +153,8 @@ $pia_lang['DevDetail_EveandAl_RandomMAC'] = 'Random MAC';
$pia_lang['DevDetail_EveandAl_ScanCycle_a'] = 'Scan Device (1 min)';
$pia_lang['DevDetail_EveandAl_ScanCycle_z'] = 'Don&#39;t Scan Device (0 min)';
$pia_lang['DevDetail_button_Delete'] = 'Delete Device';
$pia_lang['DevDetail_button_DeleteEvents'] = 'Delete Events';
$pia_lang['DevDetail_button_DeleteEvents_Warning'] = 'Are you sure you want to delete all Events of this device?<br><br>(this will clear the <b>Events history</b> and the <b>Sessions</b> and might help with constant (persistent) notifications)';
$pia_lang['DevDetail_button_Reset'] = 'Reset Changes';
$pia_lang['DevDetail_button_Save'] = 'Save';
$pia_lang['DevDetail_button_DeleteEvents'] = 'Delete Events';

View File

@@ -26,8 +26,7 @@ $pia_lang['Device_Shortcut_NewDevices'] = 'Nuevo(s)';
$pia_lang['Device_Shortcut_DownAlerts'] = 'Alerta(s) de caída(s)';
$pia_lang['Device_Shortcut_Archived'] = 'Archivado(s)';
$pia_lang['Device_Shortcut_Devices'] = 'Dispositivos';
$pia_lang['Device_Shortcut_OnlineChart_a'] = 'Actividad de la red durante las últimas';
$pia_lang['Device_Shortcut_OnlineChart_b'] = 'horas';
$pia_lang['Device_Shortcut_OnlineChart'] = 'Presencia del dispositivo a lo largo del tiempo';
$pia_lang['Device_TableHead_Name'] = 'Nombre';
$pia_lang['Device_TableHead_Owner'] = 'Propietario';
$pia_lang['Device_TableHead_Type'] = 'Tipo';

View File

@@ -114,7 +114,7 @@ if ($_SESSION["login"] != 1)
<div class="col-md-12">
<div class="box" id="clients">
<div class="box-header with-border">
<h3 class="box-title"><?php echo $pia_lang['Device_Shortcut_OnlineChart_a'];?> <span class="maxlogage-interval">12</span> <?php echo $pia_lang['Device_Shortcut_OnlineChart_b'];?></h3>
<h3 class="box-title"><?php echo $pia_lang['Device_Shortcut_OnlineChart'];?></h3>
</div>
<div class="box-body">
<div class="chart">