/** * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. */ package com.liferay.wiki.web.internal.display.context; import com.liferay.asset.kernel.model.AssetEntry; import com.liferay.asset.kernel.service.AssetEntryServiceUtil; import com.liferay.asset.kernel.service.persistence.AssetEntryQuery; import com.liferay.portal.kernel.dao.orm.QueryUtil; import com.liferay.portal.kernel.dao.search.SearchContainer; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.exception.SystemException; import com.liferay.portal.kernel.language.LanguageUtil; import com.liferay.portal.kernel.log.Log; import com.liferay.portal.kernel.log.LogFactoryUtil; import com.liferay.portal.kernel.model.User; import com.liferay.portal.kernel.portlet.LiferayPortletResponse; import com.liferay.portal.kernel.portlet.LiferayWindowState; import com.liferay.portal.kernel.search.Hits; import com.liferay.portal.kernel.search.Indexer; import com.liferay.portal.kernel.search.IndexerRegistryUtil; import com.liferay.portal.kernel.search.SearchContext; import com.liferay.portal.kernel.search.SearchContextFactory; import com.liferay.portal.kernel.search.SearchResult; import com.liferay.portal.kernel.search.SearchResultUtil; import com.liferay.portal.kernel.security.permission.ActionKeys; import com.liferay.portal.kernel.security.permission.PermissionChecker; import com.liferay.portal.kernel.servlet.taglib.ui.DeleteMenuItem; import com.liferay.portal.kernel.servlet.taglib.ui.JavaScriptMenuItem; import com.liferay.portal.kernel.servlet.taglib.ui.Menu; import com.liferay.portal.kernel.servlet.taglib.ui.MenuItem; import com.liferay.portal.kernel.servlet.taglib.ui.URLMenuItem; import com.liferay.portal.kernel.theme.ThemeDisplay; import com.liferay.portal.kernel.util.Constants; import com.liferay.portal.kernel.util.HtmlUtil; import com.liferay.portal.kernel.util.ListUtil; import com.liferay.portal.kernel.util.OrderByComparator; import com.liferay.portal.kernel.util.ParamUtil; import com.liferay.portal.kernel.util.StringBundler; import com.liferay.portal.kernel.util.StringPool; import com.liferay.portal.kernel.util.Validator; import com.liferay.portal.kernel.util.WebKeys; import com.liferay.portal.kernel.workflow.WorkflowConstants; import com.liferay.subscription.service.SubscriptionLocalServiceUtil; import com.liferay.taglib.search.ResultRow; import com.liferay.taglib.security.PermissionsURLTag; import com.liferay.trash.TrashHelper; import com.liferay.wiki.configuration.WikiGroupServiceConfiguration; import com.liferay.wiki.configuration.WikiGroupServiceOverriddenConfiguration; import com.liferay.wiki.constants.WikiWebKeys; import com.liferay.wiki.display.context.WikiListPagesDisplayContext; import com.liferay.wiki.display.context.WikiUIItemKeys; import com.liferay.wiki.model.WikiNode; import com.liferay.wiki.model.WikiPage; import com.liferay.wiki.model.WikiPageResource; import com.liferay.wiki.service.WikiPageLocalServiceUtil; import com.liferay.wiki.service.WikiPageResourceLocalServiceUtil; import com.liferay.wiki.service.WikiPageServiceUtil; import com.liferay.wiki.service.permission.WikiNodePermissionChecker; import com.liferay.wiki.service.permission.WikiPagePermissionChecker; import com.liferay.wiki.util.comparator.PageVersionComparator; import com.liferay.wiki.web.internal.display.context.util.WikiRequestHelper; import com.liferay.wiki.web.util.WikiPortletUtil; import com.liferay.wiki.web.util.WikiWebComponentProvider; import java.util.ArrayList; import java.util.List; import java.util.UUID; import javax.portlet.ActionRequest; import javax.portlet.PortletURL; import javax.portlet.WindowStateException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * @author Iván Zaera */ public class DefaultWikiListPagesDisplayContext implements WikiListPagesDisplayContext { public DefaultWikiListPagesDisplayContext( HttpServletRequest request, HttpServletResponse response, WikiNode wikiNode, TrashHelper trashHelper) { _request = request; _wikiNode = wikiNode; _trashHelper = trashHelper; _wikiRequestHelper = new WikiRequestHelper(request); } @Override public String getEmptyResultsMessage() { String keywords = ParamUtil.getString(_request, "keywords"); if (Validator.isNotNull(keywords)) { return LanguageUtil.format( _request, "no-pages-were-found-that-matched-the-keywords-x", "<strong>" + HtmlUtil.escape(keywords) + "</strong>", false); } String navigation = ParamUtil.getString(_request, "navigation"); if (navigation.equals("categorized-pages")) { return "there-are-no-pages-with-this-category"; } else if (navigation.equals("draft-pages")) { return "there-are-no-drafts"; } else if (navigation.equals("frontpage")) { WikiWebComponentProvider wikiWebComponentProvider = WikiWebComponentProvider.getWikiWebComponentProvider(); WikiGroupServiceConfiguration wikiGroupServiceConfiguration = wikiWebComponentProvider.getWikiGroupServiceConfiguration(); return LanguageUtil.format( _request, "there-is-no-x", new String[] {wikiGroupServiceConfiguration.frontPageName()}, false); } else if (navigation.equals("incoming-links")) { return "there-are-no-pages-that-link-to-this-page"; } else if (navigation.equals("orphan-pages")) { return "there-are-no-orphan-pages"; } else if (navigation.equals("outgoing-links")) { return "this-page-has-no-links"; } else if (navigation.equals("pending-pages")) { return "there-are-no-pages-submitted-by-you-pending-approval"; } else if (navigation.equals("recent-changes")) { return "there-are-no-recent-changes"; } else if (navigation.equals("tagged-pages")) { return "there-are-no-pages-with-this-tag"; } return "there-are-no-pages"; } @Override public Menu getMenu(WikiPage wikiPage) throws PortalException { Menu menu = new Menu(); menu.setDirection("left-side"); menu.setMarkupView("lexicon"); menu.setScroll(false); List<MenuItem> menuItems = new ArrayList<>(); addEditMenuItem(menuItems, wikiPage); addPermissionsMenuItem(menuItems, wikiPage); addCopyMenuItem(menuItems, wikiPage); addMoveMenuItem(menuItems, wikiPage); addChildPageMenuItem(menuItems, wikiPage); addSubscriptionMenuItem(menuItems, wikiPage); addPrintPageMenuItem(menuItems, wikiPage); addDeleteMenuItem(menuItems, wikiPage); menu.setMenuItems(menuItems); return menu; } @Override public UUID getUuid() { return _UUID; } @Override public void populateResultsAndTotal(SearchContainer searchContainer) throws PortalException { WikiPage page = (WikiPage)_request.getAttribute(WikiWebKeys.WIKI_PAGE); ThemeDisplay themeDisplay = (ThemeDisplay)_request.getAttribute( WebKeys.THEME_DISPLAY); String navigation = ParamUtil.getString( _request, "navigation", "all-pages"); String keywords = ParamUtil.getString(_request, "keywords"); int total = 0; List<WikiPage> results = new ArrayList<>(); if (Validator.isNotNull(keywords)) { Indexer<WikiPage> indexer = IndexerRegistryUtil.getIndexer( WikiPage.class); SearchContext searchContext = SearchContextFactory.getInstance( _request); searchContext.setAttribute("paginationType", "more"); searchContext.setEnd(searchContainer.getEnd()); searchContext.setIncludeAttachments(true); searchContext.setIncludeDiscussions(true); searchContext.setKeywords(keywords); searchContext.setNodeIds(new long[] {_wikiNode.getNodeId()}); searchContext.setStart(searchContainer.getStart()); Hits hits = indexer.search(searchContext); searchContainer.setTotal(hits.getLength()); List<SearchResult> searchResults = SearchResultUtil.getSearchResults( hits, themeDisplay.getLocale()); for (SearchResult searchResult : searchResults) { WikiPage wikiPage = WikiPageLocalServiceUtil.getPage( searchResult.getClassPK()); results.add(wikiPage); } } else if (navigation.equals("all-pages")) { total = WikiPageServiceUtil.getPagesCount( themeDisplay.getScopeGroupId(), _wikiNode.getNodeId(), true, themeDisplay.getUserId(), true, WorkflowConstants.STATUS_APPROVED); searchContainer.setTotal(total); OrderByComparator<WikiPage> obc = WikiPortletUtil.getPageOrderByComparator( searchContainer.getOrderByCol(), searchContainer.getOrderByType()); List<WikiPage> pages = WikiPageServiceUtil.getPages( themeDisplay.getScopeGroupId(), _wikiNode.getNodeId(), true, themeDisplay.getUserId(), true, WorkflowConstants.STATUS_APPROVED, searchContainer.getStart(), searchContainer.getEnd(), obc); PermissionChecker permissionChecker = _wikiRequestHelper.getPermissionChecker(); results = new ArrayList<>(results.size()); for (WikiPage curPage : pages) { WikiPage resultPage = curPage; if (permissionChecker.isContentReviewer( _wikiRequestHelper.getCompanyId(), _wikiRequestHelper.getScopeGroupId()) || WikiPagePermissionChecker.contains( permissionChecker, curPage, ActionKeys.UPDATE)) { WikiPage lastPage = null; try { lastPage = WikiPageLocalServiceUtil.getPage( curPage.getResourcePrimKey(), false); } catch (PortalException pe) { // LPS-52675 if (_log.isDebugEnabled()) { _log.debug(pe, pe); } } if ((lastPage != null) && (curPage.getVersion() < lastPage.getVersion())) { resultPage = lastPage; } } results.add(resultPage); } } else if (navigation.equals("categorized-pages") || navigation.equals("tagged-pages")) { AssetEntryQuery assetEntryQuery = new AssetEntryQuery( WikiPage.class.getName(), searchContainer); assetEntryQuery.setEnablePermissions(true); total = AssetEntryServiceUtil.getEntriesCount(assetEntryQuery); searchContainer.setTotal(total); assetEntryQuery.setEnd(searchContainer.getEnd()); assetEntryQuery.setStart(searchContainer.getStart()); List<AssetEntry> assetEntries = AssetEntryServiceUtil.getEntries( assetEntryQuery); for (AssetEntry assetEntry : assetEntries) { WikiPageResource pageResource = WikiPageResourceLocalServiceUtil.getPageResource( assetEntry.getClassPK()); WikiPage assetPage = WikiPageLocalServiceUtil.getPage( pageResource.getNodeId(), pageResource.getTitle()); results.add(assetPage); } } else if (navigation.equals("draft-pages") || navigation.equals("pending-pages")) { long draftUserId = themeDisplay.getUserId(); PermissionChecker permissionChecker = themeDisplay.getPermissionChecker(); if (permissionChecker.isContentReviewer( themeDisplay.getCompanyId(), themeDisplay.getScopeGroupId())) { draftUserId = 0; } int status = WorkflowConstants.STATUS_DRAFT; if (navigation.equals("pending-pages")) { status = WorkflowConstants.STATUS_PENDING; } total = WikiPageServiceUtil.getPagesCount( themeDisplay.getScopeGroupId(), draftUserId, _wikiNode.getNodeId(), status); searchContainer.setTotal(total); results = WikiPageServiceUtil.getPages( themeDisplay.getScopeGroupId(), draftUserId, _wikiNode.getNodeId(), status, searchContainer.getStart(), searchContainer.getEnd()); } else if (navigation.equals("frontpage")) { WikiWebComponentProvider wikiWebComponentProvider = WikiWebComponentProvider.getWikiWebComponentProvider(); WikiGroupServiceConfiguration wikiGroupServiceConfiguration = wikiWebComponentProvider.getWikiGroupServiceConfiguration(); WikiPage wikiPage = WikiPageServiceUtil.getPage( themeDisplay.getScopeGroupId(), _wikiNode.getNodeId(), wikiGroupServiceConfiguration.frontPageName()); searchContainer.setTotal(1); results.add(wikiPage); } else if (navigation.equals("history")) { total = WikiPageLocalServiceUtil.getPagesCount( page.getNodeId(), page.getTitle()); searchContainer.setTotal(total); results = WikiPageLocalServiceUtil.getPages( page.getNodeId(), page.getTitle(), QueryUtil.ALL_POS, QueryUtil.ALL_POS, new PageVersionComparator()); } else if (navigation.equals("incoming-links")) { List<WikiPage> links = WikiPageLocalServiceUtil.getIncomingLinks( page.getNodeId(), page.getTitle()); total = links.size(); searchContainer.setTotal(total); results = ListUtil.subList( links, searchContainer.getStart(), searchContainer.getEnd()); } else if (navigation.equals("orphan-pages")) { List<WikiPage> orphans = WikiPageServiceUtil.getOrphans( themeDisplay.getScopeGroupId(), _wikiNode.getNodeId()); total = orphans.size(); searchContainer.setTotal(total); results = ListUtil.subList( orphans, searchContainer.getStart(), searchContainer.getEnd()); } else if (navigation.equals("outgoing-links")) { List<WikiPage> links = WikiPageLocalServiceUtil.getOutgoingLinks( page.getNodeId(), page.getTitle()); total = links.size(); searchContainer.setTotal(total); results = ListUtil.subList( links, searchContainer.getStart(), searchContainer.getEnd()); } else if (navigation.equals("recent-changes")) { total = WikiPageServiceUtil.getRecentChangesCount( themeDisplay.getScopeGroupId(), _wikiNode.getNodeId()); searchContainer.setTotal(total); results = WikiPageServiceUtil.getRecentChanges( themeDisplay.getScopeGroupId(), _wikiNode.getNodeId(), searchContainer.getStart(), searchContainer.getEnd()); } searchContainer.setResults(results); } protected void addChildPageMenuItem( List<MenuItem> menuItems, WikiPage wikiPage) throws PortalException { if (Validator.isNull(wikiPage.getContent()) || !WikiNodePermissionChecker.contains( _wikiRequestHelper.getPermissionChecker(), wikiPage.getNodeId(), ActionKeys.ADD_PAGE)) { return; } URLMenuItem urlMenuItem = new URLMenuItem(); urlMenuItem.setKey(WikiUIItemKeys.ADD_CHILD_PAGE); urlMenuItem.setLabel("add-child-page"); LiferayPortletResponse liferayPortletResponse = _wikiRequestHelper.getLiferayPortletResponse(); PortletURL portletURL = liferayPortletResponse.createRenderURL(); portletURL.setParameter("mvcRenderCommandName", "/wiki/edit_page"); portletURL.setParameter("redirect", _wikiRequestHelper.getCurrentURL()); portletURL.setParameter("nodeId", String.valueOf(wikiPage.getNodeId())); portletURL.setParameter("title", StringPool.BLANK); portletURL.setParameter("editTitle", "1"); portletURL.setParameter("parentTitle", wikiPage.getTitle()); urlMenuItem.setURL(portletURL.toString()); menuItems.add(urlMenuItem); } protected void addCopyMenuItem(List<MenuItem> menuItems, WikiPage wikiPage) throws PortalException { if (!isCopyPasteEnabled(wikiPage)) { return; } URLMenuItem urlMenuItem = new URLMenuItem(); urlMenuItem.setKey(WikiUIItemKeys.COPY); urlMenuItem.setLabel("copy"); LiferayPortletResponse liferayPortletResponse = _wikiRequestHelper.getLiferayPortletResponse(); PortletURL portletURL = liferayPortletResponse.createRenderURL(); portletURL.setParameter("mvcRenderCommandName", "/wiki/edit_page"); portletURL.setParameter("redirect", _wikiRequestHelper.getCurrentURL()); portletURL.setParameter("nodeId", String.valueOf(wikiPage.getNodeId())); portletURL.setParameter("title", StringPool.BLANK); portletURL.setParameter("editTitle", "1"); portletURL.setParameter( "templateNodeId", String.valueOf(wikiPage.getNodeId())); portletURL.setParameter( "templateTitle", HtmlUtil.unescape(wikiPage.getTitle())); urlMenuItem.setURL(portletURL.toString()); menuItems.add(urlMenuItem); } protected void addDeleteMenuItem( List<MenuItem> menuItems, WikiPage wikiPage) throws PortalException { if (!wikiPage.isDraft() && WikiPagePermissionChecker.contains( _wikiRequestHelper.getPermissionChecker(), wikiPage.getNodeId(), HtmlUtil.unescape(wikiPage.getTitle()), ActionKeys.DELETE)) { DeleteMenuItem deleteMenuItem = new DeleteMenuItem(); deleteMenuItem.setKey(WikiUIItemKeys.DELETE); deleteMenuItem.setTrash( _trashHelper.isTrashEnabled( _wikiRequestHelper.getScopeGroupId())); LiferayPortletResponse liferayPortletResponse = _wikiRequestHelper.getLiferayPortletResponse(); PortletURL portletURL = liferayPortletResponse.createActionURL(); portletURL.setParameter( ActionRequest.ACTION_NAME, "/wiki/edit_page"); String cmd = Constants.DELETE; if (_trashHelper.isTrashEnabled( _wikiRequestHelper.getScopeGroupId())) { cmd = Constants.MOVE_TO_TRASH; } portletURL.setParameter(Constants.CMD, cmd); portletURL.setParameter( "redirect", _wikiRequestHelper.getCurrentURL()); portletURL.setParameter( "nodeId", String.valueOf(wikiPage.getNodeId())); portletURL.setParameter( "title", HtmlUtil.unescape(wikiPage.getTitle())); deleteMenuItem.setURL(portletURL.toString()); menuItems.add(deleteMenuItem); } if (wikiPage.isDraft() && WikiPagePermissionChecker.contains( _wikiRequestHelper.getPermissionChecker(), wikiPage, ActionKeys.DELETE)) { URLMenuItem urlMenuItem = new URLMenuItem(); urlMenuItem.setKey(WikiUIItemKeys.DELETE); urlMenuItem.setLabel("discard-draft"); LiferayPortletResponse liferayPortletResponse = _wikiRequestHelper.getLiferayPortletResponse(); PortletURL portletURL = liferayPortletResponse.createActionURL(); portletURL.setParameter( ActionRequest.ACTION_NAME, "/wiki/edit_page"); portletURL.setParameter(Constants.CMD, Constants.DELETE); portletURL.setParameter( "redirect", _wikiRequestHelper.getCurrentURL()); portletURL.setParameter( "nodeId", String.valueOf(wikiPage.getNodeId())); portletURL.setParameter( "title", HtmlUtil.unescape(wikiPage.getTitle())); portletURL.setParameter( "version", String.valueOf(wikiPage.getVersion())); urlMenuItem.setURL(portletURL.toString()); menuItems.add(urlMenuItem); } } protected void addEditMenuItem( List<MenuItem> menuItems, WikiPage wikiPage) { if (!WikiPagePermissionChecker.contains( _wikiRequestHelper.getPermissionChecker(), wikiPage, ActionKeys.UPDATE)) { return; } URLMenuItem urlMenuItem = new URLMenuItem(); urlMenuItem.setKey(WikiUIItemKeys.EDIT); urlMenuItem.setLabel("edit"); LiferayPortletResponse liferayPortletResponse = _wikiRequestHelper.getLiferayPortletResponse(); PortletURL portletURL = liferayPortletResponse.createRenderURL(); portletURL.setParameter("mvcRenderCommandName", "/wiki/edit_page"); portletURL.setParameter("nodeId", String.valueOf(wikiPage.getNodeId())); portletURL.setParameter( "title", HtmlUtil.unescape(wikiPage.getTitle())); urlMenuItem.setURL(portletURL.toString()); menuItems.add(urlMenuItem); } protected void addMoveMenuItem(List<MenuItem> menuItems, WikiPage wikiPage) throws PortalException { if (!isCopyPasteEnabled(wikiPage)) { return; } URLMenuItem urlMenuItem = new URLMenuItem(); urlMenuItem.setKey(WikiUIItemKeys.MOVE); urlMenuItem.setLabel("move"); LiferayPortletResponse liferayPortletResponse = _wikiRequestHelper.getLiferayPortletResponse(); PortletURL portletURL = liferayPortletResponse.createRenderURL(); portletURL.setParameter("mvcRenderCommandName", "/wiki/move_page"); portletURL.setParameter("redirect", _wikiRequestHelper.getCurrentURL()); portletURL.setParameter("nodeId", String.valueOf(wikiPage.getNodeId())); portletURL.setParameter( "title", HtmlUtil.unescape(wikiPage.getTitle())); urlMenuItem.setURL(portletURL.toString()); menuItems.add(urlMenuItem); } protected void addPermissionsMenuItem( List<MenuItem> menuItems, WikiPage wikiPage) { if (!WikiPagePermissionChecker.contains( _wikiRequestHelper.getPermissionChecker(), wikiPage, ActionKeys.PERMISSIONS)) { return; } URLMenuItem urlMenuItem = new URLMenuItem(); urlMenuItem.setKey(WikiUIItemKeys.PERMISSIONS); urlMenuItem.setLabel("permissions"); urlMenuItem.setMethod("get"); urlMenuItem.setUseDialog(true); String url = null; try { url = PermissionsURLTag.doTag( null, WikiPage.class.getName(), wikiPage.getTitle(), null, String.valueOf(wikiPage.getResourcePrimKey()), LiferayWindowState.POP_UP.toString(), null, _request); } catch (Exception e) { throw new SystemException("Unable to create permissions URL", e); } urlMenuItem.setURL(url); menuItems.add(urlMenuItem); } protected void addPrintPageMenuItem( List<MenuItem> menuItems, WikiPage wikiPage) throws PortalException { try { JavaScriptMenuItem javascriptMenuItem = new JavaScriptMenuItem(); javascriptMenuItem.setKey(WikiUIItemKeys.PRINT); javascriptMenuItem.setLabel("print"); StringBundler sb = new StringBundler(5); sb.append("window.open('"); LiferayPortletResponse liferayPortletResponse = _wikiRequestHelper.getLiferayPortletResponse(); PortletURL portletURL = liferayPortletResponse.createRenderURL(); WikiNode wikiNode = wikiPage.getNode(); portletURL.setParameter("mvcRenderCommandName", "/wiki/view"); portletURL.setParameter("nodeName", wikiNode.getName()); portletURL.setParameter("title", wikiPage.getTitle()); portletURL.setParameter("viewMode", Constants.PRINT); portletURL.setWindowState(LiferayWindowState.POP_UP); sb.append(portletURL.toString()); sb.append("', '', 'directories=0,height=480,left=80,location=1,"); sb.append("menubar=1,resizable=1,scrollbars=yes,status=0,"); sb.append("toolbar=0,top=180,width=640');"); javascriptMenuItem.setOnClick(sb.toString()); menuItems.add(javascriptMenuItem); } catch (WindowStateException wse) { } } protected void addSubscriptionMenuItem( List<MenuItem> menuItems, WikiPage wikiPage) { ResultRow row = (ResultRow)_request.getAttribute( WebKeys.SEARCH_CONTAINER_RESULT_ROW); if (row == null) { return; } WikiGroupServiceOverriddenConfiguration wikiGroupServiceOverriddenConfiguration = _wikiRequestHelper.getWikiGroupServiceOverriddenConfiguration(); if (!WikiPagePermissionChecker.contains( _wikiRequestHelper.getPermissionChecker(), wikiPage, ActionKeys.SUBSCRIBE) || (!wikiGroupServiceOverriddenConfiguration.emailPageAddedEnabled() && !wikiGroupServiceOverriddenConfiguration. emailPageUpdatedEnabled())) { return; } User user = _wikiRequestHelper.getUser(); if (SubscriptionLocalServiceUtil.isSubscribed( user.getCompanyId(), user.getUserId(), WikiPage.class.getName(), wikiPage.getResourcePrimKey())) { URLMenuItem urlMenuItem = new URLMenuItem(); urlMenuItem.setKey(WikiUIItemKeys.UNSUBSCRIBE); urlMenuItem.setLabel("unsubscribe"); LiferayPortletResponse liferayPortletResponse = _wikiRequestHelper.getLiferayPortletResponse(); PortletURL portletURL = liferayPortletResponse.createActionURL(); portletURL.setParameter( ActionRequest.ACTION_NAME, "/wiki/edit_page"); portletURL.setParameter(Constants.CMD, Constants.UNSUBSCRIBE); portletURL.setParameter( "redirect", _wikiRequestHelper.getCurrentURL()); portletURL.setParameter( "nodeId", String.valueOf(wikiPage.getNodeId())); portletURL.setParameter( "title", HtmlUtil.unescape(wikiPage.getTitle())); urlMenuItem.setURL(portletURL.toString()); menuItems.add(urlMenuItem); } else { URLMenuItem urlMenuItem = new URLMenuItem(); urlMenuItem.setKey(WikiUIItemKeys.SUBSCRIBE); urlMenuItem.setLabel("subscribe"); LiferayPortletResponse liferayPortletResponse = _wikiRequestHelper.getLiferayPortletResponse(); PortletURL portletURL = liferayPortletResponse.createActionURL(); portletURL.setParameter( ActionRequest.ACTION_NAME, "/wiki/edit_page"); portletURL.setParameter(Constants.CMD, Constants.SUBSCRIBE); portletURL.setParameter( "redirect", _wikiRequestHelper.getCurrentURL()); portletURL.setParameter( "nodeId", String.valueOf(wikiPage.getNodeId())); portletURL.setParameter( "title", HtmlUtil.unescape(wikiPage.getTitle())); urlMenuItem.setURL(portletURL.toString()); menuItems.add(urlMenuItem); } } protected boolean isCopyPasteEnabled(WikiPage wikiPage) throws PortalException { if (!WikiPagePermissionChecker.contains( _wikiRequestHelper.getPermissionChecker(), wikiPage, ActionKeys.UPDATE)) { return false; } if (!WikiNodePermissionChecker.contains( _wikiRequestHelper.getPermissionChecker(), wikiPage.getNodeId(), ActionKeys.ADD_PAGE)) { return false; } return true; } private static final UUID _UUID = UUID.fromString( "628C435B-DB39-4E46-91DF-CEA763CF79F5"); private static final Log _log = LogFactoryUtil.getLog( DefaultWikiListPagesDisplayContext.class); private final HttpServletRequest _request; private final TrashHelper _trashHelper; private final WikiNode _wikiNode; private final WikiRequestHelper _wikiRequestHelper; }