Hide last authors
Alexandru Colesnicov 2.1 1 {{include reference="AppWithinMinutes.VelocityMacros"/}}
Alexandru Colesnicov 1.1 2
Alexandru Colesnicov 2.1 3 {{velocity}}
4 #if ($request.wizard == 'true')
5 {{include reference="AppWithinMinutes.WizardStep"/}}
6 #end
7 {{/velocity}}
8
Alexandru Colesnicov 1.1 9 {{template name="locationPicker_macros.vm" /}}
10
11 {{velocity output="false"}}
Alexandru Colesnicov 2.1 12 #macro (showStep)
Alexandru Colesnicov 1.1 13 #appWizardHeader('name')
Alexandru Colesnicov 2.1 14 <div class="wizard-help">
15 <p>
16 <strong>$services.localization.render('platform.appwithinminutes.wizardStepHelpTitle')</strong>
17 $services.localization.render('platform.appwithinminutes.wizardStepHelpDescription')
18 </p>
19 <ul class="steps vertical">
20 #foreach($step in $awmSteps)
21 <li>
22 <span class="number">$mathtool.add($foreach.index, 1)</span>
23 <span class="name">$services.localization.render("appWithinMinutes.wizardStep.${step}.name")</span>
24 <span class="description">$services.localization.render("appWithinMinutes.wizardStep.${step}.description")</span>
25 </li>
26 #end
27 </ul>
28 </div>
Alexandru Colesnicov 1.1 29 <form action="$doc.getURL()" method="post" class="xform wizard-body">
30 #locationPicker({
31 'id': 'app',
32 'title': {
33 'label': 'platform.appwithinminutes.appNameLabel',
34 'hint': 'platform.appwithinminutes.appNameHint',
35 'name': 'appName'
36 },
37 'preview': {
38 'label': 'appWithinMinutes.createApp.location.label',
39 'hint': 'appWithinMinutes.createApp.location.hint'
40 },
41 'parent': {
42 'label': 'appWithinMinutes.createApp.parent.label',
43 'hint': 'appWithinMinutes.createApp.parent.hint',
44 'name': 'appParentReference',
45 'reference': $doc.documentReference.wikiReference,
46 'placeholder': 'appWithinMinutes.createApp.parent.placeholder'
47 }
48 })
49 <div class="appName-preview"></div>
50 #appWizardFooter(1)
51 </form>
52 #end
53
54 #macro (processStep)
55 ## Check if the application already exists.
56 #getAppReference
57 #getAppDescriptor($appReference)
58 #if ($appDescriptor)
Alexandru Colesnicov 2.1 59 ## Edit an existing application.
60 #getAppClassReference($appDescriptor)
61 #set ($appClassRef = $classReference)
Alexandru Colesnicov 1.1 62 #else
63 ## Create a new application. Use the default class name.
64 #set ($appCodeRef = $services.model.createSpaceReference('Code', $appReference))
65 #set ($appClassRef = $services.model.createDocumentReference("$!{appReference.name}Class", $appCodeRef))
66 #end
67 #set ($queryString = {'wizard': true})
68 #if (!$xwiki.exists($appClassRef))
69 #set ($appHomeRef = $services.model.resolveDocument('', 'default', $appReference))
70 #set ($discard = $queryString.putAll({
71 'template': 'AppWithinMinutes.ClassTemplate',
72 'parent': $services.model.serialize($appHomeRef),
73 'title': "$appReference.name Class"
74 }))
75 #end
76 $response.sendRedirect($xwiki.getURL($appClassRef, 'edit', $escapetool.url($queryString)))
77 #end
78
79 #macro (validateAppName)
80 #getAppReference
81 #if (!$appReference)
Alexandru Colesnicov 2.1 82 <span class="xErrorMsg">$services.localization.render('platform.appwithinminutes.appNameEmptyError')</span>
Alexandru Colesnicov 1.1 83 #else
84 #getAppDescriptor($appReference)
85 #if ($appDescriptor)
86 ## Edit an existing application.
Alexandru Colesnicov 2.1 87 #getAppClassReference($appDescriptor)
88 #set ($appClassRef = $classReference)
Alexandru Colesnicov 1.1 89 #else
90 ## Create a new application.
91 #set ($appCodeRef = $services.model.createSpaceReference('Code', $appReference))
92 #set ($appClassRef = $services.model.createDocumentReference("$!{appReference.name}Class", $appCodeRef))
93 #end
Alexandru Colesnicov 2.1 94 <dl>
95 <dt>$services.localization.render('platform.appwithinminutes.appNamePreviewHomePageUrlLabel')</dt>
96 <dd><pre>$!escapetool.xml($xwiki.getDocument($appReference).externalURL)</pre></dd>
97 <dt>$services.localization.render('platform.appwithinminutes.appNamePreviewCodeSpaceLabel')</dt>
98 <dd>#hierarchy($appClassRef.parent)</dd>
99 </dl>
Alexandru Colesnicov 1.1 100 #set ($appHomeRef = $services.model.resolveDocument('', 'default', $appReference))
101 #if ($appDescriptor || $xwiki.exists($appHomeRef) || $xwiki.exists($appClassRef))
Alexandru Colesnicov 2.1 102 <div class="box warningmessage">
103 $services.localization.render('platform.appwithinminutes.appNameIsUsedWarning')
104 </div>
Alexandru Colesnicov 1.1 105 #end
106 #end
107 #end
108
109 #macro (getAppReference)
110 #if ($request.resolve == 'true')
111 #set ($appReference = $services.model.resolveSpace($request.appName))
112 #elseif ("$!request.appName" != '')
113 #set ($parentReference = $doc.documentReference.wikiReference)
114 #if ("$!request.appParentReference" != '')
115 #set ($parentReference = $services.model.resolveSpace($request.appParentReference))
116 #end
117 #set ($appReference = $services.model.createSpaceReference($request.appName, $parentReference))
118 #else
119 #set ($appReference = $NULL)
120 #end
121 #end
122
123 #macro (getAppDescriptor $appReference)
124 #set ($appDescriptorClassName = 'AppWithinMinutes.LiveTableClass')
125 #set ($appDescriptorStatement = "from doc.object($appDescriptorClassName) as obj where doc.space = :space")
126 #set ($localSpaceReference = $services.model.serialize($appReference, 'local'))
127 #set ($appDescriptors = $services.query.xwql($appDescriptorStatement).bindValue('space', $localSpaceReference).execute())
128 #if ($appDescriptors.size() > 0)
129 #set ($appDescriptor = $xwiki.getDocument($appDescriptors.get(0)))
Alexandru Colesnicov 2.1 130 #else
131 #set ($appDescriptor = $NULL)
Alexandru Colesnicov 1.1 132 #end
133 #end
134 {{/velocity}}
135
136 {{velocity}}
Alexandru Colesnicov 2.1 137 {{html clean="false"}}
Alexandru Colesnicov 1.1 138 #if ("$!request.appName" != '')
139 #if ($xcontext.action == 'get')
140 #validateAppName
141 #else
142 ## CSRF protection is not needed because this step only redirects to the next one passing data in the query string.
143 #processStep
144 #end
Alexandru Colesnicov 2.1 145 #elseif ($request.wizard == 'true')
Alexandru Colesnicov 1.1 146 #showStep
Alexandru Colesnicov 2.1 147 #set ($displayDocExtra = false)
Alexandru Colesnicov 1.1 148 #end
Alexandru Colesnicov 2.1 149 {{/html}}
Alexandru Colesnicov 1.1 150 {{/velocity}}

Tips

You can click on the arrows next to the breadcrumb elements to quickly navigate to sibling and children pages.

Need help?

If you need help with XWiki you can contact: