Render search results based on their priority

refs #8668
This commit is contained in:
Eric Lippmann 2015-03-12 18:11:06 +01:00
parent 3970d7dec2
commit 6c5a6215ef

View File

@ -18,13 +18,6 @@ class SearchDashboard extends Dashboard
{ {
const SEARCH_PANE = 'search'; const SEARCH_PANE = 'search';
/**
* All searchUrls provided by Modules
*
* @var array
*/
protected $searchUrls = array();
/** /**
* Load all available search dashlets from modules * Load all available search dashlets from modules
* *
@ -64,9 +57,22 @@ class SearchDashboard extends Dashboard
$this->activate(self::SEARCH_PANE); $this->activate(self::SEARCH_PANE);
$manager = Icinga::app()->getModuleManager(); $manager = Icinga::app()->getModuleManager();
$searchUrls = array();
foreach ($manager->getLoadedModules() as $module) { foreach ($manager->getLoadedModules() as $module) {
$this->addSearchDashletsFromModule($searchString, $module, $pane); $moduleSearchUrls = $module->getSearchUrls();
if (! empty($moduleSearchUrls)) {
$searchUrls = array_merge($searchUrls, $moduleSearchUrls);
}
}
usort($searchUrls, array($this, 'compareSearchUrls'));
foreach (array_reverse($searchUrls) as $searchUrl) {
$pane->addDashlet(
$searchUrl->title . ': ' . $searchString,
Url::fromPath($searchUrl->url, array('q' => $searchString))
);
} }
if ($searchString === '' && $pane->hasDashlets()) { if ($searchString === '' && $pane->hasDashlets()) {
@ -77,24 +83,18 @@ class SearchDashboard extends Dashboard
} }
/** /**
* Add available search dashlets to the pane * Compare search URLs based on their priority
* *
* @param string $searchString * @param object $a
* @param Module $module * @param object $b
* @param Pane $pane *
* @return int
*/ */
protected function addSearchDashletsFromModule($searchString, $module, $pane) private function compareSearchUrls($a, $b)
{ {
$searchUrls = $module->getSearchUrls(); if ($a->priority === $b->priority) {
return 0;
if (! empty($searchUrls)) { }
$this->searchUrls[] = $module->getSearchUrls(); return ($a->priority < $b->priority) ? -1 : 1;
foreach ($searchUrls as $search) {
$pane->addDashlet(
$search->title . ': ' . $searchString,
Url::fromPath($search->url, array('q' => $searchString))
);
}
}
} }
} }