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 @@