parent
8805e4af4b
commit
80871313e4
|
@ -150,6 +150,37 @@ class DashboardController extends ActionController
|
|||
$this->view->form = $form;
|
||||
}
|
||||
|
||||
public function removePaneAction()
|
||||
{
|
||||
$form = new ConfirmRemovalForm();
|
||||
$this->createTabs();
|
||||
$dashboard = $this->dashboard;
|
||||
if (! $this->_request->getParam('pane')) {
|
||||
throw new Zend_Controller_Action_Exception(
|
||||
'Missing parameter "pane"',
|
||||
400
|
||||
);
|
||||
}
|
||||
$pane = $this->_request->getParam('pane');
|
||||
$form->setOnSuccess(function (Request $request, Form $form) use ($dashboard, $pane) {
|
||||
try {
|
||||
$pane = $dashboard->getPane($pane);
|
||||
$dashboard->removePane($pane->getTitle());
|
||||
$dashboard->write();
|
||||
Notification::success(t('Pane has been removed') . ': ' . $pane->getTitle());
|
||||
return true;
|
||||
} catch (ProgrammingError $e) {
|
||||
Notification::error($e->getMessage());
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
$form->setRedirectUrl('dashboard/settings');
|
||||
$form->handleRequest();
|
||||
$this->view->pane = $pane;
|
||||
$this->view->form = $form;
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the dashboard with the pane set in the 'pane' request parameter
|
||||
*
|
||||
|
|
|
@ -8,9 +8,11 @@
|
|||
<?php else: ?>
|
||||
<div class="content">
|
||||
<h1><?= $this->escape($this->translate('Welcome to Icinga Web!')) ?></h1>
|
||||
<p><?= sprintf(
|
||||
$this->escape($this->translate('Currently there is no dashlet available. This might change once you enabled some of the available %s.')),
|
||||
$this->qlink($this->translate('modules'), 'config/modules')
|
||||
) ?></p>
|
||||
<p>
|
||||
<?= sprintf(
|
||||
$this->escape($this->translate('Currently there is no dashlet available. This might change once you enabled some of the available %s.')),
|
||||
$this->qlink($this->translate('modules'), 'config/modules')
|
||||
) ?>
|
||||
</p>
|
||||
</div>
|
||||
<?php endif ?>
|
|
@ -0,0 +1,14 @@
|
|||
<div class="controls">
|
||||
<?= $this->tabs ?>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<h1><?= t('Remove Pane'); ?></h1>
|
||||
|
||||
<p>
|
||||
<?= $this->translate('Please confirm the removal of'); ?>:
|
||||
<?= $this->pane; ?>
|
||||
</p>
|
||||
|
||||
<?= $this->form; ?>
|
||||
</div>
|
|
@ -23,6 +23,11 @@
|
|||
<th colspan="2" style="text-align: left; padding: 0.5em;">
|
||||
<?= $pane->getName(); ?>
|
||||
</th>
|
||||
<th>
|
||||
<a href="<?= $this->href('dashboard/remove-pane', array('pane' => $pane->getName())); ?>">
|
||||
<?= $this->icon('remove.png'); ?>
|
||||
</a>
|
||||
</th>
|
||||
</tr>
|
||||
<?php $components = $pane->getComponents(); ?>
|
||||
<?php if(empty($components)): ?>
|
||||
|
|
|
@ -7,7 +7,9 @@ namespace Icinga\Web\Widget;
|
|||
use Icinga\Application\Icinga;
|
||||
use Icinga\Application\Config;
|
||||
use Icinga\Exception\ConfigurationError;
|
||||
use Icinga\Exception\NotReadableError;
|
||||
use Icinga\Exception\ProgrammingError;
|
||||
use Icinga\Exception\SystemPermissionException;
|
||||
use Icinga\File\Ini\IniWriter;
|
||||
use Icinga\User;
|
||||
use Icinga\Web\Widget\Dashboard\Pane;
|
||||
|
@ -78,6 +80,7 @@ class Dashboard extends AbstractWidget
|
|||
if ($this->user !== null) {
|
||||
$this->loadUserDashboards();
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
@ -117,9 +120,16 @@ class Dashboard extends AbstractWidget
|
|||
$components = array();
|
||||
foreach ($config as $key => $part) {
|
||||
if (strpos($key, '.') === false) {
|
||||
$panes[$key] = new Pane($key);
|
||||
$panes[$key]->setTitle($part->title);
|
||||
if ($this->hasPane($part->title)) {
|
||||
$panes[$key] = $this->getPane($part->title);
|
||||
} else {
|
||||
$panes[$key] = new Pane($key);
|
||||
$panes[$key]->setTitle($part->title);
|
||||
}
|
||||
$panes[$key]->setUserWidget();
|
||||
if ((bool) $part->get('disabled', false) === true) {
|
||||
$panes[$key]->setDisabled();
|
||||
}
|
||||
|
||||
} else {
|
||||
list($paneName, $componentName) = explode('.', $key, 2);
|
||||
|
@ -168,7 +178,13 @@ class Dashboard extends AbstractWidget
|
|||
{
|
||||
/** @var $pane Pane */
|
||||
foreach ($panes as $pane) {
|
||||
if (array_key_exists($pane->getName(), $this->panes)) {
|
||||
if ($pane->getDisabled()) {
|
||||
if ($this->hasPane($pane->getTitle()) === true) {
|
||||
$this->removePane($pane->getTitle());
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if ($this->hasPane($pane->getTitle()) === true) {
|
||||
/** @var $current Pane */
|
||||
$current = $this->panes[$pane->getName()];
|
||||
$current->addComponents($pane->getComponents());
|
||||
|
@ -242,6 +258,17 @@ class Dashboard extends AbstractWidget
|
|||
return ! empty($this->panes);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a panel exist
|
||||
*
|
||||
* @param string $pane
|
||||
* @return bool
|
||||
*/
|
||||
public function hasPane($pane)
|
||||
{
|
||||
return $pane && array_key_exists($pane, $this->panes);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a pane object to this dashboard
|
||||
*
|
||||
|
@ -255,6 +282,21 @@ class Dashboard extends AbstractWidget
|
|||
return $this;
|
||||
}
|
||||
|
||||
public function removePane($title)
|
||||
{
|
||||
if ($this->hasPane($title) === true) {
|
||||
$pane = $this->getPane($title);
|
||||
if ($pane->isUserWidget() === true) {
|
||||
unset($this->panes[$pane->getName()]);
|
||||
} else {
|
||||
$pane->setDisabled();
|
||||
$pane->setUserWidget();
|
||||
}
|
||||
} else {
|
||||
throw new ProgrammingError('Pane not found: ' . $title);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the pane with the provided name
|
||||
*
|
||||
|
@ -296,6 +338,7 @@ class Dashboard extends AbstractWidget
|
|||
if (empty($this->panes)) {
|
||||
return '';
|
||||
}
|
||||
|
||||
return $this->determineActivePane()->render();
|
||||
}
|
||||
|
||||
|
@ -382,6 +425,26 @@ class Dashboard extends AbstractWidget
|
|||
if ($this->user === null) {
|
||||
return '';
|
||||
}
|
||||
return '/var/lib/icingaweb/' . $this->user->getUsername() . '/dashboard.ini';
|
||||
|
||||
$baseDir = '/var/lib/icingaweb';
|
||||
|
||||
if (! file_exists($baseDir)) {
|
||||
throw new NotReadableError('Could not read: ' . $baseDir);
|
||||
}
|
||||
|
||||
$userDir = $baseDir . '/' . $this->user->getUsername();
|
||||
|
||||
if (! file_exists($userDir)) {
|
||||
$success = @mkdir($userDir);
|
||||
if (!$success) {
|
||||
throw new SystemPermissionException('Could not create: ' . $userDir);
|
||||
}
|
||||
}
|
||||
|
||||
if (! file_exists($userDir)) {
|
||||
throw new NotReadableError('Could not read: ' . $userDir);
|
||||
}
|
||||
|
||||
return $userDir . '/dashboard.ini';
|
||||
}
|
||||
}
|
||||
|
|
|
@ -53,7 +53,7 @@ class Component extends UserWidget
|
|||
private $template =<<<'EOD'
|
||||
|
||||
<div class="container" data-icinga-url="{URL}">
|
||||
<h1><a href="{FULL_URL}" data-base-target="col1">{TITLE}</a> ({REMOVE})</h1>
|
||||
<h1><a href="{FULL_URL}" data-base-target="col1">{TITLE}</a></h1>
|
||||
<noscript>
|
||||
<iframe src="{IFRAME_URL}" style="height:100%; width:99%" frameborder="no"></iframe>
|
||||
</noscript>
|
||||
|
|
|
@ -36,6 +36,13 @@ class Pane extends UserWidget
|
|||
*/
|
||||
private $components = array();
|
||||
|
||||
/**
|
||||
* Disabled flag of a pane
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
private $disabled;
|
||||
|
||||
/**
|
||||
* Create a new pane
|
||||
*
|
||||
|
@ -253,9 +260,15 @@ class Pane extends UserWidget
|
|||
*/
|
||||
public function toArray()
|
||||
{
|
||||
return array(
|
||||
'title' => $this->getTitle()
|
||||
$pane = array(
|
||||
'title' => $this->getTitle(),
|
||||
);
|
||||
|
||||
if ($this->getDisabled() === true) {
|
||||
$pane['disabled'] = 1;
|
||||
}
|
||||
|
||||
return $pane;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -274,4 +287,26 @@ class Pane extends UserWidget
|
|||
}
|
||||
return $pane;
|
||||
}
|
||||
|
||||
/**
|
||||
* Setter for disabled
|
||||
*
|
||||
* @param boolean $disabled
|
||||
*/
|
||||
public function setDisabled($disabled = true)
|
||||
{
|
||||
$this->disabled = (bool) $disabled;
|
||||
}
|
||||
|
||||
/**
|
||||
* Getter for disabled
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function getDisabled()
|
||||
{
|
||||
return $this->disabled;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue