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 stabilization branch for the XWiki 7.x Cycle. It brings polishing and stabilization for the Nested Pages feature and the changes in UI that resulted from it. It is now possible to have template hierarchies, and to add an automatic redirect when a page is renamed.
8
9 = New and Noteworthy (since XWiki 7.4 Milestone 1) =
10
11 [[Full list of issues fixed and Dashboard for 7.4>>https://jira.xwiki.org/secure/Dashboard.jspa?selectPageId=13590]].
12
13 == Support for template hierarchies ==
14
15 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.
16
17 The save operation will display progress and if it was a Save&View operation, the form will be disabled until the operation is complete.
18
19 More details on the [[documentation page on document templates>>extensions:Extension.Administration Application||anchor="HUsingahierarchyofNestedDocumentsastemplate"]].
20
21 {{image reference="savingNewDocumentWithTemplateHierarchy.png" width="50%"/}}
22
23 == Automatic Redirect on Page Rename ==
24
25 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.
26
27 {{image reference="RenameConfirmFlamingo.png"/}}
28
29 == Database Search ==
30
31 The [[Database Search>>extensions:Extension.Search Application||anchor="HDatabaseSearch"]] UI has been modified to support nested pages.
32
33 {{image reference="databaseSearch.png"/}}
34
35 == Miscellaneous ==
36
37 * The "annotations" button in the "More Actions" menu has been moved in the same menu but with other actions and renamed "Annotate".(((
38 {{image reference="Annotate.png"/}}
39 )))
40 * 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"]].
41
42 See the [[full list of JIRA issues>>https://jira.xwiki.org/sr/jira.issueviews:searchrequest-printable/temp/SearchRequest.html?jqlQuery=project+in+%28XCOMMONS%2C+XRENDERING%2C+XWIKI%2C+XE%29+and+status+%3D+Closed+and+resolution+%3D+Fixed+and+fixVersion+%3D+%227.4-milestone-2%22&tempMax=1000]] fixed in this release.
43
44 = For Developers =
45
46 == New lifespan LRU Cache setup ==
47
48 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.
49
50 {{code language="java"}}
51 // Configure cache eviction policy
52 LRUEvictionConfiguration lru = new LRUEvictionConfiguration();
53 // Set maximum size of the cache as 1000 entries
54 lru.setMaxEntries(1000);
55 // Set the maximum time to live since when the entry is used to 1 hour
56 lru.setMaxIdle(3600)
57 // Set the maximum time to live since when the entry is put in the cache to 1 hour
58 lru.setLifespan(3600)
59 {{/code}}
60
61 [[Cache Macro>>extensions:Extension.Cache Macro]] and [[Rendering Cache>>Documentation.AdminGuide.Performances||anchor="HRenderingcache"]] are now based on this behavior.
62
63 == VFS API ==
64
65 {{warning}}
66 Right now the [[VFS API is missing authorization checks>>https://jira.xwiki.org/browse/XWIKI-12912]], meaning that you should use it only for public archives.
67 {{/warning}}
68
69 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).
70
71 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##.
72
73 See [[VFS API>>extensions:Extension.VFS API]] and [[VFS Tree Macro>>extensions:Extension.VFS Tree Macro]] for more details. Some API examples:
74
75 {{code language="velocity"}}
76 {{velocity}}
77 ## Get the URL to access the content of a file inside a zip:
78 [[link to file in zip>>$services.vfs.url("attach:[email protected]/vma.txt")]]
79
80 ## Display inline an image from a zip attached to a wiki page:
81 [[image:path:$services.vfs.url("attach:[email protected]/test.png")]]
82
83 ## Read the content of a file inside a zip attached to a page:
84 $stringtool.toString($niotool.readAllBytes("attach:[email protected]/vma.txt"), "utf-8")
85
86 ## List all entries inside a zip attached to a page:
87 #set ($dirStream = $niotool.newDirectoryStream("attach:[email protected]/"))
88 #foreach ($entry in $dirStream)
89 * {{{$entry}}} - $niotool.isDirectory($entry)
90 #end
91 {{/velocity}}
92
93 {{vfsTree root="attach:[email protected]/"/}}
94 {{/code}}
95
96 Example of using the ##vfsTree## Macro:
97
98 {{code language="none"}}
99 {{vfsTree root="attach:[email protected]/"/}}
100 {{/code}}
101
102 Results in:
103
104 {{image reference="vfstree.png"/}}
105
106 == Miscellaneous ==
107
108 * [[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}}
109 * 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:(((
110 {{code language="none"}}
111 {
112 ... (node JSON) ...
113 'a_attr': {
114 'class': 'jstree-no-link',
115 'href': 'some/url'
116 }
117 }
118 {{/code}}
119 )))
120 * The ##$regextool## [[Velocity Tool>>extensions:Extension.Velocity Module||anchor="HVelocityTools"]] has a new method:(((
121 {{code language="java"}}
122 /**
123 * @param content the content to parse
124 * @param regex the regular expression to look for in the passed content
125 * @return an empty list if the passed regular expression doesn't match the content, several {@link RegexResult}
126 * objects containing the matched position and matched content for all capturing groups and sub-groups
127 * otherwise
128 */
129 public List<List<RegexResult>> findAll(String content, String regex)
130 {{/code}}
131
132 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:
133
134 {{code language="java"}}
135 @Test
136 public void findAll()
137 {
138 RegexTool tool = new RegexTool();
139 List<List<RegexResult>> result =
140 tool.findAll("one :two three (:four) five :six seven=:eight", ":(\\w+) (\\w+)");
141
142 Assert.assertEquals(2, result.size());
143 Assert.assertEquals(":two three", result.get(0).get(0).getGroup());
144 Assert.assertEquals(":six seven", result.get(1).get(0).getGroup());
145
146 Assert.assertEquals(3, result.get(0).size());
147 Assert.assertEquals("two", result.get(0).get(1).getGroup());
148 Assert.assertEquals("three", result.get(0).get(2).getGroup());
149
150 Assert.assertEquals(3, result.get(1).size());
151 Assert.assertEquals("six", result.get(1).get(1).getGroup());
152 Assert.assertEquals("seven", result.get(1).get(2).getGroup());
153 }
154 {{/code}}
155 )))
156
157 == Deprecated and Retired projects ==
158
159 * XML-RPC module have been moved to https://github.com/xwiki-contrib/xwiki-platform-xmlrpc
160
161 == Upgrades ==
162
163 The following dependencies have been upgraded:
164
165 * [[Batik 1.8>>https://jira.xwiki.org/browse/XWIKI-12904]]
166 * [[FOP 2.0>>https://jira.xwiki.org/browse/XWIKI-12871]]
167 * [[Jackson 2.6.4>>https://jira.xwiki.org/browse/XCOMMONS-893]]
168 * [[guava 19>>https://jira.xwiki.org/browse/XCOMMONS-894]]
169 * [[Less4j 1.15.4>>https://jira.xwiki.org/browse/XWIKI-12905]]
170
171 = Translations =
172
173 The following translations have been updated:
174
175 {{language codes="de, fr, zh"/}}
176
177 = Tested Browsers & Databases =
178
179 {{include reference="TestReports.ManualTestReportSummaryXWiki74M2"/}}
180
181 {{comment}}
182 TODO: uncomment and update with proper link when the report is ready.
183 {{include reference="TestReports.ManualTestReportTemplateSummary"/}}
184 {{/comment}}
185
186 = Known issues =
187
188 * [[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]]
189
190 = Backward Compatibility and Migration Notes =
191
192 == General Notes ==
193
194 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.
195
196 == API Breakages ==
197
198 The following APIs were modified since XWiki 7.3:
199
200 * Job code was wrongly extending an internal class:(((
201 {{code language="none"}}
202 org.xwiki.extension.job.history.ReplayJobStatus: Removed org.xwiki.job.internal.AbstractJobStatus from the list of superclasses
203 org.xwiki.extension.job.history.ReplayJobStatus: Removed org.xwiki.job.internal.DefaultJobStatus from the list of superclasses
204 org.xwiki.extension.xar.job.diff.DiffXarJobStatus: Removed org.xwiki.job.internal.AbstractJobStatus from the list of superclasses
205 org.xwiki.extension.xar.job.diff.DiffXarJobStatus: Removed org.xwiki.job.internal.DefaultJobStatus from the list of superclasses
206 org.xwiki.refactoring.job.EntityJobStatus: Removed org.xwiki.job.internal.AbstractJobStatus from the list of superclasses
207 org.xwiki.refactoring.job.EntityJobStatus: Removed org.xwiki.job.internal.DefaultJobStatus from the list of superclasses
208 {{/code}}
209 )))
210 * Remove the XMLRPC module:(((
211 {{code language="none"}}
212 com.xpn.xwiki.XWikiContext: Method 'public org.apache.xmlrpc.server.XmlRpcServer ajc$get$xmlRpcServer(com.xpn.xwiki.XWikiContext)' has been removed
213 com.xpn.xwiki.XWikiContext: Method 'public void ajc$set$xmlRpcServer(com.xpn.xwiki.XWikiContext, org.apache.xmlrpc.server.XmlRpcServer)' has been removed
214 com.xpn.xwiki.XWikiContext: Method 'public org.apache.xmlrpc.server.XmlRpcServer getXMLRPCServer()' has been removed
215 com.xpn.xwiki.XWikiContext: Method 'public void setXMLRPCServer(org.apache.xmlrpc.server.XmlRpcServer)' has been removed
216 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
217 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
218 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
219 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
220 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
221 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
222 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
223 {{/code}}
224 )))

Get Connected