mirror of
https://github.com/jokob-sk/NetAlertX.git
synced 2025-12-07 09:36:05 -08:00
Merge branch 'fix-merge-5' into pr/60
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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 },
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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;"> </div>');
|
||||
define('circle_offline', '<div class="badge bg-red text-white" style="width: 10px; height: 10px; padding:2px; margin-top: -25px;"> </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';
|
||||
?>
|
||||
?>
|
||||
|
||||
@@ -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');
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
?>
|
||||
@@ -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
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
@@ -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) .
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
?>
|
||||
|
||||
@@ -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']);
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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'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';
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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">
|
||||
|
||||
Reference in New Issue
Block a user