/** * updateItem * 메뉴 아이템 수정 처리 메소드 * * @param MenuRetrieveHandler $menuHandler menu handler * @param MenuAlterHandler $menuChanger menu change handler * @param MenuConfigHandler $configHandler menu config handler * @param string $menuId menu id * @param string $itemId item id * * @return RedirectResponse * @throws Exception */ public function updateItem(MenuRetrieveHandler $menuHandler, MenuAlterHandler $menuChanger, MenuConfigHandler $configHandler, $menuId, $itemId) { XeDB::beginTransaction(); try { $inputs = Request::except(['_token', 'theme_desktop', 'theme_mobile']); $menu = $menuHandler->getMenu($menuId); $item = $menu->getItem($itemId); $parentThemeMode = Request::get('parentTheme', false); if ($parentThemeMode === false) { $desktopTheme = Request::get('theme_desktop'); $mobileTheme = Request::get('theme_mobile'); } else { $desktopTheme = null; $mobileTheme = null; } $menuChanger->putItem($item, $inputs); $configHandler->updateMenuItemTheme($item, $desktopTheme, $mobileTheme); } catch (Exception $e) { XeDB::rollback(); Request::flash(); return Redirect::back()->with('alert', ['type' => 'danger', 'message' => $e->getMessage()]); } XeDB::commit(); return Redirect::route('settings.menu.index'); }
/** * testPutItem * * @return void */ public function testPutItem() { $menuRepo = $this->menuRepository; $typeHandler = $this->typeHandler; $routeHandler = $this->routeHandler; $cacheHandler = $this->cacheHandler; $instanceRouteMock = m::mock('Xpressengine\\Routing\\InstanceRoute'); $instanceRouteMock->shouldReceive('setUrl')->andReturn(); $menuRepo->shouldReceive('updateItem')->andReturn(1); $routeHandler->shouldReceive('getByInstanceId')->andReturn($instanceRouteMock); $routeHandler->shouldReceive('put')->andReturn(); $menuHandler = new MenuAlterHandler($menuRepo, $typeHandler, $routeHandler, $cacheHandler); $dummyMenuType = m::mock('alias:Theme', 'Xpressengine\\Menu\\MenuType\\MenuTypeInterface', ['isRouteAble' => true]); $dummyMenuType->shouldReceive('updateMenu')->andReturn(); $typeHandler->shouldReceive('getModuleObject')->andReturn($dummyMenuType); $typeHandler->shouldReceive('updateMenu')->andReturn(1); $menuItem = new MenuItem(['id' => 'qna', 'parentId' => 'main', 'ordering' => 1, 'activated' => 1, 'type' => 'pluginA@board', 'title' => 'Q & A', 'description' => '질답 게시판입니다.', 'url' => 'qna']); $inputs = ['itemTitle' => 'newTitle', 'itemUrl' => 'newUrl', 'itemDescription' => 'newDescription', 'itemTarget' => 'newTarget', 'itemOrdering' => 3, 'itemActivated' => false]; $updatedItem = $menuHandler->putItem($menuItem, $inputs); $this->assertEquals('qna', $updatedItem->id); $this->assertEquals('newTitle', $updatedItem->title); $this->assertEquals('newUrl', $updatedItem->url); $this->assertEquals('newDescription', $updatedItem->description); $this->assertEquals('newTarget', $updatedItem->target); $this->assertEquals(3, $updatedItem->ordering); $this->assertEquals(false, $updatedItem->activated); }