/**
* moveItem
*
* @param MenuHandler $handler menu handler
*
* @return RendererInterface
* @throws Exception
*/
public function moveItem(MenuHandler $handler)
{
$ordering = Input::get('ordering');
$itemId = Input::get('itemId');
$parentId = Input::get('parent');
XeDB::beginTransaction();
try {
$item = $handler->getItem($itemId);
/** @var Menu $menu */
if (!($parent = $handler->getItem($parentId))) {
$menu = $handler->get($parentId);
} else {
$menu = $parent->menu;
}
$old = clone $item;
// 이동되기 전 상태의 객체를 구성하기 위해 relation 을 사전에 load
$old->ancestors;
$item = $handler->moveItem($menu, $item, $parent);
$handler->setOrder($item, $ordering);
$handler->moveItemConfig($old, $item);
$toKey = $handler->permKeyString($item);
$toKey = substr($toKey, 0, strrpos($toKey, '.'));
$this->permissionMove($handler->permKeyString($old), $toKey);
} catch (\Exception $e) {
XeDB::rollback();
throw $e;
}
XeDB::commit();
return XePresenter::makeApi(Input::all());
}