diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 12:47:21 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 12:47:21 +0000 |
commit | 1ac4a2050c8076eb96e07e83721ebc9db864db94 (patch) | |
tree | da9b32212bf99154450a7668f61a75f65617a9fa /application/views/helpers/Tree.php | |
parent | Initial commit. (diff) | |
download | icingaweb2-module-toplevelview-upstream/0.3.3.tar.xz icingaweb2-module-toplevelview-upstream/0.3.3.zip |
Adding upstream version 0.3.3.upstream/0.3.3upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | application/views/helpers/Tree.php | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/application/views/helpers/Tree.php b/application/views/helpers/Tree.php new file mode 100644 index 0000000..a016b68 --- /dev/null +++ b/application/views/helpers/Tree.php @@ -0,0 +1,110 @@ +<?php +/* Icinga Web 2 Top Level View | (c) 2017 Icinga Development Team | GPLv2+ */ + +use Icinga\Module\Toplevelview\Tree\TLVTreeNode; +use Icinga\Web\Url; + +class Zend_View_Helper_Tree extends Zend_View_Helper_Abstract +{ + /** @var \Icinga\Web\View */ + public $view; + + public function tree(TLVTreeNode $node, $classes = array(), $level = 0) + { + $htm = ''; + $htmExtra = ''; + $title = $node->getTitle(); + $type = $node->getType(); + + $cssClasses = join(' ', $classes); + + $status = $node->getStatus(); + $statusClass = $status->getOverall(); + + if ($type === 'host') { + $icon = 'host'; + $url = Url::fromPath( + 'monitoring/host/show', + array( + 'host' => $node->get('host') + ) + ); + } elseif ($type === 'service') { + $icon = 'service'; + $url = Url::fromPath( + 'monitoring/service/show', + array( + 'host' => $node->get('host'), + 'service' => $node->get('service') + ) + ); + } elseif ($type === 'hostgroup') { + $icon = 'cubes'; + $url = Url::fromPath( + 'monitoring/list/services', + array( + 'hostgroup' => $node->get('hostgroup'), + 'sort' => 'service_severity', + 'dir' => 'desc', + ) + ); + + if (($h = $status->getMeta('hosts_unhandled')) > 0) { + $hostTitle = '(<strong>' + . sprintf($this->view->translatePlural('%s unhandled host', '%s unhandled hosts', $h), $h) + . '</strong>)'; + } else { + $h = $status->getMeta('hosts_total'); + $hostTitle = '(' . sprintf($this->view->translatePlural('%s host', '%s hosts', $h), $h) . ')'; + } + + $htmExtra .= ' ' . $this->view->qlink( + $hostTitle, + 'monitoring/list/hosts', + array( + 'hostgroup' => $node->get('hostgroup'), + 'sort' => 'host_severity', + 'dir' => 'desc', + ), + null, + false + ); + } else { + $icon = null; + $url = Url::fromPath( + 'toplevelview/show/tree', + array( + 'name' => $node->getRoot()->getConfig()->getName(), + 'id' => $node->getFullId() + ) + ); + } + + if ($type !== 'node') { + $htm .= "<div class=\"tlv-node-icinga tlv-node-\$type tlv-status-tile action $statusClass $cssClasses\"" + . " data-base-target=\"_next\" href=\"$url\">"; + $htm .= $this->view->icon($icon) . ' '; + $htm .= $this->view->qlink($title, $url); + $htm .= $htmExtra; + $htm .= ' ' . $this->view->badges($status, false); + $htm .= '</div>'; + } else { + $htm .= "<div class=\"tlv-tree-node tlv-status-section tlv-collapsible $statusClass $cssClasses\""; + $htm .= " title=\"$title\">"; + $htm .= '<div class="tlv-tree-title">'; + $htm .= $this->view->badges($status, false, $level === 0 ? true : false); + $htm .= '<i class="icon icon-bycss tlv-collapse-handle"></i> '; + $htm .= $this->view->qlink($title, $url); + $htm .= $htmExtra; + $htm .= '</div>'; + if ($node->hasChildren()) { + foreach ($node->getChildren() as $child) { + $htm .= $this->tree($child, $classes, $level + 1); + } + } + $htm .= '</div>'; + } + + return $htm; + } +} |