mirror of
https://github.com/jokob-sk/NetAlertX.git
synced 2026-04-15 22:51:37 -07:00
Enhance device filters: support label for dropdown options and improve SQL queries #1611
This commit is contained in:
+11
-5
@@ -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
|
||||||
|
|||||||
@@ -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
@@ -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;
|
||||||
"""
|
"""
|
||||||
|
|||||||
Reference in New Issue
Block a user