Masquer les derniers auteurs
superadmin 3.1 1 {{include reference="XWiki.TemplateProviderMacros" /}}
2
3 {{include reference="AppWithinMinutes.VelocityMacros" /}}
4
Administrator 1.1 5 {{velocity output="false"}}
superadmin 3.1 6 #macro (listAvailableColumns $classReference)
Administrator 1.1 7 <select id="availableColumns">
superadmin 3.1 8 #set ($classFields = $xwiki.getDocument($classReference).getxWikiClass().properties)
9 #if ($classFields.size() > 0)
10 <optgroup label="$escapetool.xml($services.localization.render(
11 'platform.appwithinminutes.liveTableEditorClassFieldColumnGroupLabel'))" id="classFields">
12 #foreach ($field in $classFields)
Administrator 1.1 13 <option value="$field.name">$escapetool.xml($field.translatedPrettyName)</option>
14 #end
15 </optgroup>
16 #end
superadmin 3.1 17 <optgroup label="$escapetool.xml($services.localization.render(
18 'platform.appwithinminutes.liveTableEditorGenericColumnGroupLabel'))">
19 #foreach ($entry in $genericColumns.entrySet())
20 <option value="$entry.key" title="$escapetool.xml($entry.value.get(1))">
21 $escapetool.xml($entry.value.get(0))
22 </option>
Administrator 1.1 23 #end
24 </optgroup>
25 </select>
superadmin 3.1 26 <a href="#addColumn" class="addColumn" title="$services.localization.render(
27 'platform.appwithinminutes.liveTableEditorAddColumnHint')">$services.icon.renderHTML('add')</a>
Administrator 1.1 28 #end
29
superadmin 3.1 30 #macro (displayHelpPanel)
31 #set ($genericColumns = {
32 'doc.title': [
33 $services.localization.render('platform.appwithinminutes.liveTableEditorDocTitleColumnName'),
34 $services.localization.render('platform.appwithinminutes.liveTableEditorDocTitleColumnDescription')
35 ],
36 'doc.name': [
37 $services.localization.render('platform.appwithinminutes.liveTableEditorDocNameColumnName'),
38 $services.localization.render('platform.appwithinminutes.liveTableEditorDocNameColumnDescription')
39 ],
40 'doc.location': [
41 $services.localization.render('platform.appwithinminutes.liveTableEditorDocLocationColumnName'),
42 $services.localization.render('platform.appwithinminutes.liveTableEditorDocLocationColumnDescription')
43 ],
44 'doc.author': [
45 $services.localization.render('platform.appwithinminutes.liveTableEditorDocAuthorColumnName'),
46 $services.localization.render('platform.appwithinminutes.liveTableEditorDocAuthorColumnDescription')
47 ],
48 'doc.creator': [
49 $services.localization.render('platform.appwithinminutes.liveTableEditorDocCreatorColumnName'),
50 $services.localization.render('platform.appwithinminutes.liveTableEditorDocCreatorColumnDescription')
51 ],
52 'doc.date': [
53 $services.localization.render('platform.appwithinminutes.liveTableEditorDocDateColumnName'),
54 $services.localization.render('platform.appwithinminutes.liveTableEditorDocDateColumnDescription')
55 ],
56 'doc.creationDate': [
57 $services.localization.render('platform.appwithinminutes.liveTableEditorDocCreationDateColumnName'),
58 $services.localization.render('platform.appwithinminutes.liveTableEditorDocCreationDateColumnDescription')
59 ],
60 '_actions': [
61 $services.localization.render('platform.appwithinminutes.liveTableEditorActionsColumnName'),
62 $services.localization.render('platform.appwithinminutes.liveTableEditorActionsColumnDescription')
63 ],
64 '_attachments': [
65 $services.localization.render('platform.appwithinminutes.liveTableEditorAttachmentsColumnName'),
66 $services.localization.render('platform.appwithinminutes.liveTableEditorAttachmentsColumnDescription')
67 ],
68 '_images': [
69 $services.localization.render('platform.appwithinminutes.liveTableEditorImagesColumnName'),
70 $services.localization.render('platform.appwithinminutes.liveTableEditorImagesColumnDescription')
71 ]
Administrator 1.1 72 })
superadmin 3.1 73 <div class="wizard-help">
74 <p>
75 <strong>$services.localization.render('platform.appwithinminutes.liveTableEditorHelpTitle')</strong>
76 $services.localization.render('platform.appwithinminutes.liveTableEditorHelpDescription')
77 </p>
78 <dl>
79 #foreach ($columnId in ['doc.title', 'doc.location', 'doc.date', 'doc.author', '_actions'])
80 <dt>$genericColumns.get($columnId).get(0)</dt>
81 <dd>$genericColumns.get($columnId).get(1)</dd>
82 #end
83 </dl>
84 </div>
Administrator 1.1 85 #end
86
superadmin 3.1 87 #macro (displayFormFields)
88 <div class="hidden">
Administrator 1.1 89 ## Make sure that only the sheet content is rendered when the class is saved using AJAX.
90 <input type="hidden" name="xpage" value="plain" />
Paul Libbrecht (admin) 2.1 91 ## We prevent the class name and the data space from being edited directly. They can be specified in the URL.
superadmin 3.1 92 #getAppClassReference($doc)
93 <input type="hidden" name="AppWithinMinutes.LiveTableClass_0_class"
94 value="$escapetool.xml($services.model.serialize($classReference, 'local'))" />
95 #displayPropertyValue('dataSpace', 'hidden')
Administrator 1.1 96 ## We have to pass the list of available columns to the JavaScript code.
superadmin 3.1 97 #listAvailableColumns($classReference)
98 </div>
99 <dl>
100 <dt>
101 <label for="xwikidoctitleinput">$services.localization.render('core.editors.content.titleField.label')</label>
102 <span class="xHint">$services.localization.render('platform.appwithinminutes.liveTableEditorTitleHint')</span>
103 </dt>
104 <dd><input id="xwikidoctitleinput" type="text" name="title" value="$escapetool.xml($doc.title)"/></dd>
105 <dt>
106 <label for="AppWithinMinutes.LiveTableClass_0_description">
107 $doc.displayPrettyName('description', false, false)
108 </label>
109 <span class="xHint">
110 $services.localization.render('platform.appwithinminutes.liveTableEditorDescriptionHint')
111 </span>
112 </dt>
113 <dd>#displayPropertyValue('description')</dd>
114 <dt>
115 <label for="AppWithinMinutes.LiveTableClass_0_columns">$doc.displayPrettyName('columns', false, false)</label>
116 <span class="xHint">$services.localization.render('platform.appwithinminutes.liveTableEditorColumnsHint')</span>
117 </dt>
118 <dd>#displayPropertyValue('columns')</dd>
119 </dl>
Administrator 1.1 120 #end
121
superadmin 3.1 122 #macro (getApplicationIcon $classReference)
123 #set ($applicationIcon = '')
124 ## Look for the corresponding UI extension.
125 #set ($uixPointId = 'org.xwiki.platform.panels.Applications')
126 #set ($uixObject = $doc.getObject('XWiki.UIExtensionClass', 'extensionPointId', $uixPointId))
127 #set ($uixId = $uixObject.getValue('name'))
128 #foreach ($uix in $services.uix.getExtensions($uixPointId))
129 #if ($uix.id == $uixId)
130 #set ($applicationIcon = $uix.parameters.icon)
Administrator 1.1 131 #end
132 #end
superadmin 3.1 133 #if ("$!applicationIcon" == '')
134 ## Fallback on the entry icon.
135 #set ($templateProviderReference = $services.model.createDocumentReference(
136 "$stringtool.removeEnd($classReference.name, 'Class')TemplateProvider",
137 $classReference.parent
138 ))
139 #set ($entryIcon = $xwiki.getDocument($templateProviderReference).getValue('icon'))
140 #if ("$!entryIcon" != '')
141 #set ($applicationIcon = "icon:$entryIcon")
142 #else
143 #set ($applicationIcon = 'icon:application')
144 #end
145 #end
Administrator 1.1 146 #end
147
superadmin 3.1 148 #macro (displayIcon)
149 #if ($services.uix)
150 #getApplicationIcon($classReference)
151 <dl>
152 <dt>
153 <label for="applicationIcon">
154 $services.localization.render('platform.appwithinminutes.liveTableEditorIcon')
155 </label>
156 <span class="xHint">
157 $services.localization.render('platform.appwithinminutes.liveTableEditorIconHintWithPicker',
158 [$xwiki.getSkinFile('icons/silk/index_abc.png')])
159 </span>
160 </dt>
161 <dd>
162 <input id="applicationIcon" name="applicationIcon" type="text" size="10"
163 value="$!escapetool.xml($applicationIcon)" />
164 </dd>
165 </dl>
166 #end
167 #end
Administrator 1.1 168
superadmin 3.1 169 #macro (doEdit)
170 {{html clean="false"}}
171 #set ($liveTableObj = $doc.getObject('AppWithinMinutes.LiveTableClass', true))
172 #set ($discard = $doc.use($liveTableObj))
173 #set ($discard = $xwiki.jsfx.use('js/scriptaculous/dragdrop.js'))
174 #set ($discard = $xwiki.ssx.use('AppWithinMinutes.LiveTableEditSheet'))
175 #set ($discard = $xwiki.jsx.use('AppWithinMinutes.LiveTableEditSheet'))
176 #if ("$!request.wizard" == 'true')
177 #appWizardHeader('presentation')
Administrator 1.1 178 #end
179 #displayHelpPanel()
superadmin 3.1 180 <div class="form-body">
Administrator 1.1 181 #displayFormFields()
182 #displayIcon()
superadmin 3.1 183 #if ("$!request.wizard" == 'true')
184 #appWizardFooter('presentation')
185 #end
186 </div>
187 <div class="clearfloats"></div>
188 {{/html}}
Administrator 1.1 189
superadmin 3.1 190 {{iconPicker id="applicationIcon" prefix="icon:" /}}
Administrator 1.1 191 #end
192
Paul Libbrecht (admin) 2.1 193 #macro (maybeGrantSpaceAdminRight $spaceRef)
194 ## Grant space administration rights only if the space is new. Don't overwrite existing space preferences.
195 #set ($spaceHomeRef = $services.model.resolveDocument('', 'default', $spaceRef))
196 #set ($spacePrefsRef = $services.model.resolveDocument('WebPreferences', 'explicit', $spaceRef))
197 #if (!$xwiki.exists($spaceHomeRef) && !$xwiki.exists($spacePrefsRef))
198 #set ($spacePrefsDoc = $xwiki.getDocument($spacePrefsRef))
199 #set ($discard = $spacePrefsDoc.use($spacePrefsDoc.getObject('XWiki.XWikiGlobalRights', true)))
200 #set ($discard = $spacePrefsDoc.set('allow', 1))
201 #set ($discard = $spacePrefsDoc.set('levels', 'admin'))
202 #set ($discard = $spacePrefsDoc.set('users', $services.model.serialize($xcontext.userReference, 'default')))
203 #set ($discard = $spacePrefsDoc.setTitle('$services.localization.render(''admin.preferences.title'')'))
204 #set ($discard = $spacePrefsDoc.setParent($services.model.serialize($spaceHomeRef, 'default')))
205 #set ($discard = $spacePrefsDoc.setHidden(true))
206 #set ($discard = $spacePrefsDoc.saveWithProgrammingRights($services.localization.render(
207 'platform.appwithinminutes.grantSpaceAdminRightsSaveComment')))
Administrator 1.1 208 #end
209 #end
210
Paul Libbrecht (admin) 2.1 211 #macro (maybeGrantSpaceAdminRights)
212 ## Application space
213 #set ($appReference = $doc.documentReference.parent)
214 #maybeGrantSpaceAdminRight($appReference)
215 ## Code space (if it's not nested inside the application space)
216 #set ($className = $request.get('AppWithinMinutes.LiveTableClass_0_class'))
217 #set ($classReference = $services.model.resolveDocument($className))
218 #if (!$classReference.hasParent($appReference))
219 #maybeGrantSpaceAdminRight($classReference.parent)
220 #end
221 #end
222
superadmin 3.1 223 #macro (updateAndSaveLiveTable)
224 #set ($discard = $doc.updateObjectFromRequest('AppWithinMinutes.LiveTableClass'))
225 #set ($liveTableGeneratorDoc = $xwiki.getDocument('AppWithinMinutes.LiveTableGenerator'))
Paul Libbrecht (admin) 2.1 226
227 ## Generate the LiveTable by displaying the LiveTableGenerator document in the context of the current document.
228 #set ($displayParameters = $services.display.createDocumentDisplayerParameters())
229 #set ($discard = $displayParameters.setExecutionContextIsolated(false))
230 #set ($discard = $displayParameters.setContentTranslated(true))
231 #set ($generatedLiveTableContent = $services.display.content($liveTableGeneratorDoc, { 'outputSyntaxId' : 'plain/1.0', 'displayerParameters' : $displayParameters }))
232
233 ## Use the generated LiveTable content for the data home page.
234 #set ($dataSpaceReference = $services.model.resolveSpace($doc.getValue('dataSpace')))
235 #set ($dataSpaceHomeReference = $services.model.resolveDocument('', 'default', $dataSpaceReference))
superadmin 3.1 236 #if ($dataSpaceHomeReference.equals($doc.documentReference) || !$xwiki.exists($dataSpaceHomeReference))
237 ## Either the application space and the data space are one and the same or this is a new application and we don't
238 ## want to promote the data space anymore.
Paul Libbrecht (admin) 2.1 239 #set ($dataHomePage = $doc)
240 #else
241 ## The application data is stored in a different space.
242 #set ($dataHomePage = $xwiki.getDocument($dataSpaceHomeReference))
243 #set ($discard = $dataHomePage.setHidden(true))
244 #set ($escapedAppName = $doc.documentReference.parent.name.toLowerCase().replace("'", "''"))
245 #set ($discard = $dataHomePage.setTitle("${escapetool.d}services.localization.render('${escapedAppName}.dataSpace.title')"))
246
247 ## Update the home page content.
248 #set ($homePageContent = '')
249 #if ("$!generatedLiveTableContent" != '')
250 ## Include the entries live table in the application home page.
251 #set ($escapedReference = $services.model.serialize($dataSpaceHomeReference).replaceAll('([~"])', '~$1'))
252 #set ($homePageContent = "{{include reference=""$escapedReference"" /}}")
253 #end
254 #set ($discard = $doc.setContent($homePageContent))
255 #end
256 #set ($discard = $dataHomePage.setContent($generatedLiveTableContent))
257
superadmin 3.1 258 #set ($minorEdit = "$!request.minorEdit" != '')
259 #set ($comment = $request.comment)
260 #if ("$!comment" == '')
261 #set ($comment = $services.localization.render('platform.appwithinminutes.liveTableEditorSaveComment'))
Administrator 1.1 262 #end
263
Paul Libbrecht (admin) 2.1 264 #if ($dataHomePage != $doc)
265 ## Save the data home page.
266 #set ($discard = $dataHomePage.save($comment, $minorEdit))
Administrator 1.1 267 #end
Paul Libbrecht (admin) 2.1 268
269 ## Save the application home page.
superadmin 3.1 270 #set ($discard = $doc.save($comment, $minorEdit))
Administrator 1.1 271 #end
272
superadmin 3.1 273 #macro (updateAndSaveIcon)
274 #set ($uix = $doc.getObject('XWiki.UIExtensionClass', true))
275 #set ($discard = $uix.set('name', "platform.panels.${doc.space}Application"))
276 #set ($discard = $uix.set('extensionPointId', 'org.xwiki.platform.panels.Applications'))
277 #set ($uixParams = [
278 "label=$doc.plainTitle",
279 "target=$doc.fullName",
280 "icon=$request.applicationIcon"
281 ])
282 #set ($discard = $uix.set('parameters', $stringtool.join($uixParams, $util.newline)))
Paul Libbrecht (admin) 2.1 283 #set ($hasWikiAdminRights = $services.security.authorization.hasAccess('admin', $doc.documentReference.wikiReference))
superadmin 3.1 284 #set ($discard = $uix.set('scope', "#if ($hasWikiAdminRights)wiki#{else}user#end"))
285 #set ($discard = $doc.save('Updated application icon', true))
Administrator 1.1 286 #end
287
superadmin 3.1 288 #macro (doSave)
Administrator 1.1 289 #maybeGrantSpaceAdminRights()
290 #updateAndSaveLiveTable()
291 #updateAndSaveIcon()
superadmin 3.1 292 #if ($action == 'save')
293 #if ($errorMessage)
294 {{html clean="false"}}
295 <div class="box errormessage">$errorMessage</div>
296 {{/html}}
Administrator 1.1 297 #else
298 ## Redirect to view mode.
299 $response.sendRedirect($doc.getURL())
300 #end
301 #else
superadmin 3.1 302 #if ($errorMessage)
Administrator 1.1 303 $response.sendError(400, $errorMessage)
304 #else
305 $response.setStatus(204)
306 #end
307 #end
308 #end
309 {{/velocity}}
310
311 {{velocity}}
superadmin 3.1 312 #if ("$!request.wizard" == 'true')
Paul Libbrecht (admin) 2.1 313 {{include reference="AppWithinMinutes.WizardStep" /}}
Administrator 1.1 314 #end
315 {{/velocity}}
316
317 {{velocity}}
318 ## Determine the action button that triggered the request
superadmin 3.1 319 #set ($action = $xcontext.action)
320 #foreach ($paramName in $request.getParameterMap().keySet())
321 #if ($paramName.startsWith('xaction_'))
322 #set ($action = $paramName.substring(8))
Administrator 1.1 323 #break
324 #end
325 #end
superadmin 3.1 326 #if ($action == 'edit')
Administrator 1.1 327 #doEdit()
superadmin 3.1 328 #elseif ($action == 'save' || $action == 'saveandcontinue')
329 #if ($services.csrf.isTokenValid($request.form_token))
Administrator 1.1 330 #doSave()
331 #else
superadmin 3.1 332 $response.sendRedirect($services.csrf.getResubmissionURL())
Administrator 1.1 333 #end
334 #end
335 {{/velocity}}
This wiki is licensed under a Creative Commons 2.0 license
XWiki 13.10 - Documentation - Conditions