diff --git a/api_db.php b/api_db.php
index 99358589..bcb9aa00 100644
--- a/api_db.php
+++ b/api_db.php
@@ -62,15 +62,21 @@ if(isset($_GET["network"]) && $auth)
while($results !== false && $res = $results->fetchArray(SQLITE3_ASSOC))
{
- $id = $res["id"];
- // Empty array for holding the IP addresses
- $res["ip"] = array();
+ $id = intval($res["id"]);
+
// Get IP addresses for this device
+ $res["ip"] = array();
$network_addresses = $db->query("SELECT ip FROM network_addresses WHERE network_id = $id ORDER BY lastSeen DESC");
while($network_addresses !== false && $ip = $network_addresses->fetchArray(SQLITE3_ASSOC))
array_push($res["ip"],$ip["ip"]);
- // UTF-8 encode host name and vendor
- $res["name"] = utf8_encode($res["name"]);
+
+ // Get list of host names for this device
+ $res["name"] = array();
+ $network_names = $db->query("SELECT name FROM network_names WHERE network_id = $id ORDER BY lastSeen DESC");
+ while($network_names !== false && $ip = $network_names->fetchArray(SQLITE3_ASSOC))
+ array_push($res["name"],utf8_encode($ip["name"]));
+
+ // UTF-8 encode vendor
$res["macVendor"] = utf8_encode($res["macVendor"]);
array_push($network, $res);
}
diff --git a/scripts/pi-hole/js/network.js b/scripts/pi-hole/js/network.js
index 6925733b..9eaf733b 100644
--- a/scripts/pi-hole/js/network.js
+++ b/scripts/pi-hole/js/network.js
@@ -108,8 +108,26 @@ $(document).ready(function () {
// Set hostname to "unknown" if not available
if (!data.name || data.name.length === 0) {
$("td:eq(3)", row).html("unknown");
+ } else {
+ var names = [];
+ var maxiter = Math.min(data.name.length, MAXIPDISPLAY);
+ for (var index = 0; index < maxiter; index++) {
+ var name = data.name[index];
+ names.push('' + name + "");
+ }
+
+ if (data.name.length > MAXIPDISPLAY) {
+ // We hit the maximum above, add "..." to symbolize we would
+ // have more to show here
+ names.push("...");
+ }
+ $("td:eq(3)", row).html(names.join("
"));
+ $("td:eq(3)", row).hover(function () {
+ this.title = data.name.join("\n");
+ });
}
+
// Set number of queries to localized string (add thousand separators)
$("td:eq(6)", row).html(data.numQueries.toLocaleString());
diff --git a/scripts/pi-hole/php/groups.php b/scripts/pi-hole/php/groups.php
index 3e818b0c..c26e0bc3 100644
--- a/scripts/pi-hole/php/groups.php
+++ b/scripts/pi-hole/php/groups.php
@@ -172,7 +172,7 @@ if ($_POST['action'] == 'get_groups') {
throw new Exception('Error while querying gravity\'s client_by_group table: ' . $db->lastErrorMsg());
}
- $stmt = $FTLdb->prepare('SELECT name FROM network WHERE id = (SELECT network_id FROM network_addresses WHERE ip = :ip);');
+ $stmt = $FTLdb->prepare('SELECT name FROM network_names WHERE network_id = (SELECT network_id FROM network_addresses WHERE ip = :ip);');
if (!$stmt) {
throw new Exception('Error while preparing network table statement: ' . $db->lastErrorMsg());
}
@@ -208,7 +208,7 @@ if ($_POST['action'] == 'get_groups') {
$QUERYDB = getQueriesDBFilename();
$FTLdb = SQLite3_connect($QUERYDB);
- $query = $FTLdb->query('SELECT DISTINCT hwaddr,name FROM network;');
+ $query = $FTLdb->query('SELECT DISTINCT id,hwaddr FROM network;');
if (!$query) {
throw new Exception('Error while querying FTL\'s database: ' . $db->lastErrorMsg());
}
@@ -216,7 +216,13 @@ if ($_POST['action'] == 'get_groups') {
// Loop over results
$ips = array();
while ($res = $query->fetchArray(SQLITE3_ASSOC)) {
- $ips[strtoupper($res['hwaddr'])] = $res['name'] !== null ? $res['name'] : '';
+ $id = intval($res["id"]);
+ $query_names = $FTLdb->query("SELECT name FROM network_names WHERE network_id = $id ORDER BY lastSeen DESC;");
+ $names = [];
+ while ($res_names = $query_names->fetchArray(SQLITE3_ASSOC)) {
+ array_push($names, utf8_encode($res_names["name"]));
+ }
+ $ips[strtoupper($res['hwaddr'])] = implode(",", $names);
}
$FTLdb->close();