Wiki source code of Join Wiki

Last modified by Helio Pause on 2025/04/02 10:30

Show last authors
1 {{velocity}}
2 #macro (printException $exception)
3 #if($exception.message)
4 {{error}}$services.localization.render('platform.wiki.error.exceptionWithMessage', [$exception.message]){{/error}}
5 #else
6 {{error}}$exception.class{{/error}}
7 #end
8 #end
9 #set ($wikiId = $request.wikiId)
10 #set ($form_token = $request.form_token)
11 ##
12 #if ("$!wikiId" == '')
13 {{error}}{{translation key="platform.wiki.error.oneParameterNotSpecified" parameters="wikiId"/}}{{/error}}
14 #else
15 ## FIXME: add plugin dependency checks.
16 ##
17 #set ($wiki = $services.wiki.getById($wikiId))
18 #set ($wikiMainPage = $wiki.mainPageReference)
19 #set ($wikiMainPageLinkStart = '')
20 #set ($wikiMainPageLinkEnd = '')
21 #if ($xwiki.exists($wikiMainPage))
22 #set ($wikiMainPageLinkStart = '[[')
23 #set ($wikiMainPageLinkEnd = ">>${wikiMainPage}]]")
24 #end
25 ##
26 #if ("$!wiki" == '')
27 #if ("$!{services.wiki.lastError}" != '')
28 {{error}}$services.localization.render('platform.wiki.error.exceptionWithMessage', [$services.wiki.lastError.message]){{/error}}
29 #else
30 {{error}}$services.localization.render('platform.wiki.error.wikidoesnotexist', [$wikiId]){{/error}}
31 #end
32 #else
33 #set ($wikiName = $wiki.prettyName)
34 #if ("$!wikiName" == '')
35 #set ($wikiName = $wikiId)
36 #end
37 #set ($currentUser = $services.model.serialize($xcontext.userReference, 'default'))
38 ##
39 #set ($members = $services.wiki.user.getMembers($wikiId))
40 #if ($members && $members.contains($currentUser))
41 {{info}}$services.localization.render('platform.wiki.users.userAlreadyMemberOfWiki', ['[[', $currentUser, ">>$currentUser]]", $wikiMainPageLinkStart, $wikiName, $wikiMainPageLinkEnd]){{/info}}
42 #elseif ($currentUser == 'xwiki:XWiki.XWikiGuest')
43 #set ($loginDocumentReference = $services.model.createDocumentReference($services.wiki.mainWikiId, 'XWiki', 'XWikiLogin'))
44 #set ($loginDocument = $xwiki.getDocument($loginDocumentReference))
45 #set ($loginUrl = $loginDocument.getExternalURL('login', "xredirect=$escapetool.url($xwiki.relativeRequestURL)"))
46 {{error}}$services.localization.render('platform.wiki.users.logInToContinue', ['[[', ">>$loginUrl]]"]){{/error}}
47 #else
48 ## The user is not already a member of the wiki
49 ##
50 #set ($browseDocumentReference = $services.model.createDocumentReference($services.wiki.mainWikiId, 'WikiManager', 'WebHome'))
51 #set ($backUrl = $xwiki.getURL($browseDocumentReference))
52 ##
53 #set ($membershipType = $services.wiki.user.getMembershipType($wiki.id))
54 ##
55 ## Determine if, regardless of membership type, an existing invitation exists for the current user.
56 #set ($invitations = $services.wiki.user.getAllInvitations($wikiId))
57 #set ($existingInvitation = false)
58 #if ($invitations && !$invitations.isEmpty())
59 #foreach($invitation in $invitations)
60 #if ($invitation.userId == $currentUser && $invitation.status == 'PENDING')
61 #set ($existingInvitation = $invitation)
62 #end
63 #end
64 #end
65 #if ($existingInvitation)
66 ##
67 ## An invitation exists.
68 #if (($request.acceptInvitation || $request.rejectInvitation) && $services.csrf.isTokenValid($form_token))
69 ##
70 ## Accept
71 #if ($request.acceptInvitation)
72 #set ($discard = $services.wiki.user.acceptInvitation($existingInvitation, $request.userComment))
73 #else
74 #set ($discard = $services.wiki.user.refuseInvitation($existingInvitation, $request.userComment))
75 #end
76 ## Display the proper success info.
77 {{success}}
78 #if ($request.acceptInvitation)
79 $services.localization.render('platform.wiki.users.invitation.userAcceptedSuccess', ['[[', $currentUser, ">>$currentUser]]", $wikiMainPageLinkStart, $wikiName, $wikiMainPageLinkEnd])
80 #else
81 $services.localization.render('platform.wiki.users.invitation.userRejectedSuccess', ['[[', $currentUser, ">>$currentUser]]", $wikiMainPageLinkStart, $wikiName, $wikiMainPageLinkEnd])
82 #end
83 {{/success}}
84 #else
85 #if("$!form_token" != '')
86
87 {{warning}}
88 {{translation key="platform.wiki.csrf.error" /}}
89 {{/warning}}
90
91 #end
92 ##
93 ## User can decide if to accept or reject the invitation.
94 {{html wiki='true'}}
95 $services.localization.render('platform.wiki.users.invitation.title', [$wikiMainPageLinkStart, $wikiName, $wikiMainPageLinkEnd])
96
97 <form class='xform third' method='post'>
98 <dl>
99 #if ("$!existingInvitation.get('reviewerComment').getValue()" != '')
100 <dt>
101 <label>{{translation key="platform.wiki.users.invitation.message.label"/}}</label>
102 </dt>
103 <dd>
104 $existingInvitation.get('reviewerComment').getValue()
105 </dd>
106 #end
107 <dt>
108 <label for='userComment'>{{translation key="platform.wiki.users.invitation.reply.title"/}}</label>
109 <span class='xHint'>{{translation key="platform.wiki.users.invitation.reply.hint"/}}</span>
110 </dt>
111 <dd><textarea name='userComment' rows='7' cols='45'></textarea></dd>
112 <dd>
113 <span class='buttonwrapper'>
114 <br/>
115 <input type='submit' name='acceptInvitation'
116 value="$services.localization.render('platform.wiki.users.invitation.accept.label')"
117 class='button'/>
118 <input type='submit' name='rejectInvitation'
119 value="$services.localization.render('platform.wiki.users.invitation.reject.label')"
120 class='button'/>
121 <a href="$backUrl" class='button secondary'>
122 {{translation key="platform.wiki.users.invitation.postpone.label"/}}
123 </a>
124 </span>
125 <input type="hidden" name="wikiId" value="$!escapetool.xml($wikiId)" />
126 <input type="hidden" name="form_token" value="$!escapetool.xml($services.csrf.getToken())" />
127 </dd>
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 wiki.
134 #elseif ($membershipType == 'INVITE')
135 ##
136 ## User does not have an invitation.
137 {{error}}{{translation key="platform.wiki.users.join.error.needInvitation"/}}{{/error}}
138 #elseif ($membershipType == 'REQUEST')
139 ## Determine if a pending request already exists.
140 ##
141 #set ($pendingRequest = false)
142 #set ($existingRequests = $services.wiki.user.getAllRequests($wikiId))
143 #foreach ($existingRequest in $existingRequests)
144 #if ($existingRequest.userId == $currentUser && $existingRequest.status == 'PENDING')
145 #set ($pendingRequest = $existingRequest)
146 #end
147 #end
148 #if ($pendingRequest)
149 #if ("$!{request.cancelJoinRequest}" != '1')
150 ## Request already exists.
151 ##
152 {{info}}$services.localization.render('platform.wiki.users.join.request.pendingRequestExists', ['[[', $currentUser, ">>$currentUser]]", $wikiMainPageLinkStart, $wikiName, $wikiMainPageLinkEnd]){{/info}}
153 #elseif (!$services.csrf.isTokenValid($form_token))
154 ## User wants to cancel existing request.
155 ##
156 #if("$!form_token" != '')
157
158 {{warning}}
159 {{translation key="platform.wiki.csrf.error" /}}
160 {{/warning}}
161
162 #end
163 {{box}}
164 $services.localization.render('platform.wiki.users.join.request.cancelConfirmation', [$wikiMainPageLinkStart, $wikiName, $wikiMainPageLinkEnd])
165 ((({{html}}
166 <form action="$doc.getURL()" method="post">
167 <fieldset>
168 <input type="hidden" name="wikiId" value="$!escapetool.xml($wikiId)" />
169 <input type="hidden" name="form_token" value="$!escapetool.xml($services.csrf.getToken())" />
170 <input type="hidden" name="cancelJoinRequest" value="1" />
171 <span class="buttonwrapper"><button class="button">$services.localization.render('platform.wiki.users.join.request.cancelYes')</button> <a class="button" href="$backUrl">$services.localization.render('platform.wiki.users.join.request.cancelNo')</a></span>
172 </fieldset>
173 </form>
174 {{/html}})))
175 {{/box}}
176 #else
177 ## User confirms the cancel of existing request.
178 ##
179 #set ($result = $services.wiki.user.cancelCandidacy($pendingRequest))
180 #if ($result)
181 {{success}}$services.localization.render('platform.wiki.users.join.request.cancelSuccess', ['[[', $currentUser, ">>$currentUser]]", $wikiMainPageLinkStart, $wikiName, $wikiMainPageLinkEnd]){{/success}}
182 #else
183 #printException($services.wiki.user.lastError.message)
184 #end
185 #end
186 #elseif (!$services.csrf.isTokenValid($form_token))
187 ## Join request.
188 ##
189 #if("$!form_token" != '')
190
191 {{warning}}
192 {{translation key="platform.wiki.csrf.error" /}}
193 {{/warning}}
194
195 #end
196
197 {{html wiki='true'}}
198 $services.localization.render('platform.wiki.users.join.request.hint', [$wikiMainPageLinkStart, $wikiName, $wikiMainPageLinkEnd])
199
200 <form class='xform third' method='GET'>
201 <dl>
202 <dt>
203 <label for='userComment'>{{translation key="platform.wiki.users.join.request.message.label"/}}</label>
204 <span class='xHint'>{{translation key="platform.wiki.users.join.request.message.hint"/}}</span>
205 </dt>
206 <dd>
207 <textarea name='userComment' rows='7' cols='45'></textarea>
208 </dd>
209 <dd>
210 <span class='buttonwrapper'>
211 <br/>
212 <input type='submit' name='submit'
213 value="$services.localization.render('platform.wiki.users.join.request.send.label')"
214 class='button'/>
215 <a href="$backUrl" class='button secondary'>
216 {{translation key="platform.wiki.users.join.request.cancel.label"/}}
217 </a>
218 </span>
219 <input type='hidden' name='wikiId' value="$!wikiId"/>
220 <input type='hidden' name='requestJoin' value="$escapetool.xml($!request.requestJoin)"/>
221 <input type="hidden" name="form_token" value="$!escapetool.xml($services.csrf.getToken())" />
222 </dd>
223 </dl>
224 </form>
225 {{/html}}
226 #else
227 ## User confirmed the join request.
228 ##
229 #set ($request = $services.wiki.user.askToJoin($currentUser, $wikiId, $request.userComment))
230 #if ($request)
231 {{success}}$services.localization.render('platform.wiki.users.join.request.success', ['[[', $currentUser, ">>$currentUser]]", $wikiMainPageLinkStart, $wikiName, $wikiMainPageLinkEnd]){{/success}}
232 #else
233 #printException($services.wiki.user.lastError.message)
234 #end
235 #end
236 #else
237 ## Open membership as default.
238 ##
239 #if (!$services.csrf.isTokenValid($form_token))
240 ## Open join.
241 ##
242 #if("$!form_token" != '')
243
244 {{warning}}
245 {{translation key="platform.wiki.csrf.error" /}}
246 {{/warning}}
247
248 #end
249 {{box}}
250 $services.localization.render('platform.wiki.users.join.confirmation', [$wikiMainPageLinkStart, $wikiName, $wikiMainPageLinkEnd])
251 ((({{html}}
252 <form action="$doc.getURL()" method="post">
253 <fieldset>
254 <input type="hidden" name="wikiId" value="$!escapetool.xml($wikiId)" />
255 <input type="hidden" name="form_token" value="$!escapetool.xml($services.csrf.getToken())" />
256 <span class="buttonwrapper"><button class="button">$services.localization.render('platform.wiki.users.join.yes')</button> <a class="button" href="$backUrl">$services.localization.render('platform.wiki.users.join.no')</a></span>
257 </fieldset>
258 </form>
259 {{/html}})))
260 {{/box}}
261 #else
262 ## User confirmed to join the wiki.
263 ##
264 #set ($result = $services.wiki.user.join($currentUser, $wikiId))
265 #if ($result)
266 {{success}}$services.localization.render('platform.wiki.users.join.success', ['[[', $currentUser, ">>$currentUser]]", $wikiMainPageLinkStart, $wikiName, $wikiMainPageLinkEnd]){{/success}}
267 #else
268 #printException($services.wiki.user.lastError.message)
269 #end
270 #end
271 #end
272 #end
273 #end
274 #end
275 {{/velocity}}