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 @@
#function>
<#--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>
-#function>
\ No newline at end of file
+ <#return "">
+#function>
+
+<#--doc
+ Get the hostname from the sitebanner data.
+
+ @return The host name of the site.
+-->
+<#function getSiteHostName>
+ <#return siteInfo.hostName>
+#function>
+
+<#--doc
+ Get the name of the site from the sitebanner data.
+
+ @return The name of the site.
+-->
+<#function getSiteName>
+ <#return siteInfo.siteName>
+#function>
+
+<#--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)>
+#function>
+