diff --git a/dspace-api/src/main/java/org/dspace/xmlworkflow/state/actions/processingaction/AcceptEditRejectAction.java b/dspace-api/src/main/java/org/dspace/xmlworkflow/state/actions/processingaction/AcceptEditRejectAction.java index a3102768f1c8..0cbbee3b6019 100644 --- a/dspace-api/src/main/java/org/dspace/xmlworkflow/state/actions/processingaction/AcceptEditRejectAction.java +++ b/dspace-api/src/main/java/org/dspace/xmlworkflow/state/actions/processingaction/AcceptEditRejectAction.java @@ -9,13 +9,23 @@ import org.dspace.app.util.Util; import org.dspace.authorize.AuthorizeException; +import org.dspace.authorize.factory.AuthorizeServiceFactory; +import org.dspace.authorize.service.AuthorizeService; import org.dspace.content.DCDate; import org.dspace.content.MetadataSchema; +import org.dspace.content.factory.ContentServiceFactory; +import org.dspace.content.service.ItemService; +import org.dspace.core.Constants; import org.dspace.core.Context; import org.dspace.xmlworkflow.factory.XmlWorkflowServiceFactory; +import org.dspace.xmlworkflow.service.WorkflowRequirementsService; +import org.dspace.xmlworkflow.service.XmlWorkflowService; import org.dspace.xmlworkflow.state.Step; import org.dspace.xmlworkflow.storedcomponents.XmlWorkflowItem; +import org.dspace.xmlworkflow.storedcomponents.service.WorkflowItemRoleService; +import org.dspace.xmlworkflow.storedcomponents.service.XmlWorkflowItemService; import org.dspace.xmlworkflow.state.actions.ActionResult; +import org.dspace.content.Item; import javax.servlet.http.HttpServletRequest; import java.io.IOException; @@ -34,6 +44,7 @@ public class AcceptEditRejectAction extends ProcessingAction { public static final int MAIN_PAGE = 0; public static final int REJECT_PAGE = 1; + public static final int DELETE_PAGE = 2; //TODO: rename to AcceptAndEditMetadataAction @@ -51,6 +62,8 @@ public ActionResult execute(Context c, XmlWorkflowItem wfi, Step step, HttpServl return processMainPage(c, wfi, step, request); case REJECT_PAGE: return processRejectPage(c, wfi, step, request); + case DELETE_PAGE: + return processDeleteItem(c, wfi, step, request); } @@ -68,6 +81,10 @@ public ActionResult processMainPage(Context c, XmlWorkflowItem wfi, Step step, H request.setAttribute("page", REJECT_PAGE); // We have pressed reject item, so take the user to a page where he can reject return new ActionResult(ActionResult.TYPE.TYPE_PAGE); + } else if(request.getParameter("submit_delete") != null){ + request.setAttribute("page", DELETE_PAGE); + // We have pressed delete item + return new ActionResult(ActionResult.TYPE.TYPE_PAGE); } else { //We pressed the leave button so return to our submissions page return new ActionResult(ActionResult.TYPE.TYPE_SUBMISSION_PAGE); @@ -110,4 +127,43 @@ private void addApprovedProvenance(Context c, XmlWorkflowItem wfi) throws SQLExc itemService.addMetadata(c, wfi.getItem(), MetadataSchema.DC_SCHEMA, "description", "provenance", "en", provDescription); itemService.update(c, wfi.getItem()); } + + public ActionResult processDeleteItem(Context c, XmlWorkflowItem wfi, Step step, HttpServletRequest request) throws SQLException, AuthorizeException, IOException { + if(request.getParameter("submit_delete") != null){ + AuthorizeService authorizeService= AuthorizeServiceFactory.getInstance().getAuthorizeService(); + XmlWorkflowService xmlWorkflowService = XmlWorkflowServiceFactory.getInstance().getXmlWorkflowService(); + WorkflowRequirementsService workflowRequirementsService=XmlWorkflowServiceFactory.getInstance().getWorkflowRequirementsService(); + WorkflowItemRoleService workflowItemRoleService=XmlWorkflowServiceFactory.getInstance().getWorkflowItemRoleService(); + XmlWorkflowItemService xmlWorkflowItemService=XmlWorkflowServiceFactory.getInstance().getXmlWorkflowItemService(); + ItemService itemService= ContentServiceFactory.getInstance().getItemService(); + + Item item =wfi.getItem(); + //Check for permission + authorizeService.authorizeAction(c, item, Constants.DELETE); + + //Remove references from 'cwf_in_progress_user' and 'cwf_claimtask' tables + workflowRequirementsService.clearInProgressUsers(c, wfi); + xmlWorkflowService.deleteAllTasks(c,wfi); + + //Remove (if any) the workflowItemroles for this item + workflowItemRoleService.deleteForWorkflowItem(c, wfi); + + //Remove the workflowItem + xmlWorkflowItemService.deleteWrapper(c, wfi); + + //Shut down authorization system + c.turnOffAuthorisationSystem(); + //Remove item + itemService.delete(c,item); + c.restoreAuthSystemState(); + + c.commit(); + return new ActionResult(ActionResult.TYPE.TYPE_SUBMISSION_PAGE); + } + + //Cancel, go back to the main task page + request.setAttribute("page", MAIN_PAGE); + return new ActionResult(ActionResult.TYPE.TYPE_PAGE); + } + } diff --git a/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/xmlworkflow/actions/processingaction/AcceptEditRejectAction.java b/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/xmlworkflow/actions/processingaction/AcceptEditRejectAction.java index 855971ec8e78..8bc713b664ff 100644 --- a/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/xmlworkflow/actions/processingaction/AcceptEditRejectAction.java +++ b/dspace-xmlui/src/main/java/org/dspace/app/xmlui/aspect/xmlworkflow/actions/processingaction/AcceptEditRejectAction.java @@ -14,8 +14,11 @@ import org.dspace.app.xmlui.wing.WingException; import org.dspace.app.xmlui.wing.element.*; import org.dspace.authorize.AuthorizeException; +import org.dspace.authorize.factory.AuthorizeServiceFactory; +import org.dspace.authorize.service.AuthorizeService; import org.dspace.content.Collection; import org.dspace.content.Item; +import org.dspace.core.Constants; import org.dspace.xmlworkflow.state.actions.Action; import org.dspace.xmlworkflow.state.actions.processingaction.ReviewAction; import org.xml.sax.SAXException; @@ -40,6 +43,9 @@ public class AcceptEditRejectAction extends AbstractXMLUIAction { protected static final Message T_info2= message("xmlui.Submission.workflow.RejectTaskStep.info1"); + protected static final Message T_info3= + message("xmlui.XMLWorkflow.workflow.DeleteItemAction.info3"); + private static final Message T_HEAD = message("xmlui.XMLWorkflow.workflow.EditMetadataAction.head"); @@ -76,7 +82,10 @@ public class AcceptEditRejectAction extends AbstractXMLUIAction { protected static final Message T_cancel_submit = message("xmlui.general.cancel"); - + protected static final Message T_delete_help = + message("xmlui.XMLWorkflow.workflow.EditMetadataAction.delete_help"); + protected static final Message T_delete_submit = + message("xmlui.general.delete");; @Override public void addBody(Body body) throws SAXException, WingException, SQLException, IOException, AuthorizeException { Item item = workflowItem.getItem(); @@ -105,12 +114,16 @@ public void addBody(Body body) throws SAXException, WingException, SQLException, case ReviewAction.REJECT_PAGE: renderRejectPage(div); break; + case org.dspace.xmlworkflow.state.actions.processingaction.AcceptEditRejectAction.DELETE_PAGE: + renderDeletePage(div); + } div.addHidden("submission-continue").setValue(knot.getId()); } - private void renderMainPage(Division div) throws WingException { + private void renderMainPage(Division div) throws WingException, SQLException { + AuthorizeService authorizeService= AuthorizeServiceFactory.getInstance().getAuthorizeService(); Table table = div.addTable("workflow-actions", 1, 1); table.setHead(T_info1); @@ -123,8 +136,13 @@ private void renderMainPage(Division div) throws WingException { row = table.addRow(); row.addCellContent(T_reject_help); row.addCell().addButton("submit_reject").setValue(T_reject_submit); - - + + //Delete item + if (authorizeService.authorizeActionBoolean(context, workflowItem.getItem(), Constants.DELETE)) { + row = table.addRow(); + row.addCellContent(T_delete_help); + row.addCell().addButton("submit_delete").setValue(T_delete_submit); + } // Edit metadata row = table.addRow(); row.addCellContent(T_edit_help); @@ -140,7 +158,6 @@ private void renderMainPage(Division div) throws WingException { private void renderRejectPage(Division div) throws WingException { Request request = ObjectModelHelper.getRequest(objectModel); - List form = div.addList("reject-workflow",List.TYPE_FORM); form.addItem(T_info2); @@ -161,4 +178,17 @@ private void renderRejectPage(Division div) throws WingException { actions.addButton("submit_cancel").setValue(T_submit_cancel); } + + private void renderDeletePage(Division div) throws WingException { + Division divNotice = div.addDivision("general-message","notice failure"); + divNotice.addPara(T_info3); + + List form = div.addList("delete-workflow",List.TYPE_FORM); + + div.addHidden("page").setValue(org.dspace.xmlworkflow.state.actions.processingaction.AcceptEditRejectAction.DELETE_PAGE); + + org.dspace.app.xmlui.wing.element.Item actions = form.addItem(); + actions.addButton("submit_delete").setValue(T_delete_submit); + actions.addButton("submit_cancel").setValue(T_submit_cancel); + } } diff --git a/dspace-xmlui/src/main/resources/aspects/XMLWorkflow/i18n/messages.xml b/dspace-xmlui/src/main/resources/aspects/XMLWorkflow/i18n/messages.xml index e151b45bd93c..4a535bc98ca8 100644 --- a/dspace-xmlui/src/main/resources/aspects/XMLWorkflow/i18n/messages.xml +++ b/dspace-xmlui/src/main/resources/aspects/XMLWorkflow/i18n/messages.xml @@ -46,6 +46,7 @@ Approve item Select this option to change the item's metadata. Edit metadata + Delete workflow item Unknown state @@ -102,5 +103,7 @@ Score review Score review Score review + + Are you sure do you want to delete the item?