summaryrefslogtreecommitdiffstats
path: root/library/Director/Filter/FilterEnrichment.php
diff options
context:
space:
mode:
Diffstat (limited to 'library/Director/Filter/FilterEnrichment.php')
-rw-r--r--library/Director/Filter/FilterEnrichment.php29
1 files changed, 29 insertions, 0 deletions
diff --git a/library/Director/Filter/FilterEnrichment.php b/library/Director/Filter/FilterEnrichment.php
new file mode 100644
index 0000000..c726f76
--- /dev/null
+++ b/library/Director/Filter/FilterEnrichment.php
@@ -0,0 +1,29 @@
+<?php
+
+namespace Icinga\Module\Director\Filter;
+
+use Icinga\Data\Filter\Filter;
+use Icinga\Data\Filter\FilterChain;
+use Icinga\Data\Filter\FilterExpression;
+
+class FilterEnrichment
+{
+ public static function enrichFilter(Filter $filter): Filter
+ {
+ if ($filter instanceof FilterExpression) {
+ if (CidrExpression::isCidrFormat($filter->getExpression())) {
+ return CidrExpression::fromExpression($filter);
+ }
+ } elseif ($filter instanceof FilterChain) {
+ foreach ($filter->filters() as $subFilter) {
+ if ($subFilter instanceof FilterExpression
+ && CidrExpression::isCidrFormat($subFilter->getExpression())
+ ) {
+ $filter->replaceById($subFilter->getId(), CidrExpression::fromExpression($subFilter));
+ }
+ }
+ }
+
+ return $filter;
+ }
+}