From 925348d1714dccbf9d4184800ee9451e36c35f37 Mon Sep 17 00:00:00 2001 From: Thomas Gelf <thomas@gelf.net> Date: Fri, 14 Nov 2014 23:06:20 +0100 Subject: [PATCH] Data\Filter: add or/andFilter implementations Those shortcuts make it easy to correctly add or/and conditions regardless of the original filter type --- library/Icinga/Data/Filter/Filter.php | 4 ++++ library/Icinga/Data/Filter/FilterAnd.php | 10 ++++++++++ library/Icinga/Data/Filter/FilterExpression.php | 10 ++++++++++ library/Icinga/Data/Filter/FilterNot.php | 10 ++++++++++ library/Icinga/Data/Filter/FilterOr.php | 10 ++++++++++ 5 files changed, 44 insertions(+) diff --git a/library/Icinga/Data/Filter/Filter.php b/library/Icinga/Data/Filter/Filter.php index dcedfdf95..a0a56e4bb 100644 --- a/library/Icinga/Data/Filter/Filter.php +++ b/library/Icinga/Data/Filter/Filter.php @@ -30,6 +30,10 @@ abstract class Filter abstract public function toQueryString(); + abstract public function andFilter(Filter $filter); + + abstract public function orFilter(Filter $filter); + public function getUrlParams() { return UrlParams::fromQueryString($this->toQueryString()); diff --git a/library/Icinga/Data/Filter/FilterAnd.php b/library/Icinga/Data/Filter/FilterAnd.php index 899f488ce..8fd2f2411 100644 --- a/library/Icinga/Data/Filter/FilterAnd.php +++ b/library/Icinga/Data/Filter/FilterAnd.php @@ -30,4 +30,14 @@ class FilterAnd extends FilterChain } return true; } + + public function andFilter(Filter $filter) + { + return $this->addFilter($filter); + } + + public function orFilter(Filter $filter) + { + return Filter::matchAny($this, $filter); + } } diff --git a/library/Icinga/Data/Filter/FilterExpression.php b/library/Icinga/Data/Filter/FilterExpression.php index 8f78d6a87..f87f3602f 100644 --- a/library/Icinga/Data/Filter/FilterExpression.php +++ b/library/Icinga/Data/Filter/FilterExpression.php @@ -107,4 +107,14 @@ class FilterExpression extends Filter return (bool) preg_match($pattern, $row->{$this->column}); } } + + public function andFilter(Filter $filter) + { + return Filter::matchAll($this, $filter); + } + + public function orFilter(Filter $filter) + { + return Filter::matchAny($this, $filter); + } } diff --git a/library/Icinga/Data/Filter/FilterNot.php b/library/Icinga/Data/Filter/FilterNot.php index a49a7ab3d..5e63691f1 100644 --- a/library/Icinga/Data/Filter/FilterNot.php +++ b/library/Icinga/Data/Filter/FilterNot.php @@ -22,6 +22,16 @@ class FilterNot extends FilterChain return true; } + public function andFilter(Filter $filter) + { + return Filter::matchAll($this, $filter); + } + + public function orFilter(Filter $filter) + { + return Filter::matchAny($filter); + } + public function toQueryString() { $parts = array(); diff --git a/library/Icinga/Data/Filter/FilterOr.php b/library/Icinga/Data/Filter/FilterOr.php index 427c17fd2..4e4de2d66 100644 --- a/library/Icinga/Data/Filter/FilterOr.php +++ b/library/Icinga/Data/Filter/FilterOr.php @@ -19,4 +19,14 @@ class FilterOr extends FilterChain } return false; } + + public function andFilter(Filter $filter) + { + return Filter::matchAll($this, $filter); + } + + public function orFilter(Filter $filter) + { + return $this->addFilter($filter); + } }