diff --git a/src/opnsense/mvc/app/models/OPNsense/Firewall/Category.php b/src/opnsense/mvc/app/models/OPNsense/Firewall/Category.php index e4441d5e8..0df6f1288 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Firewall/Category.php +++ b/src/opnsense/mvc/app/models/OPNsense/Firewall/Category.php @@ -42,14 +42,21 @@ class Category extends BaseModel { public function getByName($name) { - foreach ($this->categories->category->iterateItems() as $alias) { - if ((string)$alias->name == $name) { - return $alias; + foreach ($this->categories->category->iterateItems() as $category) { + if ((string)$category->name == $name) { + return $category; } } return null; } + public function iterateCategories() + { + foreach ($this->categories->category->iterateItems() as $category) { + yield ['name' => (string)$category->name]; + } + } + /** * collect unique categories from rules and updates the model with auto generated items. * XXX: if this operation turns out to be a bottleneck, we should move the maintance responsibiliy to the caller @@ -71,8 +78,12 @@ class Category extends BaseModel } if ($cfgsection != null) { foreach ($cfgsection as $node) { - if (!empty($node->category) && !in_array((string)$node->category, $used_categories)) { - $used_categories[] = (string)$node->category; + if (!empty($node->category)) { + foreach (explode(",", (string)$node->category) as $cat) { + if (!in_array($cat, $used_categories)) { + $used_categories[] = $cat; + } + } } } } diff --git a/src/www/firewall_rules.php b/src/www/firewall_rules.php index fb09ff307..ca81d029f 100644 --- a/src/www/firewall_rules.php +++ b/src/www/firewall_rules.php @@ -512,7 +512,14 @@ $( document ).ready(function() { } }); $(".rule").each(function(){ - if (selected_values.indexOf($(this).data('category')) == -1 && selected_values.length > 0) { + let rule_categories = $(this).data('category').split(','); + let is_selected = false; + rule_categories.forEach(function(item){ + if (selected_values.indexOf(item) > -1) { + is_selected = true; + } + }); + if (!is_selected && selected_values.length > 0) { $(this).hide(); $(this).find("input").prop('disabled', true); } else { @@ -624,17 +631,12 @@ $( document ).ready(function() {