* @copyright Since 2007 PrestaShop SA and Contributors * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0) */ namespace PrestaShop\PrestaShop\Core\Grid\Position; use PrestaShop\PrestaShop\Core\Grid\Position\UpdateHandler\PositionUpdateHandlerInterface; /** * Class GridPositionUpdater, this class is responsible for updating the position of items * of a grid using the information from a PositionUpdateInterface object. */ final class GridPositionUpdater implements GridPositionUpdaterInterface { /** * @var PositionUpdateHandlerInterface */ private $updateHandler; /** * @param PositionUpdateHandlerInterface $updateHandler */ public function __construct(PositionUpdateHandlerInterface $updateHandler) { $this->updateHandler = $updateHandler; } /** * {@inheritdoc} */ public function update(PositionUpdateInterface $positionUpdate) { $newPositions = $this->getNewPositions($positionUpdate); $this->sortByPositionValue($newPositions); $this->updateHandler->updatePositions($positionUpdate->getPositionDefinition(), $newPositions, $positionUpdate->getParentId()); } /** * @param PositionUpdateInterface $positionUpdate * * @return array */ private function getNewPositions(PositionUpdateInterface $positionUpdate) { $positions = $this->updateHandler->getCurrentPositions($positionUpdate->getPositionDefinition(), $positionUpdate->getParentId()); /** @var PositionModificationInterface $rowModification */ foreach ($positionUpdate->getPositionModificationCollection() as $rowModification) { $positions[$rowModification->getId()] = $rowModification->getNewPosition(); } return $positions; } /** * @param array $positions */ private function sortByPositionValue(&$positions) { asort($positions); } }