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

com.liferay.knowledge.base.web.internal.display.context.EditKBArticleDisplayContext 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.frontend.taglib.clay.servlet.taglib.util.DropdownItem;
import com.liferay.frontend.taglib.clay.servlet.taglib.util.DropdownItemListBuilder;
import com.liferay.knowledge.base.configuration.KBGroupServiceConfiguration;
import com.liferay.knowledge.base.constants.KBArticleConstants;
import com.liferay.knowledge.base.constants.KBFolderConstants;
import com.liferay.knowledge.base.constants.KBPortletKeys;
import com.liferay.knowledge.base.model.KBArticle;
import com.liferay.knowledge.base.model.KBFolder;
import com.liferay.knowledge.base.model.KBTemplate;
import com.liferay.knowledge.base.service.KBFolderLocalServiceUtil;
import com.liferay.knowledge.base.util.KnowledgeBaseUtil;
import com.liferay.knowledge.base.web.internal.configuration.KBSectionPortletInstanceConfiguration;
import com.liferay.knowledge.base.web.internal.constants.KBWebKeys;
import com.liferay.knowledge.base.web.internal.util.AdminUtil;
import com.liferay.petra.string.StringBundler;
import com.liferay.petra.string.StringPool;
import com.liferay.portal.configuration.module.configuration.ConfigurationProviderUtil;
import com.liferay.portal.kernel.bean.BeanParamUtil;
import com.liferay.portal.kernel.bean.BeanPropertiesUtil;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.feature.flag.FeatureFlagManagerUtil;
import com.liferay.portal.kernel.language.LanguageUtil;
import com.liferay.portal.kernel.model.Portlet;
import com.liferay.portal.kernel.module.configuration.ConfigurationException;
import com.liferay.portal.kernel.portlet.LiferayPortletRequest;
import com.liferay.portal.kernel.portlet.LiferayPortletResponse;
import com.liferay.portal.kernel.portlet.PortletURLUtil;
import com.liferay.portal.kernel.portlet.url.builder.PortletURLBuilder;
import com.liferay.portal.kernel.service.PortletLocalServiceUtil;
import com.liferay.portal.kernel.service.WorkflowDefinitionLinkLocalServiceUtil;
import com.liferay.portal.kernel.theme.ThemeDisplay;
import com.liferay.portal.kernel.util.ArrayUtil;
import com.liferay.portal.kernel.util.Constants;
import com.liferay.portal.kernel.util.FastDateFormatConstants;
import com.liferay.portal.kernel.util.FastDateFormatFactoryUtil;
import com.liferay.portal.kernel.util.GetterUtil;
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.util.PropsValues;

import jakarta.portlet.PortletConfig;

import jakarta.servlet.http.HttpServletRequest;

import java.text.Format;

import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

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

	public EditKBArticleDisplayContext(
		KBGroupServiceConfiguration kbGroupServiceConfiguration,
		LiferayPortletRequest liferayPortletRequest,
		LiferayPortletResponse liferayPortletResponse,
		PortletConfig portletConfig) {

		_kbGroupServiceConfiguration = kbGroupServiceConfiguration;
		_liferayPortletRequest = liferayPortletRequest;
		_liferayPortletResponse = liferayPortletResponse;
		_portletConfig = portletConfig;

		_httpServletRequest = PortalUtil.getHttpServletRequest(
			liferayPortletRequest);
		_redirect = PortalUtil.escapeRedirect(
			ParamUtil.getString(
				liferayPortletRequest.getHttpServletRequest(), "redirect",
				String.valueOf(
					PortletURLUtil.getCurrent(
						liferayPortletRequest, liferayPortletResponse))));
		_themeDisplay = (ThemeDisplay)liferayPortletRequest.getAttribute(
			WebKeys.THEME_DISPLAY);
	}

	public Map getAvailableKBArticleSections()
		throws ConfigurationException {

		Map sections = new LinkedHashMap<>();

		KBSectionPortletInstanceConfiguration
			kbSectionPortletInstanceConfiguration =
				_getKBSectionPortletInstanceConfiguration();

		for (String section :
				kbSectionPortletInstanceConfiguration.
					adminKBArticleSections()) {

			sections.put(
				LanguageUtil.get(
					_liferayPortletRequest.getHttpServletRequest(), section),
				section);
		}

		return sections;
	}

	public String getCancelURL() {
		if (!FeatureFlagManagerUtil.isEnabled(
				_themeDisplay.getCompanyId(), "LPD-11003")) {

			return getRedirect();
		}

		long resourcePrimKey = getResourcePrimKey();

		if (resourcePrimKey == 0) {
			return getRedirect();
		}

		return PortletURLBuilder.createActionURL(
			_liferayPortletResponse
		).setActionName(
			"/knowledge_base/update_kb_article"
		).setCMD(
			Constants.CANCEL
		).setRedirect(
			getRedirect()
		).setParameter(
			"resourcePrimKey", resourcePrimKey
		).buildString();
	}

	public String getContent() {
		return BeanParamUtil.getString(
			getKBArticle(), _liferayPortletRequest, "content",
			BeanPropertiesUtil.getString(_getKBTemplate(), "content"));
	}

	public String getDatePickerFormattedDisplayDate() {
		KBArticle kbArticle = getKBArticle();

		if (kbArticle == null) {
			return StringPool.BLANK;
		}

		Format format = FastDateFormatFactoryUtil.getSimpleDateFormat(
			"yyyy-MM-dd HH:mm", _themeDisplay.getLocale(),
			_themeDisplay.getTimeZone());

		return format.format(kbArticle.getDisplayDate());
	}

	public List getEditKBArticleActionDropdownItems() {
		return DropdownItemListBuilder.add(
			dropdownItem -> {
				dropdownItem.put(
					"id",
					_liferayPortletResponse.getNamespace() + "publishItem");
				dropdownItem.setIcon("arrow-right-full");
				dropdownItem.setLabel(
					LanguageUtil.get(_httpServletRequest, "publish"));
			}
		).add(
			dropdownItem -> {
				dropdownItem.put(
					"id",
					_liferayPortletResponse.getNamespace() + "scheduleItem");
				dropdownItem.setIcon("date-time");
				dropdownItem.setLabel(
					LanguageUtil.get(
						_httpServletRequest, "schedule-publication"));
			}
		).build();
	}

	public String getFormCssClass() {
		if (!isPortletTitleBasedNavigation()) {
			return StringPool.BLANK;
		}

		return "class=\"container-fluid container-fluid-max-lg " +
			"container-form-lg\"";
	}

	public String getHeaderTitle() {
		KBArticle kbArticle = getKBArticle();

		if (kbArticle == null) {
			return LanguageUtil.get(
				_liferayPortletRequest.getHttpServletRequest(), "new-article");
		}

		return getKBArticleTitle();
	}

	public KBArticle getKBArticle() {
		if (_kbArticle != null) {
			return _kbArticle;
		}

		_kbArticle = (KBArticle)_liferayPortletRequest.getAttribute(
			KBWebKeys.KNOWLEDGE_BASE_KB_ARTICLE);

		return _kbArticle;
	}

	public long getKBArticleClassPK() {
		KBArticle kbArticle = getKBArticle();

		if (kbArticle == null) {
			return 0;
		}

		return kbArticle.getClassPK();
	}

	public String getKBArticleDescription() {
		KBArticle kbArticle = getKBArticle();

		if (kbArticle == null) {
			return StringPool.BLANK;
		}

		return kbArticle.getDescription();
	}

	public long getKBArticleId() {
		KBArticle kbArticle = getKBArticle();

		if (kbArticle == null) {
			return KBArticleConstants.DEFAULT_PARENT_RESOURCE_PRIM_KEY;
		}

		return kbArticle.getKbArticleId();
	}

	public String getKBArticleSourceURL() {
		KBArticle kbArticle = getKBArticle();

		if (kbArticle == null) {
			return StringPool.BLANK;
		}

		return kbArticle.getSourceURL();
	}

	public int getKBArticleStatus() {
		KBArticle kbArticle = getKBArticle();

		return kbArticle.getStatus();
	}

	public String getKBArticleTitle() {
		return BeanParamUtil.getString(
			getKBArticle(), _liferayPortletRequest, "title",
			BeanPropertiesUtil.getString(_getKBTemplate(), "title"));
	}

	public String getKBArticleURLTitle() {
		return BeanParamUtil.getString(
			getKBArticle(), _liferayPortletRequest, "urlTitle");
	}

	public String getKBArticleVersion() {
		KBArticle kbArticle = getKBArticle();

		return String.valueOf(kbArticle.getVersion());
	}

	public long getParentResourceClassNameId() {
		if (_parentResourceClassNameId != null) {
			return _parentResourceClassNameId;
		}

		_parentResourceClassNameId = BeanParamUtil.getLong(
			getKBArticle(), _liferayPortletRequest, "parentResourceClassNameId",
			PortalUtil.getClassNameId(KBFolderConstants.getClassName()));

		return _parentResourceClassNameId;
	}

	public long getParentResourcePrimKey() {
		if (_parentResourcePrimKey != null) {
			return _parentResourcePrimKey;
		}

		_parentResourcePrimKey = BeanParamUtil.getLong(
			getKBArticle(), _liferayPortletRequest, "parentResourcePrimKey",
			KBFolderConstants.DEFAULT_PARENT_FOLDER_ID);

		return _parentResourcePrimKey;
	}

	public String getPublishButtonLabel() {
		if (WorkflowDefinitionLinkLocalServiceUtil.hasWorkflowDefinitionLink(
				_themeDisplay.getCompanyId(), _themeDisplay.getScopeGroupId(),
				KBArticle.class.getName())) {

			return "submit-for-workflow";
		}

		return "publish";
	}

	public String getRedirect() {
		return _redirect;
	}

	public long getResourcePrimKey() {
		if (_resourcePrimKey != null) {
			return _resourcePrimKey;
		}

		_resourcePrimKey = BeanParamUtil.getLong(
			getKBArticle(), _liferayPortletRequest, "resourcePrimKey");

		return _resourcePrimKey;
	}

	public String getSaveButtonLabel() {
		if ((getKBArticle() == null) || isDraft() || isApproved()) {
			return "save-as-draft";
		}

		return "save";
	}

	public String getUpdateKBArticleURL() {
		return PortletURLBuilder.createActionURL(
			_liferayPortletResponse
		).setActionName(
			"/knowledge_base/update_kb_article"
		).setMVCPath(
			"/admin/common/edit_kb_article.jsp"
		).setCMD(
			() -> {
				if (getKBArticle() == null) {
					return Constants.ADD;
				}

				return Constants.UPDATE;
			}
		).setParameter(
			"parentResourceClassNameId", getParentResourceClassNameId()
		).setParameter(
			"parentResourcePrimKey", getParentResourcePrimKey()
		).setParameter(
			"resourcePrimKey", getResourcePrimKey()
		).buildString();
	}

	public String getURLTitlePrefix() throws PortalException {
		StringBundler sb = new StringBundler(4);

		sb.append("/-/");

		Portlet portlet = PortletLocalServiceUtil.getPortletById(
			KBPortletKeys.KNOWLEDGE_BASE_DISPLAY);

		sb.append(portlet.getFriendlyURLMapping());

		long kbFolderId = KnowledgeBaseUtil.getKBFolderId(
			getParentResourceClassNameId(), getParentResourcePrimKey());

		if (kbFolderId != KBFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
			KBFolder kbFolder = KBFolderLocalServiceUtil.getKBFolder(
				kbFolderId);

			sb.append(StringPool.SLASH);
			sb.append(kbFolder.getUrlTitle());
		}

		return StringUtil.shorten(sb.toString(), 40) + StringPool.SLASH;
	}

	public String getUserFormattedDisplayDateString() {
		KBArticle kbArticle = getKBArticle();

		if (kbArticle == null) {
			return StringPool.BLANK;
		}

		Format format = FastDateFormatFactoryUtil.getDateTime(
			FastDateFormatConstants.LONG, FastDateFormatConstants.SHORT,
			_themeDisplay.getLocale(), _themeDisplay.getTimeZone());

		return format.format(kbArticle.getDisplayDate());
	}

	public boolean hasKBArticleSections() throws ConfigurationException {
		KBSectionPortletInstanceConfiguration
			kbSectionPortletInstanceConfiguration =
				_getKBSectionPortletInstanceConfiguration();

		long kbFolderClassNameId = PortalUtil.getClassNameId(
			KBFolderConstants.getClassName());

		if (ArrayUtil.isNotEmpty(
				kbSectionPortletInstanceConfiguration.
					adminKBArticleSections()) &&
			(getParentResourceClassNameId() == kbFolderClassNameId)) {

			return true;
		}

		return false;
	}

	public boolean isApproved() {
		KBArticle kbArticle = getKBArticle();

		if ((kbArticle != null) && kbArticle.isApproved()) {
			return true;
		}

		return false;
	}

	public boolean isDraft() {
		KBArticle kbArticle = getKBArticle();

		if ((kbArticle != null) && kbArticle.isDraft()) {
			return true;
		}

		return false;
	}

	public boolean isHeaderVisible() {
		return isPortletTitleBasedNavigation();
	}

	public boolean isKBArticleSectionSelected(String section)
		throws ConfigurationException {

		return ArrayUtil.contains(_getKBArticleSections(), section);
	}

	public boolean isNavigationBarVisible() {
		if ((getKBArticle() != null) && isPortletTitleBasedNavigation()) {
			return true;
		}

		return false;
	}

	public boolean isNeverExpire() {
		if (_neverExpire != null) {
			return _neverExpire;
		}

		_neverExpire = ParamUtil.getBoolean(
			_httpServletRequest, "neverExpire", true);

		KBArticle kbArticle = getKBArticle();

		if ((kbArticle != null) && (kbArticle.getExpirationDate() != null)) {
			_neverExpire = false;
		}

		return _neverExpire;
	}

	public boolean isNeverReview() {
		if (_neverReview != null) {
			return _neverReview;
		}

		_neverReview = ParamUtil.getBoolean(
			_httpServletRequest, "neverReview", true);

		KBArticle kbArticle = getKBArticle();

		if ((kbArticle != null) && (kbArticle.getReviewDate() != null)) {
			_neverReview = false;
		}

		return _neverReview;
	}

	public boolean isPending() {
		KBArticle kbArticle = getKBArticle();

		if ((kbArticle != null) && kbArticle.isPending()) {
			return true;
		}

		return false;
	}

	public boolean isPortletTitleBasedNavigation() {
		return GetterUtil.getBoolean(
			_portletConfig.getInitParameter("portlet-title-based-navigation"));
	}

	public boolean isScheduled() {
		KBArticle kbArticle = getKBArticle();

		if ((kbArticle != null) && kbArticle.isScheduled()) {
			return true;
		}

		return false;
	}

	public boolean isSchedulerEnabled() {
		return PropsValues.SCHEDULER_ENABLED;
	}

	public boolean isSourceURLEnabled() {
		return _kbGroupServiceConfiguration.sourceURLEnabled();
	}

	public boolean isURLTitleDisabled() {
		KBArticle kbArticle = getKBArticle();

		if (kbArticle == null) {
			return false;
		}

		return true;
	}

	public boolean isWorkflowStatusVisible() {
		if ((getKBArticle() != null) && !isPortletTitleBasedNavigation()) {
			return true;
		}

		return false;
	}

	private String[] _getKBArticleSections() throws ConfigurationException {
		if (_sections != null) {
			return _sections;
		}

		KBSectionPortletInstanceConfiguration
			kbSectionPortletInstanceConfiguration =
				_getKBSectionPortletInstanceConfiguration();

		_sections = AdminUtil.unescapeSections(
			BeanPropertiesUtil.getString(
				getKBArticle(), "sections",
				StringUtil.merge(
					kbSectionPortletInstanceConfiguration.
						adminKBArticleSectionsDefault())));

		return _sections;
	}

	private KBSectionPortletInstanceConfiguration
			_getKBSectionPortletInstanceConfiguration()
		throws ConfigurationException {

		if (_kbSectionPortletInstanceConfiguration != null) {
			return _kbSectionPortletInstanceConfiguration;
		}

		_kbSectionPortletInstanceConfiguration =
			ConfigurationProviderUtil.getPortletInstanceConfiguration(
				KBSectionPortletInstanceConfiguration.class, _themeDisplay);

		return _kbSectionPortletInstanceConfiguration;
	}

	private KBTemplate _getKBTemplate() {
		if (_kbTemplate != null) {
			return _kbTemplate;
		}

		_kbTemplate = (KBTemplate)_liferayPortletRequest.getAttribute(
			KBWebKeys.KNOWLEDGE_BASE_KB_TEMPLATE);

		return _kbTemplate;
	}

	private final HttpServletRequest _httpServletRequest;
	private KBArticle _kbArticle;
	private final KBGroupServiceConfiguration _kbGroupServiceConfiguration;
	private KBSectionPortletInstanceConfiguration
		_kbSectionPortletInstanceConfiguration;
	private KBTemplate _kbTemplate;
	private final LiferayPortletRequest _liferayPortletRequest;
	private final LiferayPortletResponse _liferayPortletResponse;
	private Boolean _neverExpire;
	private Boolean _neverReview;
	private Long _parentResourceClassNameId;
	private Long _parentResourcePrimKey;
	private final PortletConfig _portletConfig;
	private final String _redirect;
	private Long _resourcePrimKey;
	private String[] _sections;
	private final ThemeDisplay _themeDisplay;

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy