From b5b9a2eaa0027e2d68c00bbfee24d262ca370c56 Mon Sep 17 00:00:00 2001 From: Stephan de Wit <33954429+swhite2@users.noreply.github.com> Date: Thu, 11 Mar 2021 19:26:17 +0100 Subject: [PATCH] firewall: categories improvements (#4790) --- .../OPNsense/Firewall/Api/CategoryController.php | 12 ++++++++++++ src/www/javascript/opnsense_legacy.js | 10 ++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/opnsense/mvc/app/controllers/OPNsense/Firewall/Api/CategoryController.php b/src/opnsense/mvc/app/controllers/OPNsense/Firewall/Api/CategoryController.php index cb24b91de..67e22f81c 100644 --- a/src/opnsense/mvc/app/controllers/OPNsense/Firewall/Api/CategoryController.php +++ b/src/opnsense/mvc/app/controllers/OPNsense/Firewall/Api/CategoryController.php @@ -54,6 +54,18 @@ class CategoryController extends ApiMutableModelControllerBase return $this->searchBase("categories.category", array('name', 'auto', 'color'), "name"); } + /** + * search categories with an empty (no category) at the beginning + * @return array search results + * @throws \ReflectionException + */ + public function searchNoCategoryItemAction() + { + $result = $this->searchBase("categories.category", array('name', 'auto', 'color'), "name"); + array_unshift($result['rows'], array('uuid' => "", 'name' => gettext("(No Category)"), 'auto' => "", 'color' => "")); + return $result; + } + /** * Update category with given properties * @param string $uuid internal id diff --git a/src/www/javascript/opnsense_legacy.js b/src/www/javascript/opnsense_legacy.js index 87c752101..5d67dc3f6 100644 --- a/src/www/javascript/opnsense_legacy.js +++ b/src/www/javascript/opnsense_legacy.js @@ -180,7 +180,7 @@ function window_highlight_table_option() */ function hook_firewall_categories() { let cat_select = $("#fw_category"); - ajaxCall('/api/firewall/category/searchItem', {}, function(data){ + ajaxCall('/api/firewall/category/searchNoCategoryItem', {}, function(data){ if (data.rows !== undefined && data.rows.length > 0) { let color_map = {}; for (let i=0; i < data.rows.length ; ++i) { @@ -200,7 +200,7 @@ function hook_firewall_categories() { // suffix category color in the description td let td = row.find('td.rule-description'); if (td.length > 0) { - td.append($("").css('color', '#'+color_map[item])); + td.append($("").css('color', '#'+color_map[item])); } } }); @@ -239,9 +239,14 @@ function hook_firewall_categories() { window.sessionStorage.setItem("firewall.selected.categories", cat_select.val().join(',')); } let selected_values = cat_select.val(); + let no_cat = cat_select.find("option")[0].value; $(".rule").each(function(){ let is_selected = false; $(this).data('category').split(',').forEach(function(item){ + if (selected_values.indexOf(no_cat) > -1 && item === "") { + // No category for this rule + is_selected = true; + } if (selected_values.indexOf(item) > -1) { is_selected = true; } @@ -257,5 +262,6 @@ function hook_firewall_categories() { $(".opnsense-rules").change(); }); cat_select.change(); + $('.selector-item').tooltip(); }); }