General Actions:
Log-in
Register
Wiki:
Main wiki
▼
:
Document Index
»
Space:
WorkspaceManager
▼
:
Document Index
»
Page:
JoinWorkspaceCode
Search
en
Page Actions:
Export
▼
:
Export as PDF
Export as RTF
Export as HTML
More actions
▼
:
Print preview
View Source
Main wiki
»
Browse Workspaces
»
Join Workspace
Wiki source code of
Join Workspace
Last modified by
Administrator
on 2012/03/21 17:40
Content
·
Comments
(0)
·
Annotations
(0)
·
Attachments
(0)
·
History
·
Information
Hide line numbers
1: {{velocity}} 2: #set ($workspaceId = $request.workspaceId) 3: #set ($confirm = $request.confirm) 4: ## 5: #if ("$!workspaceId" == '') 6: {{error}}The [workspaceId] parameter is not specified.{{/error}} 7: #else 8: ## FIXME: add plugin dependency checks. 9: ## 10: #set ($WorkspaceManager = $services.workspace) 11: ## 12: #set ($workspace = $WorkspaceManager.getWorkspace($workspaceId)) 13: ## 14: #if ("$!workspace" == '') 15: #if ("$!{WorkspaceManager.lastException}" != '') 16: {{error}}Exception: $!{WorkspaceManager.lastException.message}{{/error}} 17: #else 18: {{error}}$msg.get('workspacemanager.error.workspacedoesnotexist', ["$workspaceId"]){{/error}} 19: #end 20: #else 21: #set ($wikiDescriptor = $workspace.wikiDescriptor) 22: #set ($workspaceName = $wikiDescriptor.wikiPrettyName) 23: #if ("$!workspaceName" == '') 24: #set ($workspaceName = $workspaceId) 25: #end 26: #set ($workspaceGroupDocument = $workspace.groupDocument) 27: ## 28: ## Use the low level API since this page has PR and we need to make the current user modify a document of a wiki he does not yet have access to. 29: ## 30: #set ($workspaceGroupDocumentRestricted = $workspaceGroupDocument.document) 31: #set ($groupsClassReference = $services.model.createDocumentReference($workspaceId, 'XWiki', 'XWikiGroups')) 32: ## Hack for http://jira.xwiki.org/jira/browse/XWIKI-5040 untill it gets fixed. TODO: Remove redundant class copy once the bug is fixed. 33: #set ($candidateMemberClassReference = $services.model.createDocumentReference($workspaceId, 'XWiki', 'WorkspaceCandidateMemberClass')) 34: #set ($currentUser = "${xcontext.mainWikiName}:${xcontext.user}") 35: #set ($workspaceUrl = $wikiDescriptor.homePageUrl) 36: ## 37: #set ($existingMemberObject = $workspaceGroupDocumentRestricted.getXObject($groupsClassReference, 'member', $currentUser)) 38: #if ("$!existingMemberObject" != '') 39: {{info}}The user [[$currentUser]] is already a member of the workspace [[$workspaceName>>$workspaceUrl]].{{/info}} 40: #elseif ($currentUser == 'xwiki:XWiki.XWikiGuest') 41: #set ($loginDocumentReference = $services.model.createDocumentReference($xcontext.mainWikiName, 'XWiki', 'XWikiLogin')) 42: #set ($loginDocument = $xwiki.getDocument($loginDocumentReference)) 43: #set ($loginUrl = $loginDocument.getExternalURL('login', "xredirect=$escapetool.url($xwiki.getRequestURL())")) 44: {{error}}In order to continue, you need to [[log in>>$loginUrl]] first.{{/error}} 45: #else 46: ## The user is not already a member of the workspace. 47: ## 48: #set ($browseDocumentReference = $services.model.createDocumentReference($xcontext.mainWikiName, 'WorkspaceManager', 'WebHome')) 49: #set ($backUrl = $xwiki.getURL($browseDocumentReference)) 50: ## 51: #set ($membershipType = $wikiDescriptor.getValue('membershipType')) 52: ## 53: ## Determine if, regardless of membership type, an existing invitation exists for the current user. 54: #set ($candidateMembers = $workspaceGroupDocumentRestricted.getXObjects($candidateMemberClassReference)) 55: #set ($existingInvitation = false) 56: #foreach ($candidateMember in $candidateMembers) 57: #if ("$!{candidateMember.get('userName').getValue()}" == "$currentUser" && 58: "$!{candidateMember.get('type').getValue()}" == 'invitation' && 59: "$!{candidateMember.get('status').getValue()}" == 'pending') 60: ## Remember the existing invitation. 61: #set ($existingInvitation = $candidateMember) 62: #end 63: #end 64: #if ($existingInvitation) 65: ## 66: ## An invitation exists. 67: #if ($request.acceptInvitation || $request.rejectInvitation) 68: ## 69: ## The user decided whether to accept or to reject the invitation. 70: #set ($saveComment = "The user $currentUser accepted the invitation.") 71: #set ($notificationMessage = "The user '${xwiki.getUserName($currentUser, false)}' ($currentUser) has accepted the invitation to join the workspace '${workspaceName}' ($workspaceId).") 72: ## Common values. 73: #set ($temp = $existingInvitation.setDateValue('date', $datetool.date)) 74: #set ($temp = $existingInvitation.setLargeStringValue('userComment', "$!{escapetool.xml($request.userComment)}")) 75: ## Specific values. 76: #if ($request.acceptInvitation) 77: #set ($temp = $existingInvitation.setStringValue('status', 'accepted')) 78: ## Add user to workspace. 79: #set ($newMemberObject = $workspaceGroupDocumentRestricted.newXObject($groupsClassReference, $xcontext.context)) 80: #set ($temp = $newMemberObject.setStringValue('member', $currentUser)) 81: #else 82: #set ($saveComment = "The user $currentUser rejected the invitation.") 83: #set ($notificationMessage = "The user '${xwiki.getUserName($currentUser, false)}' ($currentUser) has rejected the invitation to join the workspace '${workspaceName}' ($workspaceId).") 84: #set ($temp = $existingInvitation.setStringValue('status', 'rejected')) 85: #end 86: ## Save changes. 87: #set ($temp = $xwiki.getXWiki().saveDocument($workspaceGroupDocumentRestricted, $saveComment, true, $xcontext.context)) 88: ## Send message to workspace admins. (XWikiAdminGroup) 89: #set ($workspaceAdminGroupReference = $services.model.createDocumentReference($workspaceId, 'XWiki', 'XWikiAdminGroup')) 90: #set ($temp = $services.messageStream.postMessageToGroup($notificationMessage, $workspaceAdminGroupReference)) 91: ## Display the proper success info. 92: {{success}} 93: #if ($request.acceptInvitation) 94: The user [[$currentUser]] successfully accepted the invitation and joined the workspace [[$workspaceName>>$workspaceUrl]]. 95: #else 96: The user [[$currentUser]] successfully rejected the invitation to join the workspace [[$workspaceName>>$workspaceUrl]]. 97: #end 98: {{/success}} 99: #else 100: ## 101: ## User can decide if to accept or reject the invitation. 102: {{html wiki='true'}} 103: You have been invited to join the workspace [[$workspaceName>>$workspaceUrl]]. 104: 105: <form class='xform third' method='GET'> 106: <dl> 107: #if ("$!existingInvitation.get('reviewerComment').getValue()" != '') 108: <dt> 109: <label>Invitation message:</label> 110: </dt> 111: <dd> 112: $existingInvitation.get('reviewerComment').getValue() 113: </dd> 114: #end 115: <dt> 116: <label for='userComment'>Reply</label> 117: <span class='xHint'>A reply message to send, viewable by the workspace admin, in which you can motivate your decision.</span> 118: </dt> 119: <dd><textarea name='userComment' rows='7' cols='45'></textarea></dd> 120: <span class='buttonwrapper'> 121: <br/> 122: <input type='submit' name='acceptInvitation' value='Accept' class='button'/> 123: <input type='submit' name='rejectInvitation' value='Reject' class='button'/> 124: <a href="$backUrl" class='button secondary'>Later</a> 125: </span> 126: <input type='hidden' name='workspaceId' value="$!workspaceId"/> 127: <input type='hidden' name='workspaceName' value="$!workspaceName"/> 128: </dl> 129: </form> 130: {{/html}} 131: #end 132: ## 133: ## The user is not invited to join, continue based on the current membership type of the workspace. 134: #elseif ($membershipType == 'invite') 135: ## 136: ## User does not have an invitation. 137: {{error}}This workspace is invite only. In order to join it, you need to receive an invitation from one of its admins.{{/error}} 138: #elseif ($membershipType == 'request') 139: ## Determine if a pending request already exists. 140: ## 141: #set ($candidateMembers = $workspaceGroupDocumentRestricted.getXObjects($candidateMemberClassReference)) 142: #set ($pendingRequest = false) 143: #foreach ($candidateMember in $candidateMembers) 144: #if ("$!{candidateMember.get('userName').getValue()}" == "$currentUser" && 145: "$!{candidateMember.get('type').getValue()}" == 'request' && 146: "$!{candidateMember.get('status').getValue()}" == 'pending') 147: ## Remember the existing request. 148: #set ($pendingRequest = $candidateMember) 149: #end 150: #end 151: #if ($pendingRequest) 152: #if ("$!{request.cancelJoinRequest}" != '1') 153: ## Request already exists. 154: ## 155: {{info}}The user [[$currentUser]] already has a pending request to join the workspace [[$workspaceName>>$workspaceUrl]]. Please wait for a workspace admin to review it.{{/info}} 156: #elseif ("$!confirm" != '1') 157: ## User wants to cancel existing request. 158: ## 159: #set ($confirmUrl = $doc.getURL('view', "$!request.queryString&confirm=1")) 160: {{box}} 161: Are you sure you want cancel the request to join the workspace [[$workspaceName>>$workspaceUrl]]? 162: ((({{html}} 163: <span class="buttonwrapper"><a class="button" href="$confirmUrl">Yes</a> <a class="button" href="$backUrl">No</a></span> 164: {{/html}}))) 165: {{/box}} 166: #else 167: ## User confirms the cancel of existing request. 168: ## 169: #set ($temp = $workspaceGroupDocumentRestricted.removeXObject($pendingRequest)) 170: #set ($temp = $xwiki.getXWiki().saveDocument($workspaceGroupDocumentRestricted, "The user $currentUser canceled his join request.", true, $xcontext.context)) 171: {{success}}The user [[$currentUser]] successfully canceled the request to join the workspace [[$workspaceName>>$workspaceUrl]].{{/success}} 172: #end 173: #elseif ("$!confirm" != '1') 174: ## Join request. 175: ## 176: {{html wiki='true'}} 177: To join the workspace [[$workspaceName>>$workspaceUrl]], you must first issue a join request. After this, a workspace admin will review your request and consider accepting or rejecting it. 178: 179: <form class='xform third' method='GET'> 180: <dl> 181: <dt> 182: <label for='userComment'>Message</label> 183: <span class='xHint'>A message to send, viewable by the workspace admin, in which you can motivate this join request.</span> 184: </dt> 185: <dd><textarea name='userComment' rows='7' cols='45'></textarea></dd> 186: <span class='buttonwrapper'> 187: <br/> 188: <input type='submit' name='submit' value='Send Request' class='button'/> 189: <a href="$backUrl" class='button secondary'>Back</a> 190: </span> 191: <input type='hidden' name='workspaceId' value="$!workspaceId"/> 192: <input type='hidden' name='workspaceName' value="$!workspaceName"/> 193: <input type='hidden' name='requestJoin' value="$!request.requestJoin"/> 194: <input type='hidden' name='confirm' value="1"/> 195: </dl> 196: </form> 197: {{/html}} 198: #else 199: ## User confirmed the join request. 200: ## 201: #set ($newRequestObject = $workspaceGroupDocumentRestricted.newXObject($candidateMemberClassReference, $xcontext.context)) 202: #set ($temp = $newRequestObject.setStringValue('userName', $currentUser)) 203: #set ($temp = $newRequestObject.setDateValue('date', $datetool.date)) 204: #set ($temp = $newRequestObject.setLargeStringValue('userComment', "$!{escapetool.xml($request.userComment)}")) 205: #set ($temp = $newRequestObject.setStringValue('status', 'pending')) 206: #set ($temp = $newRequestObject.setStringValue('type', 'request')) 207: #set ($temp = $xwiki.getXWiki().saveDocument($workspaceGroupDocumentRestricted, "The user $currentUser requested to join the workspace.", true, $xcontext.context)) 208: ## Send message to workspace admins. (XWikiAdminGroup) 209: #set ($workspaceAdminGroupReference = $services.model.createDocumentReference($workspaceId, 'XWiki', 'XWikiAdminGroup')) 210: #set ($notificationMessage = "The user '${xwiki.getUserName($currentUser, false)}' ($currentUser) has requested to join the workspace '${workspaceName}' ($workspaceId).") 211: #set ($temp = $services.messageStream.postMessageToGroup($notificationMessage, $workspaceAdminGroupReference)) 212: {{success}}The user [[$currentUser]] successfully sent the request to join workspace [[$workspaceName>>$workspaceUrl]].{{/success}} 213: #end 214: #else 215: ## Open membership as default. 216: ## 217: #if ("$!confirm" != '1') 218: ## Open join. 219: ## 220: #set ($confirmUrl = $doc.getURL('view', "$!request.queryString&confirm=1")) 221: {{box}} 222: Are you sure you want to join the workspace [[$workspaceName>>$workspaceUrl]]? 223: ((({{html}} 224: <span class="buttonwrapper"><a class="button" href="$confirmUrl">Yes</a> <a class="button" href="$backUrl">No</a></span> 225: {{/html}}))) 226: {{/box}} 227: #else 228: ## User confirmed to join the workspace. 229: ## 230: #set ($newMemberObject = $workspaceGroupDocumentRestricted.newXObject($groupsClassReference, $xcontext.context)) 231: #set ($temp = $newMemberObject.setStringValue('member', $currentUser)) 232: #set ($temp = $xwiki.getXWiki().saveDocument($workspaceGroupDocumentRestricted, "The user $currentUser joined the workspace.", true, $xcontext.context)) 233: {{success}}The user [[$currentUser]] successfully joined workspace [[$workspaceName>>$workspaceUrl]].{{/success}} 234: #end 235: #end 236: #end 237: #end 238: #end 239: {{/velocity}}