renderFilterCallback = $callback; return $this; } protected function renderFilterExpression(Filter $filter) { $hit = false; if (isset($this->renderFilterCallback)) { $hit = call_user_func($this->renderFilterCallback, clone $filter); } if ($hit !== false) { $filter = $hit; } return parent::renderFilterExpression($filter); } } /** * @internal */ class SqlFilter { public static function apply(Select $select, Filter $filter = null, callable $renderFilterCallback = null) { if ($filter === null || $filter->isEmpty()) { return; } if (! $filter->isEmpty()) { $conn = (new NoImplicitConnectDbConnection())->setRenderFilterCallback($renderFilterCallback); $reflection = new ReflectionClass('\Icinga\Data\Db\DbConnection'); $dbAdapter = $reflection->getProperty('dbAdapter'); $dbAdapter->setAccessible(true); $dbAdapter->setValue($conn, new Quoter()); $select->where($conn->renderFilter($filter)); } } }