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

com.liferay.message.boards.web.internal.display.context.MBNavigationDisplayContext Maven / Gradle / Ivy

/**
 * 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.message.boards.web.internal.display.context;

import com.liferay.frontend.taglib.clay.servlet.taglib.util.NavigationItem;
import com.liferay.frontend.taglib.clay.servlet.taglib.util.NavigationItemListBuilder;
import com.liferay.message.boards.constants.MBPortletKeys;
import com.liferay.message.boards.settings.MBGroupServiceSettings;
import com.liferay.message.boards.web.internal.security.permission.MBResourcePermission;
import com.liferay.petra.string.StringPool;
import com.liferay.portal.kernel.language.LanguageUtil;
import com.liferay.portal.kernel.portlet.url.builder.PortletURLBuilder;
import com.liferay.portal.kernel.security.permission.ActionKeys;
import com.liferay.portal.kernel.theme.PortletDisplay;
import com.liferay.portal.kernel.theme.ThemeDisplay;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.portal.kernel.util.WebKeys;

import java.util.List;
import java.util.Objects;

import javax.portlet.PortletURL;
import javax.portlet.RenderResponse;

import javax.servlet.http.HttpServletRequest;

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

	public MBNavigationDisplayContext(
		HttpServletRequest httpServletRequest,
		MBGroupServiceSettings mbGroupServiceSettings,
		RenderResponse renderResponse) {

		_httpServletRequest = httpServletRequest;
		_mbGroupServiceSettings = mbGroupServiceSettings;
		_renderResponse = renderResponse;

		_mvcRenderCommandName = ParamUtil.getString(
			httpServletRequest, "mvcRenderCommandName", "/message_boards/view");
		_themeDisplay = (ThemeDisplay)httpServletRequest.getAttribute(
			WebKeys.THEME_DISPLAY);
	}

	public List getNavigationItems() {
		return NavigationItemListBuilder.add(
			navigationItem -> {
				navigationItem.setActive(
					_isViewCategoriesNavigationItemActive());
				navigationItem.setHref(_getViewCategoriesPortletURL());

				if (_isMBPortlet()) {
					navigationItem.setLabel(
						LanguageUtil.get(_httpServletRequest, "categories"));
				}
				else {
					navigationItem.setLabel(
						LanguageUtil.get(_httpServletRequest, "content"));
				}
			}
		).add(
			this::_isMBPortlet,
			navigationItem -> {
				navigationItem.setActive(
					_isViewRecentPostsNavigationItemActive());
				navigationItem.setHref(_getViewRecentPostsPortletURL());
				navigationItem.setLabel(
					LanguageUtil.get(_httpServletRequest, "recent-posts"));
			}
		).add(
			() -> _isMBPortlet() && _themeDisplay.isSignedIn(),
			navigationItem -> {
				navigationItem.setActive(_isViewMyPostsNavigationItemActive());
				navigationItem.setHref(_getViewMyPostsPortletURL());
				navigationItem.setLabel(
					LanguageUtil.get(_httpServletRequest, "my-posts"));
			}
		).add(
			() ->
				_isMBPortlet() && _themeDisplay.isSignedIn() &&
				(_mbGroupServiceSettings.isEmailMessageAddedEnabled() ||
				 _mbGroupServiceSettings.isEmailMessageUpdatedEnabled()),
			navigationItem -> {
				navigationItem.setActive(
					_isViewMySubscriptionsNavigationItemActive());
				navigationItem.setHref(_getViewMySubscriptionsPortletURL());
				navigationItem.setLabel(
					LanguageUtil.get(_httpServletRequest, "my-subscriptions"));
			}
		).add(
			navigationItem -> {
				navigationItem.setActive(
					_isViewStatisticsNavigationItemActive());
				navigationItem.setHref(_getViewStatisticsPortletURL());
				navigationItem.setLabel(
					LanguageUtil.get(_httpServletRequest, "statistics"));
			}
		).add(
			() ->
				!_isMBPortlet() &&
				MBResourcePermission.contains(
					_themeDisplay.getPermissionChecker(),
					_themeDisplay.getScopeGroupId(), ActionKeys.BAN_USER),
			navigationItem -> {
				navigationItem.setActive(
					_isViewBannedUsersNavigationItemActive());
				navigationItem.setHref(_getViewBannedUsersPortletURL());
				navigationItem.setLabel(
					LanguageUtil.get(_httpServletRequest, "banned-users"));
			}
		).build();
	}

	public boolean isInverted() {
		return !_isMBPortlet();
	}

	public boolean isShowAlert() {
		return _isMBPortlet();
	}

	private PortletURL _getViewBannedUsersPortletURL() {
		return PortletURLBuilder.createRenderURL(
			_renderResponse
		).setMVCRenderCommandName(
			"/message_boards_admin/view_banned_users"
		).buildPortletURL();
	}

	private PortletURL _getViewCategoriesPortletURL() {
		return PortletURLBuilder.createRenderURL(
			_renderResponse
		).setMVCRenderCommandName(
			"/message_boards/view"
		).setParameter(
			"tag", StringPool.BLANK
		).buildPortletURL();
	}

	private PortletURL _getViewMyPostsPortletURL() {
		return PortletURLBuilder.createRenderURL(
			_renderResponse
		).setMVCRenderCommandName(
			"/message_boards/view_my_posts"
		).buildPortletURL();
	}

	private PortletURL _getViewMySubscriptionsPortletURL() {
		return PortletURLBuilder.createRenderURL(
			_renderResponse
		).setMVCRenderCommandName(
			"/message_boards/view_my_subscriptions"
		).buildPortletURL();
	}

	private PortletURL _getViewRecentPostsPortletURL() {
		return PortletURLBuilder.createRenderURL(
			_renderResponse
		).setMVCRenderCommandName(
			"/message_boards/view_recent_posts"
		).buildPortletURL();
	}

	private PortletURL _getViewStatisticsPortletURL() {
		return PortletURLBuilder.createRenderURL(
			_renderResponse
		).setMVCRenderCommandName(
			"/message_boards/view_statistics"
		).buildPortletURL();
	}

	private boolean _isMBPortlet() {
		PortletDisplay portletDisplay = _themeDisplay.getPortletDisplay();

		if (Objects.equals(
				portletDisplay.getPortletName(),
				MBPortletKeys.MESSAGE_BOARDS)) {

			return true;
		}

		return false;
	}

	private boolean _isViewBannedUsersNavigationItemActive() {
		if (_mvcRenderCommandName.equals(
				"/message_boards_admin/view_banned_users")) {

			return true;
		}

		return false;
	}

	private boolean _isViewCategoriesNavigationItemActive() {
		if (_mvcRenderCommandName.equals("/message_boards/edit_category") ||
			_mvcRenderCommandName.equals("/message_boards/edit_message") ||
			_mvcRenderCommandName.equals("/message_boards/view") ||
			_mvcRenderCommandName.equals("/message_boards/view_category") ||
			_mvcRenderCommandName.equals("/message_boards/view_message")) {

			return true;
		}

		return false;
	}

	private boolean _isViewMyPostsNavigationItemActive() {
		if (_mvcRenderCommandName.equals("/message_boards/view_my_posts")) {
			return true;
		}

		return false;
	}

	private boolean _isViewMySubscriptionsNavigationItemActive() {
		if (_mvcRenderCommandName.equals(
				"/message_boards/view_my_subscriptions")) {

			return true;
		}

		return false;
	}

	private boolean _isViewRecentPostsNavigationItemActive() {
		if (_mvcRenderCommandName.equals("/message_boards/view_recent_posts")) {
			return true;
		}

		return false;
	}

	private boolean _isViewStatisticsNavigationItemActive() {
		if (_mvcRenderCommandName.equals("/message_boards/view_statistics")) {
			return true;
		}

		return false;
	}

	private final HttpServletRequest _httpServletRequest;
	private final MBGroupServiceSettings _mbGroupServiceSettings;
	private final String _mvcRenderCommandName;
	private final RenderResponse _renderResponse;
	private final ThemeDisplay _themeDisplay;

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy