private function patchSiblingAndParentOperation(KeyWord $keyword, &$operations) { $siblingOperation = null; $parentOperation = null; foreach ($operations as $key => $operation) { $op = array('key' => $key, 'op' => $operation); if ('/sibling_uid' === $operation['path']) { $siblingOperation = $op; } elseif ('/parent_uid' === $operation['path']) { $parentOperation = $op; } } if (null !== $siblingOperation || null !== $parentOperation) { if ($keyword->isRoot()) { throw new BadRequestHttpException('Cannot move root node of a site.'); } try { if (null !== $siblingOperation) { unset($operations[$siblingOperation['key']]); $sibling = $this->getKeywordByUid($siblingOperation['op']['value']); $this->getKeywordRepository()->moveAsPrevSiblingOf($keyword, $sibling); } elseif (null !== $parentOperation) { unset($operations[$parentOperation['key']]); $parent = $this->getKeywordByUid($parentOperation['op']['value']); $this->getKeywordRepository()->moveAsLastChildOf($keyword, $parent); } } catch (\InvalidArgumentException $e) { throw new BadRequestHttpException(sprintf('Invalid node move action: %s', $e->getMessage())); } } }