diff --git a/config/alfresco/web-client-config-wcm-actions.xml b/config/alfresco/web-client-config-wcm-actions.xml index 6fe4d2df8c..d201f94a29 100644 --- a/config/alfresco/web-client-config-wcm-actions.xml +++ b/config/alfresco/web-client-config-wcm-actions.xml @@ -301,6 +301,7 @@ + diff --git a/source/java/org/alfresco/web/bean/wcm/AVMBrowseBean.java b/source/java/org/alfresco/web/bean/wcm/AVMBrowseBean.java index a7f449d3c8..f48beba988 100644 --- a/source/java/org/alfresco/web/bean/wcm/AVMBrowseBean.java +++ b/source/java/org/alfresco/web/bean/wcm/AVMBrowseBean.java @@ -35,7 +35,6 @@ import org.alfresco.model.WCMAppModel; import org.alfresco.repo.avm.AVMNodeConverter; import org.alfresco.repo.avm.actions.AVMRevertStoreAction; import org.alfresco.repo.avm.actions.AVMUndoSandboxListAction; -import org.alfresco.repo.avm.actions.SimpleAVMSubmitAction; import org.alfresco.service.cmr.action.Action; import org.alfresco.service.cmr.action.ActionService; import org.alfresco.service.cmr.avm.AVMNodeDescriptor; @@ -1110,6 +1109,7 @@ public class AVMBrowseBean implements IContextListener // nothing to do } + // ------------------------------------------------------------------------------ // Inner classes diff --git a/source/java/org/alfresco/web/bean/wcm/SubmitDialog.java b/source/java/org/alfresco/web/bean/wcm/SubmitDialog.java index d340acc16d..3d99c230c3 100644 --- a/source/java/org/alfresco/web/bean/wcm/SubmitDialog.java +++ b/source/java/org/alfresco/web/bean/wcm/SubmitDialog.java @@ -32,6 +32,7 @@ import javax.faces.context.FacesContext; import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.model.ContentModel; import org.alfresco.model.WCMAppModel; +import org.alfresco.repo.avm.AVMDAOs; import org.alfresco.repo.avm.AVMNodeConverter; import org.alfresco.repo.workflow.WorkflowModel; import org.alfresco.service.cmr.avm.AVMNodeDescriptor; @@ -167,65 +168,86 @@ public class SubmitDialog extends BaseDialogBean @Override protected String finishImpl(FacesContext context, String outcome) throws Exception { - // get the defaults from the workflow configuration attached to the selected workflow - Map params = null; - String workflowName = this.workflowSelectedValue[0]; - for (FormWorkflowWrapper wrapper : this.workflows) + if (getSubmitItemsSize() == 0) { - if (wrapper.Name.equals(workflowName)) - { - params = wrapper.Params; - } + return null; } - if (params != null) + // get the defaults from the workflow configuration attached to the selected workflow + if (this.workflowSelectedValue != null) { - // create container for our avm workflow package - NodeRef workflowPackage = createWorkflowPackage(); - params.put(WorkflowModel.ASSOC_PACKAGE, workflowPackage); - - // add submission parameters - params.put(WorkflowModel.PROP_WORKFLOW_DESCRIPTION, getComment()); - params.put(AVMWorkflowUtil.PROP_LABEL, getLabel()); - params.put(AVMWorkflowUtil.PROP_FROM_PATH, AVMConstants.buildAVMStoreRootPath(this.avmBrowseBean.getSandbox())); - - // start the workflow to get access to the start task - WorkflowDefinition wfDef = workflowService.getDefinitionByName(workflowName); - WorkflowPath path = this.workflowService.startWorkflow(wfDef.id, params); - if (path != null) + Map params = null; + String workflowName = this.workflowSelectedValue[0]; + for (FormWorkflowWrapper wrapper : this.workflows) { - // extract the start task - List tasks = this.workflowService.getTasksForWorkflowPath(path.id); - if (tasks.size() == 1) + if (wrapper.Name.equals(workflowName)) { - WorkflowTask startTask = tasks.get(0); - - if (startTask.state == WorkflowTaskState.IN_PROGRESS) + params = wrapper.Params; + } + } + + if (params != null) + { + // create container for our avm workflow package + NodeRef workflowPackage = createWorkflowPackage(); + params.put(WorkflowModel.ASSOC_PACKAGE, workflowPackage); + + // add submission parameters + params.put(WorkflowModel.PROP_WORKFLOW_DESCRIPTION, getComment()); + params.put(AVMWorkflowUtil.PROP_LABEL, getLabel()); + params.put(AVMWorkflowUtil.PROP_FROM_PATH, AVMConstants.buildAVMStoreRootPath(this.avmBrowseBean.getSandbox())); + + // start the workflow to get access to the start task + WorkflowDefinition wfDef = workflowService.getDefinitionByName(workflowName); + WorkflowPath path = this.workflowService.startWorkflow(wfDef.id, params); + if (path != null) + { + // extract the start task + List tasks = this.workflowService.getTasksForWorkflowPath(path.id); + if (tasks.size() == 1) { - // end the start task to trigger the first 'proper' task in the workflow - this.workflowService.endTask(startTask.id, null); + WorkflowTask startTask = tasks.get(0); + + if (startTask.state == WorkflowTaskState.IN_PROGRESS) + { + // end the start task to trigger the first 'proper' task in the workflow + this.workflowService.endTask(startTask.id, null); + } } } } + else + { + // TODO: jump to dialog and allow user to finish wf properties config! + throw new AlfrescoRuntimeException("Workflow parameters have not been configured, cannot submit items."); + } } else { - // TODO: jump to dialog and allow user to finish wf properties config! - throw new AlfrescoRuntimeException("Workflow has not been configured correctly, cannot submit items."); + // direct submit to the staging area without workflow + List items = getSubmitItems(); + + // construct diffs for selected items for submission + String sandboxPath = AVMConstants.buildAVMStoreRootPath(this.avmBrowseBean.getSandbox()); + String stagingPath = AVMConstants.buildAVMStoreRootPath(this.avmBrowseBean.getStagingStore()); + List diffs = new ArrayList(items.size()); + for (ItemWrapper wrapper : items) + { + String srcPath = sandboxPath + wrapper.getPath(); + String destPath = stagingPath + wrapper.getPath(); + AVMDifference diff = new AVMDifference(-1, srcPath, -1, destPath, AVMDifference.NEWER); + diffs.add(diff); + } + + // write changes to layer so files are marked as modified + this.avmSyncService.update(diffs, null, true, true, false, false, this.label, this.comment); + AVMDAOs.Instance().fAVMNodeDAO.flush(); + avmSyncService.flatten(sandboxPath, stagingPath); } return outcome; } - /** - * @see org.alfresco.web.bean.dialog.BaseDialogBean#getFinishButtonDisabled() - */ - @Override - public boolean getFinishButtonDisabled() - { - return (getWorkflowSelectedValue() == null || getSubmitItemsSize() == 0); - } - /** * @return Returns the workflow comment. */ diff --git a/source/web/jsp/wcm/create-website-wizard/details.jsp b/source/web/jsp/wcm/create-website-wizard/details.jsp index 30c830d9f5..c254c915eb 100644 --- a/source/web/jsp/wcm/create-website-wizard/details.jsp +++ b/source/web/jsp/wcm/create-website-wizard/details.jsp @@ -61,7 +61,7 @@ if (valid == true) { valid = validateRegex(document.getElementById("wizard:wizard-body:dnsname"), - "^[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$", true, null, + "^[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9]$", true, null, '', true); } return valid; diff --git a/source/web/jsp/wcm/submit-dialog.jsp b/source/web/jsp/wcm/submit-dialog.jsp index 91da43b874..410b60cd13 100644 --- a/source/web/jsp/wcm/submit-dialog.jsp +++ b/source/web/jsp/wcm/submit-dialog.jsp @@ -30,7 +30,22 @@ function pageLoaded() { document.getElementById("dialog:dialog-body:comment").focus(); + checkButtonState(); } + + function checkButtonState() + { + if (document.getElementById("dialog:dialog-body:comment").value.length == 0 || + document.getElementById("dialog:dialog-body:label").value.length == 0) + { + document.getElementById("dialog:finish-button").disabled = true; + } + else + { + document.getElementById("dialog:finish-button").disabled = false; + } + } +