/** * testMoveItemPermission * * @return void */ public function testMoveItemPermission() { $originItem = $this->getSampleMenuItem(); $movedItem = new MenuItem(['id' => 'testboard', 'parentId' => 'freeboard', 'ordering' => 1, 'activated' => 1, 'type' => 'pluginA@board', 'title' => 'Test 게시판', 'description' => '테스트 게시판입니다.', 'url' => 'testboard']); $movedItem->setBreadCrumbs(['basic', 'board', 'freeboard']); $registered = m::mock('Xpressengine\\Permission\\Registered'); $permissionFactory = $this->permissionFactory; $permissionFactory->shouldReceive('findRegistered')->andReturn($registered); $permissionFactory->shouldReceive('move')->andReturn(); $permissionHandler = new MenuPermissionHandler($permissionFactory, $this->groupRepoMock, $this->memberRepoMock); $permissionHandler->moveItemPermission($originItem, $movedItem); }
/** * testJsonSerialize * * @return void */ public function testJsonSerialize() { $menuItem = new MenuItem(['id' => 'freeboard', 'parentId' => 'main', 'ordering' => 1, 'activated' => 1, 'type' => 'pluginA@board', 'title' => '자유게시판', 'description' => '자유게시판 게시판입니다.', 'url' => 'freeboard']); $childItem = new MenuItem(['id' => 'qna', 'parentId' => 'freeboard', 'ordering' => 1, 'activated' => 1, 'type' => 'pluginA@board', 'title' => 'Q & A', 'description' => '질답 게시판입니다.', 'url' => 'qna']); $menuItem->addChild($childItem); $menuItemJson = json_encode($menuItem); $this->assertEquals('{"id":"freeboard","parentId":"main","ordering":1,"activated":1,"type":"pluginA@board","title":"\\uc790\\uc720\\uac8c\\uc2dc\\ud310","description":"\\uc790\\uc720\\uac8c\\uc2dc\\ud310 \\uac8c\\uc2dc\\ud310\\uc785\\ub2c8\\ub2e4.","url":"freeboard","items":{"qna":{"id":"qna","parentId":"freeboard","ordering":1,"activated":1,"type":"pluginA@board","title":"Q & A","description":"\\uc9c8\\ub2f5 \\uac8c\\uc2dc\\ud310\\uc785\\ub2c8\\ub2e4.","url":"qna","items":[]}}}', $menuItemJson); }
/** * SettingsMenu constructor. * * @param array $attributes 메뉴정보 */ public function __construct(array $attributes = []) { $this->resolveParentId($attributes); parent::__construct($attributes); }
/** * Delete Menu Item at Menu * * @param MenuItem $item 삭제하려는 MenuItem * * @return int * @throws CanNotDeleteMenuItemHaveChildException */ public function removeItem(MenuItem $item) { if ($item->hasChild()) { throw new CanNotDeleteMenuItemHaveChildException(); } $menuType = $item->type; $menuTypeObj = $this->typeHandler->getModuleObject($menuType); $affectedRow = $this->menuRepository->deleteItem($item); $this->menuRepository->removeHierarchy($item); $menuTypeObj->deleteMenu($item->id); if ($menuTypeObj::isRouteAble()) { $instanceRoute = $this->routeHandler->getByInstanceId($item->id); $this->routeHandler->remove($instanceRoute); } $this->cache->deleteCachedMenu($item->menuId); return $affectedRow; }
/** * moveItemConfig * * @param MenuItem $fromItem item of before moving * @param MenuItem $movedItem item of after moving * * @return void */ public function moveItemPermission(MenuItem $fromItem, MenuItem $movedItem) { $registered = $this->permission->findRegistered($this->permissionType, $fromItem->getBreadCrumbsKeyString()); $this->permission->move($registered, $movedItem->getBreadCrumbsKeyString()); }
/** * testMoveItemConfig * * @return void */ public function testMoveItemConfig() { // MenuItem $item, MenuItem $movedItem $configManager = $this->configManager; $themeHandler = $this->themeHandler; $dummyConfigEntity = m::mock('Xpressengine\\Config\\ConfigEntity'); $configManager->shouldReceive('get')->andReturn($dummyConfigEntity); $configManager->shouldReceive('move')->andReturn($dummyConfigEntity); $dummyItem = new MenuItem(['id' => 'testMenu']); $dummyItem->setBreadCrumbs(['basic', 'board']); $dummyMovedItem = new MenuItem(['id' => 'movedTestMenu']); $dummyMovedItem->setBreadCrumbs(['basic', 'notice']); $menuConfigHandler = new MenuConfigHandler($configManager, $themeHandler); $menuConfigHandler->moveItemConfig($dummyItem, $dummyMovedItem); }
/** * testRemoveItemFail * * @return void */ public function testRemoveItemFail() { $this->setExpectedException('Xpressengine\\Menu\\Exceptions\\CanNotDeleteMenuItemHaveChildException'); $menuRepo = $this->menuRepository; $typeHandler = $this->typeHandler; $routeHandler = $this->routeHandler; $cacheHandler = $this->cacheHandler; $instanceRouteMock = m::mock('Xpressengine\\Routing\\InstanceRoute'); $instanceRouteMock->shouldReceive('setUrl')->andReturn(); $menuRepo->shouldReceive('countItem')->andReturn(1); $menuRepo->shouldReceive('deleteItem')->andReturn(); $menuRepo->shouldReceive('removeHierarchy')->andReturn(); $routeHandler->shouldReceive('remove')->andReturn(); $menuHandler = new MenuAlterHandler($menuRepo, $typeHandler, $routeHandler, $cacheHandler); $dummyMenuType = m::mock('alias:Theme', 'Xpressengine\\Menu\\MenuType\\MenuTypeInterface', ['isRouteAble' => true]); $testItem = new MenuItem(['id' => 'testItem', 'type' => 'testType']); $testChildItem = new MenuItem(['id' => 'testChild', 'parentId' => 'testItem']); $testItem->addChild($testChildItem); $dummyMenuType->shouldReceive('deleteMenu')->andReturn(); $typeHandler->shouldReceive('getModuleObject')->andReturn($dummyMenuType); $typeHandler->shouldReceive('updateMenu')->andReturn(0); $menuHandler->removeItem($testItem); }
/** * getTreeCollection * * @return TreeCollection */ private function getTreeCollection() { $treeRows = [0 => ["id" => "aboutUs", "menuId" => "main", "parentId" => "main", "title" => " 소개", "url" => "aboutUs", "description" => "ddd", "target" => "_self", "type" => "pluginB@page", "ordering" => 0, "activated" => 1, "options" => "", "depth" => 1, "breadcrumbs" => "main,aboutUs"], 1 => ["id" => "freeboard", "menuId" => "main", "parentId" => "main", "title" => "자유게시판", "url" => "freeboard", "description" => "자게입니다.", "target" => "_self", "type" => "pluginA@board", "ordering" => 0, "activated" => 1, "options" => "", "depth" => 1, "breadcrumbs" => "main,freeboard"], 2 => ["id" => "test", "menuId" => "main", "parentId" => "freeboard", "title" => "test", "url" => "test", "description" => "test", "target" => "_self", "type" => "pluginB@widgetPage", "ordering" => 0, "activated" => 1, "options" => "", "depth" => 2, "breadcrumbs" => "main,freeboard,test"], 3 => ["id" => "notice", "menuId" => "main", "parentId" => "main", "title" => "공지 게시판", "url" => "notice", "description" => "공지사항 게시판입니다.", "target" => "_self", "type" => "pluginA@board", "ordering" => 1, "activated" => 1, "options" => "", "depth" => 1, "breadcrumbs" => "main,notice"]]; $nodes = []; foreach ($treeRows as $row) { $node = new MenuItem(array_diff_key($row, array_flip(['depth', 'breadcrumbs']))); $node->setdepth($row['depth']); $node->setBreadcrumbs(explode(',', $row['breadcrumbs'])); $nodes[$node->id] = $node; } return new TreeCollection($nodes); }
/** * Create New Item on Menu * * @param MenuItem $item new menuItem object to add at menu * * @return MenuItem * @throws Exception */ public function insertItem(MenuItem $item) { $cnt = 0; $result = false; while (!$result && $cnt++ < $this->DUPLICATE_RETRY_CNT) { $item->id = $this->generateNewId(); try { $result = $this->conn->table($this->nodeTable)->insert($item->getAttributes()); } catch (QueryException $e) { $sqlState = $e->errorInfo[0]; if ($sqlState === "23000") { $result = false; } else { throw $e; } } } if ($result) { return $item; } throw new CanNotCreateItemException(); }
/** * moveItemConfig * * @param MenuItem $beforeItem to change theme value for before item moving * @param MenuItem $movedItem to change theme value for after item moving * * @return void * @throws InvalidArgumentException */ public function moveItemConfig(MenuItem $beforeItem, MenuItem $movedItem) { $configEntity = $this->configManager->get($this->menuKeyString($beforeItem->getBreadCrumbsKeyString())); $this->configManager->move($configEntity, $this->menuKeyString($movedItem->getBreadCrumbsKeyString(true))); }