diff --git a/ccm-cms-default-theme/src/main/resources/themes/librecms/templates/default.html.ftl b/ccm-cms-default-theme/src/main/resources/themes/librecms/templates/default.html.ftl index 285df7c02..a8c0dbf69 100644 --- a/ccm-cms-default-theme/src/main/resources/themes/librecms/templates/default.html.ftl +++ b/ccm-cms-default-theme/src/main/resources/themes/librecms/templates/default.html.ftl @@ -1,11 +1,21 @@ - Default Template + + Default Template -

This theme works.

-
${themeUrl}
+
+

This theme works.

+
+
application
+
${application}
+
themeUrl
+
${themeUrl}
+
view
+
${view!""}
+
+
\ No newline at end of file diff --git a/ccm-cms-default-theme/src/main/resources/themes/librecms/templates/index-page.html.ftl b/ccm-cms-default-theme/src/main/resources/themes/librecms/templates/index-page.html.ftl new file mode 100644 index 000000000..f66d6bc54 --- /dev/null +++ b/ccm-cms-default-theme/src/main/resources/themes/librecms/templates/index-page.html.ftl @@ -0,0 +1,22 @@ + + + + + + Default Template + + +
+

Index page

+

This theme works.

+
+
application
+
${application}
+
themeUrl
+
${themeUrl}
+
view
+
${view!""}
+
+
+ + \ No newline at end of file diff --git a/ccm-cms-default-theme/src/main/resources/themes/librecms/theme.json b/ccm-cms-default-theme/src/main/resources/themes/librecms/theme.json index 75e6a1900..a471bbb4e 100644 --- a/ccm-cms-default-theme/src/main/resources/themes/librecms/theme.json +++ b/ccm-cms-default-theme/src/main/resources/themes/librecms/theme.json @@ -55,6 +55,30 @@ ] } } + }, + "index-page": { + "description": { + "values": { + "value": [ + { + "lang": "en", + "value": "Template for the index page of a site." + } + ] + } + }, + "name": "index-page", + "path": "templates/index-page.html.ftl", + "title": { + "values": { + "value": [ + { + "lang": "en", + "value": "Index Page" + } + ] + } + } } }, @@ -62,6 +86,11 @@ "default": { "default": "default", "@default": "default" + }, + "pages": { + "index": "index-page", + "default": "default", + "@default": "default" } } } diff --git a/ccm-cms/src/main/java/org/librecms/pages/PageManager.java b/ccm-cms/src/main/java/org/librecms/pages/PageManager.java index f392649dd..5affe5f47 100644 --- a/ccm-cms/src/main/java/org/librecms/pages/PageManager.java +++ b/ccm-cms/src/main/java/org/librecms/pages/PageManager.java @@ -101,6 +101,7 @@ public class PageManager { return pageForCategory.get(); } else { final Page page = new Page(); + page.setDisplayName(category.getDisplayName()); pageRepo.save(page); categoryManager.addObjectToCategory(page, category, diff --git a/ccm-cms/src/main/java/org/librecms/ui/PageDetailsModel.java b/ccm-cms/src/main/java/org/librecms/ui/PageDetailsModel.java index c5cf7117a..1ca4b32f3 100644 --- a/ccm-cms/src/main/java/org/librecms/ui/PageDetailsModel.java +++ b/ccm-cms/src/main/java/org/librecms/ui/PageDetailsModel.java @@ -33,6 +33,8 @@ import javax.inject.Named; @Named("CmsPageDetailsModel") public class PageDetailsModel { + private String displayName; + private String site; private String categoryDomain; @@ -43,6 +45,14 @@ public class PageDetailsModel { private List pageProperties; + public String getDisplayName() { + return displayName; + } + + protected void setDisplayName(final String displayName) { + this.displayName = displayName; + } + public String getSite() { return site; } diff --git a/ccm-cms/src/main/java/org/librecms/ui/PageTreeNodeModel.java b/ccm-cms/src/main/java/org/librecms/ui/PageTreeNodeModel.java index 6c0daf3fd..1169fb37a 100644 --- a/ccm-cms/src/main/java/org/librecms/ui/PageTreeNodeModel.java +++ b/ccm-cms/src/main/java/org/librecms/ui/PageTreeNodeModel.java @@ -20,9 +20,7 @@ package org.librecms.ui; import java.util.ArrayList; import java.util.Collections; -import java.util.HashMap; import java.util.List; -import java.util.Map; /** * @@ -40,6 +38,8 @@ public class PageTreeNodeModel { private boolean pageAssigned; + private String displayName; + private List properties; public PageTreeNodeModel() { @@ -86,6 +86,14 @@ public class PageTreeNodeModel { public void setPageAssigned(final boolean pageAssigned) { this.pageAssigned = pageAssigned; } + + public String getDisplayName() { + return displayName; + } + + public void setDisplayName(final String displayName) { + this.displayName = displayName; + } public List getProperties() { return Collections.unmodifiableList(properties); diff --git a/ccm-cms/src/main/java/org/librecms/ui/PagesController.java b/ccm-cms/src/main/java/org/librecms/ui/PagesController.java index 2a07ea8c8..61f500282 100644 --- a/ccm-cms/src/main/java/org/librecms/ui/PagesController.java +++ b/ccm-cms/src/main/java/org/librecms/ui/PagesController.java @@ -360,6 +360,7 @@ public class PagesController { pageDetailsModel.setCategoryPath( categoryManager.getCategoryPath(category) ); + pageDetailsModel.setDisplayName(page.getDisplayName()); pageDetailsModel.setPageProperties( page .getProperties() @@ -373,6 +374,58 @@ public class PagesController { return "org/librecms/ui/cms/page-details.xhtml"; } + + @POST + @Path("/{pagesInstance}/{category:[\\w\\-@/]+}/@details") + @AuthorizationRequired + @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) + @Transactional(Transactional.TxType.REQUIRED) + public String updatePageDetails( + @PathParam("pagesInstance") final String pagesInstance, + @PathParam("category") final String categoryParam, + @FormParam("displayName") final String displayName + ) { + final Optional pagesResult = findPages(pagesInstance); + if (pagesResult.isEmpty()) { + return showPagesNotFound(pagesInstance); + } + final Pages pages = pagesResult.get(); + initPagesDetailsModel(pages); + + final Optional categoryResult; + if ("@root".equals(categoryParam)) { + categoryResult = categoryRepo.findByPath( + pages.getCategoryDomain(), + "/" + ); + } else { + categoryResult = categoryRepo.findByPath( + pages.getCategoryDomain(), + categoryParam + ); + } + + if (categoryResult.isEmpty()) { + models.put("categoryNotFound", true); + models.put( + "categoryDomain", pages.getCategoryDomain().getDomainKey() + ); + models.put("category", categoryParam); + return showPagesDetails(pagesInstance); + } + + final Category category = categoryResult.get(); + + final Page page = pageManager.findPageForCategory(category); + page.setDisplayName(displayName); + pageRepo.save(page); + + return String.format( + "redirect:/pages/%s/%s/@details", + pagesInstance, + categoryParam + ); + } @POST @Path("/{pagesInstance}/{category:[\\w\\-@/]+}/@remove") @@ -602,6 +655,7 @@ public class PagesController { node.setCategoryPath(categoryManager.getCategoryPath(category)); node.setCategoryName(category.getName()); node.setPageAssigned(pageResult.isPresent()); + node.setDisplayName(pageResult.map(Page::getDisplayName).orElse("")); node.setProperties( pageResult diff --git a/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/cms/page-details.xhtml b/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/cms/page-details.xhtml index 08d9b3841..8fe2df6a2 100644 --- a/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/cms/page-details.xhtml +++ b/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/cms/page-details.xhtml @@ -49,6 +49,73 @@ +

+ #{CmsAdminMessages['pages.page.details.displayname']}: + #{CmsPageDetailsModel.displayName} + +

+ + +