Enhance device filters: support label for dropdown options and improve SQL queries #1611

This commit is contained in:
Jokob @NetAlertX
2026-04-14 20:38:37 +00:00
parent 98a1ac1336
commit 285bd3ec22
3 changed files with 40 additions and 21 deletions
+11 -5
View File
@@ -436,22 +436,28 @@ function initFilters() {
if (existingFilter) { if (existingFilter) {
// Add the unique columnValue to options if not already present // Add the unique columnValue to options if not already present
if (!existingFilter.options.includes(entry.columnValue)) { if (!existingFilter.options.some(opt => opt.value === entry.columnValue)) {
existingFilter.options.push(entry.columnValue); existingFilter.options.push({
value: entry.columnValue,
label: entry.columnLabel || entry.columnValue
});
} }
} else { } else {
// Create a new filter entry // Create a new filter entry
transformed.filters.push({ transformed.filters.push({
column: entry.columnName, column: entry.columnName,
headerKey: entry.columnHeaderStringKey, headerKey: entry.columnHeaderStringKey,
options: [entry.columnValue] options: [{
value: entry.columnValue,
label: entry.columnLabel || entry.columnValue
}]
}); });
} }
}); });
// Sort options alphabetically for better readability // Sort options alphabetically by label for better readability
transformed.filters.forEach(filter => { transformed.filters.forEach(filter => {
filter.options.sort(); filter.options.sort((a, b) => a.label.localeCompare(b.label));
}); });
// Output the result // Output the result
+12 -3
View File
@@ -10,9 +10,18 @@ require_once $_SERVER['DOCUMENT_ROOT'] . '/php/templates/language/lang.php';
function renderFilterDropdown($headerKey, $columnName, $values) { function renderFilterDropdown($headerKey, $columnName, $values) {
// Generate dropdown options // Generate dropdown options
$optionsHtml = '<option value="" selected>All</option>'; // Default "All" option $optionsHtml = '<option value="" selected>All</option>'; // Default "All" option
foreach ($values as $value) { foreach ($values as $item) {
$escapedValue = htmlspecialchars($value); // Support both {value, label} objects and plain strings (backward compat)
$optionsHtml .= '<option value="' . $escapedValue . '">' . $escapedValue . '</option>'; if (is_array($item)) {
$val = $item['value'] ?? '';
$label = $item['label'] ?? $val;
} else {
$val = $item;
$label = $item;
}
$escapedValue = htmlspecialchars($val);
$escapedLabel = htmlspecialchars($label);
$optionsHtml .= '<option value="' . $escapedValue . '">' . $escapedLabel . '</option>';
} }
// Generate the dropdown HTML // Generate the dropdown HTML
+17 -13
View File
@@ -69,40 +69,44 @@ sql_devices_all = """
sql_appevents = """select * from AppEvents order by dateTimeCreated desc""" sql_appevents = """select * from AppEvents order by dateTimeCreated desc"""
sql_devices_filters = """ sql_devices_filters = """
SELECT DISTINCT 'devSite' AS columnName, devSite AS columnValue SELECT DISTINCT 'devSite' AS columnName, devSite AS columnValue, devSite AS columnLabel
FROM Devices WHERE devSite NOT IN ('', 'null') AND devSite IS NOT NULL FROM Devices WHERE devSite NOT IN ('', 'null') AND devSite IS NOT NULL
UNION UNION
SELECT DISTINCT 'devSourcePlugin' AS columnName, devSourcePlugin AS columnValue SELECT DISTINCT 'devSourcePlugin' AS columnName, devSourcePlugin AS columnValue, devSourcePlugin AS columnLabel
FROM Devices WHERE devSourcePlugin NOT IN ('', 'null') AND devSourcePlugin IS NOT NULL FROM Devices WHERE devSourcePlugin NOT IN ('', 'null') AND devSourcePlugin IS NOT NULL
UNION UNION
SELECT DISTINCT 'devOwner' AS columnName, devOwner AS columnValue SELECT DISTINCT 'devOwner' AS columnName, devOwner AS columnValue, devOwner AS columnLabel
FROM Devices WHERE devOwner NOT IN ('', 'null') AND devOwner IS NOT NULL FROM Devices WHERE devOwner NOT IN ('', 'null') AND devOwner IS NOT NULL
UNION UNION
SELECT DISTINCT 'devType' AS columnName, devType AS columnValue SELECT DISTINCT 'devType' AS columnName, devType AS columnValue, devType AS columnLabel
FROM Devices WHERE devType NOT IN ('', 'null') AND devType IS NOT NULL FROM Devices WHERE devType NOT IN ('', 'null') AND devType IS NOT NULL
UNION UNION
SELECT DISTINCT 'devGroup' AS columnName, devGroup AS columnValue SELECT DISTINCT 'devGroup' AS columnName, devGroup AS columnValue, devGroup AS columnLabel
FROM Devices WHERE devGroup NOT IN ('', 'null') AND devGroup IS NOT NULL FROM Devices WHERE devGroup NOT IN ('', 'null') AND devGroup IS NOT NULL
UNION UNION
SELECT DISTINCT 'devLocation' AS columnName, devLocation AS columnValue SELECT DISTINCT 'devLocation' AS columnName, devLocation AS columnValue, devLocation AS columnLabel
FROM Devices WHERE devLocation NOT IN ('', 'null') AND devLocation IS NOT NULL FROM Devices WHERE devLocation NOT IN ('', 'null') AND devLocation IS NOT NULL
UNION UNION
SELECT DISTINCT 'devVendor' AS columnName, devVendor AS columnValue SELECT DISTINCT 'devVendor' AS columnName, devVendor AS columnValue, devVendor AS columnLabel
FROM Devices WHERE devVendor NOT IN ('', 'null') AND devVendor IS NOT NULL FROM Devices WHERE devVendor NOT IN ('', 'null') AND devVendor IS NOT NULL
UNION UNION
SELECT DISTINCT 'devSyncHubNode' AS columnName, devSyncHubNode AS columnValue SELECT DISTINCT 'devSyncHubNode' AS columnName, devSyncHubNode AS columnValue, devSyncHubNode AS columnLabel
FROM Devices WHERE devSyncHubNode NOT IN ('', 'null') AND devSyncHubNode IS NOT NULL FROM Devices WHERE devSyncHubNode NOT IN ('', 'null') AND devSyncHubNode IS NOT NULL
UNION UNION
SELECT DISTINCT 'devVlan' AS columnName, devVlan AS columnValue SELECT DISTINCT 'devVlan' AS columnName, devVlan AS columnValue, devVlan AS columnLabel
FROM Devices WHERE devVlan NOT IN ('', 'null') AND devVlan IS NOT NULL FROM Devices WHERE devVlan NOT IN ('', 'null') AND devVlan IS NOT NULL
UNION UNION
SELECT DISTINCT 'devParentMAC' AS columnName, devParentMAC AS columnValue SELECT 'devParentMAC' AS columnName, d.devParentMAC AS columnValue,
FROM Devices WHERE devParentMAC NOT IN ('', 'null') AND devParentMAC IS NOT NULL COALESCE(p.devName, d.devParentMAC) AS columnLabel
FROM Devices d
LEFT JOIN Devices p ON LOWER(p.devMac) = LOWER(d.devParentMAC)
WHERE d.devParentMAC NOT IN ('', 'null') AND d.devParentMAC IS NOT NULL
GROUP BY d.devParentMAC COLLATE NOCASE
UNION UNION
SELECT DISTINCT 'devParentRelType' AS columnName, devParentRelType AS columnValue SELECT DISTINCT 'devParentRelType' AS columnName, devParentRelType AS columnValue, devParentRelType AS columnLabel
FROM Devices WHERE devParentRelType NOT IN ('', 'null') AND devParentRelType IS NOT NULL FROM Devices WHERE devParentRelType NOT IN ('', 'null') AND devParentRelType IS NOT NULL
UNION UNION
SELECT DISTINCT 'devSSID' AS columnName, devSSID AS columnValue SELECT DISTINCT 'devSSID' AS columnName, devSSID AS columnValue, devSSID AS columnLabel
FROM Devices WHERE devSSID NOT IN ('', 'null') AND devSSID IS NOT NULL FROM Devices WHERE devSSID NOT IN ('', 'null') AND devSSID IS NOT NULL
ORDER BY columnName; ORDER BY columnName;
""" """