diff --git a/ccm-cms/src/main/java/org/librecms/pages/PagesController.java b/ccm-cms/src/main/java/org/librecms/pages/PagesController.java index e94519bc6..973a22bd9 100644 --- a/ccm-cms/src/main/java/org/librecms/pages/PagesController.java +++ b/ccm-cms/src/main/java/org/librecms/pages/PagesController.java @@ -246,6 +246,11 @@ public class PagesController { final Versions versions = generateFromPreviewParam(preview); final String language = determineLanguage(category, versions); + categoryModel.init( + pages.getCategoryDomain(), + category, + generateFromPreviewParam(preview).getContentItemVersion() + ); pageUrlModel.init(uriInfo); final String indexPage = String.format( @@ -277,6 +282,11 @@ public class PagesController { final Versions versions = generateFromPreviewParam(preview); final String language = determineLanguage(category, versions); + categoryModel.init( + pages.getCategoryDomain(), + category, + generateFromPreviewParam(preview).getContentItemVersion() + ); pageUrlModel.init(uriInfo); final String itemPage = String.format( @@ -309,6 +319,11 @@ public class PagesController { final Versions versions = generateFromPreviewParam(preview); final String language = determineLanguage(category, itemName, versions); + categoryModel.init( + pages.getCategoryDomain(), + category, + generateFromPreviewParam(preview).getContentItemVersion() + ); pageUrlModel.init(uriInfo); final String itemPage = String.format( @@ -549,7 +564,7 @@ public class PagesController { .sorted() .collect(Collectors.toList()) ); - pageUrlModel.init(uriInfo); + siteInfoModel.setDomain(site.getDomainOfSite()); siteInfoModel.setHost(domain); siteInfoModel.setName( @@ -557,8 +572,12 @@ public class PagesController { .ofNullable(site.getDisplayName()) .orElse("") ); + final Category category = getCategory(domain, pages, pagePath); categoryModel.init(pages.getCategoryDomain(), category, version); + + pageUrlModel.init(uriInfo); + final Page page = pageManager.findPageForCategory(category); pagePropertiesModel.setProperties(page.getProperties()); if (itemName.equals("index") || itemName.isBlank()) { diff --git a/ccm-cms/src/main/java/org/librecms/pages/models/BreadcrumbData.java b/ccm-cms/src/main/java/org/librecms/pages/models/BreadcrumbData.java new file mode 100644 index 000000000..df5f3b022 --- /dev/null +++ b/ccm-cms/src/main/java/org/librecms/pages/models/BreadcrumbData.java @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2023 LibreCCM Foundation. + * + * 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. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ +package org.librecms.pages.models; + +/** + * + * @author Jens Pelzetter + */ +public class BreadcrumbData { + + private String title; + + private String path; + + public String getTitle() { + return title; + } + + public void setTitle(final String title) { + this.title = title; + } + + public String getPath() { + return path; + } + + public void setPath(final String path) { + this.path = path; + } + +} diff --git a/ccm-cms/src/main/java/org/librecms/pages/models/PageUrlModel.java b/ccm-cms/src/main/java/org/librecms/pages/models/PageUrlModel.java index 3d6471606..d0738f563 100644 --- a/ccm-cms/src/main/java/org/librecms/pages/models/PageUrlModel.java +++ b/ccm-cms/src/main/java/org/librecms/pages/models/PageUrlModel.java @@ -19,13 +19,16 @@ package org.librecms.pages.models; import java.net.URI; +import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.stream.Collectors; import javax.enterprise.context.RequestScoped; +import javax.inject.Inject; import javax.inject.Named; import javax.ws.rs.core.PathSegment; import javax.ws.rs.core.UriBuilder; @@ -41,6 +44,9 @@ import javax.ws.rs.core.UriInfo; @Named("CmsPagesPageUrlModel") public class PageUrlModel { + @Inject + private CategoryModel categoryModel; + private String protocol; private String host; @@ -53,6 +59,8 @@ public class PageUrlModel { private String path; + private List breadcrumbs; + private String pageName; private String pageLocale; @@ -112,6 +120,10 @@ public class PageUrlModel { ) ) ); + + breadcrumbs = new ArrayList<>(); + breadcrumbs = buildBreadcrumbs(categoryModel.getCategoryTree()); + } public String getProtocol() { @@ -138,6 +150,10 @@ public class PageUrlModel { return path; } + public List getBreadcrumbs() { + return Collections.unmodifiableList(breadcrumbs); + } + public String getPageName() { return pageName; } @@ -212,5 +228,32 @@ public class PageUrlModel { Collectors.joining("&", "?", "") ); } + + private List buildBreadcrumbs( + final CategoryTreeNode category + ) { + return buildBreadcrumbs(category, new ArrayList<>()); + } + + private List buildBreadcrumbs( + final CategoryTreeNode category, + final List breadcrumbs + ) { + final Optional selected = category + .getSubCategories() + .stream() + .filter(subCat -> subCat.isSelected()) + .findAny(); + + if (selected.isPresent()) { + final BreadcrumbData breadcrumb = new BreadcrumbData(); + breadcrumb.setPath(selected.get().getCategoryPath()); + breadcrumb.setTitle(selected.get().getTitle()); + + buildBreadcrumbs(selected.get(), breadcrumbs); + } + + return breadcrumbs; + } }