From e81b3fbd4aa216372fed28c1b545eb958d42f129 Mon Sep 17 00:00:00 2001
From: Jens Pelzetter
Date: Wed, 18 Aug 2021 19:12:56 +0200
Subject: [PATCH] Republish working
---
.../org/librecms/lifecycle/Lifecycle.java | 11 ++++-
.../documents/PublishStep.java | 46 ++++++++++++++++++-
.../ui/contentsection/documents/publish.xhtml | 2 +-
3 files changed, 55 insertions(+), 4 deletions(-)
diff --git a/ccm-cms/src/main/java/org/librecms/lifecycle/Lifecycle.java b/ccm-cms/src/main/java/org/librecms/lifecycle/Lifecycle.java
index 03d00a657..5fd3b426e 100644
--- a/ccm-cms/src/main/java/org/librecms/lifecycle/Lifecycle.java
+++ b/ccm-cms/src/main/java/org/librecms/lifecycle/Lifecycle.java
@@ -27,6 +27,7 @@ import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Objects;
+import java.util.Optional;
import javax.persistence.Column;
import javax.persistence.Entity;
@@ -122,11 +123,17 @@ public class Lifecycle implements Identifiable, Serializable {
}
public Date getEndDateTime() {
- return new Date(endDateTime.getTime());
+ return Optional
+ .ofNullable(endDateTime)
+ .map(date -> new Date(date.getTime()))
+ .orElse(null);
}
public void setEndDateTime(final Date endDateTime) {
- this.endDateTime = new Date(endDateTime.getTime());
+ this.endDateTime = Optional
+ .ofNullable(endDateTime)
+ .map(date -> new Date(date.getTime()))
+ .orElse(null);
}
public String getListener() {
diff --git a/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/PublishStep.java b/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/PublishStep.java
index 83bf5d015..f63becf62 100644
--- a/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/PublishStep.java
+++ b/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/PublishStep.java
@@ -417,6 +417,50 @@ public class PublishStep extends AbstractMvcAuthoringStep {
return buildRedirectPathForStep();
}
+ @POST
+ @Path("/republish")
+ @Transactional(Transactional.TxType.REQUIRED)
+ public String republish() {
+ try {
+ init();
+ } catch (ContentSectionNotFoundException ex) {
+ return ex.showErrorMessage();
+ } catch (DocumentNotFoundException ex) {
+ return ex.showErrorMessage();
+ }
+
+ final ContentItem document = getDocument();
+ if (!itemManager.isLive(document)) {
+ models.put("republishNoneLive", true);
+ models.put("document", itemManager.getItemPath(document));
+ return TEMPLATE;
+ }
+
+ final ContentItem live = itemManager
+ .getLiveVersion(document, document.getClass())
+ .orElseThrow(
+ () -> new UnexpectedErrorException(
+ String.format(
+ "ContentItem %s is reported as live by "
+ + "ContentItemManager#isLive"
+ + "but has no live version.",
+ document.getUuid()
+ )
+ )
+ );
+
+ final Lifecycle lifecycle = live.getLifecycle();
+ final LifecycleDefinition definition = lifecycle.getDefinition();
+ final Date startDateTime = lifecycle.getStartDateTime();
+ final Date endDateTime = lifecycle.getEndDateTime();
+
+ itemManager.publish(
+ document, definition, startDateTime, endDateTime
+ );
+
+ return buildRedirectPathForStep();
+ }
+
/**
* Unpublishes the current content item.
*
@@ -433,7 +477,7 @@ public class PublishStep extends AbstractMvcAuthoringStep {
} catch (DocumentNotFoundException ex) {
return ex.showErrorMessage();
}
-
+
final ContentItem document = getDocument();
if (!itemPermissionChecker.canPublishItems(document)) {
return documentUi.showAccessDenied(
diff --git a/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/contentsection/documents/publish.xhtml b/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/contentsection/documents/publish.xhtml
index 4e771401d..ff65d2ead 100644
--- a/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/contentsection/documents/publish.xhtml
+++ b/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/contentsection/documents/publish.xhtml
@@ -38,7 +38,7 @@
-