From 0fba40951088edbc4a4ae62f539cef3672becd6b Mon Sep 17 00:00:00 2001 From: Sukhwinder Dhillon Date: Fri, 15 Aug 2025 12:52:46 +0200 Subject: [PATCH] NodeRemoveAction: Change display only if the removed node is a root node Removing child nodes should not affect display of root nodes --- .../Modification/NodeRemoveAction.php | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/library/Businessprocess/Modification/NodeRemoveAction.php b/library/Businessprocess/Modification/NodeRemoveAction.php index 6100146..625a12c 100644 --- a/library/Businessprocess/Modification/NodeRemoveAction.php +++ b/library/Businessprocess/Modification/NodeRemoveAction.php @@ -76,14 +76,15 @@ class NodeRemoveAction extends NodeAction if (! $config->hasBpNode($name)) { $config->removeNode($name); } else { - $oldDisplay = $config->getBpNode($name)->getDisplay(); $config->removeNode($name); - if ($config->getMetadata()->isManuallyOrdered()) { - foreach ($config->getRootNodes() as $_ => $node) { - $nodeDisplay = $node->getDisplay(); - if ($nodeDisplay > $oldDisplay) { - $node->setDisplay($node->getDisplay() - 1); - } elseif ($nodeDisplay === $oldDisplay) { + + if ($config->hasRootNode($name) && $config->getMetadata()->isManuallyOrdered()) { + $removedNodeDisplay = $node->getDisplay(); + foreach ($config->getRootNodes() as $rootNode) { + $nodeDisplay = $rootNode->getDisplay(); + if ($nodeDisplay > $removedNodeDisplay) { + $rootNode->setDisplay($nodeDisplay - 1); + } elseif ($nodeDisplay === $removedNodeDisplay) { break; // Stop immediately to not make things worse ;) } }