This XWiki Enterprise Manager product has been abandoned in version 5.2 and is not supported anymore. Its main feature was to allow the creation of sub wikis. This multi-wiki feature has been incorporated back into XWiki Standard.

For the moment we're keeping this wiki available for our legacy users.

Wiki source code of ExtensionManagerMacros

Last modified by Admin on 2012/03/01 11:39

Hide last authors
Vincent Massol 1.1 1 {{velocity output="false"}}
2 $xwiki.ssx.use('ExtensionManagerMacros')
3 $xwiki.jsx.use('ExtensionManagerMacros')
4 #set ($extensionManager = $services.extension)
5 #if ($request.extensionwiki && $request.extensionwiki.trim() != '')
6 #set($extensionwiki = $request.extensionwiki)
7 #set($extensionnamespace = "wiki:${extensionwiki}")
8 #end
9
10 #macro (displayExtensionSearchBar)
11 (% class="extHeader" %)(((
12 (% class="extHeaderLeft" %)(((
13 {{html}}
Thomas Mortagne 2.1 14 <form class="xform half" action="$doc.getURL($xcontext.action, $request.getQueryString().replaceAll('(^|&)actionshowdetails=[^&]++&?', '$1').replaceAll('(^|&)(extension(id|version)=[^&]++&?+)+', '$1').replaceAll('(^|&)section=[^&]++', '$1section=XWiki.AddExtensions').replaceAll('(^|&)searchextension=[^&]++&?', '$1'))" method="post">
Vincent Massol 1.1 15 <div class="globalsearch extHeaderLeftSearch">
Thomas Mortagne 2.1 16 <label class="label" for="extensionsearchinput">$msg.get('extensions.search.title')</label><input type="text" class="globalsearchinput#if ("$!request.searchextension" == '') withTip#end extHeaderLeftInput" id="extensionsearchinput" name="searchextension" value="#if ("$!request.searchextension" != '')${request.searchextension}#{else}$msg.get('extensions.search.tip')#{end}" size="60"><input type="image" class="button" value="$msg.get('panels.search.submit')" alt="$msg.get('panels.search.submit')" src="$xwiki.getSkinFile('icons/xwiki/search.png')">
Vincent Massol 1.1 17 </div>
18 </form>
19 {{/html}}
20 )))
Thomas Mortagne 2.1 21 (% class="extHeaderRight" %)(((
22 ## Advanced search form
23 {{html clean="false"}}
24 <form action="$escapetool.xml($doc.getURL($xcontext.action, $request.getQueryString()))" method="post" class="xform">
25 <fieldset id="advancedextensionsearch">
26 <div id="advancedextensionsearch-body"></div>
27 <legend><a href="#advancedextensionsearch-body">$msg.get('extensions.advancedSearch.title')</a></legend>
28 <div class="plainmessage advancedsearchpopup hidden">
29 <input type="hidden" name="xback" value="$escapetool.xml($doc.getURL($xcontext.action, $request.queryString))" />
30 <dl>
31 <dt><label for="advancedextensionsearch-id">$msg.get('extensions.advancedSearch.id.label')</label></dt>
32 <dd><input type="text" name="extensionid" id="advancedextensionsearch-id" value="" /></dd>
33 <dt><label for="advancedextensionsearch-version">$msg.get('extensions.advancedSearch.version.label')</label></dt>
34 <dd><input type="text" name="extensionversion" id="advancedextensionsearch-version" value="" /></dd>
35 </dl>
36 <p><span class="buttonwrapper"><input type="submit" name="actioninstall" value="$msg.get('extensions.advancedSearch.actions.submit')" class="button" /></span>
37 <span class="buttonwrapper"><a href="#searchextension" class="actioncancel secondary button">$msg.get('extensions.advancedSearch.actions.cancel')</a></span></p>
38 </div>
39 </fieldset>
40 </form>
41 {{/html}}
42 )))
Vincent Massol 1.1 43 (% class="clearfloats" %)((()))
44 )))
45 #end
46
47 #macro (displayExtensionName $extension $actions)
48 #set ($name = "$!{extension.name}")
49 #if ($name == '')
50 #set ($name = "$!{extension.id.id}")
51 #if ($name.indexOf(':') >= 0)
52 #set ($name = $name.substring($mathtool.add($name.indexOf(':'), 1)))
53 #end
54 #end
55 $name##
56 #end
57
58 #macro (displayExtension $extension)
Admin 3.1 59 #determineExtensionStatus($extension.id, $extensionnamespace, $extensionStatus)
60 #set ($actions = [])
61 #computeXBack()
62 #if ($extensionStatus == 'core')
63 #getCoreExtensionButtons($actions)
64 #elseif ($extensionStatus == 'installed')
65 #getInstalledExtensionButtons($actions)
66 #elseif ($extensionStatus == 'remote')
67 #getRemoteExtensionButtons($actions)
68 #end
69 (% class="extension-item# extension-item-${extensionStatus}" %)(((
Vincent Massol 1.1 70 (% class="extension-header" %)(((
71 (% class="extension-name" %)
72 ==#displayExtensionName($extension) (% class="extension-version %)$extension.id.version==
73
74 {{html}}
75 #if ($doc.name == 'XWikiPreferences')
76 #set ($action = 'admin')
77 #else
78 #set ($action = 'view')
79 #end
80 <form method="post" action="$doc.getURL($action, $request.getQueryString().replaceAll('(^|&)actionshowdetails=[^&]++', ''))">
81 <div class="extension-actions">
82 <input type="hidden" name="extensionid" value="$extension.id.id" />
83 <input type="hidden" name="extensionversion" value="$extension.id.version" />
84 #foreach ($action in $actions)
85 ${action}##
86 #end
87 </div>
88 </form>
89 {{/html}}
90
91 #if ($extension.authors.size() > 0)
92 (% class="extension-authors" %)(((
Thomas Mortagne 2.1 93 $msg.get('extensions.info.authors') ##
Vincent Massol 1.1 94 #foreach ($author in $extension.authors)
95 #if ($author.name == 'devs')
Thomas Mortagne 2.1 96 [[$msg.get('extensions.info.authors.xwikiorg')>>http://www.xwiki.org/]]##
Vincent Massol 1.1 97 #elseif ("$!author.url" != '' && "$!author.name" != '')
98 [[${author.name}>>${author.url}]]##
99 #else
100 ${author.name}##
101 #end
102 #if ($foreach.hasNext), ##
Thomas Mortagne 2.1 103 #else )))
Vincent Massol 1.1 104
105 #end
106 #end
107 #end
108 #if ("$!{extension.summary}" != '')
109 (% class="extension-description" %)
110 {{{
111 $extension.summary.replaceAll('\s+', ' ')
112 }}}
113
114 #end
115 (% class="clearfloats" %)((()))
116 )))
117 #if ($request.actionshowdetails)
118 #set ($backwardDependencies = $extensionManager.getBackwardDependencies($extension.id.id, $extension.id.version))
119 #if (!$backwardDependencies)
120 #set ($backwardDependencies = {})
121 #end
122 (% class="extension-body" %)(((
123 (% class="innerMenu" %)
Thomas Mortagne 2.1 124 * [[$msg.get('extensions.info.category.description')>>||anchor="extension-body-description-${extension.id.id}-${extension.id.version}"]]
Vincent Massol 1.1 125 #if ("$!{extension.releaseNotes}" != '')
Thomas Mortagne 2.1 126 * [[$msg.get('extensions.info.category.releaseNotes')>>||anchor="extension-body-relnotes-${extension.id.id}-${extension.id.version}"]]
Vincent Massol 1.1 127 #end
128 #if ($extension.dependencies.size() > 0 || $backwardDependencies.size() > 0)
Thomas Mortagne 2.1 129 * [[$msg.get('extensions.info.category.dependencies')>>||anchor="extension-body-dependencies-${extension.id.id}-${extension.id.version}"]]
Vincent Massol 1.1 130 #end
131
132 {{id name="extension-body-description-${extension.id.id}-${extension.id.version}" /}}
133 (% class="extension-body-description extension-body-section" %)(((
134 (% class="extension-metadata" %)
135 * $msg.get('extensions.info.license', [$extension.licenses.size()]) ##
136 #foreach ($license in $extension.licenses)
137 ${license.name}##
138 #if ($foreach.hasNext), #end
139 #end
140
141 #if ($extension.repository.id.URI && $extension.repository.id.URI.scheme != 'file')
142 * $msg.get('extensions.info.repository') [[$extension.repository.id.id>>$extension.repository.id.URI]]
143 #end
144 #if ($extension.dependency)
145 * $msg.get('extensions.info.dependency')
146 #end
147 #if ("$!{extension.webSite}" != '')
148 * $msg.get('extensions.info.website') [[$extension.webSite.replaceAll('^[^/]++//([^/]++)/?.*+$', '$1')>>$extension.webSite]]
149 #end
150 #if ($extension.features.size() > 0)
151 * $msg.get('extensions.info.features') $extension.features
152 #end
153 #if ($xwiki.virtualMode)
154 #if (!$extension.namespaces || $extension.namespaces.size() == 0)
155 * $msg.get('extensions.info.namespaces.global')
156 #else
157 * $msg.get('extensions.info.namespaces.list') #foreach ($namespace in $extension.namespaces)$namespace#if($foreach.hasNext), #end#end
158
159 #end
160 #end
161
162 ## TODO: need a decision on what exactly is the description and how it should be safely displayed (wiki syntax, server side generated HTML, etc)
163 ## $!extension.description
164 )))
165
166 #if ("$!{extension.releaseNotes}" != '')
167 {{id name="extension-body-relnotes-${extension.id.id}-${extension.id.version}"/}}
168 (% class="extension-body-relnotes extension-body-section" %)(((
169 $!{extension.releaseNotes}
170 )))
171 #end
172
173 {{id name="extension-body-dependencies-${extension.id.id}-${extension.id.version}" /}}
174 #computeXBack()
175 (% class="extension-body-dependencies extension-body-section" %)(((
176 $msg.get('extensions.info.dependencies.directDependencies', [$extension.dependencies.size()])
177 #foreach ($dependency in $extension.dependencies)
Thomas Mortagne 2.1 178 #set ($dependencyExtension = $extensionManager.resolve($dependency))
Vincent Massol 1.1 179 #set ($dependencyClass = "$!{dependencyExtension.class}")
180 #if ($dependencyExtension)
181 * [[#displayExtensionName($dependencyExtension)>>##
182 #if ($dependencyClass.endsWith('CoreExtension'))
Thomas Mortagne 2.1 183 path:$doc.getURL($xcontext.action, "actionshowdetails=true&extensionid=${dependency.id}&extensionversion=${dependency.versionConstraint}&section=XWiki.CoreExtensions&xback=${escapetool.url($xback)}")||class="dependency-type-core"]]
Vincent Massol 1.1 184 #elseif ($dependencyClass.endsWith('LocalExtension'))
Thomas Mortagne 2.1 185 path:$doc.getURL($xcontext.action, "actionshowdetails=true&extensionid=${dependency.id}&extensionversion=${dependency.versionConstraint}&section=XWiki.InstalledExtensions&xback=${escapetool.url($xback)}")||class="dependency-type-installed"]]
Vincent Massol 1.1 186 #else
Thomas Mortagne 2.1 187 path:$doc.getURL($xcontext.action, "actionshowdetails=true&extensionid=${dependency.id}&extensionversion=${dependency.versionConstraint}&section=XWiki.AddExtensions&xback=${escapetool.url($xback)}")||class="dependency-type-remote"]]
Vincent Massol 1.1 188 #end
189 #else
190 * (% class="dependency-type-unknown" %)${dependency.id}
191 #end
192 #if (!$foreach.hasNext)
193
194 #end
195 #end
196 $msg.get('extensions.info.dependencies.backwardDependencies', [$backwardDependencies.size()])
197 #foreach ($namespace in $backwardDependencies.entrySet())
198 #foreach ($dependency in $namespace.value)
199 #set ($dependencyClass = "${dependency.class}")
200 * [[#displayExtensionName($dependency)>>##
201 #if ($dependencyClass.endsWith('CoreExtension'))
202 path:$doc.getURL($xcontext.action, "actionshowdetails=true&extensionid=${dependency.id.id}&extensionversion=${dependency.id.version}&section=XWiki.CoreExtensions&xback=${escapetool.url($xback)}")||class="dependency-type-core"]]##
203 #elseif ($dependencyClass.endsWith('LocalExtension'))
204 path:$doc.getURL($xcontext.action, "actionshowdetails=true&extensionid=${dependency.id.id}&extensionversion=${dependency.id.version}&section=XWiki.InstalledExtensions&xback=${escapetool.url($xback)}")||class="dependency-type-installed"]]##
205 #else
206 path:$doc.getURL($xcontext.action, "actionshowdetails=true&extensionid=${dependency.id.id}&extensionversion=${dependency.id.version}&section=XWiki.AddExtensions&xback=${escapetool.url($xback)}")||class="dependency-type-remote"]]##
207 #end
208 #if ("$!{namespace.key}" != '')
Thomas Mortagne 2.1 209 $msg.get('extensions.info.dependency.wiki', [$namespace.key])
Vincent Massol 1.1 210 #else
211
212 #end
213 #end
214 #end
215 )))
216 )))
217 #end
218 )))
219 #end
220
Admin 3.1 221 #macro (handleInstallExtensionRequest)
222 (% class="full column" %)(((
223 #displayExtensionSearchBar()
224 = $msg.get('extensions.install.title', ["//#displayExtensionName($extensionManager.resolve($request.extensionid, $request.extensionversion))//"]) =
225
226 #if (!$request.extensionid || !$request.extensionversion)
227 {{error}}$msg.get('extensions.install.error.missingIdOrVersion'){{/error}}
228 #elseif ($request.confirm)
229 #set($installJob = $extensionManager.install($request.extensionid, $request.extensionversion, $extensionwiki))
230 #set($lasterror = $extensionManager.lastError)
231 #if ($lasterror)
232 #if($extensionwiki)
233 {{error}}$msg.get('extensions.install.error.installFailure.onWiki', [$request.extensionid, $request.extensionversion, $extensionwiki]) ##
234 #else
235 {{error}}$msg.get('extensions.install.error.installFailure', [$request.extensionid, $request.extensionversion]) ##
236 #end
237 #printThrowable($lasterror){{/error}}
238 #else
239 {{box}}#printJobLog($installJob){{/box}}
240 #end
241 #else
242 #set($installPlan = $extensionManager.createInstallPlan($request.extensionid, $request.extensionversion, $extensionnamespace))
243 #if (!$installPlan)
244 {{error}}$msg.get('extensions.install.error.prepareFailure', [$request.extensionid, $request.extensionversion, $lasterror.message]){{/error}}
245 #else
246 #set($hasError = false)
247 #foreach($log in $installPlan.log)
248 #if ($log.level.name() == 'ERROR')
249 #set($hasError = true)
250 #end
251 #end
252 ##
253 #if ($hasError)
254 {{box}}#printStatusLog($installPlan){{/box}}
255 #else
256 #set($extensionsToInstall = [])
257 #set($extensionsToUpgrade = [])
258 ##
259 #foreach($planAction in $installPlan.actions)
260 #if ($planAction.action.name() == "INSTALL")
261 #set($void = $extensionsToInstall.add($planAction))
262 #elseif ($planAction.action.name() == "UPGRADE")
263 #set($void = $extensionsToUpgrade.add($planAction))
264 #end
265 #end
266 ##
267 #if ($extensionsToInstall.isEmpty() && $extensionsToUpgrade.isEmpty())
268 {{info}}$msg.get('extensions.install.error.alreadyInstalled'){{/info}}
269 #else
270 #if (!$extensionsToInstall.isEmpty())
271 $msg.get('extensions.install.list.new')
272 #foreach ($planAction in $extensionsToInstall)
273 * $planAction.extension.id.id ($planAction.extension.id.version)
274 #end
275
276 #end
277 #if (!$extensionsToUpgrade.isEmpty())
278 $msg.get('extensions.install.list.upgrade')
279 #foreach ($planAction in $extensionsToUpgrade)
280 * $planAction.extension.id.id ($planAction.extension.id.version)
281 #end
282
283 #end
284 {{html}}
285 <form action="$xwiki.requestURL" enctype="multipart/form-data" method="post" class="xform">
286 <div>
287 <input name="extensionid" value="${escapetool.xml($request.extensionid)}" type="hidden" />
288 <input name="extensionversion" value="${escapetool.xml($request.extensionversion)}" type="hidden" />
289 #if ($extensionwiki)
290 <input name="extensionwiki" value="$extensionwiki" type="hidden" />
291 #end
292 <input name="actioninstall" type="hidden" />
293 <p>
294 <span class="buttonwrapper"><input type="submit" value="$msg.get('extensions.install.actions.submit')" name="confirm" class="button"/></span>
295 #if ("$!{request.xback}" != '')
296 <span class="buttonwrapper"><a href="${request.xback}" class="secondary button">$msg.get('extensions.install.actions.cancel')</a></span>
297 #end
298 </p>
299 </div>
300 </form>
301 {{/html}}
302 #end
303 #end
304 #end
305 #end
306 )))
307 #end
308
309 #macro (handleUninstallExtensionRequest)
310 (% class="full column" %)(((
311 = $msg.get('extensions.uninstall.title', ["//#displayExtensionName($extensionManager.resolve($request.extensionid, $request.extensionversion))//"]) =
312
313 #if (!$request.extensionid || !$request.extensionversion)
314 {{error}}$msg.get('extensions.uninstall.error.missingIdOrVersion'){{/error}}
315 #elseif ($request.confirm)
316 #set($uninstallJob = $extensionManager.uninstall($request.extensionid, null))
317 #set($lasterror = $extensionManager.lastError)
318 #if ($lasterror)
319 {{error}}
320 $msg.get('extensions.uninstall.error.uninstallFailure', [$request.extensionid, $request.extensionversion]) ##
321 #printThrowable($lasterror)
322 {{/error}}
323 #else
324 {{box}}
325 #printJobLog($uninstallJob)
326 {{/box}}
327 #end
328 #else
329 #set($uninstallPlan = $extensionManager.createUninstallPlan($request.extensionid, $extensionnamespace))
330 #if (!$uninstallPlan)
331 {{error}}$msg.get('extensions.uninstall.error.prepareFailure', [$request.extensionid, $request.extensionversion, $lasterror.message]){{/error}}
332 #else
333 #set($hasError = false)
334 #foreach($log in $uninstallPlan.log)
335 #if ($log.level.name() == 'ERROR')
336 #set($hasError = true)
337 #end
338 #end
339 ##
340 #if ($hasError)
341 {{box}}#printStatusLog($installPlan){{/box}}
342 #else
343 #set($extensionsToUninstall = [])
344 ##
345 #foreach($planAction in $uninstallPlan.actions)
346 #if ($planAction.action.name() == "UNINSTALL")
347 #set($void = $extensionsToUninstall.add($planAction))
348 #end
349 #end
350 ##
351 #if ($extensionsToUninstall.isEmpty())
352 {{info}}$msg.get('extensions.uninstall.error.notInstalled'){{/info}}
353 #else
354 The following extensions will be removed:
355 #foreach ($planAction in $extensionsToUninstall)
356 * $planAction.extension.id.id ($planAction.extension.id.version)
357 #end
358
359 {{html}}
360 <form action="$xwiki.requestURL" enctype="multipart/form-data" method="post" class="xform">
361 <div>
362 <input name="extensionid" value="${escapetool.xml($request.extensionid)}" type="hidden" />
363 <input name="extensionversion" value="${escapetool.xml($request.extensionversion)}" type="hidden" />
364 <input name="actionuninstall" type="hidden" />
365 <p>
366 <span class="buttonwrapper"><input type="submit" value="$msg.get('extensions.uninstall.actions.submit')" name="confirm" class="button"/></span>
367 #if ("$!{request.xback}" != '')
368 <span class="buttonwrapper"><a href="${request.xback}" class="secondary button">$msg.get('extensions.uninstall.actions.cancel')</a></span>
369 #end
370 </p>
371 </div>
372 </form>
373 {{/html}}
374 #end
375 #end
376 #end
377 #end
378 )))
379 #end
380
Vincent Massol 1.1 381 #macro (printThrowable $throwable)
382 $throwable.class: #if(!$throwable.message)null#else$throwable.message#end
383
384 #foreach($stackTraceElement in $throwable.stackTrace)
385 ~ at $stackTraceElement
386 #end
387 #if ($throwable.cause)
388 Caused by: #printThrowable($throwable.cause)
389 #end
390 #end
391
392 #macro (printJobLog $job)
Thomas Mortagne 2.1 393 #printStatusLog($job.status)
394 #end
395
396 #macro (printStatusLog $status)
397 #foreach ($log in $status.log)
Vincent Massol 1.1 398 #set ($logLevel = $log.level.toString().toLowerCase())
Admin 3.1 399 #if ($logLevel == 'warn')
400 #set ($logLevel = 'warning')
401 #end
Vincent Massol 1.1 402 {{$logLevel}}
403 $log.formattedMessage
404 #if ($log.throwable)
405 #printThrowable($log.throwable)
406 #end
407 {{/$logLevel}}
408 #end
409 #end
410
Admin 3.1 411 #macro (computeXBack)
Vincent Massol 1.1 412 #set ($xback = "$!{request.xback}")
413 #if ($xback == '')
414 #set ($params = '')
415 #foreach ($parameterName in $request.parameterNames)
416 #if (!$parameterName.startsWith('action') && !$parameterName.startsWith('extension'))
417 #foreach ($value in $request.getParameterValues($parameterName))
418 #set ($params = "${params}&${parameterName}=${value}")
419 #end
420 #end
421 #end
422 #if ($params.length() > 0)
423 #set ($params = $params.substring(1))
424 #end
425 #set ($xback = $doc.getURL($xcontext.action, $params))
426 #end
427 #end
Admin 3.1 428
429 #macro (getCoreExtensionButtons $actions)
430 #if ($request.extensionid && $request.extensionversion && $request.ajax)
431 #set ($discard = $actions.add("<span class=""buttonwrapper""><input type=""submit"" name=""showdetails"" value=""$msg.get('extensions.actions.showDetails')"" class=""button visibilityAction"" /></span>"))
432 #set ($discard = $actions.add("<span class=""buttonwrapper""><input type=""submit"" name=""hidedetails"" value=""$msg.get('extensions.actions.hideDetails')"" class=""button visibilityAction"" /></span>"))
433 #elseif ($request.actionshowdetails)
434 #set ($discard = $actions.add("<span class=""buttonwrapper""><a href=""${xback}"" class=""button"">$msg.get('extensions.actions.back')</a></span>"))
435 #else
436 #set ($discard = $actions.add("<span class=""buttonwrapper""><input type=""submit"" name=""actionshowdetails"" value=""$msg.get('extensions.actions.showDetails')"" class=""button""/></span><input type=""hidden"" name=""xback"" value=""${xback}"" />"))
437 #end
438 #end
439
440 #macro (getInstalledExtensionButtons $actions)
441 #if ($request.extensionid && $request.extensionversion && $request.ajax)
442 #set ($discard = $actions.add("<span class=""buttonwrapper""><input type=""submit"" name=""showdetails"" value=""$msg.get('extensions.actions.showDetails')"" class=""button visibilityAction""/></span>"))
443 #set ($discard = $actions.add("<span class=""buttonwrapper""><input type=""submit"" name=""hidedetails"" value=""$msg.get('extensions.actions.hideDetails')"" class=""button visibilityAction""/></span>"))
444 #elseif ($request.actionshowdetails)
445 #set ($discard = $actions.add("<span class=""buttonwrapper""><a href=""${xback}"" class=""button"">$msg.get('extensions.actions.back')</a></span>"))
446 #else
447 #set ($discard = $actions.add("<span class=""buttonwrapper""><input type=""submit"" name=""actionshowdetails"" value=""$msg.get('extensions.actions.showDetails')"" class=""button""/></span><input type=""hidden"" name=""xback"" value=""${xback}"" />"))
448 #end
449 #if ($hasProgramming)
450 #set ($discard = $actions.add("<span class=""buttonwrapper""><input type=""submit"" name=""actionuninstall"" value=""$msg.get('extensions.actions.uninstall')"" class=""button secondary""/></span>"))
451 #end
452 #end
453
454 #macro (getRemoteExtensionButtons $actions)
455 #if ($request.extensionid && $request.extensionversion && $request.ajax)
456 #set ($discard = $actions.add("<span class=""buttonwrapper""><input type=""submit"" name=""showdetails"" value=""$msg.get('extensions.actions.showDetails')"" class=""button visibilityAction"" /></span>"))
457 #set ($discard = $actions.add("<span class=""buttonwrapper""><input type=""submit"" name=""hidedetails"" value=""$msg.get('extensions.actions.hideDetails')"" class=""button visibilityAction"" /></span>"))
458 #elseif ($request.actionshowdetails)
459 #set ($discard = $actions.add("<span class=""buttonwrapper""><a href=""${xback}"" class=""button"">$msg.get('extensions.actions.back')</a></span>"))
460 #else
461 #set ($discard = $actions.add("<span class=""buttonwrapper""><input type=""submit"" name=""actionshowdetails"" value=""$msg.get('extensions.actions.showDetails')"" class=""button""/></span><input type=""hidden"" name=""xback"" value=""${xback}"" />"))
462 #end
463 #if ($hasProgramming)
464 #set ($discard = $actions.add("<span class=""buttonwrapper""><input type=""submit"" name=""actioninstall"" value=""$msg.get('extensions.actions.install')"" class=""button""/></span>"))
465 #end
466 #end
467
468 #macro (determineExtensionStatus $extensionId $namespace $extensionStatus)
469 #if ($extensionManager.getInstalledExtension($extensionId.id, $namespace))
470 #set ($result = 'installed')
471 #elseif ($extensionManager.getCoreExtension($extensionId.id))
472 #set ($result = 'core')
473 #else
474 #set ($result = 'remote')
475 #end
476 #set ($extensionStatus = $NULL)
477 #setVariable ("$extensionStatus" $result)
478 #end
Vincent Massol 1.1 479 {{/velocity}}

Get Connected