/** * @param array $parameters * @param Node $node */ protected function updatePosition($parameters, Node $node) { /* * First, we set the new parent */ $parent = null; if (!empty($parameters['newParent']) && $parameters['newParent'] > 0) { $parent = $this->getService('em')->find('RZ\\Roadiz\\Core\\Entities\\Node', (int) $parameters['newParent']); if ($parent !== null) { $node->setParent($parent); } } else { // if no parent or null we place node at root level $node->setParent(null); } /* * Then compute new position */ if (!empty($parameters['nextNodeId']) && $parameters['nextNodeId'] > 0) { $nextNode = $this->getService('em')->find('RZ\\Roadiz\\Core\\Entities\\Node', (int) $parameters['nextNodeId']); if ($nextNode !== null) { $node->setPosition($nextNode->getPosition() - 0.5); } } elseif (!empty($parameters['prevNodeId']) && $parameters['prevNodeId'] > 0) { $prevNode = $this->getService('em')->find('RZ\\Roadiz\\Core\\Entities\\Node', (int) $parameters['prevNodeId']); if ($prevNode !== null) { $node->setPosition($prevNode->getPosition() + 0.5); } } elseif (!empty($parameters['firstPosition']) && (bool) $parameters['firstPosition'] === true) { $node->setPosition(-0.5); } elseif (!empty($parameters['lastPosition']) && (bool) $parameters['lastPosition'] === true) { $node->setPosition(9999999); } // Apply position update before cleaning $this->getService('em')->flush(); if ($parent !== null) { $parent->getHandler()->cleanChildrenPositions(); } else { NodeHandler::cleanRootNodesPositions(); } /* * Dispatch event */ $event = new FilterNodeEvent($node); $this->getService('dispatcher')->dispatch(NodeEvents::NODE_UPDATED, $event); }