Wiki source code of Release Notes for XWiki 7.4

Last modified by Thomas Mortagne on 2023/10/13

Show last authors
1 {{box cssClass="floatinginfobox" title="**Contents**"}}
2 {{toc/}}
3 {{/box}}
4
5 This is the release notes for [[XWiki Commons>>http://commons.xwiki.org]], [[XWiki Rendering>>http://rendering.xwiki.org]], [[XWiki Platform>>http://platform.xwiki.org]] and [[XWiki Enterprise>>http://enterprise.xwiki.org]]. They share the same release notes as they are released together and have the same version.
6
7 This is our last major release for the XWiki 7.x cycle, and the new Long Term Support (LTS) version. It mainly brings polishing and stabilization for the Nested Pages feature, especially in the UI. Among other things, this release introduces a new notifications menu with the watchlist actions inside. Application Within Minutes now creates a //Code// and a //Data// page where the application content is stored. And it is now possible to have template hierarchies and to add an redirection when a page is renamed.
8
9 {{error}}
10 The following important issues were found after this version was released. You should verify if you’re using or need the affected features and decide whether to use a newer version that has it fixed or continue with this release:
11
12 {{jira url="https://jira.xwiki.org" style="list" source="jql"}}
13 category = "Top Level Projects" and affectedVersion in ("7.4-milestone-1", "7.4-milestone-2", "7.4-rc-1", "7.4") and fixVersion > "7.4" and fixVersion not in ("7.4", "7.4-rc-1", "7.4-milestone-1", "7.4-milestone-2") and priority = Blocker
14 {{/jira}}
15
16 {{/error}}
17
18 = New and Noteworthy (since XWiki 7.3) =
19
20 [[Full list of issues fixed and Dashboard for 7.4>>https://jira.xwiki.org/secure/Dashboard.jspa?selectPageId=13590]].
21
22 == Notifications & Watchlist ==
23
24 * A new menu has been added to the top bar, on the right: the "notifications" menu (represented by a bell). In the future, it will be the place where you can find notifications about some events happening on the wiki (personal message, a page has been modified, etc...).(((
25 {{image reference="Notifications.png"/}}
26 )))
27 * In this menu, we have moved the Watchlist icons (watch this page, watch this wiki, etc...). These actions can be triggered with the new switch buttons.(((
28 {{image reference="WatchList-Notifications.png"/}}
29 )))
30 * The livetable of the [[WatchList macro>>extensions:Extension.Watchlist Application]] have been updated to support Nested Pages.(((
31 {{image reference="WatchListTable.png"/}}
32 )))
33
34 == App Within Minutes ==
35
36 The application Code and Data pages are now being created. The Code page lists the application code pages.
37
38 {{image reference="[email protected]"/}}
39
40 The application Data page shows a live table with the application entries. The application home page has been modified to include the Data page.
41
42 {{image reference="[email protected]"/}}
43
44 The application entries (custom) live table results page is not generated any more because it was used only to load the translations on demand and now they are loaded on the wiki or user scope, based on the user rights.
45
46 == Support for template hierarchies ==
47
48 When creating a new document from template, if the template has descendent documents under its path, those documents will also be copied over to the new document's location, preserving the hierarchy, as it was under the template document.
49
50 The save operation will display progress and if it was a Save&View operation, the form will be disabled until the operation is complete.
51
52 More details on the [[documentation page on document templates>>extensions:Extension.Administration Application||anchor="HUsingahierarchyofNestedDocumentsastemplate"]].
53
54 {{image reference="[email protected]" width="50%"/}}
55
56 == Automatic Redirect on Page Rename ==
57
58 The [[Rename Page>>Documentation.UserGuide.Features.DocumentLifecycle||anchor="HMove2FRename"]] action has a new option (selected by default) to create an automatic redirect from the old page location to the new one. This will ensure that the external links (e.g. the bookmarks) to the renamed page (and its children) will continue to work.
59
60 {{image reference="[email protected]"/}}
61
62 == Database Search ==
63
64 The [[Database Search>>extensions:Extension.Search Application||anchor="HDatabaseSearch"]] UI has been modified to support nested pages.
65
66 {{image reference="[email protected]"/}}
67
68 == Miscellaneous ==
69
70 * The default logo is now optimized for "Retina" screens, and can be scaled to any dimensions since it's a vectorial image.
71 * The Information tab, at the bottom of each page, does not display the parent and the children of the current page anymore. Since this information is available both in the breadcrumb and in the children viewer, they were redundant and have been removed.(((
72 {{image reference="[email protected]"/}}
73 )))
74 * To be more intuitive, the titles of the Rights sections in the page administration have been changed.(((
75 {{image reference="[email protected]"/}}
76 )))
77 * Some [[bootswatch themes>>extensions:Extension.Bootswatch Themes for Flamingo]] have now a more accurate logo.
78 * When the search button on the top menu is clicked, it now closes all other menus.
79 * The Sandbox now uses XWiki Syntax 2.1.
80 * Non terminal pages are now exported with their corresponding ##WebPreferences## page
81 * The "annotations" button in the "More Actions" menu has been moved in the same menu but with other actions and renamed "Annotate".(((
82 {{image reference="[email protected]"/}}
83 )))
84 * The Create Page UI allows you to view and change the location of the new page (that is going to be created) even when you [[open directly the URL of a new page>>Documentation.UserGuide.Features.DocumentLifecycle||anchor="HByenteringdirectlytheURLofthenewpage"]].
85
86 See the [[full list of JIRA issues>>https://jira.xwiki.org/issues/?filter=14295]] fixed in this release.
87
88 = For Developers =
89
90 == Flamingo ==
91
92 An extension point to add content inside the new "Notifications" menu has been added:
93
94 |=##[[org.xwiki.platform.notifications>>Documentation.DevGuide.ExtensionPoint.Notifications]]##
95 |{{image reference="[email protected]"/}}
96
97 == Tree Velocity Macros ==
98
99 You are now able to "call" the Document Tree from Velocity using something like this:
100
101 {{code language="none"}}
102 #documentTree({
103 'class': 'location-tree',
104 'finder': true,
105 'showAttachments': false,
106 'showRoot': $showRoot,
107 'showTerminalDocuments': false,
108 'showTranslations': false,
109 'showWikis': $showWikis
110 })
111 {{/code}}
112
113 The same is possible with the generic Tree Widget:
114
115 {{code language="none"}}
116 #tree({
117 'reference': 'XWiki.DocumentTree',
118 'root': 'document:xwiki:Sandbox.WebHome',
119 'openTo': 'document:xwiki:Sandbox.TestPage2'
120 })
121 {{/code}}
122
123 All the parameters that are available for the wiki macros (##~{~{documentTree}}## and ##~{~{tree}}##) should be available also for the corresponding Velocity macro.
124
125 == New public Abstract job ==
126
127 A public ##org.xwiki.job.AbstractJob## (and corresponding ##AbstractJobStatus##) is now provided to help implementing a Job. An ##AbstractJob## class already existed since a long time but it was in an internal package.
128
129 == New lifespan LRU Cache setup ==
130
131 It's now possible to define the maximum time to live since the entry is put in the cache. It used to be possible to set it only since the last time the value was used.
132
133 {{code language="java"}}
134 // Configure cache eviction policy
135 LRUEvictionConfiguration lru = new LRUEvictionConfiguration();
136 // Set maximum size of the cache as 1000 entries
137 lru.setMaxEntries(1000);
138 // Set the maximum time to live since when the entry is used to 1 hour
139 lru.setMaxIdle(3600)
140 // Set the maximum time to live since when the entry is put in the cache to 1 hour
141 lru.setLifespan(3600)
142 {{/code}}
143
144 [[Cache Macro>>extensions:Extension.Cache Macro]] and [[Rendering Cache>>Documentation.AdminGuide.Performances||anchor="HRenderingcache"]] are now based on this behavior.
145
146 == VFS API ==
147
148 {{warning}}
149 Right now the [[VFS API has issues with authorization checks>>https://jira.xwiki.org/browse/XWIKI-12912]], meaning that you should use it only for public archives or for private wikis. One problem right now is that as soon as a user having permission accesses the archive, then any other user will be able to see the archive's content as it's served from cache.
150 {{/warning}}
151
152 Replacement of the [[Zip Explorer Plugin>>extensions:Extension.ZIP Explorer Plugin]]. API to access the content of archives files (zip, jar, gzip, tar, etc) located as attachments in wiki pages or elsewhere (external URLs, file system, et).
153
154 In addition a new [[Velocity Tool>>extensions:Extension.Velocity Module||anchor="HVelocityTools"]] was added in order to be able to use a portion of the NIO2 API from Velocity: ##niotool##.
155
156 See [[VFS API>>extensions:Extension.VFS API]] and [[VFS Tree Macro>>extensions:Extension.VFS Tree Macro]] for more details. Some API examples:
157
158 {{code language="velocity"}}
159 {{velocity}}
160 ## Get the URL to access the content of a file inside a zip:
161 [[link to file in zip>>$services.vfs.url("attach:[email protected]/vma.txt")]]
162
163 ## Display inline an image from a zip attached to a wiki page:
164 [[image:path:$services.vfs.url("attach:[email protected]/test.png")]]
165
166 ## Read the content of a file inside a zip attached to a page:
167 $stringtool.toString($niotool.readAllBytes("attach:[email protected]/vma.txt"), "utf-8")
168
169 ## List all entries inside a zip attached to a page:
170 #set ($dirStream = $niotool.newDirectoryStream("attach:[email protected]/"))
171 #foreach ($entry in $dirStream)
172 * {{{$entry}}} - $niotool.isDirectory($entry)
173 #end
174 {{/velocity}}
175
176 {{vfsTree root="attach:[email protected]/"/}}
177 {{/code}}
178
179 Example of using the ##vfsTree## Macro:
180
181 {{code language="none"}}
182 {{vfsTree root="attach:[email protected]/"/}}
183 {{/code}}
184
185 Results in:
186
187 {{image reference="[email protected]"/}}
188
189
190 == Miscellaneous ==
191
192 * A new ##extractFirstReference(EntityType)## API has been added to ##EntityReference##: Extract the first entity of the given type from this one by traversing the current entity to the root. This differentiates it from ##extractReference(EntityType)## which extracts the last entity of the given type.
193 * The escape Velocity tool has a new method to escape CSS identifiers. This is similar to ##CSS.escape()## available in JavaScript, and is useful if you want to create CSS selectors dynamicaly using untrusted input.(((
194 {{code language="none"}}
195 $escapetool.css('a#b.c d[e=f]g{h:i;j}k')
196 ## Output: a\\#b\\.c\\ d\\[e\\=f\\]g\\{h\\:i\\;j\\}k
197 {{/code}}
198 )))
199 * The Document Tree Macro has a new parameter to control whether the hidden documents are filtered or not. Set to false to force the display of the hidden documents in the tree.(((
200 {{code language="none"}}
201 {{documentTree filterHiddenDocuments="false" /}}
202 {{/code}}
203 )))
204 * Temporary resources can now be forced to be downloaded by using the ##force-download=1## URL parameter
205 * [[WebJars URL format>>extensions:Extension.WebJars Integration||anchor="HURLFormat"]] now supports a ##wiki## query string parameter to specify the wiki in which the webjars resource is available. For example: {{code language="none"}}/xwiki/webjars/AjaxQ/0.0.2/ajaxq.js?wiki=mywiki{{/code}}
206 * The default link behaviour can be disabled for a tree node, when you use the [[Tree Widget>>extensions:Extension.Tree Widget]], by using the 'jstree-no-link' CSS class on the node anchor, which can be set from the node JSON:(((
207 {{code language="none"}}
208 {
209 ... (node JSON) ...
210 'a_attr': {
211 'class': 'jstree-no-link',
212 'href': 'some/url'
213 }
214 }
215 {{/code}}
216 )))
217 * The ##$regextool## [[Velocity Tool>>extensions:Extension.Velocity Module||anchor="HVelocityTools"]] has a new method:(((
218 {{code language="java"}}
219 /**
220 * @param content the content to parse
221 * @param regex the regular expression to look for in the passed content
222 * @return an empty list if the passed regular expression doesn't match the content, several {@link RegexResult}
223 * objects containing the matched position and matched content for all capturing groups and sub-groups
224 * otherwise
225 */
226 public List<List<RegexResult>> findAll(String content, String regex)
227 {{/code}}
228
229 We had to add a new method because the existing ##RegexTool#find(String, String)## returns information about only the first capturing group. Here's a test to show how the new method works:
230
231 {{code language="java"}}
232 @Test
233 public void findAll()
234 {
235 RegexTool tool = new RegexTool();
236 List<List<RegexResult>> result =
237 tool.findAll("one :two three (:four) five :six seven=:eight", ":(\\w+) (\\w+)");
238
239 Assert.assertEquals(2, result.size());
240 Assert.assertEquals(":two three", result.get(0).get(0).getGroup());
241 Assert.assertEquals(":six seven", result.get(1).get(0).getGroup());
242
243 Assert.assertEquals(3, result.get(0).size());
244 Assert.assertEquals("two", result.get(0).get(1).getGroup());
245 Assert.assertEquals("three", result.get(0).get(2).getGroup());
246
247 Assert.assertEquals(3, result.get(1).size());
248 Assert.assertEquals("six", result.get(1).get(1).getGroup());
249 Assert.assertEquals("seven", result.get(1).get(2).getGroup());
250 }
251 {{/code}}
252 )))
253
254 * The top level Commons POM now performs some checks on the POMs that have it as parent; for example it checks that non core POMs don't use the "XWiki Development Team" in the developers section so that non-core Extensions deployed on extensions.xwiki.org don't appear as developed by the XWiki Development Team.
255 * You can now disable the default [[Live Table>>extensions:Extension.Livetable Macro]] query filters by passing the empty string as the value of the ##queryFilters## parameter.
256
257 == Deprecated and Retired projects ==
258
259 * XML-RPC module have been moved to https://github.com/xwiki-contrib/xwiki-platform-xmlrpc
260
261 == Upgrades ==
262
263 The following dependencies have been upgraded:
264
265 * [[Batik 1.8>>https://jira.xwiki.org/browse/XWIKI-12904]]
266 * [[commons-collections 3.2.2>>https://jira.xwiki.org/browse/XCOMMONS-881]]
267 * [[commons-collections 4.1>>https://jira.xwiki.org/browse/XCOMMONS-889]]
268 * [[commons-dbcp2 2.1.1>>https://jira.xwiki.org/browse/XCOMMONS-884]]
269 * [[commons-net 3.4>>https://jira.xwiki.org/browse/XCOMMONS-887]]
270 * [[FOP 2.0>>https://jira.xwiki.org/browse/XWIKI-12871]]
271 * [[guava 19>>https://jira.xwiki.org/browse/XCOMMONS-894]]
272 * [[Guice 4.0>>https://jira.xwiki.org/browse/XCOMMONS-883]]
273 * [[Jackson 2.6.4>>https://jira.xwiki.org/browse/XCOMMONS-893]]
274 * [[jboss-logging 3.1.4>>https://jira.xwiki.org/browse/XCOMMONS-885]]
275 * [[Joda-Time 2.9.1>>https://jira.xwiki.org/browse/XWIKI-12816]]
276 * [[Less4j 1.15.4>>https://jira.xwiki.org/browse/XWIKI-12905]]
277 * [[Maven 3.3.9>>https://jira.xwiki.org/browse/XCOMMONS-883]]
278 * [[slf4j 1.7.13>>https://jira.xwiki.org/browse/XCOMMONS-879]]
279 * [[Woodstox 4.4.1>>https://jira.xwiki.org/browse/XWIKI-12853]]
280
281 = Translations =
282
283 The following translations have been updated:
284
285 {{language codes="de, fr, zh"/}}
286
287 = Tested Browsers & Databases =
288
289 {{include reference="TestReports.ManualTestReportSummaryXWiki74"/}}
290
291 = Performances tests compared to 6.4.8 =
292
293 Like in 7.3 there hasn't really been much performance work on this version which was dedicated to improvement on nested spaces support that was added in 7.2 so we get mostly the same results.
294
295 {{display reference="test:Performances.Jetty HSQLDB single wiki 648 to 742" section="HSummary"/}}
296
297 More details on [[performance comparison on single wiki between 7.4.2 and 6.4.8>>test:Performances.Jetty HSQLDB single wiki 648 to 742]].
298
299 = Known issues =
300
301 * [[Bugs we know about>>https://jira.xwiki.org/secure/IssueNavigator.jspa?reset=true&jqlQuery=category+%3D+%22Top+Level+Projects%22+AND+issuetype+%3D+Bug+AND+resolution+%3D+Unresolved+ORDER+BY+updated+DESC]]
302
303 = Backward Compatibility and Migration Notes =
304
305 == General Notes ==
306
307 When upgrading make sure you compare your ##xwiki.cfg##, ##xwiki.properties## and ##web.xml## files with the newest version since some configuration parameters may have been modified or added. Note that you should add ##xwiki.store.migration=1## so that XWiki will attempt to automatically migrate your current database to the new schema. Make sure you backup your Database before doing anything.
308
309 == Issues specific to XWiki 7.4 ==
310
311 * Better backward-compatibility for URLs has been added for the following 2 cases:
312 ** If the ##view## action is omitted in the URL and the first space name doesn't match an action name, then the "view" action is implied
313 ** The ##view## action can be specified even when the wiki is configured to hide the ##view## action.
314 ** Note that this fixes [[some backward-compatibility issue introduced in XWiki 7.2>>ReleaseNotes.ReleaseNotesXWiki72||anchor="HURLs"]]
315
316 == API Breakages ==
317
318 The following APIs were modified since XWiki 7.4:
319
320 * was wrongly extending internal class:
321
322 {{code language="none"}}
323 org.xwiki.extension.job.history.ReplayJobStatus: Removed org.xwiki.job.internal.AbstractJobStatus from the list of superclasses
324 org.xwiki.extension.job.history.ReplayJobStatus: Removed org.xwiki.job.internal.DefaultJobStatus from the list of superclasses
325 org.xwiki.extension.xar.job.diff.DiffXarJobStatus: Removed org.xwiki.job.internal.AbstractJobStatus from the list of superclasses
326 org.xwiki.extension.xar.job.diff.DiffXarJobStatus: Removed org.xwiki.job.internal.DefaultJobStatus from the list of superclasses
327 org.xwiki.refactoring.job.EntityJobStatus: Removed org.xwiki.job.internal.AbstractJobStatus from the list of superclasses
328 org.xwiki.refactoring.job.EntityJobStatus: Removed org.xwiki.job.internal.DefaultJobStatus from the list of superclasses
329 {{/code}}
330
331 * impossible to implement it without dependeing on XMLRPC module:
332
333 {{code language="none"}}
334 com.xpn.xwiki.XWikiContext: Method 'public org.apache.xmlrpc.server.XmlRpcServer ajc$get$xmlRpcServer(com.xpn.xwiki.XWikiContext)' has been removed
335 com.xpn.xwiki.XWikiContext: Method 'public void ajc$set$xmlRpcServer(com.xpn.xwiki.XWikiContext, org.apache.xmlrpc.server.XmlRpcServer)' has been removed
336 com.xpn.xwiki.XWikiContext: Method 'public org.apache.xmlrpc.server.XmlRpcServer getXMLRPCServer()' has been removed
337 com.xpn.xwiki.XWikiContext: Method 'public void setXMLRPCServer(org.apache.xmlrpc.server.XmlRpcServer)' has been removed
338 com.xpn.xwiki.XWikiContextCompatibilityAspect: Method 'public org.apache.xmlrpc.server.XmlRpcServer ajc$interFieldGetDispatch$com_xpn_xwiki_XWikiContextCompatibilityAspect$com_xpn_xwiki_XWikiContext$xmlRpcServer(com.xpn.xwiki.XWikiContext)' has been removed
339 com.xpn.xwiki.XWikiContextCompatibilityAspect: Method 'public void ajc$interFieldInit$com_xpn_xwiki_XWikiContextCompatibilityAspect$com_xpn_xwiki_XWikiContext$xmlRpcServer(com.xpn.xwiki.XWikiContext)' has been removed
340 com.xpn.xwiki.XWikiContextCompatibilityAspect: Method 'public void ajc$interFieldSetDispatch$com_xpn_xwiki_XWikiContextCompatibilityAspect$com_xpn_xwiki_XWikiContext$xmlRpcServer(com.xpn.xwiki.XWikiContext, org.apache.xmlrpc.server.XmlRpcServer)' has been removed
341 com.xpn.xwiki.XWikiContextCompatibilityAspect: Method 'public org.apache.xmlrpc.server.XmlRpcServer ajc$interMethod$com_xpn_xwiki_XWikiContextCompatibilityAspect$com_xpn_xwiki_XWikiContext$getXMLRPCServer(com.xpn.xwiki.XWikiContext)' has been removed
342 com.xpn.xwiki.XWikiContextCompatibilityAspect: Method 'public void ajc$interMethod$com_xpn_xwiki_XWikiContextCompatibilityAspect$com_xpn_xwiki_XWikiContext$setXMLRPCServer(com.xpn.xwiki.XWikiContext, org.apache.xmlrpc.server.XmlRpcServer)' has been removed
343 com.xpn.xwiki.XWikiContextCompatibilityAspect: Method 'public org.apache.xmlrpc.server.XmlRpcServer ajc$interMethodDispatch1$com_xpn_xwiki_XWikiContextCompatibilityAspect$com_xpn_xwiki_XWikiContext$getXMLRPCServer(com.xpn.xwiki.XWikiContext)' has been removed
344 com.xpn.xwiki.XWikiContextCompatibilityAspect: Method 'public void ajc$interMethodDispatch1$com_xpn_xwiki_XWikiContextCompatibilityAspect$com_xpn_xwiki_XWikiContext$setXMLRPCServer(com.xpn.xwiki.XWikiContext, org.apache.xmlrpc.server.XmlRpcServer)' has been removed
345 {{/code}}

Get Connected