コード例 #1
0
 /**
  * @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);
 }