@Test public void testDeleteTrashedParentPageWithExplicitTrashedChildPage() throws Exception { WikiPage[] pages = WikiTestUtil.addTrashedPageWithChildPage(_group.getGroupId(), _node.getNodeId(), true); WikiPage parentPage = pages[0]; WikiPage childPage = pages[1]; WikiPageLocalServiceUtil.deletePage(parentPage); try { WikiPageLocalServiceUtil.getPage(parentPage.getResourcePrimKey()); Assert.fail(); } catch (NoSuchPageResourceException nspre) { childPage = WikiPageLocalServiceUtil.getPageByPageId(childPage.getPageId()); Assert.assertNull(childPage.fetchParentPage()); } }
@Test public void testDeleteTrashedPageWithRestoredChildPage() throws Exception { WikiPage[] pages = WikiTestUtil.addTrashedPageWithChildPage(_group.getGroupId(), _node.getNodeId(), true); WikiPage parentPage = pages[0]; WikiPage childPage = pages[1]; WikiPageLocalServiceUtil.restorePageFromTrash(TestPropsValues.getUserId(), childPage); WikiPageLocalServiceUtil.deletePage(parentPage); try { WikiPageLocalServiceUtil.getPage(parentPage.getResourcePrimKey()); Assert.fail(); } catch (NoSuchPageResourceException nspre) { childPage = WikiPageLocalServiceUtil.getPage(childPage.getResourcePrimKey()); Assert.assertNull(childPage.fetchParentPage()); Assert.assertEquals(WorkflowConstants.STATUS_APPROVED, childPage.getStatus()); } }
public static boolean contains( PermissionChecker permissionChecker, WikiPage page, String actionId) { Boolean hasPermission = StagingPermissionUtil.hasPermission( permissionChecker, page.getGroupId(), WikiPage.class.getName(), page.getPageId(), PortletKeys.WIKI, actionId); if (hasPermission != null) { return hasPermission.booleanValue(); } if (page.isDraft()) { if (actionId.equals(ActionKeys.VIEW) && !contains(permissionChecker, page, ActionKeys.UPDATE)) { return false; } if (actionId.equals(ActionKeys.DELETE) && (page.getStatusByUserId() == permissionChecker.getUserId())) { return true; } } else if (page.isPending()) { hasPermission = WorkflowPermissionUtil.hasPermission( permissionChecker, page.getGroupId(), WikiPage.class.getName(), page.getResourcePrimKey(), actionId); if ((hasPermission != null) && hasPermission.booleanValue()) { return true; } } else if (page.isScheduled()) { if (actionId.equals(ActionKeys.VIEW) && !contains(permissionChecker, page, ActionKeys.UPDATE)) { return false; } } if (actionId.equals(ActionKeys.VIEW)) { WikiPage redirectPage = page.fetchRedirectPage(); if (redirectPage != null) { page = redirectPage; } if (PropsValues.PERMISSIONS_VIEW_DYNAMIC_INHERITANCE) { WikiNode node = page.getNode(); if (!WikiNodePermission.contains(permissionChecker, node, actionId)) { return false; } while (page != null) { if (!_hasPermission(permissionChecker, page, actionId)) { return false; } page = page.fetchParentPage(); } return true; } } return _hasPermission(permissionChecker, page, actionId); }