protected function validateFilterColumns(Filter $filter) { if ($filter->isExpression()) { $valid = false; foreach ($this->allowedColumns as $column) { if (is_callable($column)) { if (call_user_func($column, $filter->getColumn())) { $valid = true; break; } } elseif ($filter->getColumn() === $column) { $valid = true; break; } } if (!$valid) { throw new QueryException('Invalid filter column provided: %s', $filter->getColumn()); } } else { foreach ($filter->filters() as $subFilter) { $this->validateFilterColumns($subFilter); } } }
/** * Render and return a valid LDAP filter representation of the given filter * * @param Filter $filter * @param int $level * * @return string */ public function renderFilter(Filter $filter, $level = 0) { if ($filter->isExpression()) { /** @var $filter FilterExpression */ return $this->renderFilterExpression($filter); } /** @var $filter FilterChain */ $parts = array(); foreach ($filter->filters() as $filterPart) { $part = $this->renderFilter($filterPart, $level + 1); if ($part) { $parts[] = $part; } } if (empty($parts)) { return ''; } $format = '%1$s(%2$s)'; if (count($parts) === 1) { $format = '%2$s'; } if ($level === 0) { $format = '(' . $format . ')'; } return sprintf($format, $filter->getOperatorSymbol(), implode(')(', $parts)); }
protected function resetSearchColumns(Filter &$filter) { if ($filter->isChain()) { $filters =& $filter->filters(); if (!($empty = empty($filters))) { foreach ($filters as $k => &$f) { if (false === $this->resetSearchColumns($f)) { unset($filters[$k]); } } } return $empty || !empty($filters); } return $filter->isExpression() ? !(in_array($filter->getColumn(), $this->searchColumns) && $filter->getSign() === '=') : true; }
public function addFilter(Filter $filter) { // TODO: This should be considered a quick fix only. // Drop this entirely once support for Icinga\Data\Filter is available if ($filter->isExpression()) { $this->where($filter->getColumn(), $filter->getExpression()); } elseif ($filter->isChain()) { foreach ($filter->filters() as $chainOrExpression) { $this->addFilter($chainOrExpression); } } }