Last modified by Thomas Mortagne on 2023/10/13

Show last authors
1 {{box cssClass="floatinginfobox" title="**Contents**"}}
2 {{toc/}}
3 {{/box}}
4
5 First milestone of the XWiki Enterprise 3.0 version ([[Roadmap>>Main.Roadmap]]).
6
7 = New and Noteworthy (since XWiki Enterprise 2.7) =
8
9 == ColorTheme improvements ==
10
11 "Add" menu entry can now be customizable from the ColorTheme wizard and has it's own variable.
12
13 [[image:AddCustomization.png||style="border:1px solid black"]]
14
15 Also, info, success, warning and error message colors can now be changed through ColorThemes variables.
16
17 == General UI improvements ==
18
19 Several XWiki forms have been modified in order to be consistent with our [[Vertical Layout Usage Form Standard>>Documentation.DevGuide.VerticalForms]]
20
21 [[image:copy.png||style="border:1px solid black"]]
22
23 * Standardized vertical navigation menu layout, which will be used in M2 in administration, user profiles, and in the wiki index
24 * Colibri is now the default base skin instead of Albatross
25 * [[XWIKI-5859>>https://jira.xwiki.org/browse/XWIKI-5859]]: Ability to have different panels in wiki and WYSIWYG edit modes
26
27 == WYSIWYG content editor improvements ==
28
29 * Better support for Opera, Chrome and Safari
30 * Fixed several usability bugs
31
32 == PDF export improvements ==
33
34 * [[XWIKI-5782>>https://jira.xwiki.org/browse/XWIKI-5782]]: PDF export ordered lists are not numbered in the same way as the wiki lists
35 * [[XWIKI-5799>>https://jira.xwiki.org/browse/XWIKI-5799]]: Underlined text has some additional white space before it when export to PDF
36 * [[XWIKI-5844>>https://jira.xwiki.org/browse/XWIKI-5844]]: PDF export sometimes broken when copy/pasting content from MS Office
37
38 == Miscellaneous ==
39
40 * Lucene search improvements
41 * Enable preview office feature for all formats supporting by OpenOffice (especially docx, xlsx, pdf, pptx, odf, ods, odp)
42 * Activity stream performance improvements and bug fixes
43 * XAR import improvements ([[XWIKI-5845>>https://jira.xwiki.org/browse/XWIKI-5845]], [[XWIKI-5846>>https://jira.xwiki.org/browse/XWIKI-5846]])
44 * Several macros transformed into Gadgets
45
46 == For developers ==
47
48 * [[XWIKI-2496>>https://jira.xwiki.org/browse/XWIKI-2496]]: Specialized AppServerTrusted authenticator handling Kerberos principals
49 * [[XWIKI-5758>>https://jira.xwiki.org/browse/XWIKI-5758]]: Remove logging to the xwiki.log file in the log4j default configuration
50 * [[XWIKI-5868>>https://jira.xwiki.org/browse/XWIKI-5868]]: Add API for manipulating skin extensions as components
51 * [[XWIKI-5810>>https://jira.xwiki.org/browse/XWIKI-5810]]: Allow skin customization based on the current space name
52 * [[XWIKI-5815>>https://jira.xwiki.org/browse/XWIKI-5815]]: Add a Context macro
53 * [[XWIKI-5900>>https://jira.xwiki.org/browse/XWIKI-5900]]: Generic macro for displaying vertical navigation menus
54 * [[XWIKI-5874>>https://jira.xwiki.org/browse/XWIKI-5874]]: Add API to display document's titles in plain text without any markup
55 * [[XWIKI-5819>>https://jira.xwiki.org/browse/XWIKI-5819]]: Now the limit for nested macro calls is 100 instead of the default 20 (affects the limit of chained comment replies)
56 * Various upgrades: Velocity 1.7, Prototype.js 1.7, Jython 2.5.2rc2, Groovy 1.7.6, GWT 2.1.1, JRuby 1.5.6
57
58 == Translations ==
59
60 * The following translations have been updated: ##de##, ##fr##, ##lv##, ##ru##, ##sv##
61
62 = Known issues =
63
64 * [[Bugs we know about>>https://jira.xwiki.org/secure/IssueNavigator.jspa?reset=true&&type=1&pid=10010&resolution=-1&sorter/field=updated&sorter/order=DESC]]
65
66 = Test Report =
67
68 You can check the [[manual test report>>TestReports.ManualTestReportXE30M1]] to learn about what was tested and the results on various browsers.
69
70 = Backward Compatibility and Migration Notes =
71
72 == The Velocity engine was updated to version 1.7 ==
73
74 {{warning}}
75 We upgraded Velocity to version 1.7 which brings several changes that are not backwards compatible.
76 {{/warning}}
77
78 We had to fix the following problems on the velocity code bundled with XWiki Enteprise:
79
80 * Escape quotes in interpolated strings (both ' and ") by doubling them ('' and "") (See [[VELOCITY-555>>https://issues.apache.org/jira/browse/VELOCITY-555]])
81 * [[XABLOG-117>>https://jira.xwiki.org/browse/XABLOG-117]]: Blog application broken under Velocity 1.7
82 * [[XAADMINISTRATION-200>>https://jira.xwiki.org/browse/XAADMINISTRATION-200]]: Configurable sections are broken ("configuration cannot be displayed because it was last edited by Admin who doesn't have permission to edit this page")
83 * [[XE-806>>https://jira.xwiki.org/browse/XE-806]]: Upgrade activity macro to work with velocity 1.7
84
85 === Macro evaluation strategy ===
86
87 The main change is that Velocity 1.7 changed the way macro evaluations work. While before it was more flexible with many possible outcomes depending on what parameters were passed, and how they were used inside the macro, the current version simplified a lot the internal logic of variable assignments inside macros, which resulted in a critical regression for us. The same change was introduced between 1.6.0 and 1.6.1, but was reverted in 1.6.2 when we notified them of the regression, with the decision to go further with the change in 1.7.
88
89 To better understand the kind of code that doesn't work, take this example:
90
91 {{code language="none}}
92 #macro(callBySharing $x)
93 #set($x = 'a')
94 #end
95 #set($y = 'y')
96 #callBySharing($y)
97
98 $y -> 'y' in 1.7
99 $y -> 'a' in 1.6.2, 1.6.0 and before)
100 {{/code}}
101
102 But:
103
104 {{code language="none"}}
105 #set($x = 'x')
106 #callBySharing($x)
107
108 $x -> 'a' in all versions
109 {{/code}}
110
111 This means that only macros that are supposed to assign and return a value in one of its formal parameters will stop working, and only when the formal and actual parameters have different names. Macros with signatures like:
112
113 {{code language="none"}}
114 #macro(computeSomething $fromValue1 $fromValue2 $putResultHere)
115 {{/code}}
116
117 The only macro in the global ##macros.vm## that was broken by this change was ###setVariableFromRequest##, which is already fixed in the released version.
118
119 Now there's also a generic ###setVariable ("variableName" $value)## macro which can be used to emulate the call by sharing behavior in custom macros. How to use it:
120
121 Suppose you had a macro like this:
122
123
124 {{code language="none"}}
125 #macro(isBlogGlobal $blogDoc $isGlobal)
126 #set($isGlobal = false)
127 #getBlogProperty($blogDoc 'blogType' '' $discard)
128 #if($discard == 'global')
129 #set($isGlobal = true)
130 #end
131 #end
132 {{/code}}
133
134 Here ##$isGlobal## is the output variable which now doesn't always work. The updated version of the macro can be written as:
135
136 {{code language="none"}}
137 #macro(isBlogGlobal $blogDoc $isGlobal)
138 #set ($result = false)
139 #getBlogProperty($blogDoc 'blogType' '' $discard)
140 #if($discard == 'global')
141 #set($result = true)
142 #end
143 #set ($isGlobal = $util.null)
144 #setVariable ("$isGlobal" $result)
145 #end
146 {{/code}}
147
148 Pay attention to the last two lines in the macro.
149
150 In Velocity, when rendering ##$variable##, where ##$variable## is ##undefined## or ##null##, will cause the variable name to be printed instead. As it happens, when inside a macro, what gets printed is the name of the actual parameter (the one passed in the macro call), and not the formal one (the one declared in the macro definition). So, whenever ##$isGlobal## is rendered as a string, the name of the actual parameter is obtained.
151
152 ###set ($isGlobal = $util.null)## will make sure that no matter what the previous value of the variable was, ##$isGlobal## will be ##null## from this point forward, and ##"$isGlobal"## will output the name of the actual parameter.
153
154 When calling ###setVariable ("$isGlobal" $result)##, the first parameter will contain the name of the actual parameter used when calling ###isBlogGlobal##.
155
156 Inside the ###setVariable## macro, the wanted variable is assigned using ###evaluate##.
157
158 === Quotes and apostrophes inside strings ===
159
160 The second change is the escape syntax used inside strings for quotes and apostrophes. While before this used to work:
161
162 {{code language="none"}}
163 {{velocity}}
164 #set ($a = "He said \"maybe\"")
165 $a => He said \"maybe\"
166 {{/velocity}}
167 {{/code}}
168
169 now this snippet would throw an exception. Trying to escape an apostrophe inside an apostrophe-delimited string would have failed even before.
170
171 In Velocity 1.7 it is possible to place both single and double quotes inside a string, by doubling that character. For example:
172
173 {{code language="none"}}
174 {{velocity}}
175 #set ($a = "He said ""maybe""")
176 $a => He said "maybe"
177
178 #set ($b = 'that''s funny')
179 $b => that's funny
180 {{/velocity}}
181 {{/code}}
182
183 == General Notes ==
184
185 {{warning}}
186 If you're running in a multiwiki setup you'll also need to define the property //xwiki.store.migration.databases=all// to your //xwiki.cfg// file or explicitly name all databases to be migrated as in //xwiki.store.migration.databases=db1,db2,...//.
187 {{/warning}}
188
189 You may also want to [[import the default wiki XAR>>Main.Download]] in order to benefit from the improvements listed above.
190
191 {{warning}}
192 Always make sure you compare your //xwiki.cfg// file with the newest version since some configuration parameters were added. Note 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.
193 {{/warning}}
194
195 == API Breakages ==
196
197 The following APIs were modified since XWiki Enterprise 2.7:
198
199 {{code language="none"}}
200 ERROR: 7006: org.xwiki.rendering.macro.box.AbstractBoxMacro: Return type of method 'protected org.xwiki.rendering.internal.macro.box.MacroContentParser getMacroContentParser()' has been changed to org.xwiki.rendering.internal.macro.MacroContentParser
201 ERROR: 8001: org.xwiki.rendering.block.AbstractFatherBlock: Class org.xwiki.rendering.block.AbstractFatherBlock removed
202 ERROR: 7012: org.xwiki.rendering.block.Block: Method 'public java.lang.String getParameter(java.lang.String)' has been added to an interface
203 ERROR: 7012: org.xwiki.rendering.block.Block: Method 'public java.util.Map getParameters()' has been added to an interface
204 ERROR: 7012: org.xwiki.rendering.block.Block: Method 'public void setParameter(java.lang.String, java.lang.String)' has been added to an interface
205 ERROR: 7012: org.xwiki.rendering.block.Block: Method 'public void setParameters(java.util.Map)' has been added to an interface
206 ERROR: 4001: org.xwiki.rendering.block.BulletedListBlock: Removed org.xwiki.rendering.block.FatherBlock from the set of implemented interfaces
207 ERROR: 5001: org.xwiki.rendering.block.BulletedListBlock: Removed org.xwiki.rendering.block.AbstractFatherBlock from the list of superclasses
208 ERROR: 4001: org.xwiki.rendering.block.DefinitionDescriptionBlock: Removed org.xwiki.rendering.block.FatherBlock from the set of implemented interfaces
209 ERROR: 5001: org.xwiki.rendering.block.DefinitionDescriptionBlock: Removed org.xwiki.rendering.block.AbstractFatherBlock from the list of superclasses
210 ERROR: 4001: org.xwiki.rendering.block.DefinitionListBlock: Removed org.xwiki.rendering.block.FatherBlock from the set of implemented interfaces
211 ERROR: 5001: org.xwiki.rendering.block.DefinitionListBlock: Removed org.xwiki.rendering.block.AbstractFatherBlock from the list of superclasses
212 ERROR: 4001: org.xwiki.rendering.block.DefinitionTermBlock: Removed org.xwiki.rendering.block.FatherBlock from the set of implemented interfaces
213 ERROR: 5001: org.xwiki.rendering.block.DefinitionTermBlock: Removed org.xwiki.rendering.block.AbstractFatherBlock from the list of superclasses
214 ERROR: 8001: org.xwiki.rendering.block.FatherBlock: Class org.xwiki.rendering.block.FatherBlock removed
215 ERROR: 4001: org.xwiki.rendering.block.FormatBlock: Removed org.xwiki.rendering.block.FatherBlock from the set of implemented interfaces
216 ERROR: 5001: org.xwiki.rendering.block.FormatBlock: Removed org.xwiki.rendering.block.AbstractFatherBlock from the list of superclasses
217 ERROR: 4001: org.xwiki.rendering.block.GroupBlock: Removed org.xwiki.rendering.block.FatherBlock from the set of implemented interfaces
218 ERROR: 5001: org.xwiki.rendering.block.GroupBlock: Removed org.xwiki.rendering.block.AbstractFatherBlock from the list of superclasses
219 ERROR: 4001: org.xwiki.rendering.block.HeaderBlock: Removed org.xwiki.rendering.block.FatherBlock from the set of implemented interfaces
220 ERROR: 5001: org.xwiki.rendering.block.HeaderBlock: Removed org.xwiki.rendering.block.AbstractFatherBlock from the list of superclasses
221 ERROR: 4001: org.xwiki.rendering.block.LinkBlock: Removed org.xwiki.rendering.block.FatherBlock from the set of implemented interfaces
222 ERROR: 5001: org.xwiki.rendering.block.LinkBlock: Removed org.xwiki.rendering.block.AbstractFatherBlock from the list of superclasses
223 ERROR: 4001: org.xwiki.rendering.block.ListItemBlock: Removed org.xwiki.rendering.block.FatherBlock from the set of implemented interfaces
224 ERROR: 5001: org.xwiki.rendering.block.ListItemBlock: Removed org.xwiki.rendering.block.AbstractFatherBlock from the list of superclasses
225 ERROR: 4001: org.xwiki.rendering.block.MacroMarkerBlock: Removed org.xwiki.rendering.block.FatherBlock from the set of implemented interfaces
226 ERROR: 5001: org.xwiki.rendering.block.MacroMarkerBlock: Removed org.xwiki.rendering.block.AbstractFatherBlock from the list of superclasses
227 ERROR: 4001: org.xwiki.rendering.block.NumberedListBlock: Removed org.xwiki.rendering.block.FatherBlock from the set of implemented interfaces
228 ERROR: 5001: org.xwiki.rendering.block.NumberedListBlock: Removed org.xwiki.rendering.block.AbstractFatherBlock from the list of superclasses
229 ERROR: 4001: org.xwiki.rendering.block.ParagraphBlock: Removed org.xwiki.rendering.block.FatherBlock from the set of implemented interfaces
230 ERROR: 5001: org.xwiki.rendering.block.ParagraphBlock: Removed org.xwiki.rendering.block.AbstractFatherBlock from the list of superclasses
231 ERROR: 4001: org.xwiki.rendering.block.QuotationBlock: Removed org.xwiki.rendering.block.FatherBlock from the set of implemented interfaces
232 ERROR: 5001: org.xwiki.rendering.block.QuotationBlock: Removed org.xwiki.rendering.block.AbstractFatherBlock from the list of superclasses
233 ERROR: 4001: org.xwiki.rendering.block.QuotationLineBlock: Removed org.xwiki.rendering.block.FatherBlock from the set of implemented interfaces
234 ERROR: 5001: org.xwiki.rendering.block.QuotationLineBlock: Removed org.xwiki.rendering.block.AbstractFatherBlock from the list of superclasses
235 ERROR: 4001: org.xwiki.rendering.block.SectionBlock: Removed org.xwiki.rendering.block.FatherBlock from the set of implemented interfaces
236 ERROR: 5001: org.xwiki.rendering.block.SectionBlock: Removed org.xwiki.rendering.block.AbstractFatherBlock from the list of superclasses
237 ERROR: 4001: org.xwiki.rendering.block.TableBlock: Removed org.xwiki.rendering.block.FatherBlock from the set of implemented interfaces
238 ERROR: 5001: org.xwiki.rendering.block.TableBlock: Removed org.xwiki.rendering.block.AbstractFatherBlock from the list of superclasses
239 ERROR: 4001: org.xwiki.rendering.block.TableCellBlock: Removed org.xwiki.rendering.block.FatherBlock from the set of implemented interfaces
240 ERROR: 5001: org.xwiki.rendering.block.TableCellBlock: Removed org.xwiki.rendering.block.AbstractFatherBlock from the list of superclasses
241 ERROR: 4001: org.xwiki.rendering.block.TableHeadCellBlock: Removed org.xwiki.rendering.block.FatherBlock from the set of implemented interfaces
242 ERROR: 5001: org.xwiki.rendering.block.TableHeadCellBlock: Removed org.xwiki.rendering.block.AbstractFatherBlock from the list of superclasses
243 ERROR: 4001: org.xwiki.rendering.block.TableRowBlock: Removed org.xwiki.rendering.block.FatherBlock from the set of implemented interfaces
244 ERROR: 5001: org.xwiki.rendering.block.TableRowBlock: Removed org.xwiki.rendering.block.AbstractFatherBlock from the list of superclasses
245 ERROR: 4001: org.xwiki.rendering.block.XDOM: Removed org.xwiki.rendering.block.FatherBlock from the set of implemented interfaces
246 ERROR: 5001: org.xwiki.rendering.block.XDOM: Removed org.xwiki.rendering.block.AbstractFatherBlock from the list of superclasses
247 ERROR: 7002: org.xwiki.rendering.syntax.SyntaxType: Method 'public java.lang.String toIdString()' has been removed
248 ERROR: 7012: org.xwiki.bridge.DocumentModelBridge: Method 'public org.xwiki.rendering.syntax.Syntax getSyntax()' has been added to an interface
249 ERROR: 7005: org.xwiki.properties.ConverterManager: Parameter 1 of 'public java.lang.Object convert(java.lang.Class, java.lang.Object)' has changed its type to java.lang.reflect.Type
250 ERROR: 7012: org.xwiki.properties.PropertyDescriptor: Method 'public java.lang.reflect.Type getPropertyType()' has been added to an interface
251 ERROR: 7005: org.xwiki.properties.converter.AbstractConverter: Parameter 1 of 'public java.lang.Object convert(java.lang.Class, java.lang.Object)' has changed its type to java.lang.reflect.Type
252 ERROR: 7005: org.xwiki.properties.converter.Converter: Parameter 1 of 'public java.lang.Object convert(java.lang.Class, java.lang.Object)' has changed its type to java.lang.reflect.Type
253 ERROR: 7012: org.xwiki.officeimporter.openoffice.OpenOfficeConverter: Method 'public boolean isMediaTypeSupported(java.lang.String)' has been added to an interface
254 {{/code}}

Get Connected