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>
|
||||
</props>
|
||||
|
||||
<!-- Invitation service workflow definition -->
|
||||
<props>
|
||||
<prop key="engineId">jbpm</prop>
|
||||
<prop key="location">alfresco/workflow/invitation-nominated_processdefinition.xml</prop>
|
||||
@@ -386,6 +387,7 @@
|
||||
<prop key="redeploy">false</prop>
|
||||
</props>
|
||||
|
||||
<!-- Invitation service workflow definition -->
|
||||
<props>
|
||||
<prop key="engineId">jbpm</prop>
|
||||
<prop key="location">alfresco/workflow/invitation-moderated_processdefinition.xml</prop>
|
||||
@@ -393,7 +395,6 @@
|
||||
<prop key="redeploy">false</prop>
|
||||
</props>
|
||||
|
||||
|
||||
</list>
|
||||
</property>
|
||||
<property name="models">
|
||||
|
@@ -1,7 +1,9 @@
|
||||
#
|
||||
# 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.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
|
||||
#
|
||||
|
||||
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-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.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
|
||||
|
||||
#
|
||||
# Invite Workflow
|
||||
# Invitation Nominated Workflow
|
||||
#
|
||||
|
||||
wf_invite.workflow.title=Invitation (Nominated)
|
||||
wf_invite.workflow.description=Invitation to a Share Site, nominated by a site manager
|
||||
wf_invitation-nominated.workflow.title=Invitation - Nominated
|
||||
wf_invitation-nominated.workflow.description=Invitation to a Share Site, nominated by a site manager
|
||||
|
||||
# Invite Task Definitions
|
||||
|
||||
wf_invite-workflow-model.type.wf_inviteToSiteTask.title=Start Invite
|
||||
wf_invite-workflow-model.type.wf_inviteToSiteTask.description=Start an invite to a Site
|
||||
wf_invite-workflow-model.type.wf_invitePendingTask.title=Site Invite
|
||||
wf_invite-workflow-model.type.wf_invitePendingTask.description=Invite to a Site
|
||||
wf_invite-workflow-model.type.wf_rejectInviteTask.title=Rejected
|
||||
wf_invite-workflow-model.type.wf_rejectInviteTask.description=Rejected
|
||||
wf_invite-workflow-model.type.wf_acceptInviteTask.title=Accepted
|
||||
wf_invite-workflow-model.type.wf_acceptInviteTask.description=Accepted
|
||||
wf_invitation-nominated-workflow-model.type.wf_inviteToSiteTask.title=Start task
|
||||
wf_invitation-nominated-workflow-model.type.wf_inviteToSiteTask.description=Start a nominated invitation
|
||||
wf_invitation-nominated-workflow-model.type.wf_invitePendingTask.title=Pending invitation
|
||||
wf_invitation-nominated-workflow-model.type.wf_invitePendingTask.description=Pending invitation
|
||||
wf_invitation-nominated-workflow-model.type.wf_rejectInviteTask.title=Rejected
|
||||
wf_invitation-nominated-workflow-model.type.wf_rejectInviteTask.description=Rejected
|
||||
wf_invitation-nominated-workflow-model.type.wf_acceptInviteTask.title=Accepted
|
||||
wf_invitation-nominated-workflow-model.type.wf_acceptInviteTask.description=Accepted
|
||||
|
||||
# Invite Process Definitions
|
||||
|
||||
wf_invite.node.start.title=Start
|
||||
wf_invite.node.start.description=Start
|
||||
wf_invite.node.invitePending.title=Invite Pending
|
||||
wf_invite.node.invitePending.description=Invite Pending
|
||||
wf_invite.node.invitePending.transition.reject.title=Reject
|
||||
wf_invite.node.invitePending.transition.reject.description=Reject
|
||||
wf_invite.node.invitePending.transition.accept.title=Accept
|
||||
wf_invite.node.invitePending.transition.accept.description=Accept
|
||||
wf_invite.node.inviteRejected.title=Rejected
|
||||
wf_invite.node.inviteRejected.description=Rejected
|
||||
wf_invite.task.wf_rejectInviteTask.title=Rejected
|
||||
wf_invite.task.wf_rejectInviteTask.description=Rejected
|
||||
wf_invite.node.inviteAccepted.title=Accepted
|
||||
wf_invite.node.inviteAccepted.description=Accepted
|
||||
wf_invite.task.wf_acceptInviteTask.title=Accepted
|
||||
wf_invite.task.wf_acceptInviteTask.description=Accepted
|
||||
wf_invite.node.end.title=End
|
||||
wf_invite.node.end.description=End
|
||||
wf_invitation-nominated.node.start.title=Start
|
||||
wf_invitation-nominated.node.start.description=Start
|
||||
wf_invitation-nominated.node.invitePending.title=Invite Pending
|
||||
wf_invitation-nominated.node.invitePending.description=Invite Pending
|
||||
wf_invitation-nominated.node.invitePending.transition.reject.title=Reject
|
||||
wf_invitation-nominated.node.invitePending.transition.reject.description=Reject
|
||||
wf_invitation-nominated.node.invitePending.transition.accept.title=Accept
|
||||
wf_invitation-nominated.node.invitePending.transition.accept.description=Accept
|
||||
wf_invitation-nominated.node.invitePending.transition.cancel.title=Cancel
|
||||
wf_invitation-nominated.node.invitePending.transition.cancel.description=Cancel
|
||||
wf_invitation-nominated.node.inviteRejected.title=Rejected
|
||||
wf_invitation-nominated.node.inviteRejected.description=Rejected
|
||||
wf_invitation-nominated.task.wf_rejectInviteTask.title=Rejected
|
||||
wf_invitation-nominated.task.wf_rejectInviteTask.description=Rejected
|
||||
wf_invitation-nominated.node.inviteAccepted.title=Accepted
|
||||
wf_invitation-nominated.node.inviteAccepted.description=Accepted
|
||||
wf_invitation-nominated.task.wf_acceptInviteTask.title=Accepted
|
||||
wf_invitation-nominated.task.wf_acceptInviteTask.description=Accepted
|
||||
wf_invitation-nominated.node.end.title=End
|
||||
wf_invitation-nominated.node.end.description=End
|
||||
|
@@ -34,6 +34,9 @@
|
||||
<property name="wf:inviteeUserName">
|
||||
<type>d:text</type>
|
||||
</property>
|
||||
<property name="wf:inviteeEmail">
|
||||
<type>d:text</type>
|
||||
</property>
|
||||
<property name="wf:inviteeFirstName">
|
||||
<type>d:text</type>
|
||||
</property>
|
||||
@@ -49,7 +52,7 @@
|
||||
<property name="wf:resourceName">
|
||||
<type>d:text</type>
|
||||
</property>
|
||||
<property name="wf:inviteeSiteRole">
|
||||
<property name="wf:inviteeRole">
|
||||
<type>d:text</type>
|
||||
</property>
|
||||
</properties>
|
||||
|
@@ -2,7 +2,8 @@
|
||||
|
||||
<!-- 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"/>
|
||||
|
||||
@@ -40,7 +41,7 @@
|
||||
args["inviteePersonRef"] = inviteePerson.nodeRef.toString();
|
||||
args["inviterPersonRef"] = inviterPerson.nodeRef.toString();
|
||||
args["siteName"] = siteName;
|
||||
args["inviteeSiteRole"] = wf_inviteeSiteRole;
|
||||
args["inviteeSiteRole"] = wf_inviteeRole;
|
||||
args["inviteeUserName"] = wf_inviteeUserName;
|
||||
args["inviteeGenPassword"] = wf_inviteeGenPassword;
|
||||
args["acceptLink"] = acceptLink;
|
||||
|
@@ -5,10 +5,8 @@ import org.alfresco.service.cmr.invitation.Invitation.ResourceType;
|
||||
|
||||
/* package scope */ abstract class InvitationImpl
|
||||
{
|
||||
/**
|
||||
* Who is this invitation for
|
||||
*/
|
||||
private String inviteeUserName;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Unique reference for this invitation
|
||||
@@ -48,14 +46,6 @@ import org.alfresco.service.cmr.invitation.Invitation.ResourceType;
|
||||
this.resourceType = resourceType;
|
||||
}
|
||||
|
||||
public void setInviteeUserName(String inviteeUserName) {
|
||||
this.inviteeUserName = inviteeUserName;
|
||||
}
|
||||
|
||||
public String getInviteeUserName() {
|
||||
return inviteeUserName;
|
||||
}
|
||||
|
||||
public void setInviteId(String inviteId) {
|
||||
this.inviteId = inviteId;
|
||||
}
|
||||
|
@@ -26,6 +26,7 @@ package org.alfresco.repo.invitation;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
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.site.SiteService;
|
||||
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.WorkflowPath;
|
||||
import org.alfresco.service.cmr.workflow.WorkflowService;
|
||||
@@ -86,6 +88,64 @@ public class InvitationServiceImpl implements InvitationService
|
||||
// does not already belong to an existing person
|
||||
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
|
||||
*
|
||||
@@ -111,11 +171,40 @@ public class InvitationServiceImpl implements InvitationService
|
||||
* @throws InvitationExceptionUserError
|
||||
* @throws InvitationExceptionForbidden
|
||||
*/
|
||||
public NominatedInvitation inviteNominated(String inviteeFirstName,
|
||||
String inviteeLastName, String inviteeEmail,
|
||||
String inviteeUserName, Invitation.ResourceType resourceType,
|
||||
String resourceName, String inviteeRole, String serverPath,
|
||||
String acceptUrl, String rejectUrl)
|
||||
public NominatedInvitation inviteNominated(
|
||||
String inviteeFirstName,
|
||||
String inviteeLastName,
|
||||
String inviteeEmail,
|
||||
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
|
||||
|
||||
@@ -123,7 +212,7 @@ public class InvitationServiceImpl implements InvitationService
|
||||
|
||||
if (resourceType == Invitation.ResourceType.WEB_SITE)
|
||||
{
|
||||
return startInvite(inviteeFirstName, inviteeLastName, inviteeEmail,
|
||||
return startNominatedInvite(inviteeFirstName, inviteeLastName, inviteeEmail,
|
||||
inviteeUserName, resourceType, resourceName, inviteeRole,
|
||||
serverPath, acceptUrl, rejectUrl);
|
||||
}
|
||||
@@ -151,7 +240,7 @@ public class InvitationServiceImpl implements InvitationService
|
||||
{
|
||||
if (resourceType == Invitation.ResourceType.WEB_SITE)
|
||||
{
|
||||
return startInvite(inviteeComments, inviteeUserName, resourceType,
|
||||
return startModeratedInvite(inviteeComments, inviteeUserName, resourceType,
|
||||
resourceName, inviteeRole);
|
||||
}
|
||||
throw new InvitationException("unknown resource type");
|
||||
@@ -335,10 +424,23 @@ public class InvitationServiceImpl implements InvitationService
|
||||
*
|
||||
* @throws InvitationExceptionNotFound
|
||||
* the invitation does not exist.
|
||||
* @throws InvitationExceptionUserError
|
||||
* @return the invitation.
|
||||
*/
|
||||
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) {
|
||||
Object objs[] = { invitationId };
|
||||
throw new InvitationExceptionNotFound("invitation.error.not_found",
|
||||
@@ -363,11 +465,14 @@ public class InvitationServiceImpl implements InvitationService
|
||||
|
||||
// should also be 0 or 1
|
||||
if (inviteStartTasks.size() < 1) {
|
||||
return null;
|
||||
Object objs[] = { invitationId };
|
||||
throw new InvitationExceptionNotFound("invitation.error.not_found",
|
||||
objs);
|
||||
} else {
|
||||
WorkflowTask task = inviteStartTasks.get(0);
|
||||
NominatedInvitationImpl result = new NominatedInvitationImpl(
|
||||
task.properties);
|
||||
result.setSentInviteDate(task.path.instance.startDate);
|
||||
result.setInviteId(invitationId);
|
||||
return result;
|
||||
}
|
||||
@@ -836,7 +941,7 @@ public class InvitationServiceImpl implements InvitationService
|
||||
* @param inviteeRole
|
||||
* @return the new moderated invitation
|
||||
*/
|
||||
private ModeratedInvitation startInvite(String inviteeComments,
|
||||
private ModeratedInvitation startModeratedInvite(String inviteeComments,
|
||||
String inviteeUserName, Invitation.ResourceType resourceType,
|
||||
String resourceName, String inviteeRole)
|
||||
{
|
||||
@@ -878,10 +983,10 @@ public class InvitationServiceImpl implements InvitationService
|
||||
WorkflowModelModeratedInvitation.WF_PROP_INVITEE_USER_NAME,
|
||||
inviteeUserName);
|
||||
workflowProps.put(
|
||||
WorkflowModelNominatedInvitation.WF_PROP_RESOURCE_NAME,
|
||||
WorkflowModelModeratedInvitation.WF_PROP_RESOURCE_NAME,
|
||||
resourceName);
|
||||
workflowProps.put(
|
||||
WorkflowModelNominatedInvitation.WF_PROP_RESOURCE_TYPE,
|
||||
WorkflowModelModeratedInvitation.WF_PROP_RESOURCE_TYPE,
|
||||
resourceType.toString());
|
||||
|
||||
// get the moderated workflow
|
||||
@@ -945,11 +1050,17 @@ public class InvitationServiceImpl implements InvitationService
|
||||
* externally accessible server address of server hosting invite
|
||||
* web scripts
|
||||
*/
|
||||
private NominatedInvitation startInvite(String inviteeFirstName,
|
||||
String inviteeLastName, String inviteeEmail,
|
||||
String inviteeUserName, Invitation.ResourceType resourceType,
|
||||
String siteShortName, String inviteeSiteRole, String serverPath,
|
||||
String acceptUrl, String rejectUrl) {
|
||||
private NominatedInvitation startNominatedInvite(
|
||||
String inviteeFirstName,
|
||||
String inviteeLastName,
|
||||
String inviteeEmail,
|
||||
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
|
||||
// under)
|
||||
@@ -1003,7 +1114,8 @@ public class InvitationServiceImpl implements InvitationService
|
||||
// else there are no existing people who have the given invitee
|
||||
// email address
|
||||
// so create invitee person
|
||||
else {
|
||||
else
|
||||
{
|
||||
inviteeUserName = createInviteePerson(inviteeFirstName,
|
||||
inviteeLastName, inviteeEmail);
|
||||
|
||||
@@ -1013,9 +1125,25 @@ public class InvitationServiceImpl implements InvitationService
|
||||
+ inviteeUserName);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// inviteeUserName was specified
|
||||
NodeRef person = this.personService.getPerson(inviteeUserName);
|
||||
|
||||
// throw web script exception if person is already a member of the given
|
||||
// site
|
||||
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);
|
||||
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 (logger.isDebugEnabled())
|
||||
logger
|
||||
@@ -1070,6 +1198,9 @@ public class InvitationServiceImpl implements InvitationService
|
||||
workflowProps.put(
|
||||
WorkflowModelNominatedInvitation.WF_PROP_INVITEE_USER_NAME,
|
||||
inviteeUserName);
|
||||
workflowProps.put(
|
||||
WorkflowModelNominatedInvitation.WF_PROP_INVITEE_EMAIL,
|
||||
inviteeEmail);
|
||||
workflowProps.put(WorkflowModel.ASSOC_ASSIGNEE, inviteeNodeRef);
|
||||
workflowProps.put(
|
||||
WorkflowModelNominatedInvitation.WF_PROP_INVITEE_FIRSTNAME,
|
||||
@@ -1087,7 +1218,7 @@ public class InvitationServiceImpl implements InvitationService
|
||||
WorkflowModelNominatedInvitation.WF_PROP_RESOURCE_TYPE,
|
||||
resourceType.toString());
|
||||
workflowProps.put(
|
||||
WorkflowModelNominatedInvitation.WF_PROP_INVITEE_SITE_ROLE,
|
||||
WorkflowModelNominatedInvitation.WF_PROP_INVITEE_ROLE,
|
||||
inviteeSiteRole);
|
||||
workflowProps.put(WorkflowModelNominatedInvitation.WF_PROP_SERVER_PATH,
|
||||
serverPath);
|
||||
@@ -1173,6 +1304,7 @@ public class InvitationServiceImpl implements InvitationService
|
||||
workflowProps);
|
||||
result.setTicket(inviteTicket);
|
||||
result.setInviteId(workflowId);
|
||||
result.setSentInviteDate(new Date());
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -1195,4 +1327,19 @@ public class InvitationServiceImpl implements InvitationService
|
||||
"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;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import org.alfresco.model.ContentModel;
|
||||
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.AuthenticationUtil.RunAsWork;
|
||||
import org.alfresco.repo.site.SiteModel;
|
||||
import org.alfresco.service.cmr.invitation.InvitationExceptionUserError;
|
||||
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.NominatedInvitation;
|
||||
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.site.SiteInfo;
|
||||
import org.alfresco.service.cmr.site.SiteService;
|
||||
import org.alfresco.service.cmr.site.SiteVisibility;
|
||||
import org.alfresco.service.cmr.tagging.TaggingService;
|
||||
import org.alfresco.util.BaseAlfrescoSpringTest;
|
||||
import org.alfresco.util.PropertyMap;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
/**
|
||||
*
|
||||
* Unit tests of Invitation Service
|
||||
@@ -79,6 +70,10 @@ public class InvitationServiceImplTest extends BaseAlfrescoSpringTest
|
||||
public static String USER_ONE = "InvitationServiceAlice";
|
||||
public static String USER_TWO = "InvitationServiceBob";
|
||||
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
|
||||
@@ -92,10 +87,10 @@ public class InvitationServiceImplTest extends BaseAlfrescoSpringTest
|
||||
this.authenticationComponent = (AuthenticationComponent)this.applicationContext.getBean("authenticationComponent");
|
||||
this.mutableAuthenticationDao = (MutableAuthenticationDao)this.applicationContext.getBean("authenticationDao");
|
||||
|
||||
createPerson(USER_MANAGER, "");
|
||||
createPerson(USER_ONE, "");
|
||||
createPerson(USER_TWO, "");
|
||||
createPerson(USER_EVE, "");
|
||||
createPerson(USER_MANAGER, USER_MANAGER + "@alfrescotesting.com", PERSON_FIRSTNAME, PERSON_LASTNAME);
|
||||
createPerson(USER_ONE, USER_ONE_EMAIL,USER_ONE_FIRSTNAME, USER_ONE_LASTNAME);
|
||||
createPerson(USER_TWO, USER_TWO + "@alfrescotesting.com", PERSON_FIRSTNAME, PERSON_LASTNAME);
|
||||
createPerson(USER_EVE, USER_EVE + "@alfrescotesting.com", PERSON_FIRSTNAME, PERSON_LASTNAME);
|
||||
|
||||
this.authenticationComponent.setCurrentUser(USER_MANAGER);
|
||||
|
||||
@@ -158,25 +153,18 @@ public class InvitationServiceImplTest extends BaseAlfrescoSpringTest
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a Nominated Invitation
|
||||
* read it.
|
||||
* search for it
|
||||
* cancel it
|
||||
* search for it again (and fail to find it)
|
||||
* Create a Nominated Invitation
|
||||
* read it.
|
||||
* search for it
|
||||
* reject it
|
||||
* Create a Nominated Invitation
|
||||
* read it.
|
||||
* accept it
|
||||
* Test nominated user - new user
|
||||
*
|
||||
* @throws Exception
|
||||
*/
|
||||
public void testNominatedInvitation() 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 = "invitee@alfrescotesting.com";
|
||||
String inviteeUserName = null;
|
||||
Invitation.ResourceType resourceType = Invitation.ResourceType.WEB_SITE;
|
||||
String resourceName = SITE_SHORT_NAME_INVITE;
|
||||
String inviteeRole = SiteModel.SITE_COLLABORATOR;
|
||||
@@ -186,10 +174,10 @@ public class InvitationServiceImplTest extends BaseAlfrescoSpringTest
|
||||
|
||||
this.authenticationComponent.setCurrentUser(USER_MANAGER);
|
||||
|
||||
NominatedInvitation nominatedInvitation = invitationService.inviteNominated(inviteeFirstName,
|
||||
NominatedInvitation nominatedInvitation = invitationService.inviteNominated(
|
||||
inviteeFirstName,
|
||||
inviteeLastName,
|
||||
inviteeEmail,
|
||||
inviteeUserName,
|
||||
resourceType,
|
||||
resourceName,
|
||||
inviteeRole,
|
||||
@@ -201,7 +189,18 @@ public class InvitationServiceImplTest extends BaseAlfrescoSpringTest
|
||||
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("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());
|
||||
@@ -212,6 +211,7 @@ public class InvitationServiceImplTest extends BaseAlfrescoSpringTest
|
||||
/**
|
||||
* 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);
|
||||
@@ -226,6 +226,119 @@ public class InvitationServiceImplTest extends BaseAlfrescoSpringTest
|
||||
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.
|
||||
* search for it
|
||||
* cancel it
|
||||
* search for it again (and fail to find it)
|
||||
* Create a Nominated Invitation
|
||||
* read it.
|
||||
* search for it
|
||||
* reject it
|
||||
* Create a Nominated Invitation
|
||||
* read it.
|
||||
* accept it
|
||||
*/
|
||||
public void testNominatedInvitationExistingUser() throws Exception
|
||||
{
|
||||
String inviteeUserName = USER_ONE;
|
||||
String inviteeEmail = USER_ONE_EMAIL;
|
||||
String inviteeFirstName = USER_ONE_FIRSTNAME;
|
||||
String inviteeLastName = USER_ONE_LASTNAME;
|
||||
|
||||
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(
|
||||
inviteeUserName,
|
||||
resourceType,
|
||||
resourceName,
|
||||
inviteeRole,
|
||||
serverPath,
|
||||
acceptUrl,
|
||||
rejectUrl) ;
|
||||
|
||||
assertNotNull("nominated invitation is null", nominatedInvitation);
|
||||
String inviteId = nominatedInvitation.getInviteId();
|
||||
assertEquals("user name wrong", inviteeUserName, nominatedInvitation.getInviteeUserName());
|
||||
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());
|
||||
|
||||
// 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.
|
||||
*/
|
||||
NominatedInvitation invitation = (NominatedInvitation)invitationService.getInvitation(inviteId);
|
||||
|
||||
assertNotNull("invitation is null", invitation);
|
||||
assertEquals("invite id wrong", inviteId, invitation.getInviteId());
|
||||
assertEquals("user name wrong", inviteeUserName, nominatedInvitation.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());
|
||||
|
||||
// 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
|
||||
*/
|
||||
@@ -256,9 +369,7 @@ public class InvitationServiceImplTest extends BaseAlfrescoSpringTest
|
||||
/**
|
||||
* Now invite and reject
|
||||
*/
|
||||
NominatedInvitation secondInvite = invitationService.inviteNominated(inviteeFirstName,
|
||||
inviteeLastName,
|
||||
inviteeEmail,
|
||||
NominatedInvitation secondInvite = invitationService.inviteNominated(
|
||||
inviteeUserName,
|
||||
resourceType,
|
||||
resourceName,
|
||||
@@ -269,8 +380,6 @@ public class InvitationServiceImplTest extends BaseAlfrescoSpringTest
|
||||
|
||||
NominatedInvitation rejectedInvitation = (NominatedInvitation)invitationService.cancel(secondInvite.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());
|
||||
|
||||
List<Invitation> it3 = invitationService.listPendingInvitationsForResource(resourceType, resourceName);
|
||||
@@ -279,9 +388,7 @@ public class InvitationServiceImplTest extends BaseAlfrescoSpringTest
|
||||
/**
|
||||
* Now invite and accept
|
||||
*/
|
||||
NominatedInvitation thirdInvite = invitationService.inviteNominated(inviteeFirstName,
|
||||
inviteeLastName,
|
||||
inviteeEmail,
|
||||
NominatedInvitation thirdInvite = invitationService.inviteNominated(
|
||||
inviteeUserName,
|
||||
resourceType,
|
||||
resourceName,
|
||||
@@ -517,7 +624,7 @@ public class InvitationServiceImplTest extends BaseAlfrescoSpringTest
|
||||
*/
|
||||
try
|
||||
{
|
||||
invitationService.approve(invitationId, "No Way Hosea!");
|
||||
invitationService.reject(invitationId, "No Way Hosea!");
|
||||
assertTrue("excetion not thrown", false);
|
||||
|
||||
}
|
||||
@@ -532,7 +639,7 @@ public class InvitationServiceImplTest extends BaseAlfrescoSpringTest
|
||||
* Reject the invitation
|
||||
*/
|
||||
this.authenticationComponent.setCurrentUser(USER_MANAGER);
|
||||
invitationService.approve(invitationId, "Go away!");
|
||||
invitationService.reject(invitationId, "Go away!");
|
||||
|
||||
/**
|
||||
* Negative test
|
||||
@@ -584,9 +691,7 @@ public class InvitationServiceImplTest extends BaseAlfrescoSpringTest
|
||||
inviteeRole);
|
||||
|
||||
String oneId = invitationOne.getInviteId();
|
||||
NominatedInvitation invitationTwo = invitationService.inviteNominated(inviteeFirstName,
|
||||
inviteeLastName,
|
||||
inviteeEmail,
|
||||
NominatedInvitation invitationTwo = invitationService.inviteNominated(
|
||||
USER_ONE,
|
||||
resourceType,
|
||||
SITE_SHORT_NAME_RED,
|
||||
@@ -596,9 +701,7 @@ public class InvitationServiceImplTest extends BaseAlfrescoSpringTest
|
||||
rejectUrl) ;
|
||||
String twoId = invitationTwo.getInviteId();
|
||||
|
||||
NominatedInvitation invitationThree = invitationService.inviteNominated(inviteeFirstName,
|
||||
inviteeLastName,
|
||||
inviteeEmail,
|
||||
NominatedInvitation invitationThree = invitationService.inviteNominated(
|
||||
USER_ONE,
|
||||
resourceType,
|
||||
SITE_SHORT_NAME_BLUE,
|
||||
@@ -683,11 +786,11 @@ public class InvitationServiceImplTest extends BaseAlfrescoSpringTest
|
||||
}
|
||||
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 (this.authenticationService.authenticationExists(userName) == false)
|
||||
@@ -704,8 +807,8 @@ public class InvitationServiceImplTest extends BaseAlfrescoSpringTest
|
||||
// create person properties
|
||||
PropertyMap personProps = new PropertyMap();
|
||||
personProps.put(ContentModel.PROP_USERNAME, userName);
|
||||
personProps.put(ContentModel.PROP_FIRSTNAME, PERSON_FIRSTNAME);
|
||||
personProps.put(ContentModel.PROP_LASTNAME, PERSON_LASTNAME);
|
||||
personProps.put(ContentModel.PROP_FIRSTNAME, firstName);
|
||||
personProps.put(ContentModel.PROP_LASTNAME, lastName);
|
||||
personProps.put(ContentModel.PROP_EMAIL, emailAddress);
|
||||
personProps.put(ContentModel.PROP_JOBTITLE, PERSON_JOBTITLE);
|
||||
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 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
|
||||
*/
|
||||
@@ -67,7 +60,9 @@ public class ModeratedActionApprove extends JBPMSpringActionHandler
|
||||
{
|
||||
public Object doWork() throws Exception
|
||||
{
|
||||
// Add the new user to the web site
|
||||
siteService.setMembership(resourceName, inviteeUserName, inviteeRole);
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
@@ -1,7 +1,6 @@
|
||||
package org.alfresco.repo.invitation;
|
||||
|
||||
|
||||
import org.alfresco.repo.invitation.WorkflowModelNominatedInvitation;
|
||||
import org.alfresco.repo.security.authentication.MutableAuthenticationDao;
|
||||
import org.alfresco.repo.workflow.jbpm.JBPMSpringActionHandler;
|
||||
import org.alfresco.service.ServiceRegistry;
|
||||
@@ -40,6 +39,13 @@ public class ModeratedActionReject extends JBPMSpringActionHandler
|
||||
@SuppressWarnings("unchecked")
|
||||
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;
|
||||
|
||||
import org.alfresco.service.cmr.invitation.ModeratedInvitation;
|
||||
import org.alfresco.service.cmr.invitation.Invitation.ResourceType;
|
||||
import org.alfresco.service.namespace.QName;
|
||||
|
||||
import java.io.Serializable;
|
||||
@@ -44,6 +43,7 @@ import java.util.Map;
|
||||
|
||||
private String roleName;
|
||||
private String inviteeComments;
|
||||
private String inviteeUserName;
|
||||
|
||||
public ModeratedInvitationImpl()
|
||||
{
|
||||
@@ -62,7 +62,6 @@ import java.util.Map;
|
||||
}
|
||||
roleName = (String)workflowProps.get(WorkflowModelModeratedInvitation.WF_PROP_INVITEE_ROLE);
|
||||
inviteeComments = (String)workflowProps.get(WorkflowModelModeratedInvitation.WF_PROP_INVITEE_COMMENTS);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -86,5 +85,16 @@ import java.util.Map;
|
||||
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.service.cmr.invitation.Invitation;
|
||||
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 java.io.Serializable;
|
||||
@@ -54,6 +56,11 @@ import java.util.Map;
|
||||
private Date sentInviteDate;
|
||||
private String ticket;
|
||||
|
||||
/**
|
||||
* Who is this invitation for
|
||||
*/
|
||||
private String inviteeUserName;
|
||||
|
||||
/**
|
||||
* create a new nominated invitation
|
||||
*/
|
||||
@@ -68,6 +75,7 @@ import java.util.Map;
|
||||
setInviteeUserName((String)workflowProps.get(WorkflowModelNominatedInvitation.WF_PROP_INVITEE_USER_NAME));
|
||||
inviteeFirstName = (String)workflowProps.get(WorkflowModelNominatedInvitation.WF_PROP_INVITEE_FIRSTNAME);
|
||||
inviteeLastName = (String)workflowProps.get(WorkflowModelNominatedInvitation.WF_PROP_INVITEE_LASTNAME);
|
||||
inviteeEmail = (String)workflowProps.get(WorkflowModelNominatedInvitation.WF_PROP_INVITEE_EMAIL);
|
||||
// inviteePassword = (String)workflowProps.get(WorkflowModelNominatedInvitation.WF_PROP_INVITEE_GEN_PASSWORD);
|
||||
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)));
|
||||
}
|
||||
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);
|
||||
acceptUrl = (String)workflowProps.get(WorkflowModelNominatedInvitation.WF_PROP_ACCEPT_URL);
|
||||
rejectUrl = (String)workflowProps.get(WorkflowModelNominatedInvitation.WF_PROP_REJECT_URL);
|
||||
ticket = (String)workflowProps.get(WorkflowModelNominatedInvitation.WF_PROP_INVITE_TICKET);
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void setInviteeFirstName(String inviteeFirstName) {
|
||||
@@ -154,4 +163,17 @@ import java.util.Map;
|
||||
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 {
|
||||
|
||||
// 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
|
||||
public static final String WORKFLOW_DEFINITION_NAME = "jbpm$wf:invite";
|
||||
public static final String WORKFLOW_DEFINITION_NAME = "jbpm$wf:invitation-nominated";
|
||||
|
||||
// tasks
|
||||
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_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_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_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_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_SENT_INVITE_DATE = QName.createQName(NamespaceService.WORKFLOW_MODEL_1_0_URI, "sentInviteDate");
|
||||
public static final QName WF_PROP_INVITEE_ROLE = QName.createQName(NamespaceService.WORKFLOW_MODEL_1_0_URI, "inviteeRole");
|
||||
public static final QName WF_PROP_INVITEE_GEN_PASSWORD = QName.createQName(NamespaceService.WORKFLOW_MODEL_1_0_URI, "inviteeGenPassword");
|
||||
|
||||
// workflow execution context variable names
|
||||
@@ -74,6 +74,6 @@ public interface WorkflowModelNominatedInvitation {
|
||||
public static final String wfVarResourceName = "wf_resourceName";
|
||||
public static final String wfVarResourceType = "wf_resourceType";
|
||||
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(
|
||||
WorkflowModelNominatedInvitation.WF_PROP_INVITEE_USER_NAME);
|
||||
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(
|
||||
WorkflowModelNominatedInvitation.WF_PROP_RESOURCE_NAME);
|
||||
|
||||
|
@@ -29,6 +29,9 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
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.ScriptNode;
|
||||
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.service.ServiceRegistry;
|
||||
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.security.PermissionService;
|
||||
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.namespace.QName;
|
||||
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.ScriptableObject;
|
||||
|
||||
@@ -594,6 +605,113 @@ public class Site implements Serializable
|
||||
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
|
||||
*
|
||||
|
@@ -46,6 +46,16 @@ public interface Invitation
|
||||
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?
|
||||
* @return the resource type
|
||||
@@ -58,16 +68,16 @@ public interface Invitation
|
||||
*/
|
||||
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 ?
|
||||
* @return the unique reference for this invitation
|
||||
*/
|
||||
public String getInviteId();
|
||||
|
||||
/**
|
||||
* What sort of invitation is this ?
|
||||
*/
|
||||
public InvitationType getInvitationType();
|
||||
|
||||
|
||||
}
|
||||
|
@@ -38,14 +38,48 @@ import java.util.List;
|
||||
*/
|
||||
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 inviteeLastName
|
||||
* @param inviteeEmail
|
||||
* @param inviteeUserName the alfresco user name of the invitee, may be null for a new user
|
||||
* @param Invitation.ResourceType resourceType
|
||||
* @param resourceName
|
||||
* @param inviteeRole
|
||||
@@ -64,7 +98,6 @@ public interface InvitationService
|
||||
String inviteeFirstName,
|
||||
String inviteeLastName,
|
||||
String inviteeEmail,
|
||||
String inviteeUserName,
|
||||
Invitation.ResourceType resourceType,
|
||||
String resourceName,
|
||||
String inviteeRole,
|
||||
|
@@ -37,12 +37,6 @@ package org.alfresco.service.cmr.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
|
||||
* @return the roleName
|
||||
@@ -55,4 +49,10 @@ public interface ModeratedInvitation extends Invitation
|
||||
*/
|
||||
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 String getInviteeUserName();
|
||||
|
||||
public String getInviteeFirstName();
|
||||
|
||||
|
Reference in New Issue
Block a user