mirror of
https://github.com/Icinga/icingaweb2.git
synced 2025-07-31 01:34:09 +02:00
parent
1662914088
commit
baf8c5bbaf
187
library/Icinga/Web/Navigation/SecondaryNav.php
Normal file
187
library/Icinga/Web/Navigation/SecondaryNav.php
Normal file
@ -0,0 +1,187 @@
|
||||
<?php
|
||||
|
||||
namespace Icinga\Web\Navigation;
|
||||
|
||||
use Icinga\Application\Hook\HealthHook;
|
||||
use Icinga\Authentication\Auth;
|
||||
use ipl\Html\Attributes;
|
||||
use ipl\Html\BaseHtmlElement;
|
||||
use ipl\Html\HtmlElement;
|
||||
use ipl\Html\HtmlString;
|
||||
use ipl\Html\Text;
|
||||
use ipl\Web\Url;
|
||||
use ipl\Web\Widget\Icon;
|
||||
use ipl\Web\Widget\StateBadge;
|
||||
|
||||
class SecondaryNav extends BaseHtmlElement
|
||||
{
|
||||
const STATE_OK = 'ok';
|
||||
const STATE_CRITICAL = 'critical';
|
||||
const STATE_WARNING = 'warning';
|
||||
const STATE_PENDING = 'pending';
|
||||
const STATE_UNKNOWN = 'unknown';
|
||||
|
||||
protected $defaultAttributes = [
|
||||
'class' => 'nav nav-level-1'
|
||||
];
|
||||
|
||||
protected $tag = 'ul';
|
||||
|
||||
protected $children = [
|
||||
'system' => [
|
||||
'title' => 'System',
|
||||
'items' => [
|
||||
'about' => [
|
||||
'label' => 'About',
|
||||
'url' => 'about'
|
||||
],
|
||||
'health' => [
|
||||
'label' => 'Health',
|
||||
'url' => 'health',
|
||||
],
|
||||
'announcements' => [
|
||||
'label' => 'Announcements',
|
||||
'url' => 'announcements'
|
||||
],
|
||||
'sessions' => [
|
||||
'label' => 'User Sessions',
|
||||
'permission' => 'application/sessions',
|
||||
'url' => 'manage-user-devices'
|
||||
]
|
||||
]
|
||||
],
|
||||
'configuration' => [
|
||||
'title' => 'Configuration',
|
||||
'items' => [
|
||||
'application' => [
|
||||
'label' => 'Application',
|
||||
'url' => 'config'
|
||||
],
|
||||
'authentication' => [
|
||||
'label' => 'Access Control',
|
||||
'permission' => 'config/access-control/*',
|
||||
'url' => 'role'
|
||||
],
|
||||
'navigation' => [
|
||||
'label' => 'Shared Navigation',
|
||||
'permission' => 'config/navigation',
|
||||
'url' => 'authentication'
|
||||
],
|
||||
'modules' => [
|
||||
'label' => 'Modules',
|
||||
'permission' => 'config/modules',
|
||||
'url' => 'config/modules'
|
||||
]
|
||||
]
|
||||
],
|
||||
'logout' => [
|
||||
'items' => [
|
||||
'logout' => [
|
||||
'label' => 'Logout',
|
||||
'atts' => [
|
||||
'target' => '_self',
|
||||
'class' => 'nav-item-logout'
|
||||
],
|
||||
'url' => 'authentication/logout'
|
||||
]
|
||||
]
|
||||
]
|
||||
];
|
||||
|
||||
public function getHealthCount()
|
||||
{
|
||||
$count = 0;
|
||||
$title = null;
|
||||
$worstState = null;
|
||||
foreach (HealthHook::collectHealthData()->select() as $result) {
|
||||
if ($worstState === null || $result->state > $worstState) {
|
||||
$worstState = $result->state;
|
||||
$title = $result->message;
|
||||
$count = 1;
|
||||
} elseif ($worstState === $result->state) {
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
|
||||
switch ($worstState) {
|
||||
case HealthHook::STATE_OK:
|
||||
$count = 0;
|
||||
break;
|
||||
case HealthHook::STATE_WARNING:
|
||||
$this->state = self::STATE_WARNING;
|
||||
break;
|
||||
case HealthHook::STATE_CRITICAL:
|
||||
$this->state = self::STATE_CRITICAL;
|
||||
break;
|
||||
case HealthHook::STATE_UNKNOWN:
|
||||
$this->state = self::STATE_UNKNOWN;
|
||||
break;
|
||||
}
|
||||
|
||||
$this->title = $title;
|
||||
|
||||
return $count;
|
||||
}
|
||||
|
||||
protected function createHealthBadge()
|
||||
{
|
||||
return $this->getHealthCount() == 0 ? '' : new StateBadge($this->getHealthCount(), 'critical');
|
||||
}
|
||||
|
||||
protected function createLevel2Menu()
|
||||
{
|
||||
$level2Nav = HtmlElement::create('div ', Attributes::create(['class' => 'nav nav-level-2']));
|
||||
|
||||
foreach($this->children as $c) {
|
||||
|
||||
if (isset($c['title'])) {
|
||||
$level2Nav->add(HtmlElement::create('h3', null,
|
||||
t($c['title']))
|
||||
);
|
||||
}
|
||||
|
||||
$ul = HtmlElement::create('ul');
|
||||
foreach ($c['items'] as $i) {
|
||||
$li = HtmlElement::create('li',
|
||||
Attributes::create(isset($i['atts']) ? $i['atts'] : []), [
|
||||
HtmlElement::create('a', ['href' => $i['url']], t($i['label']))
|
||||
]);
|
||||
|
||||
$li->addAttributes(['class' => 'nav-item']);
|
||||
|
||||
$ul->add($li);
|
||||
}
|
||||
$level2Nav->add($ul);
|
||||
}
|
||||
|
||||
return $level2Nav;
|
||||
}
|
||||
|
||||
protected function assemble()
|
||||
{
|
||||
$username = Auth::getInstance()->getUser()->getUsername();
|
||||
|
||||
$htmlString = '<a href="'
|
||||
. Url::fromPath('account')
|
||||
. '">'
|
||||
. new HtmlElement(
|
||||
'i',
|
||||
Attributes::create(['class' => 'user-ball']),
|
||||
Text::create($username[0])
|
||||
)
|
||||
. $username
|
||||
. '</a>'
|
||||
|
||||
. '<a href="" class="contains-badge">'
|
||||
. new Icon('cog')
|
||||
. $this->createHealthBadge()
|
||||
. '</a>'
|
||||
. $this->createLevel2Menu();
|
||||
|
||||
$this->add(
|
||||
HtmlElement::create('li', ['class' => 'nav-item segmented-nav-item'],
|
||||
new HtmlString($htmlString)
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user