public function testSetOrder() { list($repo, $configs, $modules, $routes) = $this->getMocks(); $instance = new MenuHandler($repo, $configs, $modules, $routes); $collection = m::mock('stdClass'); $collection->shouldReceive('filter')->andReturn($collection); $mockMenuItemParent = m::mock('Xpressengine\\Menu\\Models\\MenuItem'); $mockMenuItemParent->shouldReceive('getChildren')->andReturn($collection); $mockMenuItem = m::mock('Xpressengine\\Menu\\Models\\MenuItem'); $mockMenuItem->shouldReceive('getParent')->andReturn($mockMenuItemParent); $collection->shouldReceive('slice')->once()->with(0, 1)->andReturnSelf(); $collection->shouldReceive('merge')->once()->with([$mockMenuItem])->andReturnSelf(); $collection->shouldReceive('slice')->once()->with(1)->andReturnSelf(); $collection->shouldReceive('merge')->once()->with($collection)->andReturnSelf(); $collection->shouldReceive('each')->once(); $instance->setOrder($mockMenuItem, 1); }
/** * 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()); }