MERGE DEV/3.2_INVITATION to HEAD

MOB-124 First cut of invitation service
  First cut group site membership

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@13378 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Mark Rogers
2009-02-26 15:53:23 +00:00
parent 52a639c2c8
commit 0f9c09ba09
62 changed files with 5678 additions and 381 deletions

View File

@@ -0,0 +1,12 @@
# Display labels for out-of-the-box Site-oriented Workflows
#
# Moderated Invitation
#
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-model.type.approveInvitationTask.title=Approve Invitation
wf_invitation-moderated-model.type.approveInvitationTask.description=Approve Invitation

View File

@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Moderated invitation workflow -->
<model name="wf:invitation-moderated-workflow-model" xmlns="http://www.alfresco.org/model/dictionary/1.0">
<imports>
<import uri="http://www.alfresco.org/model/dictionary/1.0" prefix="d" />
<import uri="http://www.alfresco.org/model/bpm/1.0" prefix="bpm" />
<import uri="http://www.alfresco.org/model/workflow/1.0" prefix="wf" />
<import uri="http://www.alfresco.org/model/content/1.0" prefix="cm" />
</imports>
<types>
<type name="wf:moderatedInvitationSubmitTask">
<parent>bpm:startTask</parent>
<mandatory-aspects>
<aspect>bpm:assignee</aspect>
<aspect>bpm:groupAssignee</aspect>
<aspect>wf:moderatedInvitationStats</aspect>
</mandatory-aspects>
</type>
<type name="wf:moderatedInvitationReviewTask">
<parent>bpm:workflowTask</parent>
<properties>
<property name="wf:reviewComments">
<type>d:text</type>
</property>
<property name="cm:owner">
<type>d:text</type>
</property>
</properties>
<mandatory-aspects>
<aspect>bpm:groupAssignee</aspect>
<aspect>cm:ownable</aspect>
<aspect>wf:moderatedInvitationStats</aspect>
</mandatory-aspects>
</type>
</types>
<aspects>
<aspect name="wf:moderatedInvitationStats">
<properties>
<property name="wf:inviteeUserName">
<type>d:text</type>
</property>
<property name="wf:resourceType">
<type>d:text</type>
<default>WEB_SITE</default>
</property>
<property name="wf:resourceName">
<type>d:text</type>
</property>
<property name="wf:inviteeRole">
<type>d:text</type>
</property>
<property name="wf:inviteeComments">
<type>d:text</type>
</property>
</properties>
</aspect>
</aspects>
</model>

View File

@@ -0,0 +1,60 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Moderated Invitation Workflow -->
<process-definition xmlns="urn:jbpm.org:jpdl-3.1"
name="wf:invitation-moderated">
<swimlane name="initiator">
<assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment">
<actor>#{bpm_assignee.properties['cm:userName']}</actor>
</assignment>
</swimlane>
<start-state name="start">
<task name="wf:moderatedInvitationSubmitTask" swimlane="initiator" />
<transition to="review" name=""></transition>
</start-state>
<swimlane name="approver">
<assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment">
<pooledactors>#{bpm_groupAssignee}</pooledactors>
</assignment>
</swimlane>
<task-node name="review">
<task name="wf:moderatedInvitationReviewTask" swimlane="approver" />
<transition name="reject" to="rejected">
<action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
<script>
<variable name="wf_reviewer" access="write" />
<expression>person.properties.userName</expression>
</script>
</action>
</transition>
<transition name="approve" to="approved">
<action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
<script>
<variable name="wf_reviewer" access="write" />
<expression>person.properties.userName</expression>
</script>
</action>
</transition>
</task-node>
<task-node name="rejected">
<transition name="" to="end" >
<action class="org.alfresco.repo.invitation.ModeratedActionReject"/>
</transition>
</task-node>
<task-node name="approved">
<transition name="" to="end" >
<action class="org.alfresco.repo.invitation.ModeratedActionApprove"/>
</transition>
</task-node>
<end-state name="end" />
</process-definition>

View File

@@ -0,0 +1,40 @@
# Display labels for out-of-the-box Site-oriented Workflows
#
# Invite Workflow
#
wf_invite.workflow.title=Invitation (Nominated)
wf_invite.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
# 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

View File

@@ -0,0 +1,74 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Nominated Invitation Workflow Model -->
<model name="wf:invite-workflow-model" xmlns="http://www.alfresco.org/model/dictionary/1.0">
<imports>
<import uri="http://www.alfresco.org/model/dictionary/1.0" prefix="d" />
<import uri="http://www.alfresco.org/model/bpm/1.0" prefix="bpm" />
<import uri="http://www.alfresco.org/model/workflow/1.0" prefix="wf" />
</imports>
<types>
<!-- Custom Tasks -->
<type name="wf:inviteToSiteTask">
<parent>bpm:startTask</parent>
<properties>
<property name="wf:serverPath">
<type>d:text</type>
</property>
<property name="wf:acceptUrl">
<type>d:text</type>
</property>
<property name="wf:rejectUrl">
<type>d:text</type>
</property>
<property name="wf:inviteTicket">
<type>d:text</type>
</property>
<property name="wf:inviterUserName">
<type>d:text</type>
</property>
<property name="wf:inviteeUserName">
<type>d:text</type>
</property>
<property name="wf:inviteeFirstName">
<type>d:text</type>
</property>
<property name="wf:inviteeLastName">
<type>d:text</type>
</property>
<property name="wf:inviteeGenPassword">
<type>d:text</type>
</property>
<property name="wf:resourceType">
<type>d:text</type>
</property>
<property name="wf:resourceName">
<type>d:text</type>
</property>
<property name="wf:inviteeSiteRole">
<type>d:text</type>
</property>
</properties>
<mandatory-aspects>
<aspect>bpm:assignee</aspect>
</mandatory-aspects>
</type>
<type name="wf:invitePendingTask">
<parent>bpm:workflowTask</parent>
</type>
<type name="wf:acceptInviteTask">
<parent>bpm:workflowTask</parent>
</type>
<type name="wf:rejectInviteTask">
<parent>bpm:workflowTask</parent>
</type>
</types>
</model>

View File

@@ -0,0 +1,88 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Nominated invitation -->
<process-definition xmlns="urn:jbpm.org:jpdl-3.1" name="wf:invite">
<swimlane name="initiator"/>
<start-state name="start">
<task name="wf:inviteToSiteTask" swimlane="initiator" />
<transition name="sendInvite" to="invitePending">
<action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
<script>
var workflowId = workflowinstanceid;
var inviterPerson = people.getPerson(wf_inviterUserName);
var inviteePerson = people.getPerson(wf_inviteeUserName);
var site = siteService.getSite(wf_resourceName);
var siteName = site.shortName;
if (site.title.length() > 0)
{
siteName = site.title;
}
var params = "?inviteId=" + workflowId +
"&amp;inviteeUserName=" + wf_inviteeUserName +
"&amp;siteShortName=" + wf_resourceName +
"&amp;inviteTicket=" + wf_inviteTicket;
var acceptLink = wf_serverPath + wf_acceptUrl + params;
var rejectLink = wf_serverPath + wf_rejectUrl + params;
var mail = actions.create("mail");
mail.parameters.from = inviterPerson.properties["cm:email"];
mail.parameters.to = inviteePerson.properties["cm:email"];
mail.parameters.subject = "Invitation to join '" + siteName + "' site";
var results = search.luceneSearch(" PATH:\"app:company_home/app:dictionary/app:email_templates/cm:invite/cm:invite-email.ftl\"");
var template = results[0];
var args = [];
args["inviteePersonRef"] = inviteePerson.nodeRef.toString();
args["inviterPersonRef"] = inviterPerson.nodeRef.toString();
args["siteName"] = siteName;
args["inviteeSiteRole"] = wf_inviteeSiteRole;
args["inviteeUserName"] = wf_inviteeUserName;
args["inviteeGenPassword"] = wf_inviteeGenPassword;
args["acceptLink"] = acceptLink;
args["rejectLink"] = rejectLink;
var mail_text = inviteePerson.processTemplate(template, args);
mail.parameters.text = mail_text;
mail.execute(bpm_package);
</script>
</action>
</transition>
</start-state>
<swimlane name="assignee">
<assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment">
<actor>#{bpm_assignee.properties['cm:userName']}</actor>
</assignment>
</swimlane>
<task-node name="invitePending">
<task name="wf:invitePendingTask" swimlane="assignee" />
<transition name="accept" to="inviteAccepted">
<action class="org.alfresco.repo.invitation.site.AcceptInviteAction"/>
</transition>
<transition name="reject" to="inviteRejected">
<action class="org.alfresco.repo.invitation.site.RejectInviteAction"/>
</transition>
<transition name="cancel" to="end">
<action class="org.alfresco.repo.invitation.site.CancelInviteAction"/>
</transition>
</task-node>
<task-node name="inviteAccepted">
<task name="wf:acceptInviteTask" swimlane="initiator" />
<transition name="end" to="end"/>
</task-node>
<task-node name="inviteRejected">
<task name="wf:rejectInviteTask" swimlane="initiator" />
<transition name="end" to="end"/>
</task-node>
<end-state name="end" />
</process-definition>