summaryrefslogtreecommitdiffstats
path: root/library/Director/Filter/FilterEnrichment.php
blob: c726f76627218edb307b8e528a163c891e67a104 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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;
    }
}