From d6a0874654e276d95d27a373d4fbcdffda5f4561 Mon Sep 17 00:00:00 2001 From: Jens Pelzetter Date: Mon, 3 May 2021 20:40:06 +0200 Subject: [PATCH] Several bugfixes for the workflow widget --- .../documents/AbstractMvcAuthoringStep.java | 8 +++ .../documents/DocumentWorkflowController.java | 6 +- .../documents/SelectedDocumentModel.java | 6 ++ .../documents/TaskListEntry.java | 15 ++++ .../documents/authoringstep.xhtml | 68 ++++++++++--------- .../workflow/AssignableTaskManager.java | 2 +- 6 files changed, 70 insertions(+), 35 deletions(-) diff --git a/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/AbstractMvcAuthoringStep.java b/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/AbstractMvcAuthoringStep.java index 8ad84a26d..2d3cba3db 100644 --- a/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/AbstractMvcAuthoringStep.java +++ b/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/AbstractMvcAuthoringStep.java @@ -243,6 +243,7 @@ public abstract class AbstractMvcAuthoringStep implements MvcAuthoringStep { ); final String docPath = Optional .ofNullable(documentPath) + .map(this::withoutLeadingSlash) .orElseThrow( () -> new WebApplicationException( String.format( @@ -377,4 +378,11 @@ public abstract class AbstractMvcAuthoringStep implements MvcAuthoringStep { .orElse(""); } + private String withoutLeadingSlash(final String path) { + if (path.startsWith("/")) { + return path.substring(1); + } else { + return path; + } + } } diff --git a/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/DocumentWorkflowController.java b/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/DocumentWorkflowController.java index 7b7e0e10e..e972976d7 100644 --- a/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/DocumentWorkflowController.java +++ b/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/DocumentWorkflowController.java @@ -128,7 +128,7 @@ public class DocumentWorkflowController { * @return A redirect to the {@code returnUrl}. */ @POST - @Path("/tasks/${taskIdentifier}/@lock") + @Path("/tasks/{taskIdentifier}/@lock") @AuthorizationRequired @Transactional(Transactional.TxType.REQUIRED) public String lockTask( @@ -185,7 +185,7 @@ public class DocumentWorkflowController { * @return A redirect to the {@code returnUrl}. */ @POST - @Path("/tasks/${taskIdentifier}/@unlock") + @Path("/tasks/{taskIdentifier}/@unlock") @AuthorizationRequired @Transactional(Transactional.TxType.REQUIRED) public String unlockTask( @@ -243,7 +243,7 @@ public class DocumentWorkflowController { * @return A redirect to the {@code returnUrl}. */ @POST - @Path("/tasks/${taskIdentifier}/@finish") + @Path("/tasks/{taskIdentifier}/@finish") @AuthorizationRequired @Transactional(Transactional.TxType.REQUIRED) public String finishTask( diff --git a/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/SelectedDocumentModel.java b/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/SelectedDocumentModel.java index f2788cbfe..04107922c 100644 --- a/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/SelectedDocumentModel.java +++ b/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/SelectedDocumentModel.java @@ -298,6 +298,12 @@ public class SelectedDocumentModel { .orElse(false) ); entry.setLocked(task.isLocked()); + entry.setLockedByCurrentUser( + shiro + .getUser() + .map(user -> Objects.equals(user, task.getLockingUser())) + .orElse(false) + ); return entry; } diff --git a/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/TaskListEntry.java b/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/TaskListEntry.java index 8946f77e1..ebcabd1cd 100644 --- a/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/TaskListEntry.java +++ b/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/TaskListEntry.java @@ -69,6 +69,11 @@ public class TaskListEntry { * Is the task locked? */ private boolean locked; + + /** + * Is the task locked by the current user? + */ + private boolean lockedByCurrentUser; public String getTaskUuid() { return taskUuid; @@ -126,4 +131,14 @@ public class TaskListEntry { this.locked = locked; } + public boolean isLockedByCurrentUser() { + return lockedByCurrentUser; + } + + public void setLockedByCurrentUser(final boolean lockedByCurrentUser) { + this.lockedByCurrentUser = lockedByCurrentUser; + } + + + } diff --git a/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/contentsection/documents/authoringstep.xhtml b/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/contentsection/documents/authoringstep.xhtml index 9a6177890..aaf8c8db7 100644 --- a/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/contentsection/documents/authoringstep.xhtml +++ b/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/contentsection/documents/authoringstep.xhtml @@ -45,59 +45,65 @@
- + type="hidden" + value="#{CmsArticlePropertiesStep.stepPath}" /> + + type="submit"> + #{CmsAdminMessages['contentsection.document.authoring.workflow.start']} +
- -
- - -
-
- - -
+ +
+
+ + +
+
+ + +
+
+ value="#{CmsArticlePropertiesStep.stepPath}" />
+
-
+ + value="#{CmsArticlePropertiesStep.stepPath}" />
diff --git a/ccm-core/src/main/java/org/libreccm/workflow/AssignableTaskManager.java b/ccm-core/src/main/java/org/libreccm/workflow/AssignableTaskManager.java index 973338c9f..4a384c400 100644 --- a/ccm-core/src/main/java/org/libreccm/workflow/AssignableTaskManager.java +++ b/ccm-core/src/main/java/org/libreccm/workflow/AssignableTaskManager.java @@ -220,7 +220,7 @@ public class AssignableTaskManager implements Serializable { return query.getResultList(); } - + /** * Finishes a {@link AssignableTask}. *