'dashboard']; /** * The @see Tabs object for displaying displayable panes * * @var Tabs */ protected $tabs; /** * The parameter that will be added to identify panes * * @var string */ private $tabParam = 'pane'; /** * Set the given tab name as active * * @param string $name The tab name to activate * */ public function activate(string $name) { $this->getTabs()->activate($name); } /** * Set this dashboard's tabs * * @param Tabs $tabs * * @return $this */ public function setTabs(Tabs $tabs) { $this->tabs = $tabs; return $this; } /** * Return the tab object used to navigate through this dashboard * * @return Tabs */ public function getTabs() { $activeHome = $this->getActiveEntry(); if ($activeHome && ! $activeHome->isDefaultHome()) { $url = Url::fromPath(self::BASE_ROUTE . '/home')->getUrlWithout(['home', $this->tabParam]); $url->addParams(['home' => $activeHome->getName()]); } else { $url = Url::fromPath(self::BASE_ROUTE)->getUrlWithout($this->tabParam); } if ($this->tabs === null) { $this->tabs = new Tabs(); } $this->tabs->disableLegacyExtensions(); if (! $activeHome) { return $this->tabs; } /** @var Pane $pane */ foreach ($activeHome->getEntries() as $pane) { if (! $this->tabs->get($pane->getName())) { $this->tabs->add( $pane->getName(), [ 'active' => $pane->isActive(), 'title' => sprintf(t('Show %s', 'dashboard.pane.tooltip'), $pane->getTitle()), 'label' => $pane->getTitle(), 'url' => clone $url, 'urlParams' => [$this->tabParam => $pane->getName()] ] ); } } return $this->tabs; } protected function assemble() { $activeHome = $this->getActiveEntry(); if (! $activeHome || (! $activeHome->hasEntries() && $activeHome->isDefaultHome())) { $this->setAttribute('class', 'dashboard-introduction'); $this->addHtml(HtmlElement::create('h2', null, t('Welcome to Icinga Web 2!'))); $this->addHtml(HtmlElement::create( 'p', null, t('You will see this screen every time you log in.') )); $message = t( 'At the moment this view is empty, but you can populate it with small portions of' . ' information called Dashlets.' ); $this->addHtml(HtmlElement::create('p', null, $message)); $message = t( 'Now you can either customize which dashlets to display, or use the system default dashlets.' . ' You will always be able to edit them afterwards.' ); $this->addHtml(HtmlElement::create('p', null, $message)); } elseif ($activeHome->hasEntries()) { $activePane = $activeHome->getActiveEntry(); if (! $activePane->hasEntries()) { $this->addHtml(HtmlElement::create('h1', null, t('No dashlet added to this pane.'))); } else { foreach ($activePane->getEntries() as $dashlet) { $this->addHtml($dashlet->getHtml()); } } } else { $this->addHtml(HtmlElement::create('h1', null, t('No dashboard added to this dashboard home.'))); } } }