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

com.liferay.template.web.internal.display.context.WidgetTemplatesTemplateViewUsagesDisplayContext Maven / Gradle / Ivy

There is a newer version: 1.0.95
Show 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.template.web.internal.display.context;

import com.liferay.dynamic.data.mapping.model.DDMTemplate;
import com.liferay.dynamic.data.mapping.service.DDMTemplateLocalServiceUtil;
import com.liferay.frontend.taglib.clay.servlet.taglib.util.VerticalNavItemList;
import com.liferay.frontend.taglib.clay.servlet.taglib.util.VerticalNavItemListBuilder;
import com.liferay.layout.page.template.constants.LayoutPageTemplateEntryTypeConstants;
import com.liferay.layout.page.template.model.LayoutPageTemplateEntry;
import com.liferay.layout.page.template.service.LayoutPageTemplateEntryLocalServiceUtil;
import com.liferay.petra.sql.dsl.DSLQueryFactoryUtil;
import com.liferay.petra.string.StringBundler;
import com.liferay.petra.string.StringPool;
import com.liferay.portal.kernel.dao.search.SearchContainer;
import com.liferay.portal.kernel.language.LanguageUtil;
import com.liferay.portal.kernel.model.Layout;
import com.liferay.portal.kernel.model.PortletPreferenceValueTable;
import com.liferay.portal.kernel.model.PortletPreferences;
import com.liferay.portal.kernel.model.PortletPreferencesTable;
import com.liferay.portal.kernel.service.PortletPreferenceValueLocalServiceUtil;
import com.liferay.portal.kernel.service.PortletPreferencesLocalServiceUtil;
import com.liferay.portal.kernel.theme.ThemeDisplay;
import com.liferay.portal.kernel.util.HtmlUtil;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.portlet.display.template.PortletDisplayTemplate;

import java.util.List;

import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;

import javax.servlet.http.HttpServletRequest;

/**
 * @author Eudaldo Alonso
 */
public class WidgetTemplatesTemplateViewUsagesDisplayContext {

	public WidgetTemplatesTemplateViewUsagesDisplayContext(
		HttpServletRequest httpServletRequest, RenderRequest renderRequest,
		RenderResponse renderResponse) {

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

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

	public DDMTemplate getDDMTemplate() {
		if (_ddmTemplate != null) {
			return _ddmTemplate;
		}

		_ddmTemplate = DDMTemplateLocalServiceUtil.fetchDDMTemplate(
			getDDMTemplateId());

		return _ddmTemplate;
	}

	public long getDDMTemplateId() {
		if (_ddmTemplateId != null) {
			return _ddmTemplateId;
		}

		_ddmTemplateId = ParamUtil.getLong(_renderRequest, "ddmTemplateId");

		return _ddmTemplateId;
	}

	public String getDDMTemplateUsageName(Layout layout) {
		if (layout == null) {
			return StringPool.DASH;
		}

		String ddmTemplateUsageName = layout.getName(_themeDisplay.getLocale());

		LayoutPageTemplateEntry layoutPageTemplateEntry =
			_fetchLayoutPageTemplateEntry(layout);

		if (layoutPageTemplateEntry != null) {
			ddmTemplateUsageName = layoutPageTemplateEntry.getName();
		}

		if (layout.isDraftLayout()) {
			return StringBundler.concat(
				ddmTemplateUsageName, " (",
				LanguageUtil.get(_themeDisplay.getLocale(), "draft"), ")");
		}

		return ddmTemplateUsageName;
	}

	public String getDDMTemplateUsageType(Layout layout) {
		if (layout == null) {
			return "embedded";
		}

		LayoutPageTemplateEntry layoutPageTemplateEntry =
			_fetchLayoutPageTemplateEntry(layout);

		if (layoutPageTemplateEntry != null) {
			if (layoutPageTemplateEntry.getType() ==
					LayoutPageTemplateEntryTypeConstants.BASIC) {

				return "page-template";
			}
			else if (layoutPageTemplateEntry.getType() ==
						LayoutPageTemplateEntryTypeConstants.DISPLAY_PAGE) {

				return "display-page-template";
			}
			else if (layoutPageTemplateEntry.getType() ==
						LayoutPageTemplateEntryTypeConstants.MASTER_LAYOUT) {

				return "master-page";
			}
		}

		return "page";
	}

	public String getRedirect() {
		if (_redirect != null) {
			return _redirect;
		}

		_redirect = ParamUtil.getString(_renderRequest, "redirect");

		return _redirect;
	}

	public int getUsagesCount() {
		return PortletPreferenceValueLocalServiceUtil.
			getPortletPreferenceValuesCount(
				_ddmTemplate.getCompanyId(), "displayStyle",
				PortletDisplayTemplate.DISPLAY_STYLE_PREFIX +
					HtmlUtil.escape(_ddmTemplate.getTemplateKey()));
	}

	public VerticalNavItemList getVerticalItemList() {
		return VerticalNavItemListBuilder.add(
			verticalNavItem -> {
				verticalNavItem.setActive(true);
				verticalNavItem.setId(
					LanguageUtil.format(
						_httpServletRequest, "all-x", getUsagesCount(), false));
				verticalNavItem.setLabel(
					LanguageUtil.format(
						_httpServletRequest, "all-x", getUsagesCount(), false));
			}
		).build();
	}

	public SearchContainer
		getWidgetTemplatesUsagesSearchContainer() {

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

		SearchContainer
			widgetTemplatesUsagesSearchContainer = new SearchContainer<>(
				_renderRequest, _renderResponse.createRenderURL(), null,
				"there-are-no-usages");

		DDMTemplate ddmTemplate = getDDMTemplate();

		widgetTemplatesUsagesSearchContainer.setResultsAndTotal(
			() -> _getWidgetTemplatesUsages(
				widgetTemplatesUsagesSearchContainer.getStart(),
				widgetTemplatesUsagesSearchContainer.getEnd()),
			PortletPreferenceValueLocalServiceUtil.
				getPortletPreferenceValuesCount(
					ddmTemplate.getCompanyId(), "displayStyle",
					PortletDisplayTemplate.DISPLAY_STYLE_PREFIX +
						HtmlUtil.escape(ddmTemplate.getTemplateKey())));

		_widgetTemplatesUsagesSearchContainer =
			widgetTemplatesUsagesSearchContainer;

		return _widgetTemplatesUsagesSearchContainer;
	}

	private LayoutPageTemplateEntry _fetchLayoutPageTemplateEntry(
		Layout layout) {

		long layoutPageTemplateEntryPlid = layout.getPlid();

		if (layout.isDraftLayout()) {
			layoutPageTemplateEntryPlid = layout.getClassPK();
		}

		return LayoutPageTemplateEntryLocalServiceUtil.
			fetchLayoutPageTemplateEntryByPlid(layoutPageTemplateEntryPlid);
	}

	private List _getWidgetTemplatesUsages(
		int start, int end) {

		DDMTemplate ddmTemplate = getDDMTemplate();

		return PortletPreferencesLocalServiceUtil.dslQuery(
			DSLQueryFactoryUtil.select(
				PortletPreferencesTable.INSTANCE
			).from(
				PortletPreferencesTable.INSTANCE
			).innerJoinON(
				PortletPreferenceValueTable.INSTANCE,
				PortletPreferencesTable.INSTANCE.portletPreferencesId.eq(
					PortletPreferenceValueTable.INSTANCE.portletPreferencesId)
			).where(
				PortletPreferenceValueTable.INSTANCE.companyId.eq(
					_themeDisplay.getCompanyId()
				).and(
					PortletPreferenceValueTable.INSTANCE.name.eq("displayStyle")
				).and(
					PortletPreferenceValueTable.INSTANCE.smallValue.eq(
						PortletDisplayTemplate.DISPLAY_STYLE_PREFIX +
							HtmlUtil.escape(ddmTemplate.getTemplateKey()))
				)
			).limit(
				start, end
			));
	}

	private DDMTemplate _ddmTemplate;
	private Long _ddmTemplateId;
	private final HttpServletRequest _httpServletRequest;
	private String _redirect;
	private final RenderRequest _renderRequest;
	private final RenderResponse _renderResponse;
	private final ThemeDisplay _themeDisplay;
	private SearchContainer
		_widgetTemplatesUsagesSearchContainer;

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy