mirror of
https://github.com/jokob-sk/NetAlertX.git
synced 2026-04-14 20:38:45 -04:00
Enhance device filters: support label for dropdown options and improve SQL queries #1611
This commit is contained in:
@@ -436,22 +436,28 @@ function initFilters() {
|
||||
|
||||
if (existingFilter) {
|
||||
// Add the unique columnValue to options if not already present
|
||||
if (!existingFilter.options.includes(entry.columnValue)) {
|
||||
existingFilter.options.push(entry.columnValue);
|
||||
if (!existingFilter.options.some(opt => opt.value === entry.columnValue)) {
|
||||
existingFilter.options.push({
|
||||
value: entry.columnValue,
|
||||
label: entry.columnLabel || entry.columnValue
|
||||
});
|
||||
}
|
||||
} else {
|
||||
// Create a new filter entry
|
||||
transformed.filters.push({
|
||||
column: entry.columnName,
|
||||
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 => {
|
||||
filter.options.sort();
|
||||
filter.options.sort((a, b) => a.label.localeCompare(b.label));
|
||||
});
|
||||
|
||||
// Output the result
|
||||
|
||||
@@ -10,9 +10,18 @@ require_once $_SERVER['DOCUMENT_ROOT'] . '/php/templates/language/lang.php';
|
||||
function renderFilterDropdown($headerKey, $columnName, $values) {
|
||||
// Generate dropdown options
|
||||
$optionsHtml = '<option value="" selected>All</option>'; // Default "All" option
|
||||
foreach ($values as $value) {
|
||||
$escapedValue = htmlspecialchars($value);
|
||||
$optionsHtml .= '<option value="' . $escapedValue . '">' . $escapedValue . '</option>';
|
||||
foreach ($values as $item) {
|
||||
// Support both {value, label} objects and plain strings (backward compat)
|
||||
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
|
||||
|
||||
@@ -69,40 +69,44 @@ sql_devices_all = """
|
||||
|
||||
sql_appevents = """select * from AppEvents order by dateTimeCreated desc"""
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
UNION
|
||||
SELECT DISTINCT 'devParentMAC' AS columnName, devParentMAC AS columnValue
|
||||
FROM Devices WHERE devParentMAC NOT IN ('', 'null') AND devParentMAC IS NOT NULL
|
||||
SELECT 'devParentMAC' AS columnName, d.devParentMAC AS columnValue,
|
||||
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
|
||||
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
|
||||
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
|
||||
ORDER BY columnName;
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user