diff options
Diffstat (limited to '')
-rw-r--r-- | library/Director/Restriction/MatchingFilter.php | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/library/Director/Restriction/MatchingFilter.php b/library/Director/Restriction/MatchingFilter.php new file mode 100644 index 0000000..162840c --- /dev/null +++ b/library/Director/Restriction/MatchingFilter.php @@ -0,0 +1,40 @@ +<?php + +namespace Icinga\Module\Director\Restriction; + +use Icinga\Data\Filter\Filter; +use Icinga\User; + +class MatchingFilter +{ + public static function forPatterns(array $restrictions, $columnName) + { + $filters = []; + foreach ($restrictions as $restriction) { + foreach (preg_split('/\|/', $restriction) as $pattern) { + $filters[] = Filter::expression( + $columnName, + '=', + $pattern + ); + } + } + + if (count($filters) === 1) { + return $filters[0]; + } else { + return Filter::matchAny($filters); + } + } + + public static function forUser( + User $user, + $restrictionName, + $columnName + ) { + return static::forPatterns( + $user->getRestrictions($restrictionName), + $columnName + ); + } +} |