summaryrefslogtreecommitdiffstats
path: root/library/Director/Restriction/MatchingFilter.php
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--library/Director/Restriction/MatchingFilter.php40
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
+ );
+ }
+}