diff options
Diffstat (limited to 'library/Icinga/Data/Filter/FilterOr.php')
-rw-r--r-- | library/Icinga/Data/Filter/FilterOr.php | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/library/Icinga/Data/Filter/FilterOr.php b/library/Icinga/Data/Filter/FilterOr.php new file mode 100644 index 0000000..aca91f3 --- /dev/null +++ b/library/Icinga/Data/Filter/FilterOr.php @@ -0,0 +1,39 @@ +<?php +/* Icinga Web 2 | (c) 2014 Icinga Development Team | GPLv2+ */ + +namespace Icinga\Data\Filter; + +class FilterOr extends FilterChain +{ + protected $operatorName = 'OR'; + + protected $operatorSymbol = '|'; + + public function matches($row) + { + foreach ($this->filters as $filter) { + if ($filter->matches($row)) { + return true; + } + } + return false; + } + + public function setOperatorName($name) + { + if ($this->count() > 1 && $name === 'NOT') { + return Filter::not(clone $this); + } + return parent::setOperatorName($name); + } + + public function andFilter(Filter $filter) + { + return Filter::matchAll($this, $filter); + } + + public function orFilter(Filter $filter) + { + return $this->addFilter($filter); + } +} |