/** * 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.util; import com.liferay.document.library.kernel.exception.NoSuchFileEntryException; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.json.JSONObject; 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.portletfilerepository.PortletFileRepositoryUtil; import com.liferay.portal.kernel.repository.model.FileEntry; import com.liferay.portal.kernel.service.UserLocalServiceUtil; import com.liferay.portal.kernel.util.HtmlUtil; import com.liferay.portal.kernel.util.StringBundler; import com.liferay.portal.kernel.util.StringPool; import com.liferay.portal.kernel.util.Validator; import com.liferay.social.kernel.model.SocialActivity; import com.liferay.social.kernel.model.SocialActivityConstants; import com.liferay.wiki.model.WikiNode; import com.liferay.wiki.model.WikiPage; import com.liferay.wiki.service.WikiPageLocalServiceUtil; import com.liferay.wiki.social.WikiActivityKeys; import java.util.ResourceBundle; import javax.portlet.PortletURL; /** * @author Adolfo PĂ©rez */ public class WikiSocialActivityHelper { public WikiSocialActivityHelper(WikiRequestHelper wikiRequestHelper) { _wikiRequestHelper = wikiRequestHelper; } public String getSocialActivityActionJSP( SocialActivity socialActivity, JSONObject extraDataJSONObject) throws PortalException { int type = socialActivity.getType(); long fileEntryId = extraDataJSONObject.getLong("fileEntryId"); FileEntry fileEntry = _fetchFileEntry(fileEntryId); if (((type == SocialActivityConstants.TYPE_ADD_ATTACHMENT) || (type == SocialActivityConstants.TYPE_MOVE_ATTACHMENT_TO_TRASH) || (type == SocialActivityConstants.TYPE_RESTORE_ATTACHMENT_FROM_TRASH)) && (fileEntry != null)) { return "/wiki/page_activity_attachment_action.jsp"; } else if ((type == SocialActivityConstants.TYPE_RESTORE_FROM_TRASH) || (type == WikiActivityKeys.ADD_PAGE) || (type == WikiActivityKeys.UPDATE_PAGE)) { return "/wiki/page_activity_page_action.jsp"; } else { return StringPool.BLANK; } } public String getSocialActivityDescription( WikiPage page, SocialActivity socialActivity, JSONObject extraDataJSONObject, ResourceBundle resourceBundle) throws PortalException { double version = extraDataJSONObject.getDouble("version", 0); WikiPage socialActivityWikiPage = null; if (version == 0) { socialActivityWikiPage = WikiPageLocalServiceUtil.fetchPage( page.getNodeId(), page.getTitle()); } else { socialActivityWikiPage = WikiPageLocalServiceUtil.fetchPage( page.getNodeId(), page.getTitle(), version); } User socialActivityUser = UserLocalServiceUtil.fetchUser( socialActivity.getUserId()); if (socialActivityUser == null) { socialActivityUser = UserLocalServiceUtil.getDefaultUser( socialActivity.getCompanyId()); } String userName = HtmlUtil.escape(socialActivityUser.getFullName()); if (Validator.isNull(userName)) { userName = "Liferay"; } int type = socialActivity.getType(); if ((type == SocialActivityConstants.TYPE_ADD_ATTACHMENT) || (type == SocialActivityConstants.TYPE_MOVE_ATTACHMENT_TO_TRASH) || (type == SocialActivityConstants.TYPE_RESTORE_ATTACHMENT_FROM_TRASH)) { String label = "x-added-the-attachment-x"; if (type == SocialActivityConstants.TYPE_MOVE_ATTACHMENT_TO_TRASH) { label = "x-removed-the-attachment-x"; } else if (type == SocialActivityConstants. TYPE_RESTORE_ATTACHMENT_FROM_TRASH) { label = "x-restored-the-attachment-x"; } String title = extraDataJSONObject.getString("fileEntryTitle"); long fileEntryId = extraDataJSONObject.getLong("fileEntryId"); String url = getDownloadURL(fileEntryId); String titleLink = getLink(title, type, url); return LanguageUtil.format( resourceBundle, label, new Object[] {userName, titleLink}, false); } else if (type == SocialActivityConstants.TYPE_ADD_COMMENT) { LiferayPortletResponse liferayPortletResponse = _wikiRequestHelper.getLiferayPortletResponse(); StringBundler sb = new StringBundler(4); sb.append(getPageURL(page)); sb.append("#"); sb.append(liferayPortletResponse.getNamespace()); sb.append("wikiCommentsPanel"); return LanguageUtil.format( resourceBundle, "x-added-a-comment", new Object[] {userName, sb.toString()}, false); } else if ((type == SocialActivityConstants.TYPE_MOVE_TO_TRASH) || (type == SocialActivityConstants.TYPE_RESTORE_FROM_TRASH) || (type == WikiActivityKeys.ADD_PAGE) || (type == WikiActivityKeys.UPDATE_PAGE)) { String pageURL = null; if (version == 0) { pageURL = getPageURL(socialActivityWikiPage); } else { pageURL = getPageURL(socialActivityWikiPage, version); } if (type == SocialActivityConstants.TYPE_MOVE_TO_TRASH) { return LanguageUtil.format( resourceBundle, "activity-wiki-page-move-to-trash", new Object[] {StringPool.BLANK, userName, page.getTitle()}, false); } else if (type == SocialActivityConstants.TYPE_RESTORE_FROM_TRASH) { String titleLink = getLink(page.getTitle(), type, pageURL); return LanguageUtil.format( resourceBundle, "activity-wiki-page-restore-from-trash", new Object[] {StringPool.BLANK, userName, titleLink}, false); } else if (type == WikiActivityKeys.ADD_PAGE) { String titleLink = getLink( page.getTitle(), type, pageURL.toString()); return LanguageUtil.format( resourceBundle, "x-added-the-page-x", new Object[] {userName, titleLink}, false); } else if (type == WikiActivityKeys.UPDATE_PAGE) { String title = String.valueOf(version); String url = pageURL; if ((socialActivityWikiPage != null) && socialActivityWikiPage.isMinorEdit()) { title += String.format( " (%s)", LanguageUtil.get(resourceBundle, "minor-edit")); } String titleURL = getLink(title, type, url); return LanguageUtil.format( resourceBundle, "x-updated-the-page-to-version-x", new Object[] {userName, titleURL}, false); } else { return StringPool.BLANK; } } else { return StringPool.BLANK; } } public String getSocialActivityIcon(SocialActivity socialActivity) { int type = socialActivity.getType(); if (type == SocialActivityConstants.TYPE_ADD_ATTACHMENT) { return "icon-paperclip"; } else if (type == SocialActivityConstants.TYPE_MOVE_ATTACHMENT_TO_TRASH) { return "icon-remove"; } else if (type == SocialActivityConstants.TYPE_MOVE_TO_TRASH) { return "icon-trash"; } else if (type == SocialActivityConstants. TYPE_RESTORE_ATTACHMENT_FROM_TRASH) { return "icon-undo"; } else if (type == SocialActivityConstants.TYPE_RESTORE_FROM_TRASH) { return "icon-undo"; } else if (type == WikiActivityKeys.ADD_PAGE) { return "icon-plus"; } else if (type == WikiActivityKeys.UPDATE_PAGE) { return "icon-edit"; } else { return StringPool.BLANK; } } public boolean isSocialActivitySupported(SocialActivity socialActivity) { int type = socialActivity.getType(); if ((type == SocialActivityConstants.TYPE_ADD_ATTACHMENT) || (type == SocialActivityConstants.TYPE_ADD_COMMENT) || (type == SocialActivityConstants.TYPE_MOVE_ATTACHMENT_TO_TRASH) || (type == SocialActivityConstants.TYPE_MOVE_TO_TRASH) || (type == SocialActivityConstants.TYPE_RESTORE_ATTACHMENT_FROM_TRASH) || (type == SocialActivityConstants.TYPE_RESTORE_FROM_TRASH) || (type == WikiActivityKeys.ADD_PAGE) || (type == WikiActivityKeys.UPDATE_PAGE)) { return true; } return false; } protected String getDownloadURL(long fileEntryId) throws PortalException { FileEntry fileEntry = _fetchFileEntry(fileEntryId); if (fileEntry != null) { return PortletFileRepositoryUtil.getDownloadPortletFileEntryURL( _wikiRequestHelper.getThemeDisplay(), fileEntry, StringPool.BLANK); } return StringPool.BLANK; } protected String getLink(String title, int type, String url) { if (Validator.isNull(url)) { return title; } StringBundler sb = new StringBundler(5); if ((type == SocialActivityConstants.TYPE_ADD_ATTACHMENT) || (type == SocialActivityConstants.TYPE_MOVE_ATTACHMENT_TO_TRASH) || (type == SocialActivityConstants.TYPE_RESTORE_ATTACHMENT_FROM_TRASH)) { sb.append("<a data-senna-off=\"true\" href='"); } else { sb.append("<a href='"); } sb.append(url); sb.append("'>"); sb.append(title); sb.append("</a>"); return sb.toString(); } protected String getPageURL(WikiPage page) { if (page == null) { return StringPool.BLANK; } WikiNode node = page.getNode(); LiferayPortletResponse liferayPortletResponse = _wikiRequestHelper.getLiferayPortletResponse(); PortletURL portletURL = liferayPortletResponse.createRenderURL(); portletURL.setParameter("mvcRenderCommandName", "/wiki/view"); portletURL.setParameter("nodeName", node.getName()); portletURL.setParameter("title", page.getTitle()); return portletURL.toString(); } protected String getPageURL(WikiPage page, double version) { if (page == null) { return null; } WikiNode node = page.getNode(); LiferayPortletResponse liferayPortletResponse = _wikiRequestHelper.getLiferayPortletResponse(); PortletURL portletURL = liferayPortletResponse.createRenderURL(); portletURL.setParameter("mvcRenderCommandName", "/wiki/view"); portletURL.setParameter("nodeName", node.getName()); portletURL.setParameter("title", page.getTitle()); portletURL.setParameter("version", String.valueOf(version)); return portletURL.toString(); } private FileEntry _fetchFileEntry(long fileEntryId) throws PortalException { try { return PortletFileRepositoryUtil.getPortletFileEntry(fileEntryId); } catch (NoSuchFileEntryException nsfee) { // LPS-52675 if (_log.isDebugEnabled()) { _log.debug(nsfee, nsfee); } } return null; } private static final Log _log = LogFactoryUtil.getLog( WikiSocialActivityHelper.class); private final WikiRequestHelper _wikiRequestHelper; }