diff --git a/source/java/org/alfresco/repo/web/scripts/invite/InviteByTicket.java b/source/java/org/alfresco/repo/web/scripts/invite/InviteByTicket.java index 5d73fb1c30..ba43c16012 100644 --- a/source/java/org/alfresco/repo/web/scripts/invite/InviteByTicket.java +++ b/source/java/org/alfresco/repo/web/scripts/invite/InviteByTicket.java @@ -19,8 +19,10 @@ package org.alfresco.repo.web.scripts.invite; import java.util.HashMap; +import java.util.List; import java.util.Map; +import org.alfresco.repo.invitation.WorkflowModelNominatedInvitation; import org.alfresco.repo.invitation.site.InviteInfo; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.template.TemplateNode; @@ -36,6 +38,8 @@ import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.security.PersonService; import org.alfresco.service.cmr.site.SiteInfo; import org.alfresco.service.cmr.site.SiteService; +import org.alfresco.service.cmr.workflow.WorkflowTask; +import org.alfresco.service.cmr.workflow.WorkflowTaskQuery; import org.springframework.extensions.webscripts.DeclarativeWebScript; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptException; @@ -163,7 +167,7 @@ public class InviteByTicket extends DeclarativeWebScript // get the site info SiteInfo siteInfo = siteService.getSite(invitation.getResourceName()); - String invitationStatus = InviteInfo.INVITATION_STATUS_PENDING; + String invitationStatus = getInvitationStatus(invitation); NodeRef inviterRef = personService.getPerson(invitation.getInviterUserName()); TemplateNode inviterPerson = null; @@ -193,5 +197,31 @@ public class InviteByTicket extends DeclarativeWebScript return ret; } - + + private String getInvitationStatus(NominatedInvitation invitation) + { + String invitee = invitation.getInviteeUserName(); + String site = invitation.getResourceName(); + // check is invitee is site member + boolean isUserMember = serviceRegistry.getSiteService().isMember(site, invitee); + + WorkflowTaskQuery query = new WorkflowTaskQuery(); + query.setTaskName(WorkflowModelNominatedInvitation.WF_TASK_ACTIVIT_INVITE_PENDING); + query.setProcessId(invitation.getInviteId()); + // query current workflow's task activitiInvitePendingTask + List pendingInvitationTasks = serviceRegistry.getWorkflowService().queryTasks(query, false); + // if it's here - pending invitation + if (!pendingInvitationTasks.isEmpty()) + { + return InviteInfo.INVITATION_STATUS_PENDING; + } + else if (isUserMember) + { + return InviteInfo.INVITATION_STATUS_ACCEPTED; + } + else + { + return InviteInfo.INVITATION_STATUS_REJECTED; + } + } } diff --git a/source/test-java/org/alfresco/repo/web/scripts/invite/InviteServiceTest.java b/source/test-java/org/alfresco/repo/web/scripts/invite/InviteServiceTest.java index e12c96ba4c..286706f958 100644 --- a/source/test-java/org/alfresco/repo/web/scripts/invite/InviteServiceTest.java +++ b/source/test-java/org/alfresco/repo/web/scripts/invite/InviteServiceTest.java @@ -26,6 +26,7 @@ import org.alfresco.model.ContentModel; import org.alfresco.repo.action.executer.MailActionExecuter; import org.alfresco.repo.content.MimetypeMap; import org.alfresco.repo.invitation.WorkflowModelNominatedInvitation; +import org.alfresco.repo.invitation.site.InviteInfo; import org.alfresco.repo.management.subsystems.ChildApplicationContextFactory; import org.alfresco.repo.node.archive.NodeArchiveService; import org.alfresco.repo.security.authentication.AuthenticationComponent; @@ -521,6 +522,17 @@ public class InviteServiceTest extends BaseWebScriptTest return result; } + private JSONObject getInviteInfo(String inviteId, String inviteTicket, String inviteeUid) throws Exception + { + String url = "/api/invite/" + inviteId + "/" + inviteTicket + "?inviteeUserName=" + inviteeUid; + + Response response = sendRequest(new GetRequest(url), Status.STATUS_OK); + + JSONObject result = new JSONObject(response.getContentAsString()); + + return result; + } + public void testStartInvite() throws Exception { JSONObject result = startInvite(INVITEE_FIRSTNAME, INVITEE_LASTNAME, INVITEE_SITE_ROLE, @@ -689,6 +701,50 @@ public class InviteServiceTest extends BaseWebScriptTest } + public void testGetInvitationStatus() throws Exception + { + for (String invitationStatus : new String[]{ + InviteInfo.INVITATION_STATUS_REJECTED, + InviteInfo.INVITATION_STATUS_ACCEPTED + }) + { + // inviter starts invite (sends out invitation) + JSONObject result = startInvite(INVITEE_FIRSTNAME, INVITEE_LASTNAME, INVITEE_SITE_ROLE, + SITE_SHORT_NAME_INVITE_1, Status.STATUS_OK); + + String inviteId = result.getString("inviteId"); + String inviteTicket = result.getString("inviteTicket"); + String inviteeUserName = result.getString("inviteeUserName"); + // get inviteInfo about invitation + result = getInviteInfo(inviteId, inviteTicket, inviteeUserName); + // get status of current invitation + String status = result.getJSONObject("invite").getString("invitationStatus"); + // it should be peding + assertEquals(status, InviteInfo.INVITATION_STATUS_PENDING); + // accept/reject invitation + if (invitationStatus.equals(InviteInfo.INVITATION_STATUS_REJECTED)) + { + rejectInvite(inviteId, inviteTicket, Status.STATUS_OK); + } + else if (invitationStatus.equals(InviteInfo.INVITATION_STATUS_ACCEPTED)) + { + // Invitee accepts invitation to a Site from Inviter + String acceptInviteUrl = URL_INVITE + "/" + inviteId + "/" + inviteTicket + "/accept"; + sendRequest(new PutRequest(acceptInviteUrl, (byte[])null, null), Status.STATUS_OK); + } + else + { + fail(); + } + // get inviteInfo about invitation + result = getInviteInfo(inviteId, inviteTicket, inviteeUserName); + + status = result.getJSONObject("invite").getString("invitationStatus"); + // invitation status should be accepted/rejected + assertEquals(status, invitationStatus); + } + } + public void testGetInvitesByInviteId() throws Exception { // inviter starts invite workflow