Enhance global search (#756)

* Controllers: Remove not required method call `handleSearchRequest()`

These controller do not support global search

* Models: Add `display_name` to default search columns

* Controller: Add ´$additionaColumns` param to method handleSearchRequest() and prepareSearchFilter()

* TacticalController: Remove superfluous override of method `prepareSearchFilter()`
This commit is contained in:
Sukhwinder Dhillon 2023-05-30 15:26:00 +02:00 committed by GitHub
parent 8e512152c9
commit f675d539f2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
14 changed files with 25 additions and 30 deletions

View file

@ -36,8 +36,6 @@ class CommentsController extends Controller
'service.state'
]);
$this->handleSearchRequest($comments);
$limitControl = $this->createLimitControl();
$paginationControl = $this->createPaginationControl($comments);
$sortControl = $this->createSortControl(

View file

@ -36,8 +36,6 @@ class DowntimesController extends Controller
'service.state'
]);
$this->handleSearchRequest($downtimes);
$limitControl = $this->createLimitControl();
$paginationControl = $this->createPaginationControl($downtimes);
$sortControl = $this->createSortControl(

View file

@ -42,7 +42,7 @@ class HostsController extends Controller
$hosts->getWith()['host.state']->setJoinType('INNER');
$hosts->setResultSetClass(VolatileStateResults::class);
$this->handleSearchRequest($hosts);
$this->handleSearchRequest($hosts, ['address', 'address6']);
$summary = null;
if (! $compact) {

View file

@ -411,12 +411,14 @@ class ServicesController extends Controller
return new FeatureStatus('service', $summary->first());
}
protected function prepareSearchFilter(Query $query, string $search, Filter\Any $filter)
protected function prepareSearchFilter(Query $query, string $search, Filter\Any $filter, array $additionalColumns)
{
if ($this->params->shift('_hostFilterOnly', false)) {
$filter->add(Filter::like('host.name_ci', "*$search*"));
foreach (['host.name_ci', 'host.display_name', 'host.address', 'host.address6'] as $column) {
$filter->add(Filter::like($column, "*$search*"));
}
} else {
parent::prepareSearchFilter($query, $search, $filter);
parent::prepareSearchFilter($query, $search, $filter, $additionalColumns);
}
}

View file

@ -28,7 +28,12 @@ class TacticalController extends Controller
$hoststateSummary = HoststateSummary::on($db);
$servicestateSummary = ServicestateSummary::on($db);
$this->handleSearchRequest($servicestateSummary);
$this->handleSearchRequest($servicestateSummary, [
'host.name_ci',
'host.display_name',
'host.address',
'host.address6'
]);
$searchBar = $this->createSearchBar($servicestateSummary);
if ($searchBar->hasBeenSent() && ! $searchBar->isValid()) {
@ -86,11 +91,4 @@ class TacticalController extends Controller
$this->getDocument()->add($editor);
$this->setTitle(t('Adjust Filter'));
}
protected function prepareSearchFilter(Query $query, string $search, Filter\Any $filter)
{
parent::prepareSearchFilter($query, $search, $filter);
$filter->add(Filter::like('host.name_ci', "*$search*"));
}
}

View file

@ -30,8 +30,6 @@ class UsergroupsController extends Controller
$usergroups = Usergroup::on($db);
$this->handleSearchRequest($usergroups);
$limitControl = $this->createLimitControl();
$paginationControl = $this->createPaginationControl($usergroups);
$sortControl = $this->createSortControl(

View file

@ -30,8 +30,6 @@ class UsersController extends Controller
$users = User::on($db);
$this->handleSearchRequest($users);
$limitControl = $this->createLimitControl();
$paginationControl = $this->createPaginationControl($users);
$sortControl = $this->createSortControl(

View file

@ -121,7 +121,7 @@ class Host extends Model
public function getSearchColumns()
{
return ['name_ci'];
return ['name_ci', 'display_name'];
}
public function getDefaultSort()

View file

@ -50,7 +50,7 @@ class Hostgroup extends Model
public function getSearchColumns()
{
return ['name_ci'];
return ['name_ci', 'display_name'];
}
public function getDefaultSort()

View file

@ -112,7 +112,7 @@ class Service extends Model
public function getSearchColumns()
{
return ['name_ci'];
return ['name_ci', 'display_name'];
}
public function getDefaultSort()

View file

@ -50,7 +50,7 @@ class Servicegroup extends Model
public function getSearchColumns()
{
return ['name_ci'];
return ['name_ci', 'display_name'];
}
public function getDefaultSort()

View file

@ -63,7 +63,7 @@ class User extends Model
public function getSearchColumns()
{
return ['name_ci'];
return ['name_ci', 'display_name'];
}
public function getDefaultSort()

View file

@ -50,7 +50,7 @@ class Usergroup extends Model
public function getSearchColumns()
{
return ['name_ci'];
return ['name_ci', 'display_name'];
}
public function getDefaultSort()

View file

@ -299,10 +299,11 @@ class Controller extends CompatController
* Process a search request
*
* @param Query $query
* @param array $additionalColumns
*
* @return void
*/
public function handleSearchRequest(Query $query)
public function handleSearchRequest(Query $query, array $additionalColumns = [])
{
$q = trim($this->params->shift('q', ''), ' *');
if (! $q) {
@ -310,7 +311,7 @@ class Controller extends CompatController
}
$filter = Filter::any();
$this->prepareSearchFilter($query, $q, $filter);
$this->prepareSearchFilter($query, $q, $filter, $additionalColumns);
$redirectUrl = Url::fromRequest();
$redirectUrl->setQueryString(QueryString::render($filter));
@ -327,12 +328,14 @@ class Controller extends CompatController
* @param Query $query
* @param string $search
* @param Filter\Any $filter
* @param array $additionalColumns
*
* @return void
*/
protected function prepareSearchFilter(Query $query, string $search, Filter\Any $filter)
protected function prepareSearchFilter(Query $query, string $search, Filter\Any $filter, array $additionalColumns)
{
foreach ($query->getModel()->getSearchColumns() as $column) {
$columns = array_merge($query->getModel()->getSearchColumns(), $additionalColumns);
foreach ($columns as $column) {
$filter->add(Filter::like(
$query->getResolver()->qualifyColumn($column, $query->getModel()->getTableName()),
"*$search*"