Wiki source code of Extension Manager

Last modified by Vincent Massol on 2022/03/02 15:10

Show last authors
1 {{warning}}
2 This application is experimental, use it at your own risk.
3 {{/warning}}
4
5 {{velocity output="false"}}
6 #set($extensionManager = $services.extension)
7 #set($versionManager = $extensionManager.versionManager)
8 #if ($request.extensionwiki && $request.extensionwiki.trim() != '')
9 #set($extensionwiki = $request.extensionwiki)
10 #end
11 {{/velocity}}
12
13 {{velocity}}
14 {{html}}
15 <form action="$xwiki.requestURL" enctype="multipart/form-data" method="post" class="xform half">
16 <dl>
17 <dt>
18 <label for="extensionsearchpattern">Search pattern <span class="xRequired">(Required)</span></label>
19 <span class="xHint">The string to search in repositories</span>
20 </dt>
21 <dd>
22 <input id="extensionsearchpattern" name="extensionsearchpattern" type="text" class="" #if($request.extensionsearchpattern)value="${escapetool.xml($request.extensionsearchpattern)}"#end />
23 </dd>
24 </dl>
25 <p>
26 <span class="buttonwrapper"><input type="submit" value="Search" name="actionsearch" class="button"/></span>
27 </p>
28 </form>
29 {{/html}}
30 {{/velocity}}
31
32 {{velocity}}
33 #if ($request.actionsearch)
34 #set($extensions = $extensionManager.search($request.extensionsearchpattern, 0, -1))
35 #foreach($extension in $extensions)
36 * [[$extension.id>>?actionsearch&extensionid=${escapetool.url($extension.id.id)}&extensionversion=${escapetool.url($extension.id.version)}&extensionsearchpattern=${escapetool.url($request.extensionsearchpattern)}]]
37 #end
38 #end
39 {{/velocity}}
40
41 {{velocity}}
42 {{html}}
43 <form action="$xwiki.requestURL" enctype="multipart/form-data" method="post" class="xform half">
44 <dl>
45 <dt>
46 <label for="extensionid">Extension identifier <span class="xRequired">(Required)</span></label>
47 <span class="xHint">&lt;groupid&gt;:&lt;artefactid&gt; for a maven extension</span>
48 </dt>
49 <dd>
50 <input id="extensionid" name="extensionid" type="text" class="" #if($request.extensionid)value="${escapetool.xml($request.extensionid)}"#end />
51 </dd>
52 </dl>
53 <dl>
54 <dt>
55 <label for="extensionversion">Extension version <span class="xRequired">(Required)</span></label>
56 </dt>
57 <dd>
58 <input id="extensionversion" name="extensionversion" type="text" #if($request.extensionversion)value="${escapetool.xml($request.extensionversion)}"#end />
59 </dd>
60 </dl>
61 #if ($xwiki.isVirtualMode())
62 <dl>
63 <dt>
64 <label for="extensionwiki">Extension wiki</label>
65 <span class="xHint">Leave empty to install on all wikis</span>
66 </dt>
67 <dd>
68 <input id="extensionwiki" name="extensionwiki" type="text" title="Extension wiki" #if($extensionwiki)value="${escapetool.xml($extensionwiki)}"#end />
69 </dd>
70 </dl>
71 #end
72 <p>
73 <span class="buttonwrapper"><input type="submit" value="Resolve" name="actionresolve" class="button"/></span>
74 #if ($hasProgramming)
75 <span class="buttonwrapper"><input type="submit" value="Install" name="actioninstall" class="button"/></span>
76 #end
77 </p>
78 </form>
79 {{/html}}
80 {{/velocity}}
81
82 {{velocity}}
83 #if ($request.actionresolve)
84 = Resolve
85
86 #if (!$request.extensionid || !$request.extensionversion)
87 {{error}}You have to provide both extension id and version.{{/error}}
88 #else
89 #macro(resolveExtension $extensionid $extensionversion $extensionlevel)
90 #set($extension = $extensionManager.resolve($extensionid, $extensionversion, $extensionwiki))
91 #if (!$extension)
92 #set($lasterror = $extensionManager.lastError)
93 {{error}}Failed to resolve extension with id $extensionid and version $extensionversion: $lasterror.message{{/error}}
94 #else
95 #set($extensionclass = "${extension.class}")
96 #foreach($index in [1..$extensionlevel])*#end #if($extensionclass.endsWith('CoreExtension'))**C**#elseif($extensionclass.endsWith('LocalExtension'))**I**#else**R**#end $extension.id.id ($extension.type) ($extension.id.version#if($extensionversion != $extension.id.version) was $extensionversion#end)
97 #resolveExtensionDependencies($extension)
98 #end
99 #end
100 #macro(resolveExtensionDependencies $extension $extensionlevel)
101 #set($extensionlevel = $extensionlevel + 1)
102 #foreach ($dependency in $extension.dependencies)
103 #resolveExtension($dependency.id, $dependency.version, $extensionlevel)
104 #end
105 #set($extensionlevel = $extensionlevel - 1)
106 #end
107 #resolveExtension($request.extensionid, $request.extensionversion, 1)
108
109 **C**: core extension
110 **I**: installed extension
111 **R**: remote extension
112 #end
113 #elseif($request.actioninstall)
114 = Install
115
116 #if (!$request.extensionid || !$request.extensionversion)
117 {{error}}You have to provide both extension id and version.{{/error}}
118 #elseif ($request.confirm)
119 #set($extension = $extensionManager.install($request.extensionid, $request.extensionversion, $extensionwiki))
120 #set($lasterror = $extensionManager.lastError)
121 #if ($lasterror)
122 {{error}}Failed to install extension with id $request.extensionid and version $request.extensionversion#if($extensionwiki) on wiki $extensionwiki#end: $lasterror.message{{/error}}
123 #elseif ($extension.exceptions)
124 {{error}}Failed to install extension with id $request.extensionid and version $request.extensionversion#if($extensionwiki) on wiki $extensionwiki#end: $extension.exceptions[0].message{{/error}}
125 #else
126 {{info}}Extension with id $request.extensionid and version $request.extensionversion has been installed#if($extensionwiki) on wiki $extensionwiki#end.{{/info}}
127 #end
128 #else
129 #macro(prepareInstall $extensionid $extensionversion $extensionsToInstall $extensionsToUpgrade $extensionsSuggested, $coreExtensionsConflicts)
130 #set($extension = $extensionManager.resolve($extensionid, $extensionversion, $extensionwiki))
131 #set($extensionclass = "${extension.class}")
132 #if (!$extensionclass.endsWith('CoreExtension') && !$extensionclass.endsWith('LocalExtension'))
133 #if ($extensionManager.getInstalledExtension($extensionid, $extensionwiki))
134 #set($extensionsToUpgrade[$extension.id] = $extension)
135 #else
136 #set($extensionsToInstall[$extension.id] = $extension)
137 #end
138 #elseif ($extensionclass.endsWith('CoreExtension') && $versionManager.compareVersions($extensionversion, $extension.id.version) > 0)
139 #set($coreExtensionsConflicts[$extension.id] = [$extension, $extensionversion])
140 #end
141 #prepareInstallDependencies($extension, $extensionsToInstall, $extensionsToUpgrade, $extensionsSuggested)
142 #end
143 #macro(prepareInstallDependencies $extension $extensionsToInstall $extensionsToUpgrade $extensionsSuggested, $coreExtensionsConflicts)
144 #foreach ($dependency in $extension.dependencies)
145 #prepareInstall($dependency.id, $dependency.version, $extensionsToInstall, $extensionsToUpgrade, $extensionsSuggested)
146 #end
147 #end
148 #set($extensionsToInstall = {})
149 #set($extensionsToUpgrade = {})
150 #set($extensionsSuggested = {})
151 #set($coreExtensionsConflicts = {})
152 #prepareInstall($request.extensionid $request.extensionversion $extensionsToInstall $extensionsToUpgrade $extensionsSuggested, $coreExtensionsConflicts)
153 #set($lasterror = $extensionManager.lastError)
154 #if ($lasterror)
155 {{error}}Can't resolve extension with id $request.extensionid and version $request.extensionversion: $lasterror.message{{/error}}
156 #elseif ($extensionsToInstall.isEmpty() && $extensionsToUpgrade.isEmpty())
157 Already installed
158 #else
159 #if (!$extensionsToInstall.isEmpty())
160 The following new extensions will be installed:
161 #foreach ($extension in $extensionsToInstall.values())
162 * $extension.id.id ($extension.id.version)
163 #end
164
165 #end
166 #if (!$extensionsToUpgrade.isEmpty())
167 The following extensions will be upgraded:
168 #foreach ($extension in $extensionsToUpgrade.values())
169 * $extension.id.id ($extension.id.version)
170 #end
171
172 #end
173 #if (!$extensionsSuggested.isEmpty())
174 Suggested:
175 #foreach ($extension in $extensionsSuggested.values())
176 * $extension.id.id ($extension.id.version)
177 #end
178
179 #end
180 #if (!$coreExtensionsConflicts.isEmpty())
181 {{warning}}
182 Conflict with core extensions:
183 #foreach ($conflict in $coreExtensionsConflicts.values())
184 * extension **$conflict.get(0).id.id** is needed in version **$conflict.get(1)** but core extension has version **$conflict.get(0).id.version**
185 #end
186
187 Are you sure you want to install ?
188 {{/warning}}
189
190 #end
191 {{html}}
192 <form action="$xwiki.requestURL" enctype="multipart/form-data" method="post" class="xform">
193 <div>
194 <input name="extensionid" value="${escapetool.xml($request.extensionid)}" type="hidden" />
195 <input name="extensionversion" value="${escapetool.xml($request.extensionversion)}" type="hidden" />
196 #if ($extensionwiki)
197 <input name="extensionwiki" value="$extensionwiki" type="hidden" />
198 #end
199 <input name="actioninstall" type="hidden" />
200 <p>
201 <span class="buttonwrapper"><input type="submit" value="Apply" name="confirm" class="button"/></span>
202 </p>
203 </div>
204 </form>
205 {{/html}}
206 #end
207 #end
208 #elseif($request.actionuninstall)
209 = Uninstall
210
211 #if (!$request.extensionid || !$request.extensionversion)
212 {{error}}You have to provide both extension id and version.{{/error}}
213 #elseif($request.confirm)
214 #set($extension = $extensionManager.uninstall($request.extensionid, $request.extensionversion))
215 #set($lasterror = $extensionManager.lastError)
216 #if ($lasterror)
217 {{error}}Failed to uninstall extension with id $request.extensionid and version $request.extensionversion: $lasterror.message{{/error}}
218 #elseif ($extension.exceptions)
219 {{error}}Failed to uninstall extension with id $request.extensionid and version $request.extensionversion: $extension.exceptions[0].message{{/error}}
220 #else
221 {{info}}Extension with id $request.extensionid and version $request.extensionversion has been uninstalled.{{/info}}
222 #end
223 #else
224 #macro(prepareUninstall $extensionid $extensionversion $extensionsToUninstall)
225 #set($void = $extensionsToUninstall.add("${extensionid}-${extensionversion}"))
226 #set($backwardDependencies = $extensionManager.getBackwardDependencies($extensionid, $extensionversion))
227 #prepareUninstallBackwardDependencies($backwardDependencies, $extensionsToUninstall)
228 #end
229 #macro(prepareUninstallBackwardDependencies $backwardDependencies $extensionsToUninstall)
230 #foreach ($backwardDependencyMap in $backwardDependencies.values())
231 #foreach ($backwardDependency in $backwardDependencyMap)
232 #prepareUninstall($backwardDependency.id.id, $backwardDependency.id.version, $extensionsToUninstall)
233 #end
234 #end
235 #end
236 #set($extensionsToUninstall = [])
237 #prepareUninstall($request.extensionid $request.extensionversion $extensionsToUninstall)
238 #set($lasterror = $extensionManager.lastError)
239 #if ($lasterror)
240 {{error}}Failed to prepare uninstalling extension with id $request.extensionid and version $request.extensionversion: $lasterror.message{{/error}}
241 #elseif ($extensionsToUninstall.empty)
242 Extension does not exists
243 #else
244 The following extensions will be removed:
245 #foreach ($extensionid in $extensionsToUninstall)
246 * $extensionid
247 #end
248
249 {{html}}
250 <form action="$xwiki.requestURL" enctype="multipart/form-data" method="post" class="xform">
251 <div>
252 <input name="extensionid" value="${escapetool.xml($request.extensionid)}" type="hidden" />
253 <input name="extensionversion" value="${escapetool.xml($request.extensionversion)}" type="hidden" />
254 <input name="actionuninstall" type="hidden" />
255 <p>
256 <span class="buttonwrapper"><input type="submit" value="Apply" name="confirm" class="button"/></span>
257 </p>
258 </div>
259 </form>
260 {{/html}}
261 #end
262 #end
263 #end
264 {{/velocity}}
265
266 {{velocity}}
267 = Installed extensions
268
269 #set($extensions = $extensionManager.getInstalledExtensions())
270 #if ($extensions.isEmpty())
271 {{info}}No extension installed.{{/info}}##
272 #else
273 |=Id|=Version|=Type#if($xwiki.isVirtualMode())|=Wikis#end#if ($hasProgramming)|=Actions#end
274
275 #foreach($extension in $extensions)
276 |$extension.id.id|$extension.id.version|$extension.type#if ($xwiki.isVirtualMode())
277 |#if($extension.namespaces)
278 $extension.namespaces##
279 #else
280 All wikis##
281 #end
282 #end
283 #if ($hasProgramming)
284 |{{html clean="false"}}
285 <form action="$xwiki.requestURL" enctype="multipart/form-data" method="post">
286 <fieldset>
287 <input name="extensionid" value="${escapetool.xml($extension.id.id)}" type="hidden" />
288 <input name="extensionversion" value="${escapetool.xml($extension.id.version)}" type="hidden" />
289 <span class="buttonwrapper"><input type="submit" value="Uninstall" name="actionuninstall" class="button"/></span>
290 </fieldset>
291 </form>
292 {{/html}}##
293 #end
294
295 #end
296 #end
297 {{/velocity}}
298
299 {{velocity}}
300 = Core extensions
301
302 #set($extensions = $extensionManager.coreExtensions)
303
304 == XWiki extensions
305
306 |=Id|=Version|=Type
307 #foreach($extension in $extensions)
308 #if ($extension.id.id.startsWith("org.xwiki") || $extension.id.id.startsWith("com.xpn"))
309 |(%title="$extension.getURL()"%)$extension.id.id|$extension.id.version|$extension.type
310 #end
311 #end
312
313 == Third party core extensions
314
315 |=Id|=Version|=Type
316 #foreach($extension in $extensions)
317 #if (!$extension.guessed && !$extension.id.id.startsWith("org.xwiki") && !$extension.id.id.startsWith("com.xpn"))
318 |(%title="$extension.getURL()"%)$extension.id.id|$extension.id.version|$extension.type
319 #end
320 #end
321
322 == Guessed third party core extensions
323
324 |=Id|=Version|=Type
325 #foreach($extension in $extensions)
326 #if ($extension.guessed)
327 |(%title="$extension.getURL()"%)$extension.id.id|$extension.id.version|$extension.type
328 #end
329 #end
330 {{/velocity}}

Get Connected