All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.liferay.knowledge.base.web.internal.display.context.ViewKBSuggestionDisplayContext Maven / Gradle / Ivy

The newest version!
/**
 * SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com
 * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
 */

package com.liferay.knowledge.base.web.internal.display.context;

import com.liferay.knowledge.base.constants.KBActionKeys;
import com.liferay.knowledge.base.constants.KBCommentConstants;
import com.liferay.knowledge.base.constants.KBPortletKeys;
import com.liferay.knowledge.base.model.KBArticle;
import com.liferay.knowledge.base.model.KBComment;
import com.liferay.knowledge.base.service.KBArticleServiceUtil;
import com.liferay.knowledge.base.service.KBCommentServiceUtil;
import com.liferay.knowledge.base.web.internal.KBUtil;
import com.liferay.knowledge.base.web.internal.display.context.helper.KBArticleURLHelper;
import com.liferay.knowledge.base.web.internal.security.permission.resource.KBArticlePermission;
import com.liferay.knowledge.base.web.internal.security.permission.resource.KBCommentPermission;
import com.liferay.petra.string.StringPool;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.language.LanguageUtil;
import com.liferay.portal.kernel.portlet.url.builder.PortletURLBuilder;
import com.liferay.portal.kernel.theme.ThemeDisplay;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.portal.kernel.util.PortalUtil;
import com.liferay.portal.kernel.util.StringUtil;
import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.portal.kernel.workflow.WorkflowConstants;

import jakarta.portlet.PortletURL;
import jakarta.portlet.RenderRequest;
import jakarta.portlet.RenderResponse;

import jakarta.servlet.http.HttpServletRequest;

import java.util.Date;

/**
 * @author Adolfo Pérez
 */
public class ViewKBSuggestionDisplayContext {

	public ViewKBSuggestionDisplayContext(
		HttpServletRequest httpServletRequest, RenderRequest renderRequest,
		RenderResponse renderResponse, String rootPortletId) {

		_httpServletRequest = httpServletRequest;
		_renderRequest = renderRequest;
		_renderResponse = renderResponse;
		_rootPortletId = rootPortletId;

		_themeDisplay = (ThemeDisplay)httpServletRequest.getAttribute(
			WebKeys.THEME_DISPLAY);
	}

	public boolean canTransitionToNextStatus() throws PortalException {
		if (_hasUpdateKBArticlePermission() &&
			(_getNextStatus() != KBCommentConstants.STATUS_NONE)) {

			return true;
		}

		return false;
	}

	public boolean canTransitionToPreviousStatus() throws PortalException {
		if (_hasUpdateKBArticlePermission() &&
			(_getPreviousStatus() != KBCommentConstants.STATUS_NONE)) {

			return true;
		}

		return false;
	}

	public String getContainerCssClass() {
		if (_rootPortletId.equals(KBPortletKeys.KNOWLEDGE_BASE_ADMIN)) {
			return "container-form-lg";
		}

		if (_rootPortletId.equals(KBPortletKeys.KNOWLEDGE_BASE_ARTICLE)) {
			return StringPool.BLANK;
		}

		return "container-view";
	}

	public String getDeleteKBCommentURL() throws PortalException {
		return PortletURLBuilder.createActionURL(
			_renderResponse
		).setActionName(
			"/knowledge_base/delete_kb_comment"
		).setRedirect(
			getRedirect()
		).setParameter(
			"kbCommentId", getKBCommentId()
		).buildString();
	}

	public String getKBArticleTitle() throws PortalException {
		KBArticle kbArticle = _getKBArticle();

		return kbArticle.getTitle();
	}

	public String getKBArticleURL() throws PortalException {
		KBArticle kbArticle = _getKBArticle();

		KBArticleURLHelper kbArticleURLHelper = new KBArticleURLHelper(
			_renderRequest, _renderResponse);

		PortletURL viewKBArticleURL =
			kbArticleURLHelper.createViewWithRedirectURL(
				kbArticle, PortalUtil.getCurrentURL(_httpServletRequest));

		return viewKBArticleURL.toString();
	}

	public String getKBCommentContent() throws PortalException {
		KBComment kbComment = _getKBComment();

		return kbComment.getContent();
	}

	public long getKBCommentId() throws PortalException {
		KBComment kbComment = _getKBComment();

		return kbComment.getKbCommentId();
	}

	public String getKBCommentStatusLabel() throws PortalException {
		KBComment kbComment = _getKBComment();

		return KBUtil.getStatusLabel(kbComment.getStatus());
	}

	public String getKBCommentTitle() throws PortalException {
		KBComment kbComment = _getKBComment();

		return StringUtil.shorten(kbComment.getContent(), 100);
	}

	public long getKBCommentUserId() throws PortalException {
		KBComment kbComment = _getKBComment();

		return kbComment.getUserId();
	}

	public String getModifiedDateLabel() throws PortalException {
		KBComment kbComment = _getKBComment();

		Date modifiedDate = kbComment.getModifiedDate();

		String modifiedDateDescription = LanguageUtil.getTimeDescription(
			_httpServletRequest,
			System.currentTimeMillis() - modifiedDate.getTime(), true);

		return LanguageUtil.format(
			_httpServletRequest, "x-suggested-x-ago",
			new String[] {kbComment.getUserName(), modifiedDateDescription});
	}

	public String getNextStatusTransitionLabel() throws PortalException {
		return KBUtil.getStatusTransitionLabel(_getNextStatus());
	}

	public String getNextStatusTransitionURL() throws PortalException {
		return PortletURLBuilder.createActionURL(
			_renderResponse
		).setActionName(
			"/knowledge_base/update_kb_comment_status"
		).setRedirect(
			PortalUtil.getCurrentURL(_renderRequest)
		).setParameter(
			"kbCommentId", getKBCommentId()
		).setParameter(
			"kbCommentStatus", _getNextStatus()
		).buildString();
	}

	public String getPreviousStatusTransitionLabel() throws PortalException {
		return KBUtil.getStatusTransitionLabel(_getPreviousStatus());
	}

	public String getPreviousStatusTransitionURL() throws PortalException {
		return PortletURLBuilder.createActionURL(
			_renderResponse
		).setActionName(
			"/knowledge_base/update_kb_comment_status"
		).setRedirect(
			PortalUtil.getCurrentURL(_renderRequest)
		).setParameter(
			"kbCommentId", getKBCommentId()
		).setParameter(
			"kbCommentStatus", _getPreviousStatus()
		).buildString();
	}

	public String getRedirect() {
		return PortalUtil.escapeRedirect(
			ParamUtil.getString(
				_httpServletRequest, "redirect",
				PortalUtil.getCurrentURL(_renderRequest)));
	}

	public boolean hasDeleteKBCommentPermission() throws PortalException {
		return KBCommentPermission.contains(
			_themeDisplay.getPermissionChecker(), _getKBComment(),
			KBActionKeys.DELETE);
	}

	public boolean isKBCommentActionsVisible() throws PortalException {
		if (_hasUpdateKBArticlePermission() || hasDeleteKBCommentPermission()) {
			return true;
		}

		return false;
	}

	private KBArticle _getKBArticle() throws PortalException {
		if (_kbArticle != null) {
			return _kbArticle;
		}

		KBComment kbComment = _getKBComment();

		_kbArticle = KBArticleServiceUtil.getLatestKBArticle(
			kbComment.getClassPK(), WorkflowConstants.STATUS_ANY);

		return _kbArticle;
	}

	private KBComment _getKBComment() throws PortalException {
		if (_kbComment != null) {
			return _kbComment;
		}

		_kbComment = KBCommentServiceUtil.getKBComment(
			ParamUtil.getLong(_httpServletRequest, "kbCommentId"));

		return _kbComment;
	}

	private int _getNextStatus() throws PortalException {
		KBComment kbComment = _getKBComment();

		return KBUtil.getNextStatus(kbComment.getStatus());
	}

	private int _getPreviousStatus() throws PortalException {
		KBComment kbComment = _getKBComment();

		return KBUtil.getPreviousStatus(kbComment.getStatus());
	}

	private boolean _hasUpdateKBArticlePermission() throws PortalException {
		return KBArticlePermission.contains(
			_themeDisplay.getPermissionChecker(), _getKBArticle(),
			KBActionKeys.UPDATE);
	}

	private final HttpServletRequest _httpServletRequest;
	private KBArticle _kbArticle;
	private KBComment _kbComment;
	private final RenderRequest _renderRequest;
	private final RenderResponse _renderResponse;
	private final String _rootPortletId;
	private final ThemeDisplay _themeDisplay;

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy