From 32d79121a6325429e7d42db9b1c90928d60c93d7 Mon Sep 17 00:00:00 2001 From: Jens Pelzetter Date: Wed, 17 Feb 2021 20:01:31 +0100 Subject: [PATCH] Editing of localized titles and descriptions for categories in cms admin finished Former-commit-id: 066d873b5c70a49fdd24812f60f92045b8d444ff --- .../contentsections/CategoriesController.java | 362 +++++++++++------- .../categorysystems/categorysystem.xhtml | 1 + .../org/librecms/CmsAdminMessages.properties | 1 + .../librecms/CmsAdminMessages_de.properties | 1 + 4 files changed, 221 insertions(+), 144 deletions(-) diff --git a/ccm-cms/src/main/java/org/librecms/ui/contentsections/CategoriesController.java b/ccm-cms/src/main/java/org/librecms/ui/contentsections/CategoriesController.java index 574ace1cb..663270fcc 100644 --- a/ccm-cms/src/main/java/org/librecms/ui/contentsections/CategoriesController.java +++ b/ccm-cms/src/main/java/org/librecms/ui/contentsections/CategoriesController.java @@ -220,46 +220,16 @@ public class CategoriesController { public String addTitle( @PathParam("sectionIdentifier") final String sectionIdentifier, @PathParam("context") final String context, - @PathParam("categoryPath") final String categoryPath, + @PathParam("categoryPath") final String categoryPathParam, @FormParam("locale") final String localeParam, @FormParam("value") final String value ) { -// final Optional sectionResult = retrieveContentSection( -// sectionIdentifier); -// if (!sectionResult.isPresent()) { -// models.put("sectionIdentifier", sectionIdentifier); -// return "org/librecms/ui/contentsection/contentsection-not-found.xhtml"; -// } -// final ContentSection section = sectionResult.get(); -// -// final Optional domainResult = section -// .getDomains() -// .stream() -// .filter(domain -> domain.getContext().equals(context)) -// .findAny(); -// if (!domainResult.isPresent()) { -// models.put("sectionIdentifier", sectionIdentifier); -// models.put("context", context); -// return "org/librecms/ui/contentsection/categorysystems/categorysystem-not-found.xhtml"; -// } -// final Domain domain = domainResult.get().getDomain(); -// if (categoryPath.isEmpty()) { -// models.put("sectionIdentifier", sectionIdentifier); -// models.put("context", context); -// models.put("categoryPath", categoryPath); -// return "org/librecms/ui/contentsection/categorysystems/category-not-found.xhtml"; -// } -// final Category category; -// final Optional categoryResult = categoryRepo -// .findByPath(domain, categoryPath); -// if (!categoryResult.isPresent()) { -// models.put("sectionIdentifier", sectionIdentifier); -// models.put("context", context); -// models.put("categoryPath", categoryPath); -// return "org/librecms/ui/contentsection/categorysystems/category-not-found.xhtml"; -// } -// category = categoryResult.get(); - + final String categoryPath; + if (categoryPathParam == null || categoryPathParam.isEmpty()) { + categoryPath = "/"; + } else { + categoryPath = categoryPathParam; + } final RetrieveResult result = retrieveCategory( sectionIdentifier, context, categoryPath ); @@ -273,7 +243,7 @@ public class CategoriesController { "redirect:/%s/categorysystems/%s/categories/%s", sectionIdentifier, context, - categoryPath + categoryPathParam ); } else { return result.getResponseTemplate(); @@ -296,52 +266,22 @@ public class CategoriesController { } @POST - @Path("/{context}/categories/{categoryPath:(.+)?}/@title/edit") + @Path("/{context}/categories/{categoryPath:(.+)?}/@title/edit/{locale}") @AuthorizationRequired @Transactional(Transactional.TxType.REQUIRED) public String editTitle( @PathParam("sectionIdentifier") final String sectionIdentifier, @PathParam("context") final String context, - @PathParam("categoryPath") final String categoryPath, + @PathParam("categoryPath") final String categoryPathParam, @PathParam("locale") final String localeParam, @FormParam("value") final String value ) { -// final Optional sectionResult = retrieveContentSection( -// sectionIdentifier); -// if (!sectionResult.isPresent()) { -// models.put("sectionIdentifier", sectionIdentifier); -// return "org/librecms/ui/contentsection/contentsection-not-found.xhtml"; -// } -// final ContentSection section = sectionResult.get(); -// -// final Optional domainResult = section -// .getDomains() -// .stream() -// .filter(domain -> domain.getContext().equals(context)) -// .findAny(); -// if (!domainResult.isPresent()) { -// models.put("sectionIdentifier", sectionIdentifier); -// models.put("context", context); -// return "org/librecms/ui/contentsection/categorysystems/categorysystem-not-found.xhtml"; -// } -// final Domain domain = domainResult.get().getDomain(); -// if (categoryPath.isEmpty()) { -// models.put("sectionIdentifier", sectionIdentifier); -// models.put("context", context); -// models.put("categoryPath", categoryPath); -// return "org/librecms/ui/contentsection/categorysystems/category-not-found.xhtml"; -// } -// final Category category; -// final Optional categoryResult = categoryRepo -// .findByPath(domain, categoryPath); -// if (!categoryResult.isPresent()) { -// models.put("sectionIdentifier", sectionIdentifier); -// models.put("context", context); -// models.put("categoryPath", categoryPath); -// return "org/librecms/ui/contentsection/categorysystems/category-not-found.xhtml"; -// } -// category = categoryResult.get(); - + final String categoryPath; + if (categoryPathParam == null || categoryPathParam.isEmpty()) { + categoryPath = "/"; + } else { + categoryPath = categoryPathParam; + } final RetrieveResult result = retrieveCategory( sectionIdentifier, context, categoryPath ); @@ -355,7 +295,7 @@ public class CategoriesController { "redirect:/%s/categorysystems/%s/categories/%s", sectionIdentifier, context, - categoryPath + categoryPathParam ); } else { return result.getResponseTemplate(); @@ -382,46 +322,16 @@ public class CategoriesController { public String removeTitle( @PathParam("sectionIdentifier") final String sectionIdentifier, @PathParam("context") final String context, - @PathParam("categoryPath") final String categoryPath, + @PathParam("categoryPath") final String categoryPathParam, @PathParam("locale") final String localeParam, @FormParam("value") final String value ) { -// final Optional sectionResult = retrieveContentSection( -// sectionIdentifier); -// if (!sectionResult.isPresent()) { -// models.put("sectionIdentifier", sectionIdentifier); -// return "org/librecms/ui/contentsection/contentsection-not-found.xhtml"; -// } -// final ContentSection section = sectionResult.get(); -// -// final Optional domainResult = section -// .getDomains() -// .stream() -// .filter(domain -> domain.getContext().equals(context)) -// .findAny(); -// if (!domainResult.isPresent()) { -// models.put("sectionIdentifier", sectionIdentifier); -// models.put("context", context); -// return "org/librecms/ui/contentsection/categorysystems/categorysystem-not-found.xhtml"; -// } -// final Domain domain = domainResult.get().getDomain(); -// if (categoryPath.isEmpty()) { -// models.put("sectionIdentifier", sectionIdentifier); -// models.put("context", context); -// models.put("categoryPath", categoryPath); -// return "org/librecms/ui/contentsection/categorysystems/category-not-found.xhtml"; -// } -// final Category category; -// final Optional categoryResult = categoryRepo -// .findByPath(domain, categoryPath); -// if (!categoryResult.isPresent()) { -// models.put("sectionIdentifier", sectionIdentifier); -// models.put("context", context); -// models.put("categoryPath", categoryPath); -// return "org/librecms/ui/contentsection/categorysystems/category-not-found.xhtml"; -// } -// category = categoryResult.get(); - + final String categoryPath; + if (categoryPathParam == null || categoryPathParam.isEmpty()) { + categoryPath = "/"; + } else { + categoryPath = categoryPathParam; + } final RetrieveResult result = retrieveCategory( sectionIdentifier, context, categoryPath ); @@ -434,7 +344,166 @@ public class CategoriesController { "redirect:/%s/categorysystems/%s/categories/%s", sectionIdentifier, context, - categoryPath + categoryPathParam + ); + } else { + return result.getResponseTemplate(); + } + } + + @POST + @Path("/{context}/categories/@description/add") + @AuthorizationRequired + @Transactional(Transactional.TxType.REQUIRED) + public String addDescription( + @PathParam("sectionIdentifier") final String sectionIdentifier, + @PathParam("context") final String context, + @FormParam("locale") final String localeParam, + @FormParam("value") final String value + ) { + return addDescription( + sectionIdentifier, context, "", localeParam, value + ); + } + + @POST + @Path("/{context}/categories/{categoryPath:(.+)?}/@description/add") + @AuthorizationRequired + @Transactional(Transactional.TxType.REQUIRED) + public String addDescription( + @PathParam("sectionIdentifier") final String sectionIdentifier, + @PathParam("context") final String context, + @PathParam("categoryPath") final String categoryPathParam, + @FormParam("locale") final String localeParam, + @FormParam("value") final String value + ) { + final String categoryPath; + if (categoryPathParam == null || categoryPathParam.isEmpty()) { + categoryPath = "/"; + } else { + categoryPath = categoryPathParam; + } + final RetrieveResult result = retrieveCategory( + sectionIdentifier, context, categoryPath + ); + if (result.isSuccessful()) { + final Category category = result.getResult(); + final Locale locale = new Locale(localeParam); + category.getDescription().addValue(locale, value); + categoryRepo.save(category); + + return String.format( + "redirect:/%s/categorysystems/%s/categories/%s", + sectionIdentifier, + context, + categoryPathParam + ); + } else { + return result.getResponseTemplate(); + } + } + + @POST + @Path("/{context}/categories/@description/edit/{locale}") + @AuthorizationRequired + @Transactional(Transactional.TxType.REQUIRED) + public String editDescription( + @PathParam("sectionIdentifier") final String sectionIdentifier, + @PathParam("context") final String context, + @PathParam("locale") final String localeParam, + @FormParam("value") final String value + ) { + return editDescription( + sectionIdentifier, context, "", localeParam, value + ); + } + + @POST + @Path( + "/{context}/categories/{categoryPath:(.+)?}/@description/edit/{locale}" + ) + @AuthorizationRequired + @Transactional(Transactional.TxType.REQUIRED) + public String editDescription( + @PathParam("sectionIdentifier") final String sectionIdentifier, + @PathParam("context") final String context, + @PathParam("categoryPath") final String categoryPathParam, + @PathParam("locale") final String localeParam, + @FormParam("value") final String value + ) { + final String categoryPath; + if (categoryPathParam == null || categoryPathParam.isEmpty()) { + categoryPath = "/"; + } else { + categoryPath = categoryPathParam; + } + final RetrieveResult result = retrieveCategory( + sectionIdentifier, context, categoryPath + ); + if (result.isSuccessful()) { + final Category category = result.getResult(); + final Locale locale = new Locale(localeParam); + category.getDescription().addValue(locale, value); + categoryRepo.save(category); + + return String.format( + "redirect:/%s/categorysystems/%s/categories/%s", + sectionIdentifier, + context, + categoryPathParam + ); + } else { + return result.getResponseTemplate(); + } + } + + @POST + @Path("/{context}/categories/@description/remove/{locale}") + @AuthorizationRequired + @Transactional(Transactional.TxType.REQUIRED) + public String removeDescription( + @PathParam("sectionIdentifier") final String sectionIdentifier, + @PathParam("context") final String context, + @PathParam("locale") final String localeParam, + @FormParam("value") final String value + ) { + return removeDescription( + sectionIdentifier, context, "", localeParam, value + ); + } + + @POST + @Path( + "/{context}/categories/{categoryPath:(.+)?}/@description/remove/{locale}" + ) + @AuthorizationRequired + @Transactional(Transactional.TxType.REQUIRED) + public String removeDescription( + @PathParam("sectionIdentifier") final String sectionIdentifier, + @PathParam("context") final String context, + @PathParam("categoryPath") final String categoryPathParam, + @PathParam("locale") final String localeParam, + @FormParam("value") final String value + ) { + final String categoryPath; + if (categoryPathParam == null || categoryPathParam.isEmpty()) { + categoryPath = "/"; + } else { + categoryPath = categoryPathParam; + } + final RetrieveResult result = retrieveCategory( + sectionIdentifier, context, categoryPath + ); + if (result.isSuccessful()) { + final Category category = result.getResult(); + final Locale locale = new Locale(localeParam); + category.getDescription().removeValue(locale); + categoryRepo.save(category); + return String.format( + "redirect:/%s/categorysystems/%s/categories/%s", + sectionIdentifier, + context, + categoryPathParam ); } else { return result.getResponseTemplate(); @@ -961,7 +1030,12 @@ public class CategoriesController { .map(this::buildCategorizedObjectModel) .collect(Collectors.toList()) ); - model.setPath(categoryManager.getCategoryPath(category)); + final String categoryPath = categoryManager.getCategoryPath(category); + if ("/".equals(categoryPath)) { + model.setPath(""); + } else { + model.setPath(categoryPath); + } model.setSubCategories( category .getSubCategories() @@ -982,52 +1056,52 @@ public class CategoriesController { .getAvailableLocales(); model.setLocalizedTitles( category - .getTitle() - .getValues() - .entrySet() - .stream() - .collect( - Collectors.toMap( - entry -> entry.getKey().toString(), - entry -> entry.getValue() + .getTitle() + .getValues() + .entrySet() + .stream() + .collect( + Collectors.toMap( + entry -> entry.getKey().toString(), + entry -> entry.getValue() + ) ) - ) ); final Set titleLocales = category .getTitle() .getAvailableLocales(); model.setUnusedTitleLocales( availableLocales - .stream() - .filter(locale -> !titleLocales.contains(locale)) - .map(Locale::toString) - .collect(Collectors.toList()) + .stream() + .filter(locale -> !titleLocales.contains(locale)) + .map(Locale::toString) + .collect(Collectors.toList()) ); - + model.setLocalizedDescriptions( category - .getDescription() - .getValues() - .entrySet() - .stream() - .collect( - Collectors.toMap( - entry -> entry.getKey().toString(), - entry -> entry.getValue() + .getDescription() + .getValues() + .entrySet() + .stream() + .collect( + Collectors.toMap( + entry -> entry.getKey().toString(), + entry -> entry.getValue() + ) ) - ) ); final Set descriptionLocales = category .getDescription() .getAvailableLocales(); model.setUnusedDescriptionLocales( availableLocales - .stream() - .filter(locale -> !descriptionLocales.contains(locale)) - .map(Locale::toString) - .collect(Collectors.toList()) + .stream() + .filter(locale -> !descriptionLocales.contains(locale)) + .map(Locale::toString) + .collect(Collectors.toList()) ); - + return model; } diff --git a/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/contentsection/categorysystems/categorysystem.xhtml b/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/contentsection/categorysystems/categorysystem.xhtml index 3a4619575..f96ebf00e 100644 --- a/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/contentsection/categorysystems/categorysystem.xhtml +++ b/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/contentsection/categorysystems/categorysystem.xhtml @@ -260,6 +260,7 @@ tableValueHeading="#{CmsAdminMessages['contentsection.categorysystems.category.descriptions.value.heading']}" title="#{CmsAdminMessages['contentsection.categorysystems.category.descriptions.title']}" unusedLocales="#{CategorySystemModel.selectedCategory.unusedDescriptionLocales}" + useTextarea="true" values="#{CategorySystemModel.selectedCategory.localizedDescriptions}" /> diff --git a/ccm-cms/src/main/resources/org/librecms/CmsAdminMessages.properties b/ccm-cms/src/main/resources/org/librecms/CmsAdminMessages.properties index 19669de4e..4f84feb2e 100644 --- a/ccm-cms/src/main/resources/org/librecms/CmsAdminMessages.properties +++ b/ccm-cms/src/main/resources/org/librecms/CmsAdminMessages.properties @@ -230,3 +230,4 @@ contentsection.categorysystems.category.descriptions.delete.title=Confirm remova contentsection.categorysystems.category.descriptions.add.add.title=Add localized description contentsection.categorysystems.category.titles.value.heading=Localized title contentsection.categorysystems.category.descriptions.value.heading=Localized description +contentsection.categorysystems.category.descriptions.title=Localized Descriptions diff --git a/ccm-cms/src/main/resources/org/librecms/CmsAdminMessages_de.properties b/ccm-cms/src/main/resources/org/librecms/CmsAdminMessages_de.properties index 18675f92b..09a9301e9 100644 --- a/ccm-cms/src/main/resources/org/librecms/CmsAdminMessages_de.properties +++ b/ccm-cms/src/main/resources/org/librecms/CmsAdminMessages_de.properties @@ -231,3 +231,4 @@ contentsection.categorysystems.category.descriptions.delete.description=Entferne contentsection.categorysystems.category.descriptions.locale.description=Lokalisierte Beschreibungen contentsection.categorysystems.category.titles.value.heading=Lokalisierter Titel contentsection.categorysystems.category.descriptions.value.heading=Lokalisierte Beschreibung +contentsection.categorysystems.category.descriptions.title=Lokaliserte Beschreibungen