diff --git a/config/alfresco/messages/invitation-service.properties b/config/alfresco/messages/invitation-service.properties index c4aa994c65..4aa88900f0 100644 --- a/config/alfresco/messages/invitation-service.properties +++ b/config/alfresco/messages/invitation-service.properties @@ -1,9 +1,11 @@ # -# Invitation service +# Invitation service messages # invitation.error.noworkflow "Invitation workflow not found, workflow name : {0}" invitation.error.not_found "Invitation not found, invitationId: {0}" invitation.error.invalid_inviteId_format "Invitation Id not valid format, valid formats are $ : {0}" +invitation.invite.already_member "The user , {0} is already a member of {1} and cannot be invited again" invitation.cancel.not_site_manager "Current user, {0}, cannot cancel invitation: {1} because they are not a Site Manager for site: {2} +invitation.invite.not_site_manager "Current user, {0}, is not a Site Manager for site: {1} invitation.invite.unable_generate_id "Unable to generate a user name for invitee, which doesn't already belong to someone else firstName:{0} lastName:{1} email:{2}" \ No newline at end of file diff --git a/source/java/org/alfresco/repo/invitation/InvitationServiceImpl.java b/source/java/org/alfresco/repo/invitation/InvitationServiceImpl.java index 95a3007bbc..359cdf7855 100644 --- a/source/java/org/alfresco/repo/invitation/InvitationServiceImpl.java +++ b/source/java/org/alfresco/repo/invitation/InvitationServiceImpl.java @@ -396,18 +396,34 @@ public class InvitationServiceImpl implements InvitationService if (invitation instanceof NominatedInvitation) { - // TODO Who is allowed to cancel ?? + // Check canceller is a site manager + String approverUserName = this.authenticationService.getCurrentUserName(); + checkManagerRole(approverUserName, invitation.getResourceType(), invitation.getResourceName()); - // Should you be allowed to cancel multiple times ? + // create workflow task query + WorkflowTaskQuery wfTaskQuery = new WorkflowTaskQuery(); + + // set the given invite ID as the workflow process ID in the workflow query + wfTaskQuery.setProcessId(invitationId); - // complete the wf:invitePendingTask along the 'cancel' transition - // because the invitation has been cancelled - InviteHelper - .completeInviteTask( - invitationId, - WorkflowModelNominatedInvitation.WF_INVITE_TASK_INVITE_PENDING, - WorkflowModelNominatedInvitation.WF_TRANSITION_CANCEL, - this.workflowService); + // find incomplete invite workflow tasks with given task name + wfTaskQuery.setActive(Boolean.TRUE); + wfTaskQuery.setTaskState(WorkflowTaskState.IN_PROGRESS); + wfTaskQuery.setTaskName(WorkflowModelNominatedInvitation.WF_INVITE_TASK_INVITE_PENDING); + + // set process name to "wf:invite" so that only + // invite workflow instances are considered by this query + wfTaskQuery.setProcessName(WorkflowModelNominatedInvitation.WF_PROCESS_INVITE); + + // query for invite workflow tasks with the constructed query + List wf_invite_tasks = workflowService + .queryTasks(wfTaskQuery); + + // end all tasks found with this name + for (WorkflowTask workflowTask : wf_invite_tasks) + { + workflowService.endTask(workflowTask.id, WorkflowModelNominatedInvitation.WF_TRANSITION_CANCEL); + } } if (invitation instanceof ModeratedInvitation) @@ -421,9 +437,11 @@ public class InvitationServiceImpl implements InvitationService /** * Get an invitation from its invitation id + *
* - * @throws InvitationExceptionNotFound - * the invitation does not exist. + * Invitations are returned which may be in progress or completed. + * + * @throws InvitationExceptionNotFound the invitation does not exist. * @throws InvitationExceptionUserError * @return the invitation. */ @@ -453,11 +471,10 @@ public class InvitationServiceImpl implements InvitationService // This is a nominated invitation WorkflowTaskQuery wfTaskQuery = new WorkflowTaskQuery(); wfTaskQuery.setProcessId(invitationId); - + // filter to find only the start task which contains the properties. wfTaskQuery.setTaskState(WorkflowTaskState.COMPLETED); - wfTaskQuery - .setTaskName(WorkflowModelNominatedInvitation.WF_INVITE_TASK_INVITE_TO_SITE); + wfTaskQuery.setTaskName(WorkflowModelNominatedInvitation.WF_INVITE_TASK_INVITE_TO_SITE); // query for invite workflow task associate List inviteStartTasks = workflowService @@ -610,7 +627,7 @@ public class InvitationServiceImpl implements InvitationService // query only active workflows wfTaskQuery.setActive(Boolean.TRUE); - // pick up the start task + // pick up the pending task wfTaskQuery.setTaskState(WorkflowTaskState.IN_PROGRESS); wfTaskQuery.setTaskName(WorkflowModelNominatedInvitation.WF_INVITE_TASK_INVITE_PENDING); wfTaskQuery.setProcessName(WorkflowModelNominatedInvitation.WF_PROCESS_INVITE); diff --git a/source/java/org/alfresco/repo/invitation/InvitationServiceImplTest.java b/source/java/org/alfresco/repo/invitation/InvitationServiceImplTest.java index 2b9f4237a1..3b9eeed48a 100644 --- a/source/java/org/alfresco/repo/invitation/InvitationServiceImplTest.java +++ b/source/java/org/alfresco/repo/invitation/InvitationServiceImplTest.java @@ -163,7 +163,7 @@ public class InvitationServiceImplTest extends BaseAlfrescoSpringTest String inviteeFirstName = PERSON_FIRSTNAME; String inviteeLastName = PERSON_LASTNAME; - String inviteeEmail = "123"; + String inviteeEmail = "123@alfrescotesting.com"; String inviteeUserName = null; Invitation.ResourceType resourceType = Invitation.ResourceType.WEB_SITE; String resourceName = SITE_SHORT_NAME_INVITE; @@ -256,6 +256,12 @@ public class InvitationServiceImplTest extends BaseAlfrescoSpringTest List it4 = invitationService.listPendingInvitationsForResource(resourceType, resourceName); assertTrue("invitations is not empty", it4.isEmpty()); + /** + * Now get the invitation that we accepted + */ + NominatedInvitation acceptedInvitation2 = (NominatedInvitation)invitationService.getInvitation(firstInvite.getInviteId()); + assertNotNull("get after accept does not return", acceptedInvitation2); + /** * Now verify access control list */ diff --git a/source/java/org/alfresco/repo/invitation/NominatedInvitationImpl.java b/source/java/org/alfresco/repo/invitation/NominatedInvitationImpl.java index 34da607f78..59b8994e24 100644 --- a/source/java/org/alfresco/repo/invitation/NominatedInvitationImpl.java +++ b/source/java/org/alfresco/repo/invitation/NominatedInvitationImpl.java @@ -49,6 +49,7 @@ import java.util.Map; private String inviteeFirstName; private String inviteeLastName; private String inviteeEmail; + private String inviterUserName; private String roleName; private String serverPath; private String acceptUrl; @@ -76,6 +77,7 @@ import java.util.Map; inviteeFirstName = (String)workflowProps.get(WorkflowModelNominatedInvitation.WF_PROP_INVITEE_FIRSTNAME); inviteeLastName = (String)workflowProps.get(WorkflowModelNominatedInvitation.WF_PROP_INVITEE_LASTNAME); inviteeEmail = (String)workflowProps.get(WorkflowModelNominatedInvitation.WF_PROP_INVITEE_EMAIL); + inviterUserName = (String)workflowProps.get(WorkflowModelNominatedInvitation.WF_PROP_INVITER_USER_NAME); // inviteePassword = (String)workflowProps.get(WorkflowModelNominatedInvitation.WF_PROP_INVITEE_GEN_PASSWORD); setResourceName( (String)workflowProps.get(WorkflowModelNominatedInvitation.WF_PROP_RESOURCE_NAME)); @@ -176,4 +178,12 @@ import java.util.Map; return inviteeUserName; } + public String getInviterUserName() { + return inviterUserName; + } + + public void setInviterUserName(String inviterUserName) { + this.inviterUserName= inviterUserName; + } + } diff --git a/source/java/org/alfresco/repo/invitation/site/InviteHelper.java b/source/java/org/alfresco/repo/invitation/site/InviteHelper.java index 815785e27f..227a78ab8c 100644 --- a/source/java/org/alfresco/repo/invitation/site/InviteHelper.java +++ b/source/java/org/alfresco/repo/invitation/site/InviteHelper.java @@ -66,7 +66,7 @@ public class InviteHelper // set process name to "wf:invite" so that only tasks associated with // invite workflow instances are returned by query - wfTaskQuery.setProcessName(QName.createQName(NamespaceService.WORKFLOW_MODEL_1_0_URI, "invite")); + wfTaskQuery.setProcessName(WorkflowModelNominatedInvitation.WF_PROCESS_INVITE); // filter to find only the invite start task wfTaskQuery.setTaskState(WorkflowTaskState.COMPLETED); diff --git a/source/java/org/alfresco/service/cmr/invitation/NominatedInvitation.java b/source/java/org/alfresco/service/cmr/invitation/NominatedInvitation.java index 865e35f1b6..bcfa42b6e5 100644 --- a/source/java/org/alfresco/service/cmr/invitation/NominatedInvitation.java +++ b/source/java/org/alfresco/service/cmr/invitation/NominatedInvitation.java @@ -56,6 +56,8 @@ public interface NominatedInvitation extends Invitation public String getRejectUrl(); public Date getSentInviteDate(); + + public String getInviterUserName(); public String getTicket();