mirror of
https://github.com/Icinga/icingaweb2-module-businessprocess.git
synced 2026-05-28 04:34:08 -04:00
Also save user defined order of processes nodes while in tree view
This commit is contained in:
parent
f07441ae8f
commit
c804177ca4
3 changed files with 55 additions and 10 deletions
|
|
@ -251,12 +251,17 @@ class ProcessController extends Controller
|
|||
->setSimulation(Simulation::fromSession($this->session()))
|
||||
->handleRequest();
|
||||
} elseif ($action === 'move') {
|
||||
$url = Url::fromRequest()->without(['action', 'movenode']);
|
||||
if ($url->getParam('mode') === 'tree') {
|
||||
$url = $url->without('node');
|
||||
}
|
||||
|
||||
$form = $this->loadForm('MoveNode')
|
||||
->setProcess($bp)
|
||||
->setParentNode($node)
|
||||
->setSession($this->session())
|
||||
->setNode($bp->getNode($this->params->get('movenode')))
|
||||
->setSuccessUrl(Url::fromRequest()->without(['action', 'movenode']))
|
||||
->setSuccessUrl($url)
|
||||
->handleRequest();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ namespace Icinga\Module\Businessprocess\Renderer;
|
|||
use Icinga\Module\Businessprocess\BpNode;
|
||||
use Icinga\Module\Businessprocess\BpConfig;
|
||||
use Icinga\Module\Businessprocess\Node;
|
||||
use Icinga\Module\Businessprocess\Web\Form\CsrfToken;
|
||||
use ipl\Html\BaseHtmlElement;
|
||||
use ipl\Html\Html;
|
||||
|
||||
|
|
@ -19,8 +20,13 @@ class TreeRenderer extends Renderer
|
|||
$this->add(Html::tag(
|
||||
'div',
|
||||
[
|
||||
'id' => $bp->getHtmlId(),
|
||||
'class' => 'bp'
|
||||
'id' => $bp->getHtmlId(),
|
||||
'class' => ['bp', 'sortable'],
|
||||
'data-sortable-disabled' => $this->isLocked(),
|
||||
'data-sortable-data-id-attr' => 'id',
|
||||
'data-sortable-direction' => 'vertical',
|
||||
'data-csrf-token' => CsrfToken::generate(),
|
||||
'data-action-url' => $this->getUrl()->getAbsoluteUrl()
|
||||
],
|
||||
$this->renderBp($bp)
|
||||
));
|
||||
|
|
@ -103,11 +109,9 @@ class TreeRenderer extends Renderer
|
|||
$table = Html::tag(
|
||||
'table',
|
||||
[
|
||||
'id' => $this->getId($node, $path),
|
||||
'class' => array(
|
||||
'bp',
|
||||
$node->getObjectClassName()
|
||||
)
|
||||
'id' => $this->getId($node, $path),
|
||||
'class' => ['bp', $node->getObjectClassName()],
|
||||
'data-node-name' => $node->getName()
|
||||
]
|
||||
);
|
||||
$attributes = $table->getAttributes();
|
||||
|
|
@ -121,7 +125,17 @@ class TreeRenderer extends Renderer
|
|||
$attributes->add('class', 'node');
|
||||
}
|
||||
|
||||
$tbody = Html::tag('tbody');
|
||||
$tbody = Html::tag('tbody', [
|
||||
'class' => 'sortable',
|
||||
'data-sortable-disabled' => $this->isLocked(),
|
||||
'data-sortable-data-id-attr' => 'id',
|
||||
'data-sortable-draggable' => '.movable',
|
||||
'data-sortable-direction' => 'vertical',
|
||||
'data-csrf-token' => CsrfToken::generate(),
|
||||
'data-action-url' => $this->getUrl()
|
||||
->overwriteParams(['node' => (string) $node])
|
||||
->getAbsoluteUrl()
|
||||
]);
|
||||
$table->add($tbody);
|
||||
$tr = Html::tag('tr');
|
||||
$tbody->add($tr);
|
||||
|
|
@ -161,10 +175,15 @@ class TreeRenderer extends Renderer
|
|||
|
||||
$td->add($link);
|
||||
|
||||
$path[] = (string) $node;
|
||||
foreach ($node->getChildren() as $name => $child) {
|
||||
$tbody->add(Html::tag(
|
||||
'tr',
|
||||
null,
|
||||
[
|
||||
'class' => 'movable',
|
||||
'id' => $this->getId($child, $path),
|
||||
'data-node-name' => $name
|
||||
],
|
||||
Html::tag(
|
||||
'td',
|
||||
null,
|
||||
|
|
|
|||
|
|
@ -36,6 +36,7 @@
|
|||
this.module.on('click', 'div.tiles > div', this.tileClick);
|
||||
this.module.on('click', '.dashboard-tile', this.dashboardTileClick);
|
||||
this.module.on('end', 'div.tiles.sortable', this.tileDropped);
|
||||
this.module.on('end', 'div.bp.sortable, table.bp tbody.sortable', this.rowDropped);
|
||||
|
||||
this.module.icinga.logger.debug('BP module initialized');
|
||||
},
|
||||
|
|
@ -116,6 +117,26 @@
|
|||
}
|
||||
},
|
||||
|
||||
rowDropped: function(event) {
|
||||
var evt = event.originalEvent;
|
||||
if (evt.oldIndex !== evt.newIndex) {
|
||||
var $target = $(evt.to);
|
||||
var actionUrl = icinga.utils.addUrlParams($target.data('actionUrl'), {
|
||||
action: 'move',
|
||||
movenode: $(evt.item).data('nodeName')
|
||||
});
|
||||
|
||||
var data = {
|
||||
csrfToken: $target.data('csrfToken'),
|
||||
movenode: 'movenode', // That's the submit button..
|
||||
from: evt.oldIndex,
|
||||
to: evt.newIndex
|
||||
};
|
||||
|
||||
icinga.loader.loadUrl(actionUrl, $target.closest('.container'), data, 'post');
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Add 'hovered' class to hovered title elements
|
||||
*
|
||||
|
|
|
|||
Loading…
Reference in a new issue