/** * @param array $parameters * @param Tag $tag */ protected function updatePosition($parameters, Tag $tag) { /* * First, we set the new parent */ $parent = null; if (!empty($parameters['newParent']) && $parameters['newParent'] > 0) { $parent = $this->getService('em')->find('RZ\\Roadiz\\Core\\Entities\\Tag', (int) $parameters['newParent']); if ($parent !== null) { $tag->setParent($parent); } } else { $tag->setParent(null); } /* * Then compute new position */ if (!empty($parameters['nextTagId']) && $parameters['nextTagId'] > 0) { $nextTag = $this->getService('em')->find('RZ\\Roadiz\\Core\\Entities\\Tag', (int) $parameters['nextTagId']); if ($nextTag !== null) { $tag->setPosition($nextTag->getPosition() - 0.5); } } elseif (!empty($parameters['prevTagId']) && $parameters['prevTagId'] > 0) { $prevTag = $this->getService('em')->find('RZ\\Roadiz\\Core\\Entities\\Tag', (int) $parameters['prevTagId']); if ($prevTag !== null) { $tag->setPosition($prevTag->getPosition() + 0.5); } } // Apply position update before cleaning $this->getService('em')->flush(); if ($parent !== null) { $parent->getHandler()->cleanChildrenPositions(); } else { TagHandler::cleanRootTagsPositions(); } /* * Dispatch event */ $event = new FilterTagEvent($tag); $this->getService('dispatcher')->dispatch(TagEvents::TAG_UPDATED, $event); }