diff --git a/application/controllers/HistoryController.php b/application/controllers/HistoryController.php index 0bab602cc..34b72714f 100644 --- a/application/controllers/HistoryController.php +++ b/application/controllers/HistoryController.php @@ -10,7 +10,6 @@ use Icinga\Module\Icingadb\Web\Controller; use Icinga\Module\Icingadb\Widget\ItemList\HistoryList; use Icinga\Module\Icingadb\Web\Control\ViewModeSwitcher; -use ipl\Sql\Sql; use ipl\Stdlib\Filter; use ipl\Web\Control\LimitControl; use ipl\Web\Control\SortControl; @@ -80,9 +79,11 @@ public function indexAction() $this->filter($history, $filter); $history->getWith()['history.host']->setJoinType('LEFT'); - $history->getSelectBase() + $history->filter(Filter::any( // Because of LEFT JOINs, make sure we'll fetch history entries only for items which still exist: - ->where(['history_host.id IS NOT NULL', 'history_service.id IS NOT NULL'], Sql::ANY); + Filter::like('host.id', '*'), + Filter::like('service.id', '*') + )); yield $this->export($history); diff --git a/application/controllers/HostController.php b/application/controllers/HostController.php index 6dc14797b..5e3d8e449 100644 --- a/application/controllers/HostController.php +++ b/application/controllers/HostController.php @@ -124,12 +124,10 @@ public function historyAction() 'state' ]); - $history - ->getSelectBase() - ->where([ - 'history.host_id = ?' => $this->host->id, - 'history.service_id IS NULL' - ]); + $history->filter(Filter::all( + Filter::equal('history.host_id', $this->host->id), + Filter::unlike('history.service_id', '*') + )); $before = $this->params->shift('before', time()); $url = Url::fromRequest()->setParams(clone $this->params); diff --git a/application/controllers/NotificationsController.php b/application/controllers/NotificationsController.php index 02186a307..c0e2902c2 100644 --- a/application/controllers/NotificationsController.php +++ b/application/controllers/NotificationsController.php @@ -74,12 +74,11 @@ public function indexAction() $notifications->filter(Filter::lessThanOrEqual('send_time', $before)); $this->filter($notifications, $filter); - $notifications->getSelectBase() + $notifications->filter(Filter::any( // Make sure we'll fetch service history entries only for services which still exist - ->where([ - 'notification_history.service_id IS NULL', - 'notification_history_service.id IS NOT NULL' - ], Sql::ANY); + Filter::unlike('service_id', '*'), + Filter::like('history.service.id', '*') + )); yield $this->export($notifications); diff --git a/library/Icingadb/Common/Auth.php b/library/Icingadb/Common/Auth.php index 2afdd413b..6f4e26901 100644 --- a/library/Icingadb/Common/Auth.php +++ b/library/Icingadb/Common/Auth.php @@ -187,7 +187,7 @@ public function applyRestrictions(Query $query) $this->forceQueryOptimization($serviceFilter, 'servicegroup.name'); } - $roleFilter->add(Filter::any(Filter::unequal('service.id', '*'), $serviceFilter)); + $roleFilter->add(Filter::any(Filter::unlike('service.id', '*'), $serviceFilter)); } } @@ -322,7 +322,7 @@ protected function parseBlacklist(string $blacklist, string $column): Filter\Non { $filter = Filter::none(); foreach (explode(',', $blacklist) as $value) { - $filter->add(Filter::equal($column, trim($value))); + $filter->add(Filter::like($column, trim($value))); } return $filter; diff --git a/library/Icingadb/Compat/UrlMigrator.php b/library/Icingadb/Compat/UrlMigrator.php index 603fc57b7..c1015a998 100644 --- a/library/Icingadb/Compat/UrlMigrator.php +++ b/library/Icingadb/Compat/UrlMigrator.php @@ -843,7 +843,7 @@ protected static function contactsColumns(): array $receivesStateNotifications = function ($state, $type = null) { return function ($filter) use ($state, $type) { /** @var Filter\Condition $filter */ - $negate = $filter instanceof Filter\Unequal; + $negate = $filter instanceof Filter\Unequal || $filter instanceof Filter\Unlike; switch ($filter->getValue()) { case '0': $filter = Filter::any( diff --git a/library/Icingadb/Model/Behavior/FlattenedObjectVars.php b/library/Icingadb/Model/Behavior/FlattenedObjectVars.php index c9688ef18..4fe237e42 100644 --- a/library/Icingadb/Model/Behavior/FlattenedObjectVars.php +++ b/library/Icingadb/Model/Behavior/FlattenedObjectVars.php @@ -17,7 +17,7 @@ public function rewriteCondition(Filter\Condition $condition, $relation = null) $column = $condition->metaData()->get('columnName'); if ($column !== null && $column !== 'flatname' && $column !== 'flatvalue') { - $nameFilter = Filter::equal($relation . 'flatname', $column); + $nameFilter = Filter::like($relation . 'flatname', $column); $class = get_class($condition); $valueFilter = new $class($relation . 'flatvalue', $condition->getValue()); diff --git a/library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php b/library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php index 2f9eb6ff7..566cff3e7 100644 --- a/library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php +++ b/library/Icingadb/Web/Control/SearchBar/ObjectSuggestions.php @@ -95,7 +95,7 @@ protected function createQuickSearchFilter($searchTerm) $quickFilter = Filter::any(); foreach ($model->getSearchColumns() as $column) { - $where = Filter::equal($model->getTableName() . '.' . $column, $searchTerm); + $where = Filter::like($model->getTableName() . '.' . $column, $searchTerm); $where->metaData()->set('columnLabel', $model->getMetaData()[$column]); $quickFilter->add($where); } @@ -134,10 +134,10 @@ protected function fetchValueSuggestions($column, $searchTerm, Filter\Chain $sea if (substr($targetPath, -5) === '.vars') { $columnPath = $targetPath . '.flatvalue'; - $query->filter(Filter::equal($targetPath . '.flatname', $columnName)); + $query->filter(Filter::like($targetPath . '.flatname', $columnName)); } - $inputFilter = Filter::equal($columnPath, $searchTerm); + $inputFilter = Filter::like($columnPath, $searchTerm); $query->columns($columnPath); $query->orderBy($columnPath); @@ -253,7 +253,7 @@ protected function queryCustomvarConfig(string $searchTerm): Select $customVars->columns('flatname'); $this->applyRestrictions($customVars); - $customVars->filter(Filter::equal('flatname', $searchTerm)); + $customVars->filter(Filter::like('flatname', $searchTerm)); $idColumn = $resolver->qualifyColumn('id', $resolver->getAlias($customVars->getModel())); $customVars = $customVars->assembleSelect(); diff --git a/library/Icingadb/Web/Controller.php b/library/Icingadb/Web/Controller.php index d14ee9953..388ead031 100644 --- a/library/Icingadb/Web/Controller.php +++ b/library/Icingadb/Web/Controller.php @@ -282,7 +282,7 @@ public function handleSearchRequest(Query $query) $filter = Filter::any(); foreach ($query->getModel()->getSearchColumns() as $column) { - $filter->add(Filter::equal($column, "*$q*")); + $filter->add(Filter::like($column, "*$q*")); } $requestUrl = Url::fromRequest(); diff --git a/library/Icingadb/Widget/Detail/ObjectDetail.php b/library/Icingadb/Widget/Detail/ObjectDetail.php index c2898ed51..073a02628 100644 --- a/library/Icingadb/Widget/Detail/ObjectDetail.php +++ b/library/Icingadb/Widget/Detail/ObjectDetail.php @@ -518,7 +518,7 @@ protected function getUsersAndUsergroups(): array if ($this->objectType === 'host') { $objectFilter = Filter::all( Filter::equal('notification.host_id', $this->object->id), - Filter::unequal('notification.service_id', '*') + Filter::unlike('notification.service_id', '*') ); $objectFilter->metaData()->set('forceOptimization', false); $groupBy = true;