From 9ce12f9fd3d2415f0651b9c4b93216a82b060e98 Mon Sep 17 00:00:00 2001 From: Jens Pelzetter Date: Sun, 1 Dec 2019 13:05:23 +0100 Subject: [PATCH] Several bugfixes, some new data for data model for the theme engines, ported utils.ftl Former-commit-id: 15ac0bd916ea5556f1622c06355281786e82e9f5 --- .../pages/PageModelAdminPageController.java | 23 ++++---- .../arsdigita/cms/ui/pages/PageModelData.java | 34 ++++++++++++ .../cms/ui/pages/PagesAdminPage.java | 22 ++++++-- .../GreetingItemComponentRenderer.java | 24 ++++++--- .../org/librecms/pages/CmsPageRenderer.java | 7 ++- .../java/org/librecms/pages/PagesRouter.java | 13 +++++ .../resources/themes/freemarker/utils.ftl | 53 +++++++++++++++++-- 7 files changed, 152 insertions(+), 24 deletions(-) create mode 100644 ccm-cms/src/main/java/com/arsdigita/cms/ui/pages/PageModelData.java diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/pages/PageModelAdminPageController.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/pages/PageModelAdminPageController.java index ca58c393e..8a660ebc1 100644 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/pages/PageModelAdminPageController.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/pages/PageModelAdminPageController.java @@ -13,6 +13,7 @@ import org.librecms.pages.Pages; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; @@ -23,7 +24,7 @@ import javax.transaction.Transactional; * @author Jens Pelzetter */ @RequestScoped -public class PageModelAdminPageController { +class PageModelAdminPageController { @Inject private GlobalizationHelper globalizationHelper; @@ -32,19 +33,21 @@ public class PageModelAdminPageController { private PageModelRepository pageModelRepository; @Transactional(Transactional.TxType.REQUIRED) - public Map findDraftPageModelsByApplication( + protected List findDraftPageModelsByApplication( final Pages pages ) { final List pageModels = pageModelRepository .findDraftByApplication(pages); - final Map result = new HashMap<>(); - for (final PageModel pageModel : pageModels) { - result.put("pageModelId", pageModel.getPageModelId()); - final String title = globalizationHelper - .getValueFromLocalizedString(pageModel.getTitle()); - result.put("title", title); - } - + return pageModels.stream().map(this::buildPageModelData).collect( + Collectors.toList() + ); + } + + private PageModelData buildPageModelData(final PageModel fromPageModel) { + final PageModelData result = new PageModelData(); + result.setPageModelId(fromPageModel.getPageModelId()); + result.setTitle(globalizationHelper.getValueFromLocalizedString( + fromPageModel.getTitle())); return result; } diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/pages/PageModelData.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/pages/PageModelData.java new file mode 100644 index 000000000..36ad8c932 --- /dev/null +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/pages/PageModelData.java @@ -0,0 +1,34 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.arsdigita.cms.ui.pages; + +/** + * + * @author Jens Pelzetter + */ +class PageModelData { + + private long pageModelId; + + private String title; + + public long getPageModelId() { + return pageModelId; + } + + public void setPageModelId(long pageModelId) { + this.pageModelId = pageModelId; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + +} diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/pages/PagesAdminPage.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/pages/PagesAdminPage.java index 2bccfc5c0..ef287bcff 100644 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/pages/PagesAdminPage.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/pages/PagesAdminPage.java @@ -57,10 +57,11 @@ import org.librecms.pages.PageManager; import org.librecms.pages.PageRepository; import org.librecms.pages.Pages; -import java.util.Map; +import java.util.List; import java.util.Optional; import java.util.TooManyListenersException; + /** * * @author Jens Pelzetter @@ -68,19 +69,27 @@ import java.util.TooManyListenersException; public class PagesAdminPage extends CMSApplicationPage { private static final String INDEX_PAGE_MODEL_SELECT = "indexPageModelSelect"; + private static final String ITEM_PAGE_MODEL_SELECT = "itemPageModelSelect"; + private static final String INHERIT_PAGEMODEL = "--inherit--"; private final ParameterSingleSelectionModel selectedCategory; private final Tree categoryTree; + private final Label nothingSelectedLabel; + private final Form pageModelForm; + private final SingleSelect indexPageModelSelect; + private final SingleSelect itemPageModelSelect; + private final SaveCancelSection saveCancelSection; private Pages pagesInstance; + private PagesContextBar pagesContextBar; public PagesAdminPage() { @@ -282,9 +291,16 @@ public class PagesAdminPage extends CMSApplicationPage { // } final PageModelAdminPageController controller = CdiUtil.createCdiUtil() .findBean(PageModelAdminPageController.class); - final Map options = controller + final List pageModels = controller .findDraftPageModelsByApplication(pagesInstance); - for (final Map.Entry new IllegalArgumentException(String.format( - "No category with ID %d in the database.", - ((CcmObject) parameters.get(PARAMETER_CATEGORY)).getObjectId()))); + final Optional catResult = categoryRepo.findById( + ((CcmObject) parameters.get(PARAMETER_CATEGORY)).getObjectId() + ); + final Category category = catResult.orElseThrow( + () -> new IllegalArgumentException( + String.format( + "No category with ID %d in the database.", + ((CcmObject) parameters.get(PARAMETER_CATEGORY)) + .getObjectId() + ) + ) + ); +// final Category category = categoryRepo +// .findById(((CcmObject) parameters.get(PARAMETER_CATEGORY)) +// .getObjectId()) +// .orElseThrow(() -> new IllegalArgumentException(String.format( +// "No category with ID %d in the database.", +// ((CcmObject) parameters.get(PARAMETER_CATEGORY)).getObjectId()))); final Optional indexObj = categoryManager .getIndexObject(category) diff --git a/ccm-cms/src/main/java/org/librecms/pages/CmsPageRenderer.java b/ccm-cms/src/main/java/org/librecms/pages/CmsPageRenderer.java index 32b6c21de..677422a65 100644 --- a/ccm-cms/src/main/java/org/librecms/pages/CmsPageRenderer.java +++ b/ccm-cms/src/main/java/org/librecms/pages/CmsPageRenderer.java @@ -38,7 +38,12 @@ public class CmsPageRenderer extends AbstractPageRenderer { public Map renderPage(final Map parameters) { final Map result = new HashMap<>(); - + result.put("application", Pages.class.getName()); + if (parameters.containsKey(PagesRouter.SITE_INFO)) { + result.put( + PagesRouter.SITE_INFO, parameters.get(PagesRouter.SITE_INFO) + ); + } return result; } diff --git a/ccm-cms/src/main/java/org/librecms/pages/PagesRouter.java b/ccm-cms/src/main/java/org/librecms/pages/PagesRouter.java index 6edfc3378..4b6d51f63 100644 --- a/ccm-cms/src/main/java/org/librecms/pages/PagesRouter.java +++ b/ccm-cms/src/main/java/org/librecms/pages/PagesRouter.java @@ -75,6 +75,14 @@ import static org.librecms.pages.PagesConstants.*; @Path("/") public class PagesRouter { + protected static final String SITE_INFO = "siteInfo"; + + protected static final String SITE_INFO_NAME = "name"; + + protected static final String SITE_INFO_DOMAIN = "domain"; + + protected static final String SITE_INFO_HOST = "host"; + @Inject private CategoryRepository categoryRepo; @@ -636,6 +644,11 @@ public class PagesRouter { final String domain = uriInfo.getBaseUri().getHost(); final Pages pages = getPages(domain); + final Map siteInfo = new HashMap<>(); + siteInfo.put(SITE_INFO_HOST, uriInfo.getBaseUri().getHost()); + siteInfo.put(SITE_INFO_DOMAIN, pages.getSite().getDomainOfSite()); + siteInfo.put(SITE_INFO_NAME, pages.getSite().getDisplayName()); + parameters.put(SITE_INFO, siteInfo); final Category category = getCategory(domain, pages, pagePath); final Locale locale = new Locale(language); diff --git a/ccm-core/src/main/resources/themes/freemarker/utils.ftl b/ccm-core/src/main/resources/themes/freemarker/utils.ftl index 3773593e1..f18c888b4 100644 --- a/ccm-core/src/main/resources/themes/freemarker/utils.ftl +++ b/ccm-core/src/main/resources/themes/freemarker/utils.ftl @@ -12,13 +12,58 @@ <#--doc + + Not supported in 7.0.0 yet, will always return an empty string. + Get the title of the current page. - This will only work of the current page is a navigation page with a category - menu. + This will only work of the current page with a category tree @return The title of the current page --> <#function getPageTitle> - <#return title> - \ No newline at end of file + <#return ""> + + +<#--doc + Get the hostname from the sitebanner data. + + @return The host name of the site. +--> +<#function getSiteHostName> + <#return siteInfo.hostName> + + +<#--doc + Get the name of the site from the sitebanner data. + + @return The name of the site. +--> +<#function getSiteName> + <#return siteInfo.siteName> + + +<#--doc + A wrapper for the `_formatDateTime` function which adds missing numbers. + `_formatDateTime` uses Java APIs for formatting which don't work well with + incomplete dates. This function takes a date from the data model and checks + if a component (year, month, day, hour, minute, second) is missing. If the + the component is missing the function adds uses a default value of that + component. + + @param style The date format style from the theme manifest to use. + + @param date the date to format. + + @return The formatted date. +--> +<#function formatDateTime style date> + <#assign year = date.year!0> + <#assign month = date.month!0> + <#assign day = date.day!0> + <#assign hour = date.hour!0> + <#assign minute = date.minute!0> + <#assign second = date.second!0> + <#return _formatDateTime(style, year, month, day, hour, minute, second)> + +