Wiki-Quellcode von Neues Wiki erstellen
Zuletzt geändert von Holger Engels am 2024/05/03 12:07
Zeige letzte Bearbeiter
author | version | line-number | content |
---|---|---|---|
1 | {{velocity}} | ||
2 | ####################################################### | ||
3 | ## Create a new (sub)wiki - WIZARD | ||
4 | ## | ||
5 | ## This wizard let user create a new wiki. | ||
6 | ## The 'controller' macro call the good submacro | ||
7 | ## depending on the step | ||
8 | ## | ||
9 | ####################################################### | ||
10 | ######################### | ||
11 | ## STYLE | ||
12 | ######################### | ||
13 | #set($docextras = {}) | ||
14 | ######################### | ||
15 | ## PLUGINS DEPENDENCIES | ||
16 | ######################### | ||
17 | |||
18 | ## If all dependencies are OK, we call the controller | ||
19 | #if ($services.wiki && $services.wiki.creationjob) | ||
20 | #controller() | ||
21 | #else | ||
22 | {{error}}{{translation key="platform.wiki.dependencies.wiki.missing"/}}{{/error}} | ||
23 | #end | ||
24 | |||
25 | ################################## | ||
26 | ## CONTROLLER | ||
27 | ################################## | ||
28 | #macro(controller) | ||
29 | #if($request.step == 'members') | ||
30 | #stepMembers() | ||
31 | #elseif($request.step == 'create') | ||
32 | #create() | ||
33 | #elseif($request.step == 'cleanUp') | ||
34 | #cleanUp() | ||
35 | #elseif($request.step == 'finalize') | ||
36 | #finalize() | ||
37 | #else | ||
38 | ## Default step | ||
39 | #stepType() | ||
40 | #end | ||
41 | #end | ||
42 | ################################## | ||
43 | ## HEADER | ||
44 | ## | ||
45 | ## Display the wizard header | ||
46 | ################################## | ||
47 | #macro(wizardHeader $title $currentStepNumber) | ||
48 | ## Display a step name in the header | ||
49 | #macro(wizardHeaderStep $name $number $currentStepNumber) | ||
50 | <li><span class="btn btn-xs number #if($currentStepNumber==$number)step-active#end">$number</span> <span class="name #if($currentStepNumber==$number)step-active#end">$name</span></li> | ||
51 | #end | ||
52 | |||
53 | <div class="wizard-header"> | ||
54 | <h1><span>$title</span></h1> | ||
55 | #if($currentStepNumber) | ||
56 | <ul class="steps"> | ||
57 | #wizardHeaderStep($services.localization.render('platform.wiki.create.wizard.step.nameAndType.shortname'), 1, $currentStepNumber) | ||
58 | #wizardHeaderStep($services.localization.render('platform.wiki.create.wizard.step.users.shortname'), 2, $currentStepNumber) | ||
59 | </ul> | ||
60 | #end | ||
61 | <div class="clearfloats"></div> | ||
62 | </div> | ||
63 | |||
64 | #end | ||
65 | ################################## | ||
66 | ## FOOTER | ||
67 | ## | ||
68 | ## Display the wizard footer | ||
69 | ################################## | ||
70 | #macro(wizardFooter $prev $next $create $finalize $finalizeHidden $cleanUp $cleanupHidden) | ||
71 | <div class="wizard-footer buttons"> | ||
72 | #if("$!prev" !='') | ||
73 | <span class="buttonwrapper left"> | ||
74 | <button value="$prev" title="$services.localization.render('platform.wiki.create.wizard.step.previous')" name="step" id="wizard-previous" class="button secondary">$services.localization.render('platform.wiki.create.wizard.step.previous')</button> | ||
75 | </span> | ||
76 | #end | ||
77 | #if("$!next" !='') | ||
78 | <span class="buttonwrapper"> | ||
79 | <button value="$next" title="$services.localization.render('platform.wiki.create.wizard.step.next')" name="step" id="wizard-next" class="button">$services.localization.render('platform.wiki.create.wizard.step.next')</button> | ||
80 | </span> | ||
81 | #end | ||
82 | #if("$!create" !='') | ||
83 | <span class="buttonwrapper"> | ||
84 | <button value="$create" title="$services.localization.render('platform.wiki.create.wizard.step.create')" name="step" id="wizard-create" class="button">$services.localization.render('platform.wiki.create.wizard.step.create')</button> | ||
85 | </span> | ||
86 | #end | ||
87 | #if("$!finalize" != '') | ||
88 | <span class="buttonwrapper"> | ||
89 | <button value="finalize" title="$services.localization.render('platform.wiki.create.wizard.step.creation.go')" name="step" id="finalize" class="button #if($finalizeHidden)hidden#end">$services.localization.render('platform.wiki.create.wizard.step.creation.go')</button> | ||
90 | </span> | ||
91 | #end | ||
92 | #if("$!cleanUp" != '') | ||
93 | <span class="buttonwrapper"> | ||
94 | <button value="cleanUp" title="$services.localization.render('platform.wiki.create.wizard.step.provisioning.cleanUp')" name="step" id="cleanUp" class="button #if($cleanupHidden)hidden#end">$services.localization.render('platform.wiki.create.wizard.step.provisioning.cleanUp')</button> | ||
95 | </span> | ||
96 | #end | ||
97 | </div> | ||
98 | #end | ||
99 | ################################## | ||
100 | ## REQUIRED | ||
101 | ## | ||
102 | ## Add a required message | ||
103 | ################################## | ||
104 | #macro(required)<span class='xRequired'>($services.localization.render('platform.wiki.form.requiredField'))</span>#end | ||
105 | ################################## | ||
106 | ## TEMPLATE FIELDS | ||
107 | ## | ||
108 | ## Display the 'template' fields | ||
109 | ################################## | ||
110 | #macro(displayTemplateFields $templates) | ||
111 | #if ($templates.size() > 0) | ||
112 | <select name="template" id="template"> | ||
113 | <option value="xwikinotemplate">$services.localization.render('platform.wiki.create.wizard.template.noTemplate')</option> | ||
114 | #foreach ($template in $templates) | ||
115 | #set ($name = $template.id) | ||
116 | #if ($stringtool.isNotBlank("$!template.prettyName")) | ||
117 | #set($name = "${template.prettyName} (${name})") | ||
118 | #end | ||
119 | #set($selected = '') | ||
120 | #if($request.template == $template.id) | ||
121 | #set($selected = 'selected="selected"') | ||
122 | #end | ||
123 | <option value="${template.id}" $selected>$name</option> | ||
124 | #end | ||
125 | </select> | ||
126 | #end | ||
127 | <div class="xformInline"> | ||
128 | #set ($isTemplate = '') | ||
129 | #if ("$!request.set_as_template" != '') | ||
130 | #set ($isTemplate = 'checked="checked"') | ||
131 | #end | ||
132 | <input type="checkbox" name="set_as_template" id="set_as_template" $isTemplate/> | ||
133 | <label for="set_as_template" id="label_set_as_template">$services.localization.render('platform.wiki.create.wizard.setAsTemplate.label')</label> | ||
134 | </div> | ||
135 | #end | ||
136 | ################################## | ||
137 | ## STEP TYPE | ||
138 | ## | ||
139 | ## The type is the first step on the creation | ||
140 | ################################## | ||
141 | #macro(stepType) | ||
142 | #set($discard = $xwiki.ssfx.use('uicomponents/wizard/wizard.css', true)) | ||
143 | {{html}} | ||
144 | <form class="xform" method="post" action="$doc.getURL()"> | ||
145 | #wizardHeader($services.localization.render('platform.wiki.create.wizard.step.nameAndType'), 1) | ||
146 | ### WIZARD BODY ### | ||
147 | <div class="wizard-body"> | ||
148 | ### SECOND STEP VALUES | ||
149 | <input type="hidden" name="ownerId" value="$!escapetool.xml($request.getParameter('ownerId'))" /> | ||
150 | <input type="hidden" name="membershipType" value="$!escapetool.xml($request.getParameter('membershipType'))" /> | ||
151 | <input type="hidden" name="userScope" value="$!escapetool.xml($request.userScope)" /> | ||
152 | #addMembersAsHiddenInput() | ||
153 | ### WIZARD FIRST HALF ### | ||
154 | <div class="half"> | ||
155 | ### PRETTY NAME ### | ||
156 | <dl> | ||
157 | <dt> | ||
158 | <label for="prettyname">$services.localization.render('platform.wiki.prop.wikiprettyname')#required()</label> | ||
159 | <span class="xHint">$services.localization.render('platform.wiki.create.wizard.desc.wikiprettyname')</span> | ||
160 | <span id="wikiprettynamevalidation" class="xErrorMsg"></span> | ||
161 | </dt> | ||
162 | <dd> | ||
163 | <input size="60" id="prettyname" name="wikiprettyname" type="text" value="$!escapetool.xml($request.getParameter('wikiprettyname'))"/> | ||
164 | </dd> | ||
165 | </dl> | ||
166 | ### WIKI NAME ### | ||
167 | <dl> | ||
168 | <dt> | ||
169 | <label for="wikiname">$services.localization.render('platform.wiki.prop.wikiname')#required()</label> | ||
170 | <span class='xHint'>$services.localization.render('platform.wiki.create.wizard.desc.wikiname')</span> | ||
171 | </dt> | ||
172 | <dd> | ||
173 | <input size="60" id="wikiname" name="wikiname" type="text" value="$!escapetool.xml($request.wikiname)"/> | ||
174 | <span id="wikinamevalidation" class="xErrorMsg"></span> | ||
175 | </dd> | ||
176 | </dl> | ||
177 | ### WIKI ALIAS ### | ||
178 | #if(!$services.wiki.isPathMode()) | ||
179 | <dl> | ||
180 | <dt> | ||
181 | <label for="wikialias">$services.localization.render('platform.wiki.prop.wikialias')#required()</label> | ||
182 | <span class='xHint'>$services.localization.render('platform.wiki.create.wizard.desc.wikialias')</span> | ||
183 | </dt> | ||
184 | <dd> | ||
185 | <input size="60" id="wikialias" name="wikialias" type="text" value="$!escapetool.xml($request.wikialias)"/> | ||
186 | </dd> | ||
187 | </dl> | ||
188 | #end | ||
189 | ### DESCRIPTION ### | ||
190 | <dl> | ||
191 | <dt> | ||
192 | <label for="description">$services.localization.render('platform.wiki.prop.description')</label> | ||
193 | <span class="xHint">$services.localization.render('platform.wiki.create.wizard.desc.description')</span> | ||
194 | </dt> | ||
195 | <dd> | ||
196 | <textarea id="description" name="description" rows="7" cols="45">$!escapetool.xml($request.getParameter('description'))</textarea> | ||
197 | </dd> | ||
198 | </dl> | ||
199 | ### END OF WIZARD FIRST HALF | ||
200 | </div> | ||
201 | ### WIZARD SECOND HALF | ||
202 | <div class="half"> | ||
203 | ### TEMPLATE / FLAVOR ### | ||
204 | #set ($templates = $services.wiki.template.getTemplates()) | ||
205 | #if (!$services.distribution.hasWikiDefaultUIExtension()) | ||
206 | #template('flavor/macros.vm') | ||
207 | <dl> | ||
208 | <dt> | ||
209 | <label>$services.localization.render('platform.wiki.create.wizard.flavortemplate.label')</label> | ||
210 | <span class="xHint">$services.localization.render('platform.wiki.create.wizard.flavortemplate.hint')</span> | ||
211 | </dt> | ||
212 | #set ($currentTab = 'flavors') | ||
213 | #if ("$!request.template" != '' && $request.template != 'xwikinotemplate') | ||
214 | #set ($currentTab = 'templates') | ||
215 | #end | ||
216 | <dd class="flavor_template"> | ||
217 | <ul class="xwikitabbar"> | ||
218 | <li #if($currentTab=='flavors')class="active"#end><a href="#flavors">$services.localization.render('platform.wiki.create.wizard.flavortemplate.flavorTab')</a></li> | ||
219 | <li #if($currentTab=='templates')class="active"#end><a href="#templates">$services.localization.render('platform.wiki.create.wizard.flavortemplate.templateTab')</a></li> | ||
220 | </ul> | ||
221 | <div class="xwiki-createwiki-tabs-content"> | ||
222 | #set ($defaultFlavor = "$!request.flavor") | ||
223 | #if ($defaultFlavor == '') | ||
224 | #set ($defaultFlavor = 'noFlavor') | ||
225 | #end | ||
226 | <div class="xwiki-createwiki-tab #if($currentTab=='flavors')active#{else}hidden#end" id="flavors-tab"> | ||
227 | ## TODO: reload when the target subwiki id changes | ||
228 | #displayFlavorPicker('flavor', $defaultFlavor, true, 'xwiki-createwiki-flavor-picker', true, 'wiki:subwiki') | ||
229 | </div> | ||
230 | <div class="xwiki-createwiki-tab #if($currentTab=='templates')active#{else}hidden#end" id="templates-tab"> | ||
231 | #displayTemplateFields($templates) | ||
232 | </div> | ||
233 | </div> | ||
234 | </dd> | ||
235 | </dl> | ||
236 | #else | ||
237 | ## There is a default UI configured, so we do not display the flavor picker | ||
238 | <dl> | ||
239 | <dt> | ||
240 | #if ($templates.size() > 0) | ||
241 | <label for="template">$services.localization.render('platform.wiki.create.wizard.template.label')</label> | ||
242 | <span class="xHint">$services.localization.render('platform.wiki.create.wizard.desc.newTemplateHint')</span> | ||
243 | #else | ||
244 | <label>$services.localization.render('platform.wiki.create.wizard.template.label')</label> | ||
245 | #end | ||
246 | </dt> | ||
247 | <dd> | ||
248 | #displayTemplateFields($templates) | ||
249 | </dd> | ||
250 | </dl> | ||
251 | #end | ||
252 | ### END OF WIZARD SECOND HALF | ||
253 | </div> | ||
254 | ### END OF WIZARD BODY | ||
255 | </div> | ||
256 | <div class="clearfloats"></div> | ||
257 | #wizardFooter('', 'members', '') | ||
258 | </form> | ||
259 | {{/html}} | ||
260 | #end | ||
261 | ################################## | ||
262 | ## STEP MEMBERS | ||
263 | ## | ||
264 | ## The members step is the lasy | ||
265 | ################################## | ||
266 | #macro(stepMembers) | ||
267 | #set($discard = $xwiki.ssfx.use('uicomponents/wizard/wizard.css', true)) | ||
268 | {{html}} | ||
269 | <form class="xform" method="post" action="$doc.getURL()"> | ||
270 | #wizardHeader($services.localization.render('platform.wiki.create.wizard.step.users'), 2) | ||
271 | ### WIZARD BODY ### | ||
272 | <div class="wizard-body"> | ||
273 | ### FIRST STEP VALUES | ||
274 | <input type="hidden" name="wikiprettyname" value="$!escapetool.xml($request.getParameter('wikiprettyname'))" /> | ||
275 | <input type="hidden" name="wikiname" value="$!escapetool.xml($request.wikiname)" /> | ||
276 | <input type="hidden" name="wikialias" value="$!escapetool.xml($request.wikialias)" /> | ||
277 | <input type="hidden" name="description" value="$!escapetool.xml($request.getParameter('description'))" /> | ||
278 | <input type="hidden" name="template" value="$!escapetool.xml($request.template)" /> | ||
279 | <input type="hidden" name="flavor" value="$!escapetool.xml($request.flavor)" /> | ||
280 | <input type="hidden" name="set_as_template" value="$!escapetool.xml($request.set_as_template)" /> | ||
281 | <input type="hidden" name="form_token" value="$!escapetool.xml($services.csrf.getToken())" /> | ||
282 | ### WIZARD FIRST HALF ### | ||
283 | <div class="half"> | ||
284 | ### OWNER ### | ||
285 | ## Make this section available only to admins, so that only admins can create wikis in the name of other users. | ||
286 | #if ($hasAdmin) | ||
287 | <dl> | ||
288 | <dt> | ||
289 | <label for="owner">$services.localization.render('platform.wiki.prop.owner') <span class="xRequired">($services.localization.render('platform.wiki.form.requiredField'))</span></label> | ||
290 | <span class="xHint">$services.localization.render('platform.wiki.create.wizard.desc.owner')</span> | ||
291 | </dt> | ||
292 | <dd> | ||
293 | #set($value = $escapetool.xml($request.getParameter('ownerId'))) | ||
294 | #if("$!value" == "") | ||
295 | #set($value = $escapetool.xml($xcontext.user)) | ||
296 | #end | ||
297 | #set ($userPickerParams = { | ||
298 | 'id': 'owner', | ||
299 | 'name': 'ownerId', | ||
300 | 'value': $value | ||
301 | }) | ||
302 | #userPicker(false $userPickerParams) | ||
303 | </dd> | ||
304 | </dl> | ||
305 | #else | ||
306 | <input id="owner" name="ownerId" type="hidden" value="${xcontext.mainWikiName}:${xcontext.user}"/> | ||
307 | #end | ||
308 | ### USERS SCOPE ### | ||
309 | <dl> | ||
310 | <dt> | ||
311 | <label for="userScope">$services.localization.render('platform.wiki.create.wizard.userScope.label')</label> | ||
312 | <span class="xHint">$services.localization.render('platform.wiki.create.wizard.userScope.hint')</span> | ||
313 | </dt> | ||
314 | <dd> | ||
315 | #set($value = $escapetool.xml($request.getParameter('userScope'))) | ||
316 | #set ($wikiUserClassDocument = $xwiki.getDocument('WikiManager.WikiUserClass')) | ||
317 | #set ($wikiUserClass = $wikiUserClassDocument.getxWikiClass()) | ||
318 | #set ($userScopeProperty = $wikiUserClass.get('userScope')) | ||
319 | #set ($userScopePropertyValues = '') | ||
320 | #set ($userScopePropertyValues = $userScopeProperty.getListValues()) | ||
321 | #set ($userScopeDetailsMap = $userScopeProperty.getMapValues()) | ||
322 | #foreach ($userScopeValue in $userScopePropertyValues) | ||
323 | #set ($userScopeValueId = "userScope_${foreach.index}") | ||
324 | <div> | ||
325 | <label for="$userScopeValueId"> | ||
326 | #set($checked = '') | ||
327 | #if($request.getParameter('userScope') == $userScopeValue || ("$!request.getParameter('userScope')"=='' && $foreach.index==0)) | ||
328 | #set($checked = 'checked="checked"') | ||
329 | #end | ||
330 | <input type="radio" id="$userScopeValueId" name="userScope" value="$userScopeValue" $checked/> | ||
331 | $services.localization.render("${wikiUserClassDocument.fullName}_${userScopeProperty.name}_${userScopeDetailsMap.get($userScopeValue).getValue()}") | ||
332 | </label> | ||
333 | </div> | ||
334 | #end | ||
335 | </dd> | ||
336 | </dl> | ||
337 | ### END OF WIZARD FIRST HALF | ||
338 | </div> | ||
339 | ### WIZARD SECOND HALF | ||
340 | <div class="half"> | ||
341 | ### MEMBERSHIP TYPE | ||
342 | #set ($membershipTypeProperty = $wikiUserClass.get('membershipType')) | ||
343 | #set ($membershipTypeValues = '') | ||
344 | #set ($membershipTypeValues = $membershipTypeProperty.getListValues()) | ||
345 | #set ($membershipTypeDetailsMap = $membershipTypeProperty.getMapValues()) | ||
346 | <dl> | ||
347 | <dt> | ||
348 | <label>$services.localization.render('platform.wiki.prop.membershipType.label')</label> | ||
349 | <span class='xHint'>$services.localization.render('platform.wiki.prop.membershipType.hint')</span> | ||
350 | </dt> | ||
351 | <dd> | ||
352 | #foreach ($membershipTypeValue in $membershipTypeValues) | ||
353 | #set ($membershipTypeValueId = "membershipType_${foreach.index}") | ||
354 | <div> | ||
355 | <label for="$membershipTypeValueId"> | ||
356 | #set($checked = '') | ||
357 | #if($request.getParameter('membershipType') == $membershipTypeValue || ("$!request.getParameter('membershipType')"=='' && $foreach.index==0)) | ||
358 | #set($checked = 'checked="checked"') | ||
359 | #end | ||
360 | <input type="radio" id="$membershipTypeValueId" name="membershipType" value="$membershipTypeValue" $checked/> | ||
361 | $services.localization.render("${wikiUserClassDocument.fullName}_${membershipTypeProperty.name}_${membershipTypeDetailsMap.get($membershipTypeValue).getValue()}") | ||
362 | </label> | ||
363 | </div> | ||
364 | #end | ||
365 | </dd> | ||
366 | </dl> | ||
367 | ### MEMBERS | ||
368 | <dl> | ||
369 | <dt> | ||
370 | <label for="members">$services.localization.render('platform.wiki.create.members')</label> | ||
371 | <span class="xHint">$services.localization.render('platform.wiki.create.wizard.desc.members')</span> | ||
372 | </dt> | ||
373 | <dd> | ||
374 | #set ($userPickerParams = { | ||
375 | 'id': 'members', | ||
376 | 'name': 'members', | ||
377 | 'value': $request.getParameterValues('members') | ||
378 | }) | ||
379 | #userPicker(true $userPickerParams) | ||
380 | </dd> | ||
381 | </dl> | ||
382 | ### END OF WIZARD SECOND HALF | ||
383 | </div> | ||
384 | ### END OF WIZARD BODY | ||
385 | </div> | ||
386 | <div class="clearfloats"></div> | ||
387 | #wizardFooter('type', '', 'create') | ||
388 | </form> | ||
389 | {{/html}} | ||
390 | #end | ||
391 | ################################## | ||
392 | ## GET REQUEST LIST | ||
393 | ## | ||
394 | ## Get the values for user pickers with multiple selection | ||
395 | ################################## | ||
396 | #macro(getRequestList $paramlist $paramname) | ||
397 | #set ($paramtable = []) | ||
398 | #set ($paramtable = $request.getParameterValues($paramname)) | ||
399 | #if ($paramtable && $paramlist) | ||
400 | #set ($ok = $paramlist.clear()) | ||
401 | #foreach($paramvalue in $paramtable) | ||
402 | #set ($ok = $paramlist.add($paramvalue)) | ||
403 | #end | ||
404 | #end | ||
405 | #end | ||
406 | ################################## | ||
407 | ## CREATE | ||
408 | ## | ||
409 | ## The final step that eventually create the wiki | ||
410 | ################################## | ||
411 | #macro(create) | ||
412 | ## Job Status | ||
413 | #set ($state = $services.wiki.creationjob.getJobStatus($request.wikiname).state) | ||
414 | ## If a deleted wiki had the same name, the job status may still be there (with a 'FINISHED' status) | ||
415 | ## So we have to check if the wiki really exists | ||
416 | #if ($state == 'FINISHED' && !$services.wiki.exists($request.wikiname)) | ||
417 | ## If not, consider that the new job has not been launched yet | ||
418 | #set($state = 'NONE') | ||
419 | #end | ||
420 | ## CSRF checkFailed to execute the [velocity] macro. Click on this m | ||
421 | #if (!$services.csrf.isTokenValid($request.form_token)) | ||
422 | {{warning}} | ||
423 | {{translation key="platform.wiki.csrf.error" /}} | ||
424 | {{/warning}} | ||
425 | |||
426 | #stepMembers() | ||
427 | #elseif("$!state" != '' && $state != 'NONE') | ||
428 | #creation() | ||
429 | #else | ||
430 | #createWiki() | ||
431 | #end | ||
432 | #end | ||
433 | ################################## | ||
434 | ## CREATE WIKI | ||
435 | ## | ||
436 | ## The macro that finaly starts the wiki creation job | ||
437 | ################################## | ||
438 | #macro(createWiki) | ||
439 | #set($wikialias = $request.wikialias) | ||
440 | #if("$!wikialias" == '') | ||
441 | #set($wikialias = $request.wikiname) | ||
442 | #end | ||
443 | #set($wikiCreationRequest = $services.wiki.creationjob.newWikiCreationRequest()) | ||
444 | #set($discard = $wikiCreationRequest.setWikiId($request.wikiname)) | ||
445 | #set($discard = $wikiCreationRequest.setAlias($wikialias)) | ||
446 | #set($discard = $wikiCreationRequest.setPrettyName($request.wikiprettyname)) | ||
447 | #set($discard = $wikiCreationRequest.setDescription($request.description)) | ||
448 | #if("$!request.set_as_template" != '') | ||
449 | #set($discard = $wikiCreationRequest.setTemplate(true)) | ||
450 | #else | ||
451 | #set($discard = $wikiCreationRequest.setTemplate(false)) | ||
452 | #end | ||
453 | #set($ownerId = $request.ownerId) | ||
454 | #if("$!ownerId" == '') | ||
455 | ## If the ownerId is null, then set the current user | ||
456 | #set($ownerId = $services.model.serialize($xcontext.userReference, 'default')) | ||
457 | #else | ||
458 | #set($ownerId = $services.model.serialize($services.model.resolveDocument($ownerId), 'default')) | ||
459 | #end | ||
460 | #set($discard = $wikiCreationRequest.setOwnerId($ownerId)) | ||
461 | #set($discard = $wikiCreationRequest.setUserScope($request.userScope)) | ||
462 | #set($discard = $wikiCreationRequest.setMembershipType($request.membershipType)) | ||
463 | #set($discard = $wikiCreationRequest.setFailOnExist(true)) | ||
464 | #if("$!request.template" != '' && $request.template != 'xwikinotemplate') | ||
465 | ## Create a wiki from a template | ||
466 | #set($discard = $wikiCreationRequest.setWikiSource('template')) | ||
467 | #set($discard = $wikiCreationRequest.setTemplateId($request.template)) | ||
468 | #elseif("$!request.flavor" != '' && $request.flavor != 'noFlavor') | ||
469 | ## Create a wiki from an extension | ||
470 | #set($discard = $wikiCreationRequest.setWikiSource('extension')) | ||
471 | #set($flavorExtension = $request.flavor.split(':::')) | ||
472 | #set($discard = $wikiCreationRequest.setExtensionId($flavorExtension[0], $flavorExtension[1])) | ||
473 | #elseif($services.distribution.hasWikiDefaultUIExtension()) | ||
474 | ## Default action when a default UI is configured for subwikis | ||
475 | #set($discard = $wikiCreationRequest.setWikiSource('extension')) | ||
476 | #set($discard = $wikiCreationRequest.setExtensionId($services.wiki.creationjob.defaultWikiExtensionId)) | ||
477 | #end | ||
478 | ## Members | ||
479 | #if ($request.userScope != 'local_only') | ||
480 | #set ($members = []) | ||
481 | #getRequestList($members 'members') | ||
482 | ## Remove empty strings from the list of members (the user picker submits by default an empty string). | ||
483 | #set ($discard = $members.removeAll([''])) | ||
484 | #if ("$!members" != '' && $members.size() > 0) | ||
485 | #set ($globalMembers = []) | ||
486 | ## Enforce global users | ||
487 | #foreach ($member in $members) | ||
488 | #set($discard = $globalMembers.add($services.model.serialize($services.model.resolveDocument($member), 'default'))) | ||
489 | #end | ||
490 | ## Add the members | ||
491 | #set ($discard = $wikiCreationRequest.setMembers($globalMembers)) | ||
492 | #end | ||
493 | #end | ||
494 | ## Start the creation job | ||
495 | #set($job = $services.wiki.creationjob.createWiki($wikiCreationRequest)) | ||
496 | #if (!$job) | ||
497 | {{error}}$services.localization.render('platform.wiki.create.error', [$request.wikiname, $services.wiki.creationjob.lastError]){{/error}} | ||
498 | #else | ||
499 | #creation() | ||
500 | #end | ||
501 | #end | ||
502 | ################################## | ||
503 | ## ADD MEMBERS AS HIDDEN INPUT | ||
504 | ################################## | ||
505 | #macro(addMembersAsHiddenInput) | ||
506 | ### MEMBERS VALUES | ||
507 | #set ($members = []) | ||
508 | #getRequestList($members 'members') | ||
509 | #set($membersValue = '') | ||
510 | #foreach($m in $members) | ||
511 | #if($m != '') | ||
512 | <input type="hidden" name="members" value="$!escapetool.xml($m)" /> | ||
513 | #end | ||
514 | #end | ||
515 | #end | ||
516 | ################################## | ||
517 | ## CREATION | ||
518 | ## | ||
519 | ## This step display a progess bar during | ||
520 | ## the wiki creation | ||
521 | ################################## | ||
522 | #macro(creation) | ||
523 | #set ($discard = $xwiki.ssfx.use('uicomponents/wizard/wizard.css', true)) | ||
524 | #set ($discard = $xwiki.ssfx.use('uicomponents/logging/logging.css', true)) | ||
525 | #set ($discard = $xwiki.jsfx.use('uicomponents/logging/logging.js', true)) | ||
526 | #set ($status = $services.wiki.creationjob.getJobStatus($request.wikiname)) | ||
527 | {{html}} | ||
528 | <form class="xform" method="post" action="$doc.getURL()"> | ||
529 | <input type="hidden" name="wikiId" id="wikiId" value="$!escapetool.xml($request.wikiname)" /> | ||
530 | <input type="hidden" name="csrf" id="csrf" value="$!escapetool.xml($services.csrf.getToken())" /> | ||
531 | #wizardHeader($services.localization.render('platform.wiki.create.wizard.step.creation')) | ||
532 | <div class="wizard-body"> | ||
533 | #if ($status.state != 'FINISHED') | ||
534 | <div class="ui-progress" id="ui-progress"> | ||
535 | $services.localization.render('platform.wiki.create.wizard.step.creation.wait') | ||
536 | <div class="ui-progress-background"> | ||
537 | #set ($percent = $status.progress.offset) | ||
538 | ## There is no progress information if the job was scheduled but hasn't started yet. | ||
539 | #if (!$percent) | ||
540 | #set ($percent = 0) | ||
541 | #end | ||
542 | #set ($percent = $numbertool.toNumber($mathtool.mul($percent, 100)).intValue()) | ||
543 | <div class="ui-progress-bar green" style="width:${percent}%" id="wikicreation-progress-bar"></div> | ||
544 | </div> | ||
545 | </div> | ||
546 | #end | ||
547 | #set($hasErrors = $status.logTail.hasLogLevel('ERROR')) | ||
548 | <p class="successmessage box #if($status.error || $state != 'FINISHED')hidden#end" id="successMessage"> | ||
549 | $services.localization.render('platform.wiki.create.wizard.step.creation.complete', ["<strong>$escapetool.xml($request.wikiname)</strong>"]) | ||
550 | </p> | ||
551 | <p class="warningmessage box #if(!$hasErrors || $state != 'FINISHED')hidden#end" id="errorlogMessage"> | ||
552 | $services.localization.render('platform.wiki.create.wizard.step.creation.errorlog', ["<strong>$escapetool.xml($request.wikiname)</strong>"]) | ||
553 | </p> | ||
554 | <p class="errormessage box #if(!$status.error || $state != 'FINISHED')hidden#end" id="errorMessage"> | ||
555 | $services.localization.render('platform.wiki.create.wizard.step.creation.error', ["<strong>$escapetool.xml($request.wikiname)</strong>"]) | ||
556 | </p> | ||
557 | </div> | ||
558 | ## Log | ||
559 | #template('logging_macros.vm') | ||
560 | #template('extension.vm') | ||
561 | ## Hack to be able to use macros from extension.vm that are supposed to be used inside Extension Manager | ||
562 | #set($olddoc = $doc) | ||
563 | #set($doc = $xwiki.getDocument('XWiki.AddExtensions')) | ||
564 | #set($loading = $status.state != 'FINISHED') | ||
565 | <div id="creation-log"> | ||
566 | #printLogs($status.logTail, $loading) | ||
567 | </div> | ||
568 | #set($doc = $olddoc) | ||
569 | #if($status.state == 'FINISHED') | ||
570 | #if ($status.error) | ||
571 | #set($finalizeHidden = true) | ||
572 | #set($cleanUpHidden = false) | ||
573 | #else | ||
574 | #set($finalizeHidden = false) | ||
575 | #set($cleanUpHidden = !$hasErrors) | ||
576 | #end | ||
577 | #else | ||
578 | #set($finalizeHidden = true) | ||
579 | #set($cleanUpHidden = true) | ||
580 | #end | ||
581 | #wizardFooter('', '', '', 'finalize', $finalizeHidden, 'cleanUp', $cleanUpHidden) | ||
582 | </form> | ||
583 | {{/html}} | ||
584 | #end | ||
585 | ################################## | ||
586 | ## FINALIZE | ||
587 | ## | ||
588 | ## Just go the the created wiki | ||
589 | ################################## | ||
590 | #macro(finalize) | ||
591 | #set($wikiDescriptor = $services.wiki.getById($request.wikiId)) | ||
592 | $response.sendRedirect($xwiki.getURL($wikiDescriptor.mainPageReference)) | ||
593 | #end | ||
594 | ################################## | ||
595 | ## CLEAN UP | ||
596 | ## | ||
597 | ## Delete the wiki if errors has occured | ||
598 | ################################## | ||
599 | #macro(cleanUp) | ||
600 | #set($discard = $xwiki.ssfx.use('uicomponents/wizard/wizard.css', true)) | ||
601 | #if("$!request.deleteOk" == '') | ||
602 | #if ($services.csrf.isTokenValid($request.csrf)) | ||
603 | #set($wikiId = $request.wikiId) | ||
604 | #set($ok = $services.wiki.deleteWiki($wikiId)) | ||
605 | $response.sendRedirect($doc.getURL('view', "step=cleanUp&deleteOk=$ok&wikiId=$wikiId")) | ||
606 | #else | ||
607 | {{html}} | ||
608 | #wizardHeader($services.localization.render('platform.wiki.create.wizard.step.cleaningUp')) | ||
609 | <form action="$doc.getURL()" method="post"> | ||
610 | <div class="wizard-body"> | ||
611 | <p>$services.localization.render('platform.wiki.create.wizard.step.cleaningUp.confirmmessage', ["<strong>$request.wikiId</strong>"])</p> | ||
612 | <input type="hidden" name="csrf" value="$!escapetool.xml($services.csrf.getToken())" /> | ||
613 | <input type="hidden" name="wikiId" value="$!escapetool.xml($request.wikiId)" /> | ||
614 | <div class="wizard-footer buttons"> | ||
615 | <span class="buttonwrapper"> | ||
616 | <button value="cleanUp" title="Confirm" name="step" id="cleanUp" class="button">$services.localization.render('platform.wiki.create.wizard.step.cleaningUp.confirm')</button> | ||
617 | </span> | ||
618 | </div> | ||
619 | </div> | ||
620 | </form> | ||
621 | {{/html}} | ||
622 | #end | ||
623 | #else | ||
624 | #set($wikiId = $request.wikiId) | ||
625 | {{html}} | ||
626 | #wizardHeader($services.localization.render('platform.wiki.create.wizard.step.cleaningUp')) | ||
627 | <div class="wizard-body"> | ||
628 | #if($request.deleteOk) | ||
629 | <p class="successmessage box"> | ||
630 | $services.localization.render('platform.wiki.create.wizard.step.cleaningup.success', ["<strong>$wikiId</strong>"]) | ||
631 | </p> | ||
632 | #else | ||
633 | <p class="errormessage box"> | ||
634 | $services.localization.render('platform.wiki.create.wizard.step.cleaningup.error', ["<strong>$wikiId</strong>"]) | ||
635 | </p> | ||
636 | #end | ||
637 | </div> | ||
638 | </form> | ||
639 | {{/html}} | ||
640 | #end | ||
641 | #end | ||
642 | #macro (getExtensionURL $extensionId $extensionVersion $extraParams) | ||
643 | #set ($parameters = {}) | ||
644 | ## | ||
645 | #if ($extraParams) | ||
646 | #set ($discard = $parameters.putAll($extraParams)) | ||
647 | #end | ||
648 | ## | ||
649 | #if ($extensionId) | ||
650 | #set ($discard = $parameters.put('extensionId', $extensionId)) | ||
651 | #elseif ($request.extensionId) | ||
652 | #set ($discard = $parameters.put('extensionId', $request.extensionId)) | ||
653 | #end | ||
654 | ## | ||
655 | #if ($extensionVersion) | ||
656 | #set ($discard = $parameters.put('extensionVersion', $extensionVersion)) | ||
657 | #elseif ($request.extensionVersion) | ||
658 | #set ($discard = $parameters.put('extensionVersion', $request.extensionVersion)) | ||
659 | #end | ||
660 | ## | ||
661 | #if ($request.extensionNamespace) | ||
662 | #set ($discard = $parameters.put('extensionNamespace', $request.extensionNamespace)) | ||
663 | #end | ||
664 | ## | ||
665 | #if ($xback) | ||
666 | #set ($discard = $parameters.put('xback', $xback)) | ||
667 | #elseif ($request.xback) | ||
668 | #set ($discard = $parameters.put('xback', $request.xback)) | ||
669 | #end | ||
670 | ## | ||
671 | #if ($request.section) | ||
672 | #set ($discard = $parameters.put('section', $request.section)) | ||
673 | #end | ||
674 | ## | ||
675 | #set ($queryString = '') | ||
676 | #foreach ($entry in $parameters.entrySet()) | ||
677 | #set ($queryString = "$queryString&$escapetool.url($entry.key)=$escapetool.url($entry.value)") | ||
678 | #end | ||
679 | $xwiki.getURL('XWiki.XWikiPreferences', 'admin', "editor=globaladmin§ion=XWiki.AddExtensions&${queryString.substring(1)}")## | ||
680 | #end | ||
681 | {{/velocity}} |