Also save user defined order of processes nodes while in tree view

This commit is contained in:
Johannes Meyer 2018-12-20 10:56:05 +01:00
parent f07441ae8f
commit c804177ca4
3 changed files with 55 additions and 10 deletions

View file

@ -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();
}

View file

@ -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,

View file

@ -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
*