mirror of
https://github.com/Icinga/icingadb-web.git
synced 2026-05-28 04:36:06 -04:00
Add CustomVarsRetrieverHook for dynamic custom variable retrieval, updated ObjectSuggestions and Controller classes to utilize the new hook for enhanced search functionality
This commit is contained in:
parent
fa23e86ae7
commit
02e6fb04f4
3 changed files with 46 additions and 2 deletions
37
library/Icingadb/Hook/CustomVarsRetrieverHook.php
Normal file
37
library/Icingadb/Hook/CustomVarsRetrieverHook.php
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
<?php
|
||||
|
||||
namespace Icinga\Module\Icingadb\Hook;
|
||||
|
||||
use Icinga\Application\Hook;
|
||||
use Icinga\Application\Logger;
|
||||
use ipl\Orm\Model;
|
||||
use Throwable;
|
||||
|
||||
abstract class CustomVarsRetrieverHook
|
||||
{
|
||||
abstract public function retrieveCustomVars(Model $model): array;
|
||||
|
||||
final public static function getCustomVarColumns(Model $model): array
|
||||
{
|
||||
$columns = [];
|
||||
|
||||
$hooks = Hook::all('icingadb/CustomVarsRetriever');
|
||||
foreach ($hooks as $hook) {
|
||||
try {
|
||||
$customVars = $hook->retrieveCustomVars($model);
|
||||
if (!empty($customVars)) {
|
||||
$columns = [...$columns, ...$customVars];
|
||||
}
|
||||
} catch (Throwable $e) {
|
||||
Logger::error(
|
||||
'Error retrieving Custom Vars for %s with table name "%s": %s',
|
||||
get_class($model),
|
||||
$model->getTableName(),
|
||||
$e->getMessage()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return $columns;
|
||||
}
|
||||
}
|
||||
|
|
@ -7,6 +7,7 @@ namespace Icinga\Module\Icingadb\Web\Control\SearchBar;
|
|||
use Generator;
|
||||
use Icinga\Module\Icingadb\Common\Auth;
|
||||
use Icinga\Module\Icingadb\Common\Database;
|
||||
use Icinga\Module\Icingadb\Hook\CustomVarsRetrieverHook;
|
||||
use Icinga\Module\Icingadb\Model\Behavior\ReRoute;
|
||||
use Icinga\Module\Icingadb\Model\CustomvarFlat;
|
||||
use Icinga\Module\Icingadb\Model\Host;
|
||||
|
|
@ -132,7 +133,10 @@ class ObjectSuggestions extends Suggestions
|
|||
$resolver = $model::on($this->getDb())->getResolver();
|
||||
|
||||
$quickFilter = Filter::any();
|
||||
foreach ($model->getSearchColumns() as $column) {
|
||||
$customVarColumns = CustomVarsRetrieverHook::getCustomVarColumns($model);
|
||||
$columns = [...$model->getSearchColumns(), ...$customVarColumns];
|
||||
|
||||
foreach ($columns as $column) {
|
||||
if (strpos($column, '.') === false) {
|
||||
$column = $resolver->qualifyColumn($column, $model->getTableName());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ use Icinga\Module\Icingadb\Common\Database;
|
|||
use Icinga\Module\Icingadb\Common\SearchControls;
|
||||
use Icinga\Module\Icingadb\Data\CsvResultSet;
|
||||
use Icinga\Module\Icingadb\Data\JsonResultSet;
|
||||
use Icinga\Module\Icingadb\Hook\CustomVarsRetrieverHook;
|
||||
use Icinga\Module\Icingadb\Web\Control\GridViewModeSwitcher;
|
||||
use Icinga\Module\Icingadb\Web\Control\ViewModeSwitcher;
|
||||
use Icinga\Module\Icingadb\Widget\ItemTable\StateItemTable;
|
||||
|
|
@ -303,7 +304,9 @@ class Controller extends CompatController
|
|||
*/
|
||||
protected function prepareSearchFilter(Query $query, string $search, Filter\Any $filter, array $additionalColumns)
|
||||
{
|
||||
$columns = array_merge($query->getModel()->getSearchColumns(), $additionalColumns);
|
||||
$model = $query->getModel();
|
||||
$customVarColumns = CustomVarsRetrieverHook::getCustomVarColumns($model);
|
||||
$columns = array_merge($model->getSearchColumns(), $additionalColumns, $customVarColumns);
|
||||
foreach ($columns as $column) {
|
||||
if (strpos($column, '.') === false) {
|
||||
$column = $query->getResolver()->qualifyColumn($column, $query->getModel()->getTableName());
|
||||
|
|
|
|||
Loading…
Reference in a new issue