/** * storeItem * * @param MenuRetrieveHandler $menuHandler to get menu has item * @param MenuAlterHandler $menuChanger store item handler * @param MenuConfigHandler $configHandler store item config handler * @param MenuPermissionHandler $permissionHandler store item permission handler * @param string $menuId where to store * * @return $this|RedirectResponse * @throws Exception */ public function storeItem(MenuRetrieveHandler $menuHandler, MenuAlterHandler $menuChanger, MenuConfigHandler $configHandler, MenuPermissionHandler $permissionHandler, $menuId) { XeDB::beginTransaction(); $menu = $menuHandler->getMenu($menuId); try { $inputs = Request::except(['_token', 'theme_desktop', 'theme_mobile']); $parentThemeMode = Request::get('parentTheme', false); if ($parentThemeMode === false) { $desktopTheme = Request::get('theme_desktop'); $mobileTheme = Request::get('theme_mobile'); } else { $desktopTheme = null; $mobileTheme = null; } $item = $menuChanger->addItem($menu, $inputs); $configHandler->setMenuItemTheme($item, $desktopTheme, $mobileTheme); $permissionHandler->registerItemPermission($item, new Grant()); } 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'); }
/** * testAddItemFail * * @return void */ public function testAddItemFail() { $this->setExpectedException('\\Xpressengine\\Routing\\Exceptions\\UnusableUrlException'); $menuRepo = $this->menuRepository; $typeHandler = $this->typeHandler; $routeHandler = $this->routeHandler; $cacheHandler = $this->cacheHandler; $instanceRouteMock = m::mock('Xpressengine\\Routing\\InstanceRoute'); $instanceRouteMock->shouldReceive('setUrl')->andReturn(); $menuRepo->shouldReceive('countMenu')->andReturn(0); $menuRepo->shouldReceive('countItem')->andReturn(0); $inputs = ['itemId' => 'testId', 'parent' => 'basic', 'itemTitle' => 'Title', 'itemUrl' => 'testUrl', 'itemDescription' => 'testDescription', 'itemTarget' => '_blank', 'selectedType' => 'xpressengine@test', 'itemOrdering' => '1', 'itemActivated' => '1', 'siteKey' => 'default']; $menuRepo->shouldReceive('insertItem')->andReturn(new MenuItem(['id' => $inputs['itemId'], 'menuId' => 'basic', 'parentId' => $inputs['parent'], 'title' => $inputs['itemTitle'], 'url' => $inputs['itemUrl'], 'description' => $inputs['itemDescription'], 'target' => $inputs['itemTarget'], 'type' => $inputs['selectedType'], 'ordering' => $inputs['itemOrdering'], 'activated' => $inputs['itemActivated']])); $menuRepo->shouldReceive('insertHierarchy')->andReturn(0); $dummyMenuEntity = $menu = new MenuEntity(['id' => 'basic', 'title' => 'testTitle', 'description' => 'testDescription'], new TreeCollection(['testMenu' => new MenuItem(['id' => 'testMenu'])])); $menuRepo->shouldReceive('findMenu')->andReturn($dummyMenuEntity); $menuRepo->shouldReceive('children')->andReturn([]); $menuRepo->shouldReceive('updateItem')->andReturn([]); $routeHandler->shouldReceive('usableUrl')->andReturn(false); $routeHandler->shouldReceive('add')->andReturn(); $menuHandler = new MenuAlterHandler($menuRepo, $typeHandler, $routeHandler, $cacheHandler); $dummyMenuType = m::mock('alias:Theme', 'Xpressengine\\Menu\\MenuType\\MenuTypeInterface', ['isRouteAble' => true, 'getId' => 'dummyId']); $dummyMenuType->shouldReceive('storeMenu')->andReturn(); $typeHandler->shouldReceive('getModuleObject')->andReturn($dummyMenuType); $insertedItem = $menuHandler->addItem($dummyMenuEntity, $inputs); $this->assertEquals('testId', $insertedItem->id); $this->assertEquals('Title', $insertedItem->title); $this->assertEquals('testUrl', $insertedItem->url); $this->assertEquals('testDescription', $insertedItem->description); $this->assertEquals('_blank', $insertedItem->target); $this->assertEquals(1, $insertedItem->ordering); $this->assertEquals(true, $insertedItem->activated); }