mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-07-31 17:39:05 +00:00
Invitation service
Java Script API for invitations on Site object. Implementation of REST API for Site / Invitations. Rename of old invite workflow to invitation-nominated and renaming of properties for consistency. Old workflow is due for deprecation. Rework to Nominated workflow to unscramble user creation. Start Workflow UI bean now knows to avoid workflows managed by the InvitationService. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@13523 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -379,6 +379,7 @@
|
|||||||
<prop key="redeploy">false</prop>
|
<prop key="redeploy">false</prop>
|
||||||
</props>
|
</props>
|
||||||
|
|
||||||
|
<!-- Invitation service workflow definition -->
|
||||||
<props>
|
<props>
|
||||||
<prop key="engineId">jbpm</prop>
|
<prop key="engineId">jbpm</prop>
|
||||||
<prop key="location">alfresco/workflow/invitation-nominated_processdefinition.xml</prop>
|
<prop key="location">alfresco/workflow/invitation-nominated_processdefinition.xml</prop>
|
||||||
@@ -386,6 +387,7 @@
|
|||||||
<prop key="redeploy">false</prop>
|
<prop key="redeploy">false</prop>
|
||||||
</props>
|
</props>
|
||||||
|
|
||||||
|
<!-- Invitation service workflow definition -->
|
||||||
<props>
|
<props>
|
||||||
<prop key="engineId">jbpm</prop>
|
<prop key="engineId">jbpm</prop>
|
||||||
<prop key="location">alfresco/workflow/invitation-moderated_processdefinition.xml</prop>
|
<prop key="location">alfresco/workflow/invitation-moderated_processdefinition.xml</prop>
|
||||||
@@ -393,7 +395,6 @@
|
|||||||
<prop key="redeploy">false</prop>
|
<prop key="redeploy">false</prop>
|
||||||
</props>
|
</props>
|
||||||
|
|
||||||
|
|
||||||
</list>
|
</list>
|
||||||
</property>
|
</property>
|
||||||
<property name="models">
|
<property name="models">
|
||||||
|
@@ -1,7 +1,9 @@
|
|||||||
|
#
|
||||||
# Invitation service
|
# Invitation service
|
||||||
|
#
|
||||||
|
|
||||||
invitation.error.not_found "Invitation not found invitationId: {0}"
|
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 <engine>$<id> : {0}"
|
||||||
invitation.cancel.not_site_manager "Current user, {0}, cannot cancel invitation: {1} because they are not a Site Manager for site: {2}
|
invitation.cancel.not_site_manager "Current user, {0}, cannot cancel invitation: {1} because they are not a Site Manager for site: {2}
|
||||||
|
|
||||||
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}"
|
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}"
|
@@ -4,9 +4,23 @@
|
|||||||
# Moderated Invitation
|
# Moderated Invitation
|
||||||
#
|
#
|
||||||
|
|
||||||
wf_invitation-moderated.workflow.title=Invitation (Moderated)
|
wf_invitation-moderated.workflow.title=Invitation - Moderated
|
||||||
wf_invitation-moderated.workflow.description=Moderated invitation to a resource such as a web site.
|
wf_invitation-moderated.workflow.description=Moderated invitation to a resource such as a web site.
|
||||||
|
|
||||||
|
wf_invitation-moderated-workflow-model.type.wf_moderatedInvitationSubmitTask.title=Start Invitation
|
||||||
|
wf_invitation-moderated-workflow-model.type.wf_moderatedInvitationSubmitTask=Start a moderated invitation
|
||||||
|
|
||||||
wf_invitation-moderated-model.type.approveInvitationTask.title=Approve Invitation
|
wf_invitation-moderated-model.type.approveInvitationTask.title=Approve Invitation
|
||||||
wf_invitation-moderated-model.type.approveInvitationTask.description=Approve Invitation
|
wf_invitation-moderated-model.type.approveInvitationTask.description=Approve Invitation
|
||||||
|
|
||||||
|
wf_invitation-moderated.node.start.title=Start
|
||||||
|
wf_invitation-moderated.node.start.description=Start moderated invitation
|
||||||
|
wf_invitation-moderated.node.review.title=Review Invitation
|
||||||
|
wf_invitation-moderated.node.review.description=Review moderated invitation
|
||||||
|
wf_invitation-moderated.node.review.transition.reject.title=Reject
|
||||||
|
wf_invitation-moderated.node.review.transition.reject.description=Reject
|
||||||
|
wf_invitation-moderated.node.review.transition.approve.title=Approve
|
||||||
|
wf_invitation-moderated.node.review.transition.approve.description=Approve
|
||||||
|
wf_invitation-moderated.node.review.transition.cancel.title=Cancel
|
||||||
|
wf_invitation-moderated.node.review.transition.cancel.description=Cancel
|
||||||
|
|
||||||
|
@@ -1,40 +1,41 @@
|
|||||||
# Display labels for out-of-the-box Site-oriented Workflows
|
# Display labels for out-of-the-box Site-oriented Workflows
|
||||||
|
|
||||||
#
|
#
|
||||||
# Invite Workflow
|
# Invitation Nominated Workflow
|
||||||
#
|
#
|
||||||
|
|
||||||
wf_invite.workflow.title=Invitation (Nominated)
|
wf_invitation-nominated.workflow.title=Invitation - Nominated
|
||||||
wf_invite.workflow.description=Invitation to a Share Site, nominated by a site manager
|
wf_invitation-nominated.workflow.description=Invitation to a Share Site, nominated by a site manager
|
||||||
|
|
||||||
# Invite Task Definitions
|
# Invite Task Definitions
|
||||||
|
|
||||||
wf_invite-workflow-model.type.wf_inviteToSiteTask.title=Start Invite
|
wf_invitation-nominated-workflow-model.type.wf_inviteToSiteTask.title=Start task
|
||||||
wf_invite-workflow-model.type.wf_inviteToSiteTask.description=Start an invite to a Site
|
wf_invitation-nominated-workflow-model.type.wf_inviteToSiteTask.description=Start a nominated invitation
|
||||||
wf_invite-workflow-model.type.wf_invitePendingTask.title=Site Invite
|
wf_invitation-nominated-workflow-model.type.wf_invitePendingTask.title=Pending invitation
|
||||||
wf_invite-workflow-model.type.wf_invitePendingTask.description=Invite to a Site
|
wf_invitation-nominated-workflow-model.type.wf_invitePendingTask.description=Pending invitation
|
||||||
wf_invite-workflow-model.type.wf_rejectInviteTask.title=Rejected
|
wf_invitation-nominated-workflow-model.type.wf_rejectInviteTask.title=Rejected
|
||||||
wf_invite-workflow-model.type.wf_rejectInviteTask.description=Rejected
|
wf_invitation-nominated-workflow-model.type.wf_rejectInviteTask.description=Rejected
|
||||||
wf_invite-workflow-model.type.wf_acceptInviteTask.title=Accepted
|
wf_invitation-nominated-workflow-model.type.wf_acceptInviteTask.title=Accepted
|
||||||
wf_invite-workflow-model.type.wf_acceptInviteTask.description=Accepted
|
wf_invitation-nominated-workflow-model.type.wf_acceptInviteTask.description=Accepted
|
||||||
|
|
||||||
# Invite Process Definitions
|
# Invite Process Definitions
|
||||||
|
wf_invitation-nominated.node.start.title=Start
|
||||||
wf_invite.node.start.title=Start
|
wf_invitation-nominated.node.start.description=Start
|
||||||
wf_invite.node.start.description=Start
|
wf_invitation-nominated.node.invitePending.title=Invite Pending
|
||||||
wf_invite.node.invitePending.title=Invite Pending
|
wf_invitation-nominated.node.invitePending.description=Invite Pending
|
||||||
wf_invite.node.invitePending.description=Invite Pending
|
wf_invitation-nominated.node.invitePending.transition.reject.title=Reject
|
||||||
wf_invite.node.invitePending.transition.reject.title=Reject
|
wf_invitation-nominated.node.invitePending.transition.reject.description=Reject
|
||||||
wf_invite.node.invitePending.transition.reject.description=Reject
|
wf_invitation-nominated.node.invitePending.transition.accept.title=Accept
|
||||||
wf_invite.node.invitePending.transition.accept.title=Accept
|
wf_invitation-nominated.node.invitePending.transition.accept.description=Accept
|
||||||
wf_invite.node.invitePending.transition.accept.description=Accept
|
wf_invitation-nominated.node.invitePending.transition.cancel.title=Cancel
|
||||||
wf_invite.node.inviteRejected.title=Rejected
|
wf_invitation-nominated.node.invitePending.transition.cancel.description=Cancel
|
||||||
wf_invite.node.inviteRejected.description=Rejected
|
wf_invitation-nominated.node.inviteRejected.title=Rejected
|
||||||
wf_invite.task.wf_rejectInviteTask.title=Rejected
|
wf_invitation-nominated.node.inviteRejected.description=Rejected
|
||||||
wf_invite.task.wf_rejectInviteTask.description=Rejected
|
wf_invitation-nominated.task.wf_rejectInviteTask.title=Rejected
|
||||||
wf_invite.node.inviteAccepted.title=Accepted
|
wf_invitation-nominated.task.wf_rejectInviteTask.description=Rejected
|
||||||
wf_invite.node.inviteAccepted.description=Accepted
|
wf_invitation-nominated.node.inviteAccepted.title=Accepted
|
||||||
wf_invite.task.wf_acceptInviteTask.title=Accepted
|
wf_invitation-nominated.node.inviteAccepted.description=Accepted
|
||||||
wf_invite.task.wf_acceptInviteTask.description=Accepted
|
wf_invitation-nominated.task.wf_acceptInviteTask.title=Accepted
|
||||||
wf_invite.node.end.title=End
|
wf_invitation-nominated.task.wf_acceptInviteTask.description=Accepted
|
||||||
wf_invite.node.end.description=End
|
wf_invitation-nominated.node.end.title=End
|
||||||
|
wf_invitation-nominated.node.end.description=End
|
||||||
|
@@ -34,6 +34,9 @@
|
|||||||
<property name="wf:inviteeUserName">
|
<property name="wf:inviteeUserName">
|
||||||
<type>d:text</type>
|
<type>d:text</type>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="wf:inviteeEmail">
|
||||||
|
<type>d:text</type>
|
||||||
|
</property>
|
||||||
<property name="wf:inviteeFirstName">
|
<property name="wf:inviteeFirstName">
|
||||||
<type>d:text</type>
|
<type>d:text</type>
|
||||||
</property>
|
</property>
|
||||||
@@ -49,7 +52,7 @@
|
|||||||
<property name="wf:resourceName">
|
<property name="wf:resourceName">
|
||||||
<type>d:text</type>
|
<type>d:text</type>
|
||||||
</property>
|
</property>
|
||||||
<property name="wf:inviteeSiteRole">
|
<property name="wf:inviteeRole">
|
||||||
<type>d:text</type>
|
<type>d:text</type>
|
||||||
</property>
|
</property>
|
||||||
</properties>
|
</properties>
|
||||||
|
@@ -2,7 +2,8 @@
|
|||||||
|
|
||||||
<!-- Nominated invitation -->
|
<!-- Nominated invitation -->
|
||||||
|
|
||||||
<process-definition xmlns="urn:jbpm.org:jpdl-3.1" name="wf:invite">
|
<process-definition xmlns="urn:jbpm.org:jpdl-3.1"
|
||||||
|
name="wf:invitation-nominated">
|
||||||
|
|
||||||
<swimlane name="initiator"/>
|
<swimlane name="initiator"/>
|
||||||
|
|
||||||
@@ -40,7 +41,7 @@
|
|||||||
args["inviteePersonRef"] = inviteePerson.nodeRef.toString();
|
args["inviteePersonRef"] = inviteePerson.nodeRef.toString();
|
||||||
args["inviterPersonRef"] = inviterPerson.nodeRef.toString();
|
args["inviterPersonRef"] = inviterPerson.nodeRef.toString();
|
||||||
args["siteName"] = siteName;
|
args["siteName"] = siteName;
|
||||||
args["inviteeSiteRole"] = wf_inviteeSiteRole;
|
args["inviteeSiteRole"] = wf_inviteeRole;
|
||||||
args["inviteeUserName"] = wf_inviteeUserName;
|
args["inviteeUserName"] = wf_inviteeUserName;
|
||||||
args["inviteeGenPassword"] = wf_inviteeGenPassword;
|
args["inviteeGenPassword"] = wf_inviteeGenPassword;
|
||||||
args["acceptLink"] = acceptLink;
|
args["acceptLink"] = acceptLink;
|
||||||
|
@@ -5,10 +5,8 @@ import org.alfresco.service.cmr.invitation.Invitation.ResourceType;
|
|||||||
|
|
||||||
/* package scope */ abstract class InvitationImpl
|
/* package scope */ abstract class InvitationImpl
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* Who is this invitation for
|
|
||||||
*/
|
|
||||||
private String inviteeUserName;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unique reference for this invitation
|
* Unique reference for this invitation
|
||||||
@@ -48,14 +46,6 @@ import org.alfresco.service.cmr.invitation.Invitation.ResourceType;
|
|||||||
this.resourceType = resourceType;
|
this.resourceType = resourceType;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setInviteeUserName(String inviteeUserName) {
|
|
||||||
this.inviteeUserName = inviteeUserName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getInviteeUserName() {
|
|
||||||
return inviteeUserName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setInviteId(String inviteId) {
|
public void setInviteId(String inviteId) {
|
||||||
this.inviteId = inviteId;
|
this.inviteId = inviteId;
|
||||||
}
|
}
|
||||||
|
@@ -26,6 +26,7 @@ package org.alfresco.repo.invitation;
|
|||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Date;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -48,6 +49,7 @@ import org.alfresco.service.cmr.security.PermissionService;
|
|||||||
import org.alfresco.service.cmr.security.PersonService;
|
import org.alfresco.service.cmr.security.PersonService;
|
||||||
import org.alfresco.service.cmr.site.SiteService;
|
import org.alfresco.service.cmr.site.SiteService;
|
||||||
import org.alfresco.service.cmr.workflow.WorkflowDefinition;
|
import org.alfresco.service.cmr.workflow.WorkflowDefinition;
|
||||||
|
import org.alfresco.service.cmr.workflow.WorkflowException;
|
||||||
import org.alfresco.service.cmr.workflow.WorkflowInstance;
|
import org.alfresco.service.cmr.workflow.WorkflowInstance;
|
||||||
import org.alfresco.service.cmr.workflow.WorkflowPath;
|
import org.alfresco.service.cmr.workflow.WorkflowPath;
|
||||||
import org.alfresco.service.cmr.workflow.WorkflowService;
|
import org.alfresco.service.cmr.workflow.WorkflowService;
|
||||||
@@ -86,6 +88,64 @@ public class InvitationServiceImpl implements InvitationService
|
|||||||
// does not already belong to an existing person
|
// does not already belong to an existing person
|
||||||
public static final int MAX_NUM_INVITEE_USER_NAME_GEN_TRIES = 10;
|
public static final int MAX_NUM_INVITEE_USER_NAME_GEN_TRIES = 10;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the names of the workflows which are managed by the invitation service
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public List<String> getInvitationServiceWorkflowNames()
|
||||||
|
{
|
||||||
|
List<String> ret = new ArrayList<String>(2);
|
||||||
|
ret.add(WorkflowModelNominatedInvitation.WORKFLOW_DEFINITION_NAME);
|
||||||
|
ret.add(WorkflowModelModeratedInvitation.WORKFLOW_DEFINITION_NAME);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Start the invitation process for a NominatedInvitation
|
||||||
|
*
|
||||||
|
* @param inviteeUserName Alfresco user name of the invitee
|
||||||
|
* @param Invitation
|
||||||
|
* @param ResourceType resourceType
|
||||||
|
* @param resourceName
|
||||||
|
* @param inviteeRole
|
||||||
|
* @param serverPath
|
||||||
|
* @param acceptUrl
|
||||||
|
* @param rejectUrl
|
||||||
|
*
|
||||||
|
* @return the nominated invitation which will contain the invitationId and
|
||||||
|
* ticket which will uniqely identify this invitation for the rest
|
||||||
|
* of the workflow.
|
||||||
|
*
|
||||||
|
* @throws InvitationException
|
||||||
|
* @throws InvitationExceptionUserError
|
||||||
|
* @throws InvitationExceptionForbidden
|
||||||
|
*/
|
||||||
|
public NominatedInvitation inviteNominated(String inviteeUserName,
|
||||||
|
Invitation.ResourceType resourceType,
|
||||||
|
String resourceName,
|
||||||
|
String inviteeRole,
|
||||||
|
String serverPath,
|
||||||
|
String acceptUrl,
|
||||||
|
String rejectUrl)
|
||||||
|
{
|
||||||
|
// inviteeUserName was specified
|
||||||
|
NodeRef person = this.personService.getPerson(inviteeUserName);
|
||||||
|
|
||||||
|
Serializable firstNameVal = this.getNodeService().getProperty(person, ContentModel.PROP_FIRSTNAME);
|
||||||
|
Serializable lastNameVal = this.getNodeService().getProperty(person, ContentModel.PROP_LASTNAME);
|
||||||
|
Serializable emailVal = this.getNodeService().getProperty(person, ContentModel.PROP_EMAIL);
|
||||||
|
String firstName = DefaultTypeConverter.INSTANCE.convert(
|
||||||
|
String.class, firstNameVal);
|
||||||
|
String lastName = DefaultTypeConverter.INSTANCE.convert(
|
||||||
|
String.class, lastNameVal);
|
||||||
|
String email = DefaultTypeConverter.INSTANCE.convert(
|
||||||
|
String.class, emailVal);
|
||||||
|
|
||||||
|
return inviteNominated(firstName, lastName, email,
|
||||||
|
inviteeUserName, resourceType, resourceName, inviteeRole,
|
||||||
|
serverPath, acceptUrl, rejectUrl);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Start the invitation process for a NominatedInvitation
|
* Start the invitation process for a NominatedInvitation
|
||||||
*
|
*
|
||||||
@@ -111,11 +171,40 @@ public class InvitationServiceImpl implements InvitationService
|
|||||||
* @throws InvitationExceptionUserError
|
* @throws InvitationExceptionUserError
|
||||||
* @throws InvitationExceptionForbidden
|
* @throws InvitationExceptionForbidden
|
||||||
*/
|
*/
|
||||||
public NominatedInvitation inviteNominated(String inviteeFirstName,
|
public NominatedInvitation inviteNominated(
|
||||||
String inviteeLastName, String inviteeEmail,
|
String inviteeFirstName,
|
||||||
String inviteeUserName, Invitation.ResourceType resourceType,
|
String inviteeLastName,
|
||||||
String resourceName, String inviteeRole, String serverPath,
|
String inviteeEmail,
|
||||||
String acceptUrl, String rejectUrl)
|
Invitation.ResourceType resourceType,
|
||||||
|
String resourceName,
|
||||||
|
String inviteeRole,
|
||||||
|
String serverPath,
|
||||||
|
String acceptUrl,
|
||||||
|
String rejectUrl)
|
||||||
|
{
|
||||||
|
return inviteNominated(inviteeFirstName,
|
||||||
|
inviteeLastName,
|
||||||
|
inviteeEmail,
|
||||||
|
null,
|
||||||
|
resourceType,
|
||||||
|
resourceName,
|
||||||
|
inviteeRole,
|
||||||
|
serverPath,
|
||||||
|
acceptUrl,
|
||||||
|
rejectUrl);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Temporary method
|
||||||
|
private NominatedInvitation inviteNominated(String inviteeFirstName,
|
||||||
|
String inviteeLastName,
|
||||||
|
String inviteeEmail,
|
||||||
|
String inviteeUserName,
|
||||||
|
Invitation.ResourceType resourceType,
|
||||||
|
String resourceName,
|
||||||
|
String inviteeRole,
|
||||||
|
String serverPath,
|
||||||
|
String acceptUrl,
|
||||||
|
String rejectUrl)
|
||||||
{
|
{
|
||||||
// Validate the request
|
// Validate the request
|
||||||
|
|
||||||
@@ -123,7 +212,7 @@ public class InvitationServiceImpl implements InvitationService
|
|||||||
|
|
||||||
if (resourceType == Invitation.ResourceType.WEB_SITE)
|
if (resourceType == Invitation.ResourceType.WEB_SITE)
|
||||||
{
|
{
|
||||||
return startInvite(inviteeFirstName, inviteeLastName, inviteeEmail,
|
return startNominatedInvite(inviteeFirstName, inviteeLastName, inviteeEmail,
|
||||||
inviteeUserName, resourceType, resourceName, inviteeRole,
|
inviteeUserName, resourceType, resourceName, inviteeRole,
|
||||||
serverPath, acceptUrl, rejectUrl);
|
serverPath, acceptUrl, rejectUrl);
|
||||||
}
|
}
|
||||||
@@ -151,7 +240,7 @@ public class InvitationServiceImpl implements InvitationService
|
|||||||
{
|
{
|
||||||
if (resourceType == Invitation.ResourceType.WEB_SITE)
|
if (resourceType == Invitation.ResourceType.WEB_SITE)
|
||||||
{
|
{
|
||||||
return startInvite(inviteeComments, inviteeUserName, resourceType,
|
return startModeratedInvite(inviteeComments, inviteeUserName, resourceType,
|
||||||
resourceName, inviteeRole);
|
resourceName, inviteeRole);
|
||||||
}
|
}
|
||||||
throw new InvitationException("unknown resource type");
|
throw new InvitationException("unknown resource type");
|
||||||
@@ -335,10 +424,23 @@ public class InvitationServiceImpl implements InvitationService
|
|||||||
*
|
*
|
||||||
* @throws InvitationExceptionNotFound
|
* @throws InvitationExceptionNotFound
|
||||||
* the invitation does not exist.
|
* the invitation does not exist.
|
||||||
|
* @throws InvitationExceptionUserError
|
||||||
* @return the invitation.
|
* @return the invitation.
|
||||||
*/
|
*/
|
||||||
public Invitation getInvitation(String invitationId) {
|
public Invitation getInvitation(String invitationId) {
|
||||||
WorkflowInstance wi = workflowService.getWorkflowById(invitationId);
|
|
||||||
|
validateInvitationId(invitationId);
|
||||||
|
|
||||||
|
WorkflowInstance wi = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
wi = workflowService.getWorkflowById(invitationId);
|
||||||
|
}
|
||||||
|
catch (WorkflowException we)
|
||||||
|
{
|
||||||
|
// Do nothing
|
||||||
|
}
|
||||||
|
|
||||||
if (wi == null) {
|
if (wi == null) {
|
||||||
Object objs[] = { invitationId };
|
Object objs[] = { invitationId };
|
||||||
throw new InvitationExceptionNotFound("invitation.error.not_found",
|
throw new InvitationExceptionNotFound("invitation.error.not_found",
|
||||||
@@ -363,11 +465,14 @@ public class InvitationServiceImpl implements InvitationService
|
|||||||
|
|
||||||
// should also be 0 or 1
|
// should also be 0 or 1
|
||||||
if (inviteStartTasks.size() < 1) {
|
if (inviteStartTasks.size() < 1) {
|
||||||
return null;
|
Object objs[] = { invitationId };
|
||||||
|
throw new InvitationExceptionNotFound("invitation.error.not_found",
|
||||||
|
objs);
|
||||||
} else {
|
} else {
|
||||||
WorkflowTask task = inviteStartTasks.get(0);
|
WorkflowTask task = inviteStartTasks.get(0);
|
||||||
NominatedInvitationImpl result = new NominatedInvitationImpl(
|
NominatedInvitationImpl result = new NominatedInvitationImpl(
|
||||||
task.properties);
|
task.properties);
|
||||||
|
result.setSentInviteDate(task.path.instance.startDate);
|
||||||
result.setInviteId(invitationId);
|
result.setInviteId(invitationId);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -836,7 +941,7 @@ public class InvitationServiceImpl implements InvitationService
|
|||||||
* @param inviteeRole
|
* @param inviteeRole
|
||||||
* @return the new moderated invitation
|
* @return the new moderated invitation
|
||||||
*/
|
*/
|
||||||
private ModeratedInvitation startInvite(String inviteeComments,
|
private ModeratedInvitation startModeratedInvite(String inviteeComments,
|
||||||
String inviteeUserName, Invitation.ResourceType resourceType,
|
String inviteeUserName, Invitation.ResourceType resourceType,
|
||||||
String resourceName, String inviteeRole)
|
String resourceName, String inviteeRole)
|
||||||
{
|
{
|
||||||
@@ -878,10 +983,10 @@ public class InvitationServiceImpl implements InvitationService
|
|||||||
WorkflowModelModeratedInvitation.WF_PROP_INVITEE_USER_NAME,
|
WorkflowModelModeratedInvitation.WF_PROP_INVITEE_USER_NAME,
|
||||||
inviteeUserName);
|
inviteeUserName);
|
||||||
workflowProps.put(
|
workflowProps.put(
|
||||||
WorkflowModelNominatedInvitation.WF_PROP_RESOURCE_NAME,
|
WorkflowModelModeratedInvitation.WF_PROP_RESOURCE_NAME,
|
||||||
resourceName);
|
resourceName);
|
||||||
workflowProps.put(
|
workflowProps.put(
|
||||||
WorkflowModelNominatedInvitation.WF_PROP_RESOURCE_TYPE,
|
WorkflowModelModeratedInvitation.WF_PROP_RESOURCE_TYPE,
|
||||||
resourceType.toString());
|
resourceType.toString());
|
||||||
|
|
||||||
// get the moderated workflow
|
// get the moderated workflow
|
||||||
@@ -945,11 +1050,17 @@ public class InvitationServiceImpl implements InvitationService
|
|||||||
* externally accessible server address of server hosting invite
|
* externally accessible server address of server hosting invite
|
||||||
* web scripts
|
* web scripts
|
||||||
*/
|
*/
|
||||||
private NominatedInvitation startInvite(String inviteeFirstName,
|
private NominatedInvitation startNominatedInvite(
|
||||||
String inviteeLastName, String inviteeEmail,
|
String inviteeFirstName,
|
||||||
String inviteeUserName, Invitation.ResourceType resourceType,
|
String inviteeLastName,
|
||||||
String siteShortName, String inviteeSiteRole, String serverPath,
|
String inviteeEmail,
|
||||||
String acceptUrl, String rejectUrl) {
|
String inviteeUserName,
|
||||||
|
Invitation.ResourceType resourceType,
|
||||||
|
String siteShortName,
|
||||||
|
String inviteeSiteRole,
|
||||||
|
String serverPath,
|
||||||
|
String acceptUrl,
|
||||||
|
String rejectUrl) {
|
||||||
|
|
||||||
// get the inviter user name (the name of user web script is executed
|
// get the inviter user name (the name of user web script is executed
|
||||||
// under)
|
// under)
|
||||||
@@ -1003,7 +1114,8 @@ public class InvitationServiceImpl implements InvitationService
|
|||||||
// else there are no existing people who have the given invitee
|
// else there are no existing people who have the given invitee
|
||||||
// email address
|
// email address
|
||||||
// so create invitee person
|
// so create invitee person
|
||||||
else {
|
else
|
||||||
|
{
|
||||||
inviteeUserName = createInviteePerson(inviteeFirstName,
|
inviteeUserName = createInviteePerson(inviteeFirstName,
|
||||||
inviteeLastName, inviteeEmail);
|
inviteeLastName, inviteeEmail);
|
||||||
|
|
||||||
@@ -1013,9 +1125,25 @@ public class InvitationServiceImpl implements InvitationService
|
|||||||
+ inviteeUserName);
|
+ inviteeUserName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// inviteeUserName was specified
|
||||||
|
NodeRef person = this.personService.getPerson(inviteeUserName);
|
||||||
|
|
||||||
// throw web script exception if person is already a member of the given
|
Serializable firstNameVal = this.getNodeService().getProperty(person, ContentModel.PROP_FIRSTNAME);
|
||||||
// site
|
Serializable lastNameVal = this.getNodeService().getProperty(person, ContentModel.PROP_LASTNAME);
|
||||||
|
Serializable emailVal = this.getNodeService().getProperty(person, ContentModel.PROP_EMAIL);
|
||||||
|
firstNameVal = DefaultTypeConverter.INSTANCE.convert(
|
||||||
|
String.class, firstNameVal);
|
||||||
|
lastNameVal = DefaultTypeConverter.INSTANCE.convert(
|
||||||
|
String.class, lastNameVal);
|
||||||
|
emailVal = DefaultTypeConverter.INSTANCE.convert(
|
||||||
|
String.class, emailVal);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* throw exception if person is already a member of the given site
|
||||||
|
*/
|
||||||
if (this.siteService.isMember(siteShortName, inviteeUserName)) {
|
if (this.siteService.isMember(siteShortName, inviteeUserName)) {
|
||||||
if (logger.isDebugEnabled())
|
if (logger.isDebugEnabled())
|
||||||
logger
|
logger
|
||||||
@@ -1070,6 +1198,9 @@ public class InvitationServiceImpl implements InvitationService
|
|||||||
workflowProps.put(
|
workflowProps.put(
|
||||||
WorkflowModelNominatedInvitation.WF_PROP_INVITEE_USER_NAME,
|
WorkflowModelNominatedInvitation.WF_PROP_INVITEE_USER_NAME,
|
||||||
inviteeUserName);
|
inviteeUserName);
|
||||||
|
workflowProps.put(
|
||||||
|
WorkflowModelNominatedInvitation.WF_PROP_INVITEE_EMAIL,
|
||||||
|
inviteeEmail);
|
||||||
workflowProps.put(WorkflowModel.ASSOC_ASSIGNEE, inviteeNodeRef);
|
workflowProps.put(WorkflowModel.ASSOC_ASSIGNEE, inviteeNodeRef);
|
||||||
workflowProps.put(
|
workflowProps.put(
|
||||||
WorkflowModelNominatedInvitation.WF_PROP_INVITEE_FIRSTNAME,
|
WorkflowModelNominatedInvitation.WF_PROP_INVITEE_FIRSTNAME,
|
||||||
@@ -1087,7 +1218,7 @@ public class InvitationServiceImpl implements InvitationService
|
|||||||
WorkflowModelNominatedInvitation.WF_PROP_RESOURCE_TYPE,
|
WorkflowModelNominatedInvitation.WF_PROP_RESOURCE_TYPE,
|
||||||
resourceType.toString());
|
resourceType.toString());
|
||||||
workflowProps.put(
|
workflowProps.put(
|
||||||
WorkflowModelNominatedInvitation.WF_PROP_INVITEE_SITE_ROLE,
|
WorkflowModelNominatedInvitation.WF_PROP_INVITEE_ROLE,
|
||||||
inviteeSiteRole);
|
inviteeSiteRole);
|
||||||
workflowProps.put(WorkflowModelNominatedInvitation.WF_PROP_SERVER_PATH,
|
workflowProps.put(WorkflowModelNominatedInvitation.WF_PROP_SERVER_PATH,
|
||||||
serverPath);
|
serverPath);
|
||||||
@@ -1173,6 +1304,7 @@ public class InvitationServiceImpl implements InvitationService
|
|||||||
workflowProps);
|
workflowProps);
|
||||||
result.setTicket(inviteTicket);
|
result.setTicket(inviteTicket);
|
||||||
result.setInviteId(workflowId);
|
result.setInviteId(workflowId);
|
||||||
|
result.setSentInviteDate(new Date());
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1195,4 +1327,19 @@ public class InvitationServiceImpl implements InvitationService
|
|||||||
"invitation.invite.not_site_manager", objs);
|
"invitation.invite.not_site_manager", objs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validator for invitationId
|
||||||
|
* @param invitationId
|
||||||
|
*/
|
||||||
|
private void validateInvitationId(String invitationId)
|
||||||
|
{
|
||||||
|
final String ID_SEPERATOR_REGEX = "\\$";
|
||||||
|
String[] parts = invitationId.split(ID_SEPERATOR_REGEX);
|
||||||
|
if (parts.length != 2)
|
||||||
|
{
|
||||||
|
Object objs[] = { invitationId };
|
||||||
|
throw new InvitationExceptionUserError("invitation.error.invalid_inviteId_format", objs);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -24,13 +24,12 @@
|
|||||||
*/
|
*/
|
||||||
package org.alfresco.repo.invitation;
|
package org.alfresco.repo.invitation;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.alfresco.model.ContentModel;
|
import org.alfresco.model.ContentModel;
|
||||||
import org.alfresco.repo.security.authentication.AuthenticationComponent;
|
import org.alfresco.repo.security.authentication.AuthenticationComponent;
|
||||||
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
|
||||||
import org.alfresco.repo.security.authentication.MutableAuthenticationDao;
|
import org.alfresco.repo.security.authentication.MutableAuthenticationDao;
|
||||||
import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork;
|
|
||||||
import org.alfresco.repo.site.SiteModel;
|
import org.alfresco.repo.site.SiteModel;
|
||||||
import org.alfresco.service.cmr.invitation.InvitationExceptionUserError;
|
import org.alfresco.service.cmr.invitation.InvitationExceptionUserError;
|
||||||
import org.alfresco.service.cmr.invitation.InvitationSearchCriteria;
|
import org.alfresco.service.cmr.invitation.InvitationSearchCriteria;
|
||||||
@@ -39,21 +38,13 @@ import org.alfresco.service.cmr.invitation.Invitation;
|
|||||||
import org.alfresco.service.cmr.invitation.ModeratedInvitation;
|
import org.alfresco.service.cmr.invitation.ModeratedInvitation;
|
||||||
import org.alfresco.service.cmr.invitation.NominatedInvitation;
|
import org.alfresco.service.cmr.invitation.NominatedInvitation;
|
||||||
import org.alfresco.service.cmr.invitation.Invitation.ResourceType;
|
import org.alfresco.service.cmr.invitation.Invitation.ResourceType;
|
||||||
import org.alfresco.service.cmr.model.FileFolderService;
|
|
||||||
import org.alfresco.service.cmr.repository.NodeService;
|
|
||||||
import org.alfresco.service.cmr.repository.ScriptService;
|
|
||||||
import org.alfresco.service.cmr.security.AuthorityService;
|
|
||||||
import org.alfresco.service.cmr.security.AuthorityType;
|
|
||||||
import org.alfresco.service.cmr.security.PersonService;
|
import org.alfresco.service.cmr.security.PersonService;
|
||||||
import org.alfresco.service.cmr.site.SiteInfo;
|
import org.alfresco.service.cmr.site.SiteInfo;
|
||||||
import org.alfresco.service.cmr.site.SiteService;
|
import org.alfresco.service.cmr.site.SiteService;
|
||||||
import org.alfresco.service.cmr.site.SiteVisibility;
|
import org.alfresco.service.cmr.site.SiteVisibility;
|
||||||
import org.alfresco.service.cmr.tagging.TaggingService;
|
|
||||||
import org.alfresco.util.BaseAlfrescoSpringTest;
|
import org.alfresco.util.BaseAlfrescoSpringTest;
|
||||||
import org.alfresco.util.PropertyMap;
|
import org.alfresco.util.PropertyMap;
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* Unit tests of Invitation Service
|
* Unit tests of Invitation Service
|
||||||
@@ -79,6 +70,10 @@ public class InvitationServiceImplTest extends BaseAlfrescoSpringTest
|
|||||||
public static String USER_ONE = "InvitationServiceAlice";
|
public static String USER_ONE = "InvitationServiceAlice";
|
||||||
public static String USER_TWO = "InvitationServiceBob";
|
public static String USER_TWO = "InvitationServiceBob";
|
||||||
public static String USER_EVE = "InvitationServiceEve";
|
public static String USER_EVE = "InvitationServiceEve";
|
||||||
|
public static String USER_ONE_FIRSTNAME = "One" ;
|
||||||
|
public static String USER_ONE_LASTNAME = "Test";
|
||||||
|
public static String USER_ONE_EMAIL = USER_ONE + "@alfrescotesting.com";
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called during the transaction setup
|
* Called during the transaction setup
|
||||||
@@ -92,10 +87,10 @@ public class InvitationServiceImplTest extends BaseAlfrescoSpringTest
|
|||||||
this.authenticationComponent = (AuthenticationComponent)this.applicationContext.getBean("authenticationComponent");
|
this.authenticationComponent = (AuthenticationComponent)this.applicationContext.getBean("authenticationComponent");
|
||||||
this.mutableAuthenticationDao = (MutableAuthenticationDao)this.applicationContext.getBean("authenticationDao");
|
this.mutableAuthenticationDao = (MutableAuthenticationDao)this.applicationContext.getBean("authenticationDao");
|
||||||
|
|
||||||
createPerson(USER_MANAGER, "");
|
createPerson(USER_MANAGER, USER_MANAGER + "@alfrescotesting.com", PERSON_FIRSTNAME, PERSON_LASTNAME);
|
||||||
createPerson(USER_ONE, "");
|
createPerson(USER_ONE, USER_ONE_EMAIL,USER_ONE_FIRSTNAME, USER_ONE_LASTNAME);
|
||||||
createPerson(USER_TWO, "");
|
createPerson(USER_TWO, USER_TWO + "@alfrescotesting.com", PERSON_FIRSTNAME, PERSON_LASTNAME);
|
||||||
createPerson(USER_EVE, "");
|
createPerson(USER_EVE, USER_EVE + "@alfrescotesting.com", PERSON_FIRSTNAME, PERSON_LASTNAME);
|
||||||
|
|
||||||
this.authenticationComponent.setCurrentUser(USER_MANAGER);
|
this.authenticationComponent.setCurrentUser(USER_MANAGER);
|
||||||
|
|
||||||
@@ -158,7 +153,120 @@ public class InvitationServiceImplTest extends BaseAlfrescoSpringTest
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a Nominated Invitation
|
* Test nominated user - new user
|
||||||
|
*
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public void testNominatedInvitationNewUser() throws Exception
|
||||||
|
{
|
||||||
|
Date startDate = new java.util.Date();
|
||||||
|
|
||||||
|
String inviteeFirstName = PERSON_FIRSTNAME;
|
||||||
|
String inviteeLastName = PERSON_LASTNAME;
|
||||||
|
String inviteeEmail = "123";
|
||||||
|
String inviteeUserName = null;
|
||||||
|
Invitation.ResourceType resourceType = Invitation.ResourceType.WEB_SITE;
|
||||||
|
String resourceName = SITE_SHORT_NAME_INVITE;
|
||||||
|
String inviteeRole = SiteModel.SITE_COLLABORATOR;
|
||||||
|
String serverPath = "wibble";
|
||||||
|
String acceptUrl = "froob";
|
||||||
|
String rejectUrl = "marshmallow";
|
||||||
|
|
||||||
|
this.authenticationComponent.setCurrentUser(USER_MANAGER);
|
||||||
|
|
||||||
|
NominatedInvitation nominatedInvitation = invitationService.inviteNominated(
|
||||||
|
inviteeFirstName,
|
||||||
|
inviteeLastName,
|
||||||
|
inviteeEmail,
|
||||||
|
resourceType,
|
||||||
|
resourceName,
|
||||||
|
inviteeRole,
|
||||||
|
serverPath,
|
||||||
|
acceptUrl,
|
||||||
|
rejectUrl) ;
|
||||||
|
|
||||||
|
assertNotNull("nominated invitation is null", nominatedInvitation);
|
||||||
|
String inviteId = nominatedInvitation.getInviteId();
|
||||||
|
assertEquals("first name wrong", inviteeFirstName, nominatedInvitation.getInviteeFirstName());
|
||||||
|
assertEquals("last name wrong", inviteeLastName, nominatedInvitation.getInviteeLastName());
|
||||||
|
assertEquals("email name wrong", inviteeEmail, nominatedInvitation.getInviteeEmail());
|
||||||
|
|
||||||
|
// Generated User Name should be returned
|
||||||
|
inviteeUserName = nominatedInvitation.getInviteeUserName();
|
||||||
|
assertNotNull("generated user name is null", inviteeUserName);
|
||||||
|
// sentInviteDate should be set to today
|
||||||
|
{
|
||||||
|
Date sentDate = nominatedInvitation.getSentInviteDate();
|
||||||
|
assertTrue("sentDate wrong - too early", sentDate.after(startDate));
|
||||||
|
assertTrue("sentDate wrong - too late", sentDate.before(new Date(new Date().getTime()+ 1)));
|
||||||
|
}
|
||||||
|
|
||||||
|
assertEquals("resource type name wrong", resourceType, nominatedInvitation.getResourceType());
|
||||||
|
assertEquals("resource name wrong", resourceName, nominatedInvitation.getResourceName());
|
||||||
|
assertEquals("role name wrong", inviteeRole, nominatedInvitation.getRoleName());
|
||||||
|
assertEquals("server path wrong", serverPath, nominatedInvitation.getServerPath());
|
||||||
|
assertEquals("accept URL wrong", acceptUrl, nominatedInvitation.getAcceptUrl());
|
||||||
|
assertEquals("reject URL wrong", rejectUrl, nominatedInvitation.getRejectUrl());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Now we have an invitation get it and check the details have been returned correctly.
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
NominatedInvitation invitation = (NominatedInvitation)invitationService.getInvitation(inviteId);
|
||||||
|
|
||||||
|
assertNotNull("invitation is null", invitation);
|
||||||
|
assertEquals("invite id wrong", inviteId, invitation.getInviteId());
|
||||||
|
assertEquals("first name wrong", inviteeFirstName, invitation.getInviteeFirstName());
|
||||||
|
assertEquals("last name wrong", inviteeLastName, invitation.getInviteeLastName());
|
||||||
|
assertEquals("user name wrong", inviteeUserName, invitation.getInviteeUserName());
|
||||||
|
assertEquals("resource type name wrong", resourceType, invitation.getResourceType());
|
||||||
|
assertEquals("resource name wrong", resourceName, invitation.getResourceName());
|
||||||
|
assertEquals("role name wrong", inviteeRole, invitation.getRoleName());
|
||||||
|
assertEquals("server path wrong", serverPath, invitation.getServerPath());
|
||||||
|
assertEquals("accept URL wrong", acceptUrl, invitation.getAcceptUrl());
|
||||||
|
assertEquals("reject URL wrong", rejectUrl, invitation.getRejectUrl());
|
||||||
|
|
||||||
|
Date sentDate = invitation.getSentInviteDate();
|
||||||
|
// sentInviteDate should be set to today
|
||||||
|
assertTrue("sentDate wrong too early", sentDate.after(startDate));
|
||||||
|
assertTrue("sentDate wrong - too late", sentDate.before(new Date(new Date().getTime()+ 1)));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Search for the new invitation
|
||||||
|
*/
|
||||||
|
List<Invitation> invitations = invitationService.listPendingInvitationsForResource(resourceType, resourceName);
|
||||||
|
assertTrue("invitations is empty", !invitations.isEmpty());
|
||||||
|
|
||||||
|
NominatedInvitation firstInvite = (NominatedInvitation)invitations.get(0);
|
||||||
|
assertEquals("invite id wrong", inviteId, firstInvite.getInviteId());
|
||||||
|
assertEquals("first name wrong", inviteeFirstName, firstInvite.getInviteeFirstName());
|
||||||
|
assertEquals("last name wrong", inviteeLastName, firstInvite.getInviteeLastName());
|
||||||
|
assertEquals("user name wrong", inviteeUserName, firstInvite.getInviteeUserName());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Now accept the invitation
|
||||||
|
*/
|
||||||
|
NominatedInvitation acceptedInvitation = (NominatedInvitation)invitationService.accept(firstInvite.getInviteId(), firstInvite.getTicket());
|
||||||
|
assertEquals("invite id wrong", firstInvite.getInviteId(), acceptedInvitation.getInviteId());
|
||||||
|
assertEquals("first name wrong", inviteeFirstName, acceptedInvitation.getInviteeFirstName());
|
||||||
|
assertEquals("last name wrong", inviteeLastName, acceptedInvitation.getInviteeLastName());
|
||||||
|
assertEquals("user name wrong", inviteeUserName, acceptedInvitation.getInviteeUserName());
|
||||||
|
|
||||||
|
List<Invitation> it4 = invitationService.listPendingInvitationsForResource(resourceType, resourceName);
|
||||||
|
assertTrue("invitations is not empty", it4.isEmpty());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Now verify access control list
|
||||||
|
*/
|
||||||
|
String roleName = siteService.getMembersRole(resourceName, inviteeUserName);
|
||||||
|
assertEquals("role name wrong", roleName, inviteeRole);
|
||||||
|
siteService.removeMembership(resourceName, inviteeUserName);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a Nominated Invitation (for existing user, USER_ONE)
|
||||||
* read it.
|
* read it.
|
||||||
* search for it
|
* search for it
|
||||||
* cancel it
|
* cancel it
|
||||||
@@ -171,12 +279,13 @@ public class InvitationServiceImplTest extends BaseAlfrescoSpringTest
|
|||||||
* read it.
|
* read it.
|
||||||
* accept it
|
* accept it
|
||||||
*/
|
*/
|
||||||
public void testNominatedInvitation() throws Exception
|
public void testNominatedInvitationExistingUser() throws Exception
|
||||||
{
|
{
|
||||||
String inviteeFirstName = PERSON_FIRSTNAME;
|
String inviteeUserName = USER_ONE;
|
||||||
String inviteeLastName = PERSON_LASTNAME;
|
String inviteeEmail = USER_ONE_EMAIL;
|
||||||
String inviteeEmail = "123";
|
String inviteeFirstName = USER_ONE_FIRSTNAME;
|
||||||
String inviteeUserName = "invitee@alfrescotesting.com";
|
String inviteeLastName = USER_ONE_LASTNAME;
|
||||||
|
|
||||||
Invitation.ResourceType resourceType = Invitation.ResourceType.WEB_SITE;
|
Invitation.ResourceType resourceType = Invitation.ResourceType.WEB_SITE;
|
||||||
String resourceName = SITE_SHORT_NAME_INVITE;
|
String resourceName = SITE_SHORT_NAME_INVITE;
|
||||||
String inviteeRole = SiteModel.SITE_COLLABORATOR;
|
String inviteeRole = SiteModel.SITE_COLLABORATOR;
|
||||||
@@ -186,9 +295,7 @@ public class InvitationServiceImplTest extends BaseAlfrescoSpringTest
|
|||||||
|
|
||||||
this.authenticationComponent.setCurrentUser(USER_MANAGER);
|
this.authenticationComponent.setCurrentUser(USER_MANAGER);
|
||||||
|
|
||||||
NominatedInvitation nominatedInvitation = invitationService.inviteNominated(inviteeFirstName,
|
NominatedInvitation nominatedInvitation = invitationService.inviteNominated(
|
||||||
inviteeLastName,
|
|
||||||
inviteeEmail,
|
|
||||||
inviteeUserName,
|
inviteeUserName,
|
||||||
resourceType,
|
resourceType,
|
||||||
resourceName,
|
resourceName,
|
||||||
@@ -199,8 +306,6 @@ public class InvitationServiceImplTest extends BaseAlfrescoSpringTest
|
|||||||
|
|
||||||
assertNotNull("nominated invitation is null", nominatedInvitation);
|
assertNotNull("nominated invitation is null", nominatedInvitation);
|
||||||
String inviteId = nominatedInvitation.getInviteId();
|
String inviteId = nominatedInvitation.getInviteId();
|
||||||
assertEquals("first name wrong", inviteeFirstName, nominatedInvitation.getInviteeFirstName());
|
|
||||||
assertEquals("last name wrong", inviteeLastName, nominatedInvitation.getInviteeLastName());
|
|
||||||
assertEquals("user name wrong", inviteeUserName, nominatedInvitation.getInviteeUserName());
|
assertEquals("user name wrong", inviteeUserName, nominatedInvitation.getInviteeUserName());
|
||||||
assertEquals("resource type name wrong", resourceType, nominatedInvitation.getResourceType());
|
assertEquals("resource type name wrong", resourceType, nominatedInvitation.getResourceType());
|
||||||
assertEquals("resource name wrong", resourceName, nominatedInvitation.getResourceName());
|
assertEquals("resource name wrong", resourceName, nominatedInvitation.getResourceName());
|
||||||
@@ -209,6 +314,11 @@ public class InvitationServiceImplTest extends BaseAlfrescoSpringTest
|
|||||||
assertEquals("accept URL wrong", acceptUrl, nominatedInvitation.getAcceptUrl());
|
assertEquals("accept URL wrong", acceptUrl, nominatedInvitation.getAcceptUrl());
|
||||||
assertEquals("reject URL wrong", rejectUrl, nominatedInvitation.getRejectUrl());
|
assertEquals("reject URL wrong", rejectUrl, nominatedInvitation.getRejectUrl());
|
||||||
|
|
||||||
|
// These values should be read from the person record
|
||||||
|
assertEquals("first name wrong", inviteeFirstName, nominatedInvitation.getInviteeFirstName());
|
||||||
|
assertEquals("last name wrong", inviteeLastName, nominatedInvitation.getInviteeLastName());
|
||||||
|
assertEquals("email name wrong", inviteeEmail, nominatedInvitation.getInviteeEmail());
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Now we have an invitation get it and check the details have been returned correctly.
|
* Now we have an invitation get it and check the details have been returned correctly.
|
||||||
*/
|
*/
|
||||||
@@ -216,9 +326,7 @@ public class InvitationServiceImplTest extends BaseAlfrescoSpringTest
|
|||||||
|
|
||||||
assertNotNull("invitation is null", invitation);
|
assertNotNull("invitation is null", invitation);
|
||||||
assertEquals("invite id wrong", inviteId, invitation.getInviteId());
|
assertEquals("invite id wrong", inviteId, invitation.getInviteId());
|
||||||
assertEquals("first name wrong", inviteeFirstName, invitation.getInviteeFirstName());
|
assertEquals("user name wrong", inviteeUserName, nominatedInvitation.getInviteeUserName());
|
||||||
assertEquals("last name wrong", inviteeLastName, invitation.getInviteeLastName());
|
|
||||||
assertEquals("user name wrong", inviteeUserName, invitation.getInviteeUserName());
|
|
||||||
assertEquals("resource type name wrong", resourceType, invitation.getResourceType());
|
assertEquals("resource type name wrong", resourceType, invitation.getResourceType());
|
||||||
assertEquals("resource name wrong", resourceName, invitation.getResourceName());
|
assertEquals("resource name wrong", resourceName, invitation.getResourceName());
|
||||||
assertEquals("role name wrong", inviteeRole, invitation.getRoleName());
|
assertEquals("role name wrong", inviteeRole, invitation.getRoleName());
|
||||||
@@ -226,6 +334,11 @@ public class InvitationServiceImplTest extends BaseAlfrescoSpringTest
|
|||||||
assertEquals("accept URL wrong", acceptUrl, invitation.getAcceptUrl());
|
assertEquals("accept URL wrong", acceptUrl, invitation.getAcceptUrl());
|
||||||
assertEquals("reject URL wrong", rejectUrl, invitation.getRejectUrl());
|
assertEquals("reject URL wrong", rejectUrl, invitation.getRejectUrl());
|
||||||
|
|
||||||
|
// These values should have been read from the DB
|
||||||
|
assertEquals("first name wrong", inviteeFirstName, invitation.getInviteeFirstName());
|
||||||
|
assertEquals("last name wrong", inviteeLastName, invitation.getInviteeLastName());
|
||||||
|
assertEquals("email name wrong", inviteeEmail, invitation.getInviteeEmail());
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Search for the new invitation
|
* Search for the new invitation
|
||||||
*/
|
*/
|
||||||
@@ -256,9 +369,7 @@ public class InvitationServiceImplTest extends BaseAlfrescoSpringTest
|
|||||||
/**
|
/**
|
||||||
* Now invite and reject
|
* Now invite and reject
|
||||||
*/
|
*/
|
||||||
NominatedInvitation secondInvite = invitationService.inviteNominated(inviteeFirstName,
|
NominatedInvitation secondInvite = invitationService.inviteNominated(
|
||||||
inviteeLastName,
|
|
||||||
inviteeEmail,
|
|
||||||
inviteeUserName,
|
inviteeUserName,
|
||||||
resourceType,
|
resourceType,
|
||||||
resourceName,
|
resourceName,
|
||||||
@@ -269,8 +380,6 @@ public class InvitationServiceImplTest extends BaseAlfrescoSpringTest
|
|||||||
|
|
||||||
NominatedInvitation rejectedInvitation = (NominatedInvitation)invitationService.cancel(secondInvite.getInviteId());
|
NominatedInvitation rejectedInvitation = (NominatedInvitation)invitationService.cancel(secondInvite.getInviteId());
|
||||||
assertEquals("invite id wrong", secondInvite.getInviteId(), rejectedInvitation.getInviteId());
|
assertEquals("invite id wrong", secondInvite.getInviteId(), rejectedInvitation.getInviteId());
|
||||||
assertEquals("first name wrong", inviteeFirstName, rejectedInvitation.getInviteeFirstName());
|
|
||||||
assertEquals("last name wrong", inviteeLastName, rejectedInvitation.getInviteeLastName());
|
|
||||||
assertEquals("user name wrong", inviteeUserName, rejectedInvitation.getInviteeUserName());
|
assertEquals("user name wrong", inviteeUserName, rejectedInvitation.getInviteeUserName());
|
||||||
|
|
||||||
List<Invitation> it3 = invitationService.listPendingInvitationsForResource(resourceType, resourceName);
|
List<Invitation> it3 = invitationService.listPendingInvitationsForResource(resourceType, resourceName);
|
||||||
@@ -279,9 +388,7 @@ public class InvitationServiceImplTest extends BaseAlfrescoSpringTest
|
|||||||
/**
|
/**
|
||||||
* Now invite and accept
|
* Now invite and accept
|
||||||
*/
|
*/
|
||||||
NominatedInvitation thirdInvite = invitationService.inviteNominated(inviteeFirstName,
|
NominatedInvitation thirdInvite = invitationService.inviteNominated(
|
||||||
inviteeLastName,
|
|
||||||
inviteeEmail,
|
|
||||||
inviteeUserName,
|
inviteeUserName,
|
||||||
resourceType,
|
resourceType,
|
||||||
resourceName,
|
resourceName,
|
||||||
@@ -517,7 +624,7 @@ public class InvitationServiceImplTest extends BaseAlfrescoSpringTest
|
|||||||
*/
|
*/
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
invitationService.approve(invitationId, "No Way Hosea!");
|
invitationService.reject(invitationId, "No Way Hosea!");
|
||||||
assertTrue("excetion not thrown", false);
|
assertTrue("excetion not thrown", false);
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -532,7 +639,7 @@ public class InvitationServiceImplTest extends BaseAlfrescoSpringTest
|
|||||||
* Reject the invitation
|
* Reject the invitation
|
||||||
*/
|
*/
|
||||||
this.authenticationComponent.setCurrentUser(USER_MANAGER);
|
this.authenticationComponent.setCurrentUser(USER_MANAGER);
|
||||||
invitationService.approve(invitationId, "Go away!");
|
invitationService.reject(invitationId, "Go away!");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Negative test
|
* Negative test
|
||||||
@@ -584,9 +691,7 @@ public class InvitationServiceImplTest extends BaseAlfrescoSpringTest
|
|||||||
inviteeRole);
|
inviteeRole);
|
||||||
|
|
||||||
String oneId = invitationOne.getInviteId();
|
String oneId = invitationOne.getInviteId();
|
||||||
NominatedInvitation invitationTwo = invitationService.inviteNominated(inviteeFirstName,
|
NominatedInvitation invitationTwo = invitationService.inviteNominated(
|
||||||
inviteeLastName,
|
|
||||||
inviteeEmail,
|
|
||||||
USER_ONE,
|
USER_ONE,
|
||||||
resourceType,
|
resourceType,
|
||||||
SITE_SHORT_NAME_RED,
|
SITE_SHORT_NAME_RED,
|
||||||
@@ -596,9 +701,7 @@ public class InvitationServiceImplTest extends BaseAlfrescoSpringTest
|
|||||||
rejectUrl) ;
|
rejectUrl) ;
|
||||||
String twoId = invitationTwo.getInviteId();
|
String twoId = invitationTwo.getInviteId();
|
||||||
|
|
||||||
NominatedInvitation invitationThree = invitationService.inviteNominated(inviteeFirstName,
|
NominatedInvitation invitationThree = invitationService.inviteNominated(
|
||||||
inviteeLastName,
|
|
||||||
inviteeEmail,
|
|
||||||
USER_ONE,
|
USER_ONE,
|
||||||
resourceType,
|
resourceType,
|
||||||
SITE_SHORT_NAME_BLUE,
|
SITE_SHORT_NAME_BLUE,
|
||||||
@@ -683,11 +786,11 @@ public class InvitationServiceImplTest extends BaseAlfrescoSpringTest
|
|||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
// should have gone here
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createPerson(String userName, String emailAddress)
|
private void createPerson(String userName, String emailAddress, String firstName, String lastName)
|
||||||
{
|
{
|
||||||
// if user with given user name doesn't already exist then create user
|
// if user with given user name doesn't already exist then create user
|
||||||
if (this.authenticationService.authenticationExists(userName) == false)
|
if (this.authenticationService.authenticationExists(userName) == false)
|
||||||
@@ -704,8 +807,8 @@ public class InvitationServiceImplTest extends BaseAlfrescoSpringTest
|
|||||||
// create person properties
|
// create person properties
|
||||||
PropertyMap personProps = new PropertyMap();
|
PropertyMap personProps = new PropertyMap();
|
||||||
personProps.put(ContentModel.PROP_USERNAME, userName);
|
personProps.put(ContentModel.PROP_USERNAME, userName);
|
||||||
personProps.put(ContentModel.PROP_FIRSTNAME, PERSON_FIRSTNAME);
|
personProps.put(ContentModel.PROP_FIRSTNAME, firstName);
|
||||||
personProps.put(ContentModel.PROP_LASTNAME, PERSON_LASTNAME);
|
personProps.put(ContentModel.PROP_LASTNAME, lastName);
|
||||||
personProps.put(ContentModel.PROP_EMAIL, emailAddress);
|
personProps.put(ContentModel.PROP_EMAIL, emailAddress);
|
||||||
personProps.put(ContentModel.PROP_JOBTITLE, PERSON_JOBTITLE);
|
personProps.put(ContentModel.PROP_JOBTITLE, PERSON_JOBTITLE);
|
||||||
personProps.put(ContentModel.PROP_ORGANIZATION, PERSON_ORG);
|
personProps.put(ContentModel.PROP_ORGANIZATION, PERSON_ORG);
|
||||||
|
@@ -53,13 +53,6 @@ public class ModeratedActionApprove extends JBPMSpringActionHandler
|
|||||||
final String reviewer = (String)executionContext.getVariable(WorkflowModelModeratedInvitation.wfVarReviewer);
|
final String reviewer = (String)executionContext.getVariable(WorkflowModelModeratedInvitation.wfVarReviewer);
|
||||||
final String reviewComments = (String)executionContext.getVariable(WorkflowModelModeratedInvitation.wfVarReviewComments);
|
final String reviewComments = (String)executionContext.getVariable(WorkflowModelModeratedInvitation.wfVarReviewComments);
|
||||||
|
|
||||||
System.out.println("resourceType=" + resourceType);
|
|
||||||
System.out.println("resourceName=" + resourceName);
|
|
||||||
System.out.println("role=" + inviteeRole);
|
|
||||||
System.out.println("inviteeUserName=" + inviteeUserName);
|
|
||||||
System.out.println("reviewer=" + reviewer);
|
|
||||||
System.out.println("reviewComments=" + reviewComments);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add invitee to the site
|
* Add invitee to the site
|
||||||
*/
|
*/
|
||||||
@@ -67,7 +60,9 @@ public class ModeratedActionApprove extends JBPMSpringActionHandler
|
|||||||
{
|
{
|
||||||
public Object doWork() throws Exception
|
public Object doWork() throws Exception
|
||||||
{
|
{
|
||||||
siteService.setMembership(resourceName, inviteeUserName, inviteeRole);
|
// Add the new user to the web site
|
||||||
|
siteService.setMembership(resourceName, inviteeUserName, inviteeRole);
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,7 +1,6 @@
|
|||||||
package org.alfresco.repo.invitation;
|
package org.alfresco.repo.invitation;
|
||||||
|
|
||||||
|
|
||||||
import org.alfresco.repo.invitation.WorkflowModelNominatedInvitation;
|
|
||||||
import org.alfresco.repo.security.authentication.MutableAuthenticationDao;
|
import org.alfresco.repo.security.authentication.MutableAuthenticationDao;
|
||||||
import org.alfresco.repo.workflow.jbpm.JBPMSpringActionHandler;
|
import org.alfresco.repo.workflow.jbpm.JBPMSpringActionHandler;
|
||||||
import org.alfresco.service.ServiceRegistry;
|
import org.alfresco.service.ServiceRegistry;
|
||||||
@@ -40,6 +39,13 @@ public class ModeratedActionReject extends JBPMSpringActionHandler
|
|||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public void execute(final ExecutionContext executionContext) throws Exception
|
public void execute(final ExecutionContext executionContext) throws Exception
|
||||||
{
|
{
|
||||||
System.out.println("Reject woz ere!");
|
final String resourceType = (String)executionContext.getVariable(WorkflowModelModeratedInvitation.wfVarResourceType);
|
||||||
|
final String resourceName = (String)executionContext.getVariable(WorkflowModelModeratedInvitation.wfVarResourceName);
|
||||||
|
final String inviteeUserName = (String)executionContext.getVariable(WorkflowModelModeratedInvitation.wfVarInviteeUserName);
|
||||||
|
final String inviteeRole = (String)executionContext.getVariable(WorkflowModelModeratedInvitation.wfVarInviteeRole);
|
||||||
|
final String reviewer = (String)executionContext.getVariable(WorkflowModelModeratedInvitation.wfVarReviewer);
|
||||||
|
final String reviewComments = (String)executionContext.getVariable(WorkflowModelModeratedInvitation.wfVarReviewComments);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -25,7 +25,6 @@
|
|||||||
package org.alfresco.repo.invitation;
|
package org.alfresco.repo.invitation;
|
||||||
|
|
||||||
import org.alfresco.service.cmr.invitation.ModeratedInvitation;
|
import org.alfresco.service.cmr.invitation.ModeratedInvitation;
|
||||||
import org.alfresco.service.cmr.invitation.Invitation.ResourceType;
|
|
||||||
import org.alfresco.service.namespace.QName;
|
import org.alfresco.service.namespace.QName;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
@@ -44,14 +43,15 @@ import java.util.Map;
|
|||||||
|
|
||||||
private String roleName;
|
private String roleName;
|
||||||
private String inviteeComments;
|
private String inviteeComments;
|
||||||
|
private String inviteeUserName;
|
||||||
|
|
||||||
public ModeratedInvitationImpl()
|
public ModeratedInvitationImpl()
|
||||||
{
|
{
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ModeratedInvitationImpl(Map<QName, Serializable> workflowProps)
|
public ModeratedInvitationImpl(Map<QName, Serializable> workflowProps)
|
||||||
{
|
{
|
||||||
super();
|
super();
|
||||||
|
|
||||||
setInviteeUserName((String)workflowProps.get(WorkflowModelModeratedInvitation.WF_PROP_INVITEE_USER_NAME));
|
setInviteeUserName((String)workflowProps.get(WorkflowModelModeratedInvitation.WF_PROP_INVITEE_USER_NAME));
|
||||||
@@ -62,8 +62,7 @@ import java.util.Map;
|
|||||||
}
|
}
|
||||||
roleName = (String)workflowProps.get(WorkflowModelModeratedInvitation.WF_PROP_INVITEE_ROLE);
|
roleName = (String)workflowProps.get(WorkflowModelModeratedInvitation.WF_PROP_INVITEE_ROLE);
|
||||||
inviteeComments = (String)workflowProps.get(WorkflowModelModeratedInvitation.WF_PROP_INVITEE_COMMENTS);
|
inviteeComments = (String)workflowProps.get(WorkflowModelModeratedInvitation.WF_PROP_INVITEE_COMMENTS);
|
||||||
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void setRoleName(String roleName)
|
public void setRoleName(String roleName)
|
||||||
@@ -86,5 +85,16 @@ import java.util.Map;
|
|||||||
this.inviteeComments = inviteeComments;
|
this.inviteeComments = inviteeComments;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public InvitationType getInvitationType() {
|
||||||
|
return InvitationType.MODERATED;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setInviteeUserName(String inviteeUserName) {
|
||||||
|
this.inviteeUserName = inviteeUserName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getInviteeUserName() {
|
||||||
|
return inviteeUserName;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -27,6 +27,8 @@ package org.alfresco.repo.invitation;
|
|||||||
import org.alfresco.repo.workflow.WorkflowModel;
|
import org.alfresco.repo.workflow.WorkflowModel;
|
||||||
import org.alfresco.service.cmr.invitation.Invitation;
|
import org.alfresco.service.cmr.invitation.Invitation;
|
||||||
import org.alfresco.service.cmr.invitation.NominatedInvitation;
|
import org.alfresco.service.cmr.invitation.NominatedInvitation;
|
||||||
|
import org.alfresco.service.cmr.invitation.Invitation.InvitationType;
|
||||||
|
import org.alfresco.service.cmr.workflow.WorkflowTask;
|
||||||
import org.alfresco.service.namespace.QName;
|
import org.alfresco.service.namespace.QName;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
@@ -54,6 +56,11 @@ import java.util.Map;
|
|||||||
private Date sentInviteDate;
|
private Date sentInviteDate;
|
||||||
private String ticket;
|
private String ticket;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Who is this invitation for
|
||||||
|
*/
|
||||||
|
private String inviteeUserName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* create a new nominated invitation
|
* create a new nominated invitation
|
||||||
*/
|
*/
|
||||||
@@ -68,6 +75,7 @@ import java.util.Map;
|
|||||||
setInviteeUserName((String)workflowProps.get(WorkflowModelNominatedInvitation.WF_PROP_INVITEE_USER_NAME));
|
setInviteeUserName((String)workflowProps.get(WorkflowModelNominatedInvitation.WF_PROP_INVITEE_USER_NAME));
|
||||||
inviteeFirstName = (String)workflowProps.get(WorkflowModelNominatedInvitation.WF_PROP_INVITEE_FIRSTNAME);
|
inviteeFirstName = (String)workflowProps.get(WorkflowModelNominatedInvitation.WF_PROP_INVITEE_FIRSTNAME);
|
||||||
inviteeLastName = (String)workflowProps.get(WorkflowModelNominatedInvitation.WF_PROP_INVITEE_LASTNAME);
|
inviteeLastName = (String)workflowProps.get(WorkflowModelNominatedInvitation.WF_PROP_INVITEE_LASTNAME);
|
||||||
|
inviteeEmail = (String)workflowProps.get(WorkflowModelNominatedInvitation.WF_PROP_INVITEE_EMAIL);
|
||||||
// inviteePassword = (String)workflowProps.get(WorkflowModelNominatedInvitation.WF_PROP_INVITEE_GEN_PASSWORD);
|
// inviteePassword = (String)workflowProps.get(WorkflowModelNominatedInvitation.WF_PROP_INVITEE_GEN_PASSWORD);
|
||||||
setResourceName( (String)workflowProps.get(WorkflowModelNominatedInvitation.WF_PROP_RESOURCE_NAME));
|
setResourceName( (String)workflowProps.get(WorkflowModelNominatedInvitation.WF_PROP_RESOURCE_NAME));
|
||||||
|
|
||||||
@@ -75,12 +83,13 @@ import java.util.Map;
|
|||||||
{
|
{
|
||||||
setResourceType(ResourceType.valueOf((String)workflowProps.get(WorkflowModelNominatedInvitation.WF_PROP_RESOURCE_TYPE)));
|
setResourceType(ResourceType.valueOf((String)workflowProps.get(WorkflowModelNominatedInvitation.WF_PROP_RESOURCE_TYPE)));
|
||||||
}
|
}
|
||||||
roleName = (String)workflowProps.get(WorkflowModelNominatedInvitation.WF_PROP_INVITEE_SITE_ROLE);
|
roleName = (String)workflowProps.get(WorkflowModelNominatedInvitation.WF_PROP_INVITEE_ROLE);
|
||||||
serverPath = (String)workflowProps.get(WorkflowModelNominatedInvitation.WF_PROP_SERVER_PATH);
|
serverPath = (String)workflowProps.get(WorkflowModelNominatedInvitation.WF_PROP_SERVER_PATH);
|
||||||
acceptUrl = (String)workflowProps.get(WorkflowModelNominatedInvitation.WF_PROP_ACCEPT_URL);
|
acceptUrl = (String)workflowProps.get(WorkflowModelNominatedInvitation.WF_PROP_ACCEPT_URL);
|
||||||
rejectUrl = (String)workflowProps.get(WorkflowModelNominatedInvitation.WF_PROP_REJECT_URL);
|
rejectUrl = (String)workflowProps.get(WorkflowModelNominatedInvitation.WF_PROP_REJECT_URL);
|
||||||
ticket = (String)workflowProps.get(WorkflowModelNominatedInvitation.WF_PROP_INVITE_TICKET);
|
ticket = (String)workflowProps.get(WorkflowModelNominatedInvitation.WF_PROP_INVITE_TICKET);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setInviteeFirstName(String inviteeFirstName) {
|
public void setInviteeFirstName(String inviteeFirstName) {
|
||||||
@@ -154,4 +163,17 @@ import java.util.Map;
|
|||||||
return roleName;
|
return roleName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public InvitationType getInvitationType() {
|
||||||
|
return InvitationType.NOMINATED;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setInviteeUserName(String inviteeUserName) {
|
||||||
|
this.inviteeUserName = inviteeUserName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getInviteeUserName() {
|
||||||
|
return inviteeUserName;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -34,10 +34,10 @@ import org.alfresco.service.namespace.QName;
|
|||||||
public interface WorkflowModelNominatedInvitation {
|
public interface WorkflowModelNominatedInvitation {
|
||||||
|
|
||||||
// process name
|
// process name
|
||||||
public static final QName WF_PROCESS_INVITE = QName.createQName(NamespaceService.WORKFLOW_MODEL_1_0_URI, "invite");
|
public static final QName WF_PROCESS_INVITE = QName.createQName(NamespaceService.WORKFLOW_MODEL_1_0_URI, "invitation-nominated");
|
||||||
|
|
||||||
// workflow definition name
|
// workflow definition name
|
||||||
public static final String WORKFLOW_DEFINITION_NAME = "jbpm$wf:invite";
|
public static final String WORKFLOW_DEFINITION_NAME = "jbpm$wf:invitation-nominated";
|
||||||
|
|
||||||
// tasks
|
// tasks
|
||||||
public static final QName WF_INVITE_TASK_INVITE_TO_SITE = QName.createQName(NamespaceService.WORKFLOW_MODEL_1_0_URI, "inviteToSiteTask");
|
public static final QName WF_INVITE_TASK_INVITE_TO_SITE = QName.createQName(NamespaceService.WORKFLOW_MODEL_1_0_URI, "inviteToSiteTask");
|
||||||
@@ -60,12 +60,12 @@ public interface WorkflowModelNominatedInvitation {
|
|||||||
public static final QName WF_PROP_INVITE_TICKET = QName.createQName(NamespaceService.WORKFLOW_MODEL_1_0_URI, "inviteTicket");
|
public static final QName WF_PROP_INVITE_TICKET = QName.createQName(NamespaceService.WORKFLOW_MODEL_1_0_URI, "inviteTicket");
|
||||||
public static final QName WF_PROP_INVITER_USER_NAME = QName.createQName(NamespaceService.WORKFLOW_MODEL_1_0_URI, "inviterUserName");
|
public static final QName WF_PROP_INVITER_USER_NAME = QName.createQName(NamespaceService.WORKFLOW_MODEL_1_0_URI, "inviterUserName");
|
||||||
public static final QName WF_PROP_INVITEE_USER_NAME = QName.createQName(NamespaceService.WORKFLOW_MODEL_1_0_URI, "inviteeUserName");
|
public static final QName WF_PROP_INVITEE_USER_NAME = QName.createQName(NamespaceService.WORKFLOW_MODEL_1_0_URI, "inviteeUserName");
|
||||||
|
public static final QName WF_PROP_INVITEE_EMAIL = QName.createQName(NamespaceService.WORKFLOW_MODEL_1_0_URI, "inviteeEmail");
|
||||||
public static final QName WF_PROP_INVITEE_FIRSTNAME = QName.createQName(NamespaceService.WORKFLOW_MODEL_1_0_URI, "inviteeFirstName");
|
public static final QName WF_PROP_INVITEE_FIRSTNAME = QName.createQName(NamespaceService.WORKFLOW_MODEL_1_0_URI, "inviteeFirstName");
|
||||||
public static final QName WF_PROP_INVITEE_LASTNAME = QName.createQName(NamespaceService.WORKFLOW_MODEL_1_0_URI, "inviteeLastName");
|
public static final QName WF_PROP_INVITEE_LASTNAME = QName.createQName(NamespaceService.WORKFLOW_MODEL_1_0_URI, "inviteeLastName");
|
||||||
public static final QName WF_PROP_RESOURCE_TYPE = QName.createQName(NamespaceService.WORKFLOW_MODEL_1_0_URI, "resourceType");
|
public static final QName WF_PROP_RESOURCE_TYPE = QName.createQName(NamespaceService.WORKFLOW_MODEL_1_0_URI, "resourceType");
|
||||||
public static final QName WF_PROP_RESOURCE_NAME = QName.createQName(NamespaceService.WORKFLOW_MODEL_1_0_URI, "resourceName");
|
public static final QName WF_PROP_RESOURCE_NAME = QName.createQName(NamespaceService.WORKFLOW_MODEL_1_0_URI, "resourceName");
|
||||||
public static final QName WF_PROP_INVITEE_SITE_ROLE = QName.createQName(NamespaceService.WORKFLOW_MODEL_1_0_URI, "inviteeSiteRole");
|
public static final QName WF_PROP_INVITEE_ROLE = QName.createQName(NamespaceService.WORKFLOW_MODEL_1_0_URI, "inviteeRole");
|
||||||
public static final QName WF_PROP_SENT_INVITE_DATE = QName.createQName(NamespaceService.WORKFLOW_MODEL_1_0_URI, "sentInviteDate");
|
|
||||||
public static final QName WF_PROP_INVITEE_GEN_PASSWORD = QName.createQName(NamespaceService.WORKFLOW_MODEL_1_0_URI, "inviteeGenPassword");
|
public static final QName WF_PROP_INVITEE_GEN_PASSWORD = QName.createQName(NamespaceService.WORKFLOW_MODEL_1_0_URI, "inviteeGenPassword");
|
||||||
|
|
||||||
// workflow execution context variable names
|
// workflow execution context variable names
|
||||||
@@ -74,6 +74,6 @@ public interface WorkflowModelNominatedInvitation {
|
|||||||
public static final String wfVarResourceName = "wf_resourceName";
|
public static final String wfVarResourceName = "wf_resourceName";
|
||||||
public static final String wfVarResourceType = "wf_resourceType";
|
public static final String wfVarResourceType = "wf_resourceType";
|
||||||
public static final String wfVarWorkflowInstanceId = "workflowinstanceid";
|
public static final String wfVarWorkflowInstanceId = "workflowinstanceid";
|
||||||
public static final String wfVarRole = "wf_inviteeSiteRole";
|
public static final String wfVarRole = "wf_inviteeRole";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,76 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2009 Alfresco Software Limited.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; either version 2
|
||||||
|
* of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
|
* As a special exception to the terms and conditions of version 2.0 of
|
||||||
|
* the GPL, you may redistribute this Program in connection with Free/Libre
|
||||||
|
* and Open Source Software ("FLOSS") applications as described in Alfresco's
|
||||||
|
* FLOSS exception. You should have recieved a copy of the text describing
|
||||||
|
* the FLOSS exception, and it is also available here:
|
||||||
|
* http://www.alfresco.com/legal/licensing"
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.alfresco.repo.invitation.script;
|
||||||
|
|
||||||
|
import org.alfresco.service.cmr.invitation.Invitation;
|
||||||
|
import org.alfresco.service.cmr.invitation.InvitationService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Java script invitation for the Java Script API
|
||||||
|
*
|
||||||
|
* @author mrogers
|
||||||
|
*/
|
||||||
|
public class ScriptInvitation
|
||||||
|
{
|
||||||
|
private Invitation invitation;
|
||||||
|
private InvitationService invitationService;
|
||||||
|
|
||||||
|
public ScriptInvitation(Invitation invitation, InvitationService invitationService)
|
||||||
|
{
|
||||||
|
this.invitation = invitation;
|
||||||
|
this.invitationService = invitationService;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getInviteId()
|
||||||
|
{
|
||||||
|
return invitation.getInviteId();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getInvitationType()
|
||||||
|
{
|
||||||
|
return invitation.getInvitationType().toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getResourceName()
|
||||||
|
{
|
||||||
|
return invitation.getResourceName();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getResourceType()
|
||||||
|
{
|
||||||
|
return invitation.getResourceType().toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Invitation getInvitation()
|
||||||
|
{
|
||||||
|
return invitation;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected InvitationService getInvitationService()
|
||||||
|
{
|
||||||
|
return invitationService;
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2009 Alfresco Software Limited.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; either version 2
|
||||||
|
* of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
|
* As a special exception to the terms and conditions of version 2.0 of
|
||||||
|
* the GPL, you may redistribute this Program in connection with Free/Libre
|
||||||
|
* and Open Source Software ("FLOSS") applications as described in Alfresco's
|
||||||
|
* FLOSS exception. You should have recieved a copy of the text describing
|
||||||
|
* the FLOSS exception, and it is also available here:
|
||||||
|
* http://www.alfresco.com/legal/licensing"
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.alfresco.repo.invitation.script;
|
||||||
|
|
||||||
|
import org.alfresco.error.AlfrescoRuntimeException;
|
||||||
|
import org.alfresco.service.cmr.invitation.Invitation;
|
||||||
|
import org.alfresco.service.cmr.invitation.InvitationService;
|
||||||
|
import org.alfresco.service.cmr.invitation.ModeratedInvitation;
|
||||||
|
import org.alfresco.service.cmr.invitation.NominatedInvitation;
|
||||||
|
|
||||||
|
public class ScriptInvitationFactory
|
||||||
|
{
|
||||||
|
public static ScriptInvitation toScriptInvitation(Invitation invitation, InvitationService invitationService)
|
||||||
|
{
|
||||||
|
if(invitation instanceof NominatedInvitation)
|
||||||
|
{
|
||||||
|
return new ScriptNominatedInvitation(invitation, invitationService);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(invitation instanceof ModeratedInvitation)
|
||||||
|
{
|
||||||
|
return new ScriptModeratedInvitation(invitation, invitationService);
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new AlfrescoRuntimeException("unknown invitation type");
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,93 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2009 Alfresco Software Limited.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; either version 2
|
||||||
|
* of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
|
* As a special exception to the terms and conditions of version 2.0 of
|
||||||
|
* the GPL, you may redistribute this Program in connection with Free/Libre
|
||||||
|
* and Open Source Software ("FLOSS") applications as described in Alfresco's
|
||||||
|
* FLOSS exception. You should have recieved a copy of the text describing
|
||||||
|
* the FLOSS exception, and it is also available here:
|
||||||
|
* http://www.alfresco.com/legal/licensing"
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.alfresco.repo.invitation.script;
|
||||||
|
|
||||||
|
import org.alfresco.service.cmr.invitation.Invitation;
|
||||||
|
import org.alfresco.service.cmr.invitation.InvitationService;
|
||||||
|
import org.alfresco.service.cmr.invitation.ModeratedInvitation;
|
||||||
|
import org.alfresco.service.cmr.invitation.NominatedInvitation;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Java script moderated invitation for the Java Script API
|
||||||
|
*
|
||||||
|
* @author mrogers
|
||||||
|
*/
|
||||||
|
public class ScriptModeratedInvitation extends ScriptInvitation implements java.io.Serializable
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private static final long serialVersionUID = 4285823431857215500L;
|
||||||
|
|
||||||
|
public ScriptModeratedInvitation(Invitation invitation, InvitationService invitationService)
|
||||||
|
{
|
||||||
|
super(invitation, invitationService);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void approve(String reason)
|
||||||
|
{
|
||||||
|
getInvitationService().approve(getInviteId(), reason);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void reject(String reason)
|
||||||
|
{
|
||||||
|
getInvitationService().reject(getInviteId(), reason);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void cancel()
|
||||||
|
{
|
||||||
|
getInvitationService().cancel(getInviteId());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Which role to be added with
|
||||||
|
* @return the roleName
|
||||||
|
*/
|
||||||
|
public String getRoleName()
|
||||||
|
{
|
||||||
|
return ((ModeratedInvitation)getInvitation()).getRoleName();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The invitee comments - why does the invitee want access ?
|
||||||
|
* @return invitee comments
|
||||||
|
*/
|
||||||
|
public String getInviteeComments()
|
||||||
|
{
|
||||||
|
return ((ModeratedInvitation)getInvitation()).getInviteeComments();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The inviteeUserName
|
||||||
|
* @return the invitee user name
|
||||||
|
*/
|
||||||
|
public String getInviteeUserName()
|
||||||
|
{
|
||||||
|
return ((ModeratedInvitation)getInvitation()).getInviteeUserName();
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,101 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2009 Alfresco Software Limited.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; either version 2
|
||||||
|
* of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
|
* As a special exception to the terms and conditions of version 2.0 of
|
||||||
|
* the GPL, you may redistribute this Program in connection with Free/Libre
|
||||||
|
* and Open Source Software ("FLOSS") applications as described in Alfresco's
|
||||||
|
* FLOSS exception. You should have recieved a copy of the text describing
|
||||||
|
* the FLOSS exception, and it is also available here:
|
||||||
|
* http://www.alfresco.com/legal/licensing"
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.alfresco.repo.invitation.script;
|
||||||
|
|
||||||
|
|
||||||
|
import org.alfresco.service.cmr.invitation.Invitation;
|
||||||
|
import org.alfresco.service.cmr.invitation.InvitationService;
|
||||||
|
import org.alfresco.service.cmr.invitation.NominatedInvitation;
|
||||||
|
import org.alfresco.util.ISO8601DateFormat;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Java script moderated invitation for the Java Script API
|
||||||
|
*
|
||||||
|
* @author mrogers
|
||||||
|
*/
|
||||||
|
public class ScriptNominatedInvitation extends ScriptInvitation implements java.io.Serializable
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private static final long serialVersionUID = 6079656007339750930L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
public ScriptNominatedInvitation(Invitation invitation, InvitationService invitationService)
|
||||||
|
{
|
||||||
|
super(invitation, invitationService);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void accept(String reason)
|
||||||
|
{
|
||||||
|
getInvitationService().accept(getInviteId(), reason);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void reject(String reason)
|
||||||
|
{
|
||||||
|
getInvitationService().reject(getInviteId(), reason);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void cancel()
|
||||||
|
{
|
||||||
|
getInvitationService().cancel(getInviteId());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Which role to be added with
|
||||||
|
* @return the roleName
|
||||||
|
*/
|
||||||
|
public String getRoleName()
|
||||||
|
{
|
||||||
|
return ((NominatedInvitation)getInvitation()).getRoleName();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getInviteeUserName()
|
||||||
|
{
|
||||||
|
return ((NominatedInvitation)getInvitation()).getInviteeUserName();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Which role to be added with
|
||||||
|
* @return the roleName
|
||||||
|
*/
|
||||||
|
public Date getSentInviteDate()
|
||||||
|
{
|
||||||
|
return ((NominatedInvitation)getInvitation()).getSentInviteDate();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSentInviteDateAsISO8601()
|
||||||
|
{
|
||||||
|
return ISO8601DateFormat.format(getSentInviteDate());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -139,7 +139,7 @@ public class InviteHelper
|
|||||||
final String inviteeUserNameProp = (String) startInviteTask.properties.get(
|
final String inviteeUserNameProp = (String) startInviteTask.properties.get(
|
||||||
WorkflowModelNominatedInvitation.WF_PROP_INVITEE_USER_NAME);
|
WorkflowModelNominatedInvitation.WF_PROP_INVITEE_USER_NAME);
|
||||||
final String role = (String) startInviteTask.properties.get(
|
final String role = (String) startInviteTask.properties.get(
|
||||||
WorkflowModelNominatedInvitation.WF_PROP_INVITEE_SITE_ROLE);
|
WorkflowModelNominatedInvitation.WF_PROP_INVITEE_ROLE);
|
||||||
final String siteShortNameProp = (String) startInviteTask.properties.get(
|
final String siteShortNameProp = (String) startInviteTask.properties.get(
|
||||||
WorkflowModelNominatedInvitation.WF_PROP_RESOURCE_NAME);
|
WorkflowModelNominatedInvitation.WF_PROP_RESOURCE_NAME);
|
||||||
|
|
||||||
|
@@ -29,6 +29,9 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.alfresco.error.AlfrescoRuntimeException;
|
import org.alfresco.error.AlfrescoRuntimeException;
|
||||||
|
import org.alfresco.repo.invitation.InvitationSearchCriteriaImpl;
|
||||||
|
import org.alfresco.repo.invitation.script.ScriptInvitation;
|
||||||
|
import org.alfresco.repo.invitation.script.ScriptInvitationFactory;
|
||||||
import org.alfresco.repo.jscript.ContentAwareScriptableQNameMap;
|
import org.alfresco.repo.jscript.ContentAwareScriptableQNameMap;
|
||||||
import org.alfresco.repo.jscript.ScriptNode;
|
import org.alfresco.repo.jscript.ScriptNode;
|
||||||
import org.alfresco.repo.jscript.ScriptableHashMap;
|
import org.alfresco.repo.jscript.ScriptableHashMap;
|
||||||
@@ -40,6 +43,11 @@ import org.alfresco.repo.security.permissions.AccessDeniedException;
|
|||||||
import org.alfresco.repo.site.SiteModel;
|
import org.alfresco.repo.site.SiteModel;
|
||||||
import org.alfresco.service.ServiceRegistry;
|
import org.alfresco.service.ServiceRegistry;
|
||||||
import org.alfresco.service.cmr.dictionary.PropertyDefinition;
|
import org.alfresco.service.cmr.dictionary.PropertyDefinition;
|
||||||
|
import org.alfresco.service.cmr.invitation.Invitation;
|
||||||
|
import org.alfresco.service.cmr.invitation.InvitationException;
|
||||||
|
import org.alfresco.service.cmr.invitation.InvitationSearchCriteria;
|
||||||
|
import org.alfresco.service.cmr.invitation.InvitationService;
|
||||||
|
import org.alfresco.service.cmr.invitation.InvitationSearchCriteria.InvitationType;
|
||||||
import org.alfresco.service.cmr.repository.NodeRef;
|
import org.alfresco.service.cmr.repository.NodeRef;
|
||||||
import org.alfresco.service.cmr.security.PermissionService;
|
import org.alfresco.service.cmr.security.PermissionService;
|
||||||
import org.alfresco.service.cmr.site.SiteInfo;
|
import org.alfresco.service.cmr.site.SiteInfo;
|
||||||
@@ -47,6 +55,9 @@ import org.alfresco.service.cmr.site.SiteService;
|
|||||||
import org.alfresco.service.cmr.site.SiteVisibility;
|
import org.alfresco.service.cmr.site.SiteVisibility;
|
||||||
import org.alfresco.service.namespace.QName;
|
import org.alfresco.service.namespace.QName;
|
||||||
import org.alfresco.util.ParameterCheck;
|
import org.alfresco.util.ParameterCheck;
|
||||||
|
import org.alfresco.wcm.asset.AssetInfo;
|
||||||
|
import org.alfresco.wcm.sandbox.script.Asset;
|
||||||
|
import org.mozilla.javascript.NativeObject;
|
||||||
import org.mozilla.javascript.Scriptable;
|
import org.mozilla.javascript.Scriptable;
|
||||||
import org.mozilla.javascript.ScriptableObject;
|
import org.mozilla.javascript.ScriptableObject;
|
||||||
|
|
||||||
@@ -594,6 +605,113 @@ public class Site implements Serializable
|
|||||||
return this.customProperties;
|
return this.customProperties;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create new moderated invitation to this web site
|
||||||
|
* @return the new invitation
|
||||||
|
*/
|
||||||
|
public ScriptInvitation inviteModerated(String inviteeComments, String inviteeUserName, String inviteeRole)
|
||||||
|
{
|
||||||
|
InvitationService invitationService = serviceRegistry.getInvitationService();
|
||||||
|
Invitation invitation = invitationService.inviteModerated(inviteeComments, inviteeUserName, Invitation.ResourceType.WEB_SITE, getShortName(), inviteeRole);
|
||||||
|
return ScriptInvitationFactory.toScriptInvitation(invitation, invitationService);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create new nominated invitation to this web site
|
||||||
|
* @return the new invitation
|
||||||
|
*/
|
||||||
|
public ScriptInvitation inviteNominated(String inviteeFirstName, String inviteeLastName, String inviteeEmail, String inviteeRole, String serverPath, String acceptUrl, String rejectUrl)
|
||||||
|
{
|
||||||
|
InvitationService invitationService = serviceRegistry.getInvitationService();
|
||||||
|
Invitation invitation = invitationService.inviteNominated(inviteeFirstName, inviteeLastName, inviteeEmail, Invitation.ResourceType.WEB_SITE, getShortName(), inviteeRole, serverPath, acceptUrl, rejectUrl);
|
||||||
|
return ScriptInvitationFactory.toScriptInvitation(invitation, invitationService);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create new nominated invitation to this web site
|
||||||
|
* @return the new invitation
|
||||||
|
*/
|
||||||
|
public ScriptInvitation inviteNominated(String inviteeUserName, String inviteeRole, String serverPath, String acceptUrl, String rejectUrl)
|
||||||
|
{
|
||||||
|
InvitationService invitationService = serviceRegistry.getInvitationService();
|
||||||
|
Invitation invitation = invitationService.inviteNominated(inviteeUserName, Invitation.ResourceType.WEB_SITE, getShortName(), inviteeRole, serverPath, acceptUrl, rejectUrl);
|
||||||
|
return ScriptInvitationFactory.toScriptInvitation(invitation, invitationService);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get an invitation to this web site
|
||||||
|
* @return the invitation or null if it does not exist
|
||||||
|
*/
|
||||||
|
public ScriptInvitation getInvitation(String invitationId)
|
||||||
|
{
|
||||||
|
InvitationService invitationService = serviceRegistry.getInvitationService();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Invitation invitation = invitationService.getInvitation(invitationId);
|
||||||
|
return ScriptInvitationFactory.toScriptInvitation(invitation, invitationService);
|
||||||
|
}
|
||||||
|
catch (InvitationException e)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* list the outstanding invitations for this site
|
||||||
|
*
|
||||||
|
* Map of name / invitation
|
||||||
|
*/
|
||||||
|
public ScriptInvitation[] listInvitations()
|
||||||
|
{
|
||||||
|
InvitationService invitationService = serviceRegistry.getInvitationService();
|
||||||
|
|
||||||
|
List<Invitation> invitations = invitationService.listPendingInvitationsForResource(Invitation.ResourceType.WEB_SITE, getShortName());
|
||||||
|
ScriptInvitation[] ret = new ScriptInvitation[invitations.size()];
|
||||||
|
int i = 0;
|
||||||
|
for(Invitation item : invitations)
|
||||||
|
{
|
||||||
|
ret[i++] = ScriptInvitationFactory.toScriptInvitation(item, invitationService);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* List the open invitations for this web site.
|
||||||
|
* props specifies optional properties to be searched.
|
||||||
|
*
|
||||||
|
* @param props inviteeUserName
|
||||||
|
*
|
||||||
|
* @return the invitations
|
||||||
|
*/
|
||||||
|
public ScriptInvitation[] listInvitations(Scriptable props)
|
||||||
|
{
|
||||||
|
|
||||||
|
InvitationService invitationService = serviceRegistry.getInvitationService();
|
||||||
|
|
||||||
|
InvitationSearchCriteriaImpl crit = new InvitationSearchCriteriaImpl();
|
||||||
|
crit.setResourceName(getShortName());
|
||||||
|
crit.setResourceType(Invitation.ResourceType.WEB_SITE);
|
||||||
|
|
||||||
|
if (props.has("inviteeUserName", props))
|
||||||
|
{
|
||||||
|
crit.setInvitee((String)props.get("inviteeUserName", props));
|
||||||
|
}
|
||||||
|
if (props.has("invitationType", props))
|
||||||
|
{
|
||||||
|
String invitationType = (String)props.get("inviteeUserName", props);
|
||||||
|
crit.setInvitationType(InvitationType.valueOf(invitationType));
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Invitation> invitations = invitationService.searchInvitation(crit);
|
||||||
|
ScriptInvitation[] ret = new ScriptInvitation[invitations.size()];
|
||||||
|
int i = 0;
|
||||||
|
for(Invitation item : invitations)
|
||||||
|
{
|
||||||
|
ret[i++] = ScriptInvitationFactory.toScriptInvitation(item, invitationService);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Custom property helper class
|
* Custom property helper class
|
||||||
*
|
*
|
||||||
|
@@ -46,6 +46,16 @@ public interface Invitation
|
|||||||
WEB_SITE
|
WEB_SITE
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* What type of invitation are we?
|
||||||
|
* (Just Web site for now)
|
||||||
|
*/
|
||||||
|
enum InvitationType
|
||||||
|
{
|
||||||
|
NOMINATED,
|
||||||
|
MODERATED
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* What sort of resource is it, for example a WEB_SITE?
|
* What sort of resource is it, for example a WEB_SITE?
|
||||||
* @return the resource type
|
* @return the resource type
|
||||||
@@ -58,16 +68,16 @@ public interface Invitation
|
|||||||
*/
|
*/
|
||||||
public String getResourceName();
|
public String getResourceName();
|
||||||
|
|
||||||
/**
|
|
||||||
* Who is this invitation for ?
|
|
||||||
* @return the user name of the invitee
|
|
||||||
*/
|
|
||||||
public String getInviteeUserName();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* What is the unique reference for this invitation ?
|
* What is the unique reference for this invitation ?
|
||||||
* @return the unique reference for this invitation
|
* @return the unique reference for this invitation
|
||||||
*/
|
*/
|
||||||
public String getInviteId();
|
public String getInviteId();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* What sort of invitation is this ?
|
||||||
|
*/
|
||||||
|
public InvitationType getInvitationType();
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -38,14 +38,48 @@ import java.util.List;
|
|||||||
*/
|
*/
|
||||||
public interface InvitationService
|
public interface InvitationService
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* Get the names of the workflows managed by the invitation service.
|
||||||
|
*
|
||||||
|
* @return the names of the workkflows managed by the invitation service.
|
||||||
|
*/
|
||||||
|
public List<String> getInvitationServiceWorkflowNames();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Start the invitation process for a NominatedInvitation
|
* Start the invitation process for a NominatedInvitation for a user who does not yet have an Alfresco User Name
|
||||||
|
*
|
||||||
|
* @param inviteeUserName Alfresco user name of who should be invited
|
||||||
|
* @param ResourceType resourceType
|
||||||
|
* @param resourceName
|
||||||
|
* @param inviteeRole
|
||||||
|
* @param serverPath
|
||||||
|
* @param acceptUrl
|
||||||
|
* @param rejectUrl
|
||||||
|
*
|
||||||
|
* @return the nominated invitation which will contain the invitationId and
|
||||||
|
* ticket which will uniqely identify this invitation for the rest
|
||||||
|
* of the workflow.
|
||||||
|
*
|
||||||
|
* @throws InvitationException
|
||||||
|
* @throws InvitationExceptionUserError
|
||||||
|
* @throws InvitationExceptionForbidden
|
||||||
|
*/
|
||||||
|
public NominatedInvitation inviteNominated(
|
||||||
|
String inviteeUserName,
|
||||||
|
Invitation.ResourceType resourceType,
|
||||||
|
String resourceName,
|
||||||
|
String inviteeRole,
|
||||||
|
String serverPath,
|
||||||
|
String acceptUrl,
|
||||||
|
String rejectUrl) ;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Start the invitation process for a NominatedInvitation for a user who does not yet have an
|
||||||
|
* Alfresco User NameA new user name will be generated as part of the invitation process.
|
||||||
*
|
*
|
||||||
* @param inviteeFirstName
|
* @param inviteeFirstName
|
||||||
* @param inviteeLastName
|
* @param inviteeLastName
|
||||||
* @param inviteeEmail
|
* @param inviteeEmail
|
||||||
* @param inviteeUserName the alfresco user name of the invitee, may be null for a new user
|
|
||||||
* @param Invitation.ResourceType resourceType
|
* @param Invitation.ResourceType resourceType
|
||||||
* @param resourceName
|
* @param resourceName
|
||||||
* @param inviteeRole
|
* @param inviteeRole
|
||||||
@@ -64,7 +98,6 @@ public interface InvitationService
|
|||||||
String inviteeFirstName,
|
String inviteeFirstName,
|
||||||
String inviteeLastName,
|
String inviteeLastName,
|
||||||
String inviteeEmail,
|
String inviteeEmail,
|
||||||
String inviteeUserName,
|
|
||||||
Invitation.ResourceType resourceType,
|
Invitation.ResourceType resourceType,
|
||||||
String resourceName,
|
String resourceName,
|
||||||
String inviteeRole,
|
String inviteeRole,
|
||||||
|
@@ -37,12 +37,6 @@ package org.alfresco.service.cmr.invitation;
|
|||||||
*/
|
*/
|
||||||
public interface ModeratedInvitation extends Invitation
|
public interface ModeratedInvitation extends Invitation
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* Which resource to be invited to?
|
|
||||||
* @return the resource name.
|
|
||||||
*/
|
|
||||||
public String getResourceName();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Which role to be added with
|
* Which role to be added with
|
||||||
* @return the roleName
|
* @return the roleName
|
||||||
@@ -55,4 +49,10 @@ public interface ModeratedInvitation extends Invitation
|
|||||||
*/
|
*/
|
||||||
public String getInviteeComments();
|
public String getInviteeComments();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Who wants to be added
|
||||||
|
* @return inviteeUserName
|
||||||
|
*/
|
||||||
|
public String getInviteeUserName();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -39,6 +39,7 @@ import java.util.Date;
|
|||||||
*/
|
*/
|
||||||
public interface NominatedInvitation extends Invitation
|
public interface NominatedInvitation extends Invitation
|
||||||
{
|
{
|
||||||
|
public String getInviteeUserName();
|
||||||
|
|
||||||
public String getInviteeFirstName();
|
public String getInviteeFirstName();
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user