General Actions:
Log-in
Register
Wiki:
Main wiki
▼
:
Document Index
»
Space:
XWiki
▼
:
Document Index
»
Page:
ExtensionManagerMacros
Search
en
Page Actions:
Export
▼
:
Export as PDF
Export as RTF
Export as HTML
More actions
▼
:
Print preview
View Source
Main wiki
»
XWiki Space
»
XWiki Preferences
»
AdminSheet
»
ExtensionManagerMacros
Wiki source code of
ExtensionManagerMacros
Last modified by
Administrator
on 2012/03/21 17:40
Content
·
Comments
(0)
·
Annotations
(0)
·
Attachments
(0)
·
History
·
Information
Show line numbers
{{velocity output="false"}} $xwiki.ssx.use('ExtensionManagerMacros') $xwiki.jsx.use('ExtensionManagerMacros') #set ($extensionManager = $services.extension) #if ($request.extensionwiki && $request.extensionwiki.trim() != '') #set($extensionwiki = $request.extensionwiki) #else #if (!$xcontext.isMainWiki()) #set($extensionwiki = $xcontext.database) #end #end #if ($extensionwiki) #set($extensionnamespace = "wiki:${extensionwiki}") #end #macro (displayExtensionSearchBar) (% class="extHeader" %)((( (% class="extHeaderLeft" %)((( {{html}} <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"> <div class="globalsearch extHeaderLeftSearch"> <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')"> </div> </form> {{/html}} ))) (% class="extHeaderRight" %)((( ## Advanced install form {{html clean="false"}} <form action="$escapetool.xml($doc.getURL($xcontext.action, $request.getQueryString()))" method="post" class="xform"> <fieldset id="advancedextensionsearch"> <div id="advancedextensionsearch-body"></div> <legend><a href="#advancedextensionsearch-body">$msg.get('extensions.advancedSearch.title')</a></legend> <div class="plainmessage advancedsearchpopup hidden"> <input type="hidden" name="xback" value="$escapetool.xml($doc.getURL($xcontext.action, $request.queryString))" /> <dl> <dt><label for="advancedextensionsearch-id">$msg.get('extensions.advancedSearch.id.label')</label></dt> <dd><input type="text" name="extensionid" id="advancedextensionsearch-id" value="" /></dd> <dt><label for="advancedextensionsearch-version">$msg.get('extensions.advancedSearch.version.label')</label></dt> <dd><input type="text" name="extensionversion" id="advancedextensionsearch-version" value="" /></dd> #if ($xcontext.isMainWiki() && $xwiki.isVirtualMode()) <dt><label for="advancedextensionsearch-wiki">$msg.get('extensions.advancedSearch.wiki.label')</label></dt> <dd><input type="text" name="extensionwiki" id="advancedextensionsearch-wiki" value="" /></dd> #end </dl> <p><span class="buttonwrapper"><input type="submit" name="actioninstall" value="$msg.get('extensions.advancedSearch.actions.submit')" class="button" /></span> <span class="buttonwrapper"><a href="#searchextension" class="actioncancel secondary button">$msg.get('extensions.advancedSearch.actions.cancel')</a></span></p> </div> </fieldset> </form> {{/html}} ))) (% class="clearfloats" %)((())) ))) #end #macro (displayExtensionName $extension $actions) #set ($name = "$!{extension.name}") #if ($name == '') #set ($name = "$!{extension.id.id}") #if ($name.indexOf(':') >= 0) #set ($name = $name.substring($mathtool.add($name.indexOf(':'), 1))) #end #end $name## #end #macro (displayExtension $extension) #determineExtensionStatus($extension.id, $extensionnamespace, $extensionStatus) #set ($actions = []) #computeXBack() #if ($extensionStatus == 'core') #getCoreExtensionButtons($actions) #elseif ($extensionStatus == 'installed') #getInstalledExtensionButtons($actions) #elseif ($extensionStatus == 'remote') #getRemoteExtensionButtons($actions) #end (% class="extension-item# extension-item-${extensionStatus}" %)((( (% class="extension-header" %)((( (% class="extension-name" %) ==#displayExtensionName($extension) (% class="extension-version %)$extension.id.version== {{html}} #if ($doc.name == 'XWikiPreferences') #set ($action = 'admin') #else #set ($action = 'view') #end <form method="post" action="$doc.getURL($action, $request.getQueryString().replaceAll('(^|&)actionshowdetails=[^&]++', ''))"> <div class="extension-actions"> <input type="hidden" name="extensionid" value="$extension.id.id" /> <input type="hidden" name="extensionversion" value="$extension.id.version" /> #foreach ($action in $actions) ${action}## #end </div> </form> {{/html}} #if ($extension.authors.size() > 0) (% class="extension-authors" %)((( $msg.get('extensions.info.authors') ## #foreach ($author in $extension.authors) #if ($author.name == 'devs') [[$msg.get('extensions.info.authors.xwikiorg')>>http://www.xwiki.org/]]## #elseif ("$!author.url" != '' && "$!author.name" != '') [[${author.name}>>${author.url}]]## #else ${author.name}## #end #if ($foreach.hasNext), ## #else ))) #end #end #end #if ("$!{extension.summary}" != '') (% class="extension-description" %) {{{ $extension.summary.replaceAll('\s+', ' ') }}} #end (% class="clearfloats" %)((())) ))) #if ($request.actionshowdetails) #set ($backwardDependencies = $extensionManager.getBackwardDependencies($extension.id.id, $extension.id.version)) #if (!$backwardDependencies) #set ($backwardDependencies = {}) #end (% class="extension-body" %)((( (% class="innerMenu" %) * [[$msg.get('extensions.info.category.description')>>||anchor="extension-body-description-${extension.id.id}-${extension.id.version}"]] #if ("$!{extension.releaseNotes}" != '') * [[$msg.get('extensions.info.category.releaseNotes')>>||anchor="extension-body-relnotes-${extension.id.id}-${extension.id.version}"]] #end #if ($extension.dependencies.size() > 0 || $backwardDependencies.size() > 0) * [[$msg.get('extensions.info.category.dependencies')>>||anchor="extension-body-dependencies-${extension.id.id}-${extension.id.version}"]] #end {{id name="extension-body-description-${extension.id.id}-${extension.id.version}" /}} (% class="extension-body-description extension-body-section" %)((( (% class="extension-metadata" %) * $msg.get('extensions.info.license', [$extension.licenses.size()]) ## #foreach ($license in $extension.licenses) ${license.name}## #if ($foreach.hasNext), #end #end #if ($extension.repository.id.URI && $extension.repository.id.URI.scheme != 'file') * $msg.get('extensions.info.repository') [[$extension.repository.id.id>>$extension.repository.id.URI]] #end #if ($extension.dependency) * $msg.get('extensions.info.dependency') #end #if ("$!{extension.webSite}" != '') * $msg.get('extensions.info.website') [[$extension.webSite.replaceAll('^[^/]++//([^/]++)/?.*+$', '$1')>>$extension.webSite]] #end #if ($extension.features.size() > 0) * $msg.get('extensions.info.features') $extension.features #end #if ($xwiki.virtualMode) #if (!$extension.namespaces || $extension.namespaces.size() == 0) * $msg.get('extensions.info.namespaces.global') #else * $msg.get('extensions.info.namespaces.list') #foreach ($namespace in $extension.namespaces)$namespace#if($foreach.hasNext), #end#end #end #end ## TODO: need a decision on what exactly is the description and how it should be safely displayed (wiki syntax, server side generated HTML, etc) ## $!extension.description ))) #if ("$!{extension.releaseNotes}" != '') {{id name="extension-body-relnotes-${extension.id.id}-${extension.id.version}"/}} (% class="extension-body-relnotes extension-body-section" %)((( $!{extension.releaseNotes} ))) #end {{id name="extension-body-dependencies-${extension.id.id}-${extension.id.version}" /}} #computeXBack() (% class="extension-body-dependencies extension-body-section" %)((( $msg.get('extensions.info.dependencies.directDependencies', [$extension.dependencies.size()]) #foreach ($dependency in $extension.dependencies) #set ($dependencyExtension = $extensionManager.resolve($dependency)) #set ($dependencyClass = "$!{dependencyExtension.class}") #if ($dependencyExtension) * [[#displayExtensionName($dependencyExtension)>>## #if ($dependencyClass.endsWith('CoreExtension')) path:$doc.getURL($xcontext.action, "actionshowdetails=true&extensionid=${dependency.id}&extensionversion=${dependency.versionConstraint}§ion=XWiki.CoreExtensions&xback=${escapetool.url($xback)}")||class="dependency-type-core"]] #elseif ($dependencyClass.endsWith('LocalExtension')) path:$doc.getURL($xcontext.action, "actionshowdetails=true&extensionid=${dependency.id}&extensionversion=${dependency.versionConstraint}§ion=XWiki.InstalledExtensions&xback=${escapetool.url($xback)}")||class="dependency-type-installed"]] #else path:$doc.getURL($xcontext.action, "actionshowdetails=true&extensionid=${dependency.id}&extensionversion=${dependency.versionConstraint}§ion=XWiki.AddExtensions&xback=${escapetool.url($xback)}")||class="dependency-type-remote"]] #end #else * (% class="dependency-type-unknown" %)${dependency.id} #end #if (!$foreach.hasNext) #end #end $msg.get('extensions.info.dependencies.backwardDependencies', [$backwardDependencies.size()]) #foreach ($namespace in $backwardDependencies.entrySet()) #foreach ($dependency in $namespace.value) #set ($dependencyClass = "${dependency.class}") * [[#displayExtensionName($dependency)>>## #if ($dependencyClass.endsWith('CoreExtension')) path:$doc.getURL($xcontext.action, "actionshowdetails=true&extensionid=${dependency.id.id}&extensionversion=${dependency.id.version}§ion=XWiki.CoreExtensions&xback=${escapetool.url($xback)}")||class="dependency-type-core"]]## #elseif ($dependencyClass.endsWith('LocalExtension')) path:$doc.getURL($xcontext.action, "actionshowdetails=true&extensionid=${dependency.id.id}&extensionversion=${dependency.id.version}§ion=XWiki.InstalledExtensions&xback=${escapetool.url($xback)}")||class="dependency-type-installed"]]## #else path:$doc.getURL($xcontext.action, "actionshowdetails=true&extensionid=${dependency.id.id}&extensionversion=${dependency.id.version}§ion=XWiki.AddExtensions&xback=${escapetool.url($xback)}")||class="dependency-type-remote"]]## #end #if ("$!{namespace.key}" != '') $msg.get('extensions.info.dependency.wiki', [$namespace.key]) #else #end #end #end ))) ))) #end ))) #end #macro (handleInstallExtensionRequest) (% class="full column" %)((( #displayExtensionSearchBar() = $msg.get('extensions.install.title', ["//#displayExtensionName($extensionManager.resolve($request.extensionid, $request.extensionversion))//"]) = #if (!$request.extensionid || !$request.extensionversion) {{error}}$msg.get('extensions.install.error.missingIdOrVersion'){{/error}} #elseif ($request.confirm) #set($installJob = $extensionManager.install($request.extensionid, $request.extensionversion, $extensionwiki)) #set($lasterror = $extensionManager.lastError) #if ($lasterror) #if($extensionwiki) {{error}}$msg.get('extensions.install.error.installFailure.onWiki', [$request.extensionid, $request.extensionversion, $extensionwiki]) ## #else {{error}}$msg.get('extensions.install.error.installFailure', [$request.extensionid, $request.extensionversion]) ## #end #printThrowable($lasterror){{/error}} #else {{box}}#printJobLog($installJob){{/box}} #end #else #set($installPlan = $extensionManager.createInstallPlan($request.extensionid, $request.extensionversion, $extensionnamespace)) #if (!$installPlan) {{error}}$msg.get('extensions.install.error.prepareFailure', [$request.extensionid, $request.extensionversion, $lasterror.message]){{/error}} #else #set($hasError = false) #foreach($log in $installPlan.log) #if ($log.level.name() == 'ERROR') #set($hasError = true) #end #end ## #if ($hasError) {{box}}#printStatusLog($installPlan){{/box}} #else #set($extensionsToInstall = []) #set($extensionsToUpgrade = []) ## #foreach($planAction in $installPlan.actions) #if ($planAction.action.name() == "INSTALL") #set($void = $extensionsToInstall.add($planAction)) #elseif ($planAction.action.name() == "UPGRADE") #set($void = $extensionsToUpgrade.add($planAction)) #end #end ## #if ($extensionsToInstall.isEmpty() && $extensionsToUpgrade.isEmpty()) {{info}}$msg.get('extensions.install.error.alreadyInstalled'){{/info}} #else #if (!$extensionsToInstall.isEmpty()) $msg.get('extensions.install.list.new') #foreach ($planAction in $extensionsToInstall) * $planAction.extension.id.id ($planAction.extension.id.version) #end #end #if (!$extensionsToUpgrade.isEmpty()) $msg.get('extensions.install.list.upgrade') #foreach ($planAction in $extensionsToUpgrade) * $planAction.extension.id.id ($planAction.extension.id.version) #end #end {{html}} <form action="$xwiki.requestURL" enctype="multipart/form-data" method="post" class="xform"> <div> <input name="extensionid" value="${escapetool.xml($request.extensionid)}" type="hidden" /> <input name="extensionversion" value="${escapetool.xml($request.extensionversion)}" type="hidden" /> #if ($extensionwiki) <input name="extensionwiki" value="$extensionwiki" type="hidden" /> #end <input name="actioninstall" type="hidden" /> <p> <span class="buttonwrapper"><input type="submit" value="$msg.get('extensions.install.actions.submit')" name="confirm" class="button"/></span> #if ("$!{request.xback}" != '') <span class="buttonwrapper"><a href="${request.xback}" class="secondary button">$msg.get('extensions.install.actions.cancel')</a></span> #end </p> </div> </form> {{/html}} #end #end #end #end ))) #end #macro (handleUninstallExtensionRequest) (% class="full column" %)((( = $msg.get('extensions.uninstall.title', ["//#displayExtensionName($extensionManager.resolve($request.extensionid, $request.extensionversion))//"]) = #if (!$request.extensionid || !$request.extensionversion) {{error}}$msg.get('extensions.uninstall.error.missingIdOrVersion'){{/error}} #elseif ($request.confirm) #set($uninstallJob = $extensionManager.uninstall($request.extensionid, null)) #set($lasterror = $extensionManager.lastError) #if ($lasterror) {{error}} $msg.get('extensions.uninstall.error.uninstallFailure', [$request.extensionid, $request.extensionversion]) ## #printThrowable($lasterror) {{/error}} #else {{box}} #printJobLog($uninstallJob) {{/box}} #end #else #set($uninstallPlan = $extensionManager.createUninstallPlan($request.extensionid, $extensionnamespace)) #if (!$uninstallPlan) {{error}}$msg.get('extensions.uninstall.error.prepareFailure', [$request.extensionid, $request.extensionversion, $lasterror.message]){{/error}} #else #set($hasError = false) #foreach($log in $uninstallPlan.log) #if ($log.level.name() == 'ERROR') #set($hasError = true) #end #end ## #if ($hasError) {{box}}#printStatusLog($installPlan){{/box}} #else #set($extensionsToUninstall = []) ## #foreach($planAction in $uninstallPlan.actions) #if ($planAction.action.name() == "UNINSTALL") #set($void = $extensionsToUninstall.add($planAction)) #end #end ## #if ($extensionsToUninstall.isEmpty()) {{info}}$msg.get('extensions.uninstall.error.notInstalled'){{/info}} #else The following extensions will be removed: #foreach ($planAction in $extensionsToUninstall) * $planAction.extension.id.id ($planAction.extension.id.version) #end {{html}} <form action="$xwiki.requestURL" enctype="multipart/form-data" method="post" class="xform"> <div> <input name="extensionid" value="${escapetool.xml($request.extensionid)}" type="hidden" /> <input name="extensionversion" value="${escapetool.xml($request.extensionversion)}" type="hidden" /> <input name="actionuninstall" type="hidden" /> <p> <span class="buttonwrapper"><input type="submit" value="$msg.get('extensions.uninstall.actions.submit')" name="confirm" class="button"/></span> #if ("$!{request.xback}" != '') <span class="buttonwrapper"><a href="${request.xback}" class="secondary button">$msg.get('extensions.uninstall.actions.cancel')</a></span> #end </p> </div> </form> {{/html}} #end #end #end #end ))) #end #macro (printThrowable $throwable) $throwable.class: #if(!$throwable.message)null#else$throwable.message#end #foreach($stackTraceElement in $throwable.stackTrace) ~ at $stackTraceElement #end #if ($throwable.cause) Caused by: #printThrowable($throwable.cause) #end #end #macro (printJobLog $job) #printStatusLog($job.status) #end #macro (printStatusLog $status) #foreach ($log in $status.log) #set ($logLevel = $log.level.toString().toLowerCase()) #if ($logLevel == 'warn') #set ($logLevel = 'warning') #end {{$logLevel}} $log.formattedMessage #if ($log.throwable) #printThrowable($log.throwable) #end {{/$logLevel}} #end #end #macro (computeXBack) #set ($xback = "$!{request.xback}") #if ($xback == '') #set ($params = '') #foreach ($parameterName in $request.parameterNames) #if (!$parameterName.startsWith('action') && !$parameterName.startsWith('extension')) #foreach ($value in $request.getParameterValues($parameterName)) #set ($params = "${params}&${parameterName}=${value}") #end #end #end #if ($params.length() > 0) #set ($params = $params.substring(1)) #end #set ($xback = $doc.getURL($xcontext.action, $params)) #end #end #macro (getCoreExtensionButtons $actions) #if ($request.extensionid && $request.extensionversion && $request.ajax) #set ($discard = $actions.add("<span class=""buttonwrapper""><input type=""submit"" name=""showdetails"" value=""$msg.get('extensions.actions.showDetails')"" class=""button visibilityAction"" /></span>")) #set ($discard = $actions.add("<span class=""buttonwrapper""><input type=""submit"" name=""hidedetails"" value=""$msg.get('extensions.actions.hideDetails')"" class=""button visibilityAction"" /></span>")) #elseif ($request.actionshowdetails) #set ($discard = $actions.add("<span class=""buttonwrapper""><a href=""${xback}"" class=""button"">$msg.get('extensions.actions.back')</a></span>")) #else #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}"" />")) #end #end #macro (getInstalledExtensionButtons $actions) #if ($request.extensionid && $request.extensionversion && $request.ajax) #set ($discard = $actions.add("<span class=""buttonwrapper""><input type=""submit"" name=""showdetails"" value=""$msg.get('extensions.actions.showDetails')"" class=""button visibilityAction""/></span>")) #set ($discard = $actions.add("<span class=""buttonwrapper""><input type=""submit"" name=""hidedetails"" value=""$msg.get('extensions.actions.hideDetails')"" class=""button visibilityAction""/></span>")) #elseif ($request.actionshowdetails) #set ($discard = $actions.add("<span class=""buttonwrapper""><a href=""${xback}"" class=""button"">$msg.get('extensions.actions.back')</a></span>")) #else #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}"" />")) #end #if ($hasProgramming) #set ($discard = $actions.add("<span class=""buttonwrapper""><input type=""submit"" name=""actionuninstall"" value=""$msg.get('extensions.actions.uninstall')"" class=""button secondary""/></span>")) #end #end #macro (getRemoteExtensionButtons $actions) #if ($request.extensionid && $request.extensionversion && $request.ajax) #set ($discard = $actions.add("<span class=""buttonwrapper""><input type=""submit"" name=""showdetails"" value=""$msg.get('extensions.actions.showDetails')"" class=""button visibilityAction"" /></span>")) #set ($discard = $actions.add("<span class=""buttonwrapper""><input type=""submit"" name=""hidedetails"" value=""$msg.get('extensions.actions.hideDetails')"" class=""button visibilityAction"" /></span>")) #elseif ($request.actionshowdetails) #set ($discard = $actions.add("<span class=""buttonwrapper""><a href=""${xback}"" class=""button"">$msg.get('extensions.actions.back')</a></span>")) #else #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}"" />")) #end #if ($hasProgramming) #set ($discard = $actions.add("<span class=""buttonwrapper""><input type=""submit"" name=""actioninstall"" value=""$msg.get('extensions.actions.install')"" class=""button""/></span>")) #end #end #macro (determineExtensionStatus $extensionId $namespace $extensionStatus) #if ($extensionManager.getInstalledExtension($extensionId.id, $namespace)) #set ($result = 'installed') #elseif ($extensionManager.getCoreExtension($extensionId.id)) #set ($result = 'core') #else #set ($result = 'remote') #end #set ($extensionStatus = $NULL) #setVariable ("$extensionStatus" $result) #end {{/velocity}}