Release Notes for XWiki 6.3
- New and Noteworthy (since XWiki 6.2)
- For Developers
- Translations
- Tested Browsers & Databases
- Performances tests compared to 5.4.6
- Summary
- Known issues
- Backward Compatibility and Migration Notes
This is the release notes for XWiki Commons, XWiki Rendering, XWiki Platform and XWiki Enterprise. They share the same release notes as they are released together and have the same version.
This release provides a great stabilization of the Flamingo Skin, and includes new themes and some improvements to manage them.
It also contains a new mail API and module to replace the old mailsender plugin, a new dynamic tree widget that is progressively replacing all existing trees in XWiki (Document Index, Navigation Panels, etc...), some improvements on the Extension Manager as well as on the User Directory and the Applications Panel.
Efforts have been made on the performances side, with good results on view mode (except on the first loaded-page). We reach the same performances as 5.4.6, which was not the case during the 6.x cycle until now. This is a first milestone to get even better!
Finally, and like every releases, a lot of bugs have been fixed.
New and Noteworthy (since XWiki 6.2)
Full list of issues fixed and Dashboard for 6.3.
Extension Manager and Repository improvements
- <scm> element from Maven pom.xml is now supported and has been added to the standard in the API
- <issueManagement> element from Maven pom.xml is now supported and has been added to the standard in the API
- When importing an extension unknown but valid versions are not removed anymore
- The extension source URL and issue manager URL are now displayed in the extension description when available.
User Directory customized globally
The administrator of the wiki can customize the default columns to be displayed by the user directory.
For more information, see the documentation
Flamingo
- The 'Add' button has been moved back to the top bar and the search bar to the right:
- When you click on the 'add' button, the order of the choices have been inverted, to propose to create a page first, then a space, and finally a wiki:
- The Wiki/Space/Page buttons in the top bar have been changed and are no longer split into two parts. You do not need to click the arrow specifically any more to open the contextual menu:
- To navigate to the current Wiki/Space/Page in the top bar, there is now a new "Go to..." item:
Wiki Space Page - The languages selection is now located in the top bar. It is displayed only when the multilingual mode is enabled:
When there is no translation available:
When there is some translations available: - The Livetable is now responsive to the screen size, so you can use them with smartphones:
- The Flamingo Theme Application now uses a new Color Picker.
- To sum up, this is the new look:
- The "Add" button has now a default action to create a new page. You can still create other kind of contents (Wiki, Space) by using the arrow, just like we do with the different "edit" actions.
Flamingo Themes Application
Now, when you click on "Manage color theme" in the Administration, you reach the new application to manage the Flamingo Themes:
You can use it to change the current theme, modify any theme or create new ones.
We have also added 3 new themes: Marina, Garden and Kitty.
Bootswatch Themes for Flamingo
XWiki comes with 16 new themes for Flamingo, that have been adapted from Bootswatch.
Panels Application
It is now possible to select which applications are displayed in the App Bar, and which are not:
Document Tree Macro
We introduce a new wiki macro to display the hierarchy of documents:
Document Index Tree
The new Document Tree Macro is now used in the Wiki document index.
Navigation Panel
We also changed the Navigation Panel to use the new Document Tree Macro.
Miscellaneous
- The default color themes (DefaultColorTheme and FlamingoDefaultTheme) have been renamed Azure and Charcoal.
- In the select field of the 'color theme' property, in the administration, the color themes are now ordered by name.
- In the administration, clicking the "Customize" button for customizing a Skin or a Color Theme now opens the page in edit mode.
- Improved L&F when a template fails to render:
- We have created dedicated groups for Colibri and Flamingo Themes inside the Administration. Every themes can be used with both skins but they looks better when they are used with the corresponding theme.
- The start/stop shell scripts provided with the Standalone Distribution have been improved to display usage information when an invalid parameter is passed or when the -h or --help parameters are passed. Also note that the start script doesn't stop anymore a running XWiki instance if the -k or --kill parameter is passed (this parameter has been removed).
- It's now possible to configure the maximum number of search results to be returned from a search operation using xwiki.authentication.ldap.maxresults property in xwiki.cfg file. See LDAP documentation.
- The "Empty is today" option on Date fields of classes created with Application Within Minutes is now working as expected. See XWIKI-10296
- Office macro can now take a URL as input. See Office Macro for more details
- The standalone distribution now uses Jetty 9.2.3.v20140905 (was using version 8.1.15.v20140411 in XWiki 6.3-milestone-1). This should be transparent for the user since XWiki provides its own start/stop scripts around Jetty.
- The Delete Space feature now lists the documents inside the space you are going to delete. This should help people differentiate between the UI of Delete Page and the UI of Delete Space so that fewer mistakes occur when not paying much attention:
- Updated XAR export URL format to allow exporting a full space, a full wiki, or any list of pages matching a pattern. For example:http://localhost:8080/xwiki/bin/export/Main/WebHome?format=xar&name=test&pages=Main.%25
http://localhost:8080/xwiki/bin/export/Main/WebHome?format=xar&name=test&pages=%25.%25
http://localhost:8080/xwiki/bin/export/Main/WebHome?format=xar&name=test&pages=%25.%25Home - Added an edit button to easily change the default Welcome message that is displayed on the homepage. Users have reportedly been struggling with this task for a while now and, until we come up with a new format for the homepage, this is the solution we have proposed to make things easier.
- The configuration of the Applications Panel now works with touch-screen devices too.
- The Standalone Distribution now has a new startup parameter to enable monitoring/managing the Jetty instance. You can use it with start_xwiki.sh -j (or start_xwiki.sh --jmx).
- Updated the notification message when the panel layout is saved to use the standard notification widget.
For Developers
Velocity improvements
Velocity macros to display users and groups
We extracted the code that displays in view mode a property of type 'List of Users' and 'List of Groups' from the corresponding custom displayers (found in displayer_users.vm and displayer_groups.vm) into two Velocity macros that can be used to display arbitrary users and groups, even when you don't have an object. Here's how you can use them:
{{html wiki="true"}}
= Users =
== Just one ==
#displayUser('XWiki.Admin')
== List of users ==
#displayUser(['Admin', 'XWiki.mflorea'])
== A reference of a user ==
#displayUser($xcontext.userReference)
== A list of references of users ==
#displayUser([$xcontext.userReference, $otherUserReference])
= Groups =
== Just one ==
#displayGroup('XWiki.XWikiAdminGroup')
== List of groups ==
#displayGroup(['XWikiAdminGroup','XWiki.HRGroup'])
== A reference of a group ==
#set($adminGroupRef = $services.model.resolveDocument('XWiki.XWikiAdminGroup'))
#set($allGroupRef = $services.model.resolveDocument('XWiki.XWikiAllGroup'))
#displayGroup($adminGroupRef)
== A list of references of groups ==
#displayGroup([$adminGroupRef, $allGroupRef])
{{/html}}
{{/velocity}}
New Velocity Tools
- New URL Tool $urltool: A new tool has been added with one method to parse query string from the URL $urltool.parseQuery(String). The value returned by this is method is a Map<String, List<String>> which maps parameter names to (possibly multiple) values, and can be passed e.g. directly into $escapetool.url(Map<String, ?>) to convert it back to a string. This is useful e.g. in cases where one want to pass a complete query string around between requests, as it happend for the PDF export; the $urltool allows for a sane deserialization of the value passed around.
- New Exception Tool $exceptiontool: A new tool to manipulate Java Exceptions (get root cause, convert into String, etc).
- $stringtool moved from org.apache.commons.lang3.StringUtils to org.xwiki.text.StringUtils which extends the first one and add new stuff
Ability to catch Exceptions from Velocity
A new Velocity Directive has been added to catch Exceptions from Velocity. In addition a new #displayUnhandledException() velocity macro has also been added to nicely display an exception to the user.
For example:
#set($outputSyntax = $xwiki.getAvailableRendererSyntax($request.outputSyntax, $request.outputSyntaxVersion))
#if ($outputSyntax)
## If the passed syntax is not an HTML-compatible syntax we need to HTML-escape it so that it can be
## displayed fine in HTML (since at the point this vm file is called we're already inside an HTML page with
## panels on the side, header, etc).
#set($syntaxType = $outputSyntax.type.toIdString())
#if (($syntaxType == "xhtml") || ($syntaxType == "html"))
#set ($renderedContent = $tdoc.getRenderedContent($outputSyntax))
#else
## Make sure to print correctly the result when it's not HTML
#set ($renderedContent = "<pre>$escapetool.html($tdoc.getRenderedContent($outputSyntax))</pre>")
#end
#else
#set ($renderedContent = $tdoc.getRenderedContent())
#end
#end
...
<div id="xwikicontent">
#if ("$!exception" != '')
#displayUnhandledException($exception)
#else
$renderedContent
#end
</div>
...
This generates the following in case of error rendering the page:
New #displayException macro
Displays an error message with a title that can be clicked and expands to display an exception.
Example from a wiki page:
#set ($message = $services.mailsender.createMessage())
$message.send()
{{html}}
#displayException("hello world", $services.mailsender.lastError)
{{/html}}
{{/velocity}}
Component Disposal
The order used by the ComponentManager to dispose its components is computed based on declared dependencies. However there might be cases when you wish a Component's dispose() method to be called before or after all other components. In this case you can use the DisposePriority annotation. The default priority is 1000. A higher value will mean disposing before all other components not having this annotation. For example:
@Singleton
@DisposePriority(10000)
public class DefaultHibernateSessionFactory implements HibernateSessionFactory, Disposable
{
...
@Override
public void dispose() throws ComponentLifecycleException
{
... called after other components in order to shut down the database late...
}
...
}
See the Component Reference documentation for other details.
New LiveTable Filtering Option
You can now specify how the filter value should be matched against the stored value. One use case when this is useful is when you have a live table for an XClass that has a Database List property and you want to use a text input filter instead of the default drop down list filter. Currently the user has to enter the full value in the text input in order to filter. Would be good if partial matching would work. This is possible starting with this version:
'doc.name': {'type': 'text', 'size': 10, 'link': 'view'},
...
'myDatabaseList': {'type': 'text', 'size': 10, 'match': 'partial'},
...
})
Checkout the LiveTable Macro documentation for more details about the match option.
Solr JSON Service
You can now make search requests from JavaScript using the Solr JSON service. The results include all the information that is indexed by Solr so you can display them as you wish. See the Solr Search Application documentation for more details.
Document Meta Informations
- We have introduced a new JavaScript API to get informations about the current document. See: JavaScriptAPI.
Tree Widget
We introduce a new JavaScript widget that can be used to create tree views for the structured data stored in the wiki. It is based on jsTree and thus has support for both static and dynamic (interactive) trees.
Tree Macro
We introduce a new wiki macro that allows you to easily define a tree in a wiki page. It uses the tree widget.
* Parent
** Child
{{/tree}}
{{tree reference="Space.MyDynamicTree" /}}
Improved WebJars Integration
We added 2 new features to improve the WebJars Integration:
- You can now omit the WebJar version:$services.webjars.url('angularjs', 'angular.js')
- You can use Velocity code in WebJar resources. This means you can use for instance Color Theme variables inside your CSS files that are packaged inside a WebJar:$services.webjars.url('org.xwiki.contrib:my-webjar', 'style.css', {'evaluate': true})
See the WebJar Integration documentation for more information.
Wiki skin templates executed with rights of their author
Skin template overrides located in wiki page properties or attachment are executed with the right of their author.
Miscellaneous
- The wiki provisioning job has now the current user set in the context.
- 10 new icons have been mapped into Font Awesome Icon Theme.
- It's now possible to overwrite the id of a Java bean property using an annotation. See Properties Module for more.
- It's possible to get DEBUG information only for shutdown operations by editing logback.xml and setting:<logger name="org.xwiki.shutdown" level="debug"/>
- When importing an extension unknown but valid versions are not removed anymore
- New outputOnlyHtml option for the livetable macro to output only the HTML, without the syntax specific wrappers. See the documentation.
- Suggest widget now has an extra propagateEventKeyCodes option where key codes can be listed so their events will be propagated. See the documentation.
- Extended modalPopup.js to support specifying keyboard shortcut options for the defined actions. See the documentation.
- You can now render an icon from any icon theme present on the wiki, referenced by its name:$services.icon.render('globe', 'Silk')
$services.icon.render('globe', 'Font Awesome')
Upgrades
The following dependencies have been upgraded:
- JGroups 3.5.1
- Tika 1.6
- reflections 0.9.9
- Groovy 2.3.7
- jQuery 1.11.1
- Doxia 1.6
- Joda-Time 2.5
- commons-compress 1.9
- httpcore 4.3.3
Translations
The following translations have been updated:
Tested Browsers & Databases
Here is the list of browsers we support and how they have been tested for this release:
Browser | Test Result | |
---|---|---|
Google Chrome 38 | Not Tested | |
Mozilla Firefox 33 | Jira Tickets | |
Internet Explorer 8 | Not Tested | |
Internet Explorer 9 | Not Tested |
Here is the list of databases we support and how they have been tested for this release:
Database | Test Result | |
---|---|---|
HyperSQL 2.3.2 | Not Tested | |
MySQL 5.6.17 | Not Tested | |
Oracle 11.2 | Not Tested | |
PostgreSQL 9.3.4 | Jira Tickets |
Performances tests compared to 5.4.6
Except for the first-loaded page (which incurs the cost of one-time LESS compilation), we have reached the same performances as 5.4.6 in view mode, which was not the case during the 6.x cycle until now. This is a first milestone to get even better!
Summary
Speed
Actions | Difference | |
---|---|---|
Jetty startup | Same | |
First access | not existing page without UI | Same |
not existing page with UI | x2 (most probably the LESS init) | |
Reload | not existing page without UI | Same |
not existing page with UI | Same | |
Main.WebHome with UI | Slightly better | |
Main.WebHome without UI | Same | |
SOLR | Full SOLR reindex | Same |
SOLR sync when index is empty | Same | |
SOLR sync when there is nothing to do | Same | |
Rendering | Page with 1000 macros without UI | /3 |
Memory
Actions | Difference |
---|---|
Memory after jetty startup | Same |
Memory after full SOLR index | Use a bit more but keep less |
More details on performance comparison on single wiki between 6.3 and 5.4.6.
Known issues
Backward Compatibility and Migration Notes
General Notes
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.
Programming Rights disabled for TextArea Properties
If you have a class with a TextArea property and in your sheet you use $doc.display() to display this property then you must know that starting with this version the content of the TextArea is rendered without programming rights, even if the last author or content author of the document that has the object with the TextArea property has programming rights. In other words, if you use wiki syntax in the TextArea content and you use script macros inside, the code that requires programming rights won't be executed even if you have the necessary rights. The reason for this change is because we can't know for sure who is the last author of the TextArea's content. We may remove this limitation in the future if we add a way to know the author. A solution we are currently investigating is the usage of signed scripts in TextArea's content. Until then, if you really want to execute the content of your TextArea properties using programming rights then you can use $doc.getRenderedContent() in your sheet, passing the content of the TextArea property.
Change on velocity macro handling in skin templates
Wiki page does not have access anymore to Velocity macros defined in the skin templates (except for macro.vm special template).
Change on rights handling of wiki skins
Templates located in wiki skin properties or attachment are now executed with the right of their author. It means the current document rights does not have any impact anymore on the wiki skin. Note that part of the skin used to be denied programming right (everything executed after the document content) anyway.
API Breakages
The following APIs were modified since XWiki 6.2:
- Add scm informations to extensions descriptors. Should be safe enough since most repository handlers extend AbstractExtension instead of directly implement Extension
- Add issue management informations to extensions descriptors. Should be safe enough since most repository handlers extend AbstractExtension instead of directly implement Extension
- Never really been supposed to be exposed as an API.
com.xpn.xwiki.doc.XWikiDocument: Method 'public java.lang.String ajc$privMethod$com_xpn_xwiki_doc_XWikiDocumentCompatibilityAspect$com_xpn_xwiki_doc_XWikiDocument$serializeReference(org.xwiki.model.reference.DocumentReference, org.xwiki.model.reference.EntityReferenceSerializer, org.xwiki.model.reference.DocumentReference)' has been removed
- Changed the LESSCache interface and the LESS Script Service because the cache was poorly designed (see: XWIKI-10776)
org.xwiki.lesscss.LESSCache: Method 'public void clear(java.lang.String)' has been removed
org.xwiki.lesscss.LESSCache: Method 'public void clearFromColorTheme(java.lang.String)' has been added to an interface
org.xwiki.lesscss.LESSCache: Method 'public void clearFromFileSystemSkin(java.lang.String)' has been added to an interface
org.xwiki.lesscss.LESSCache: In method 'public java.lang.Object get(java.lang.String, java.lang.String, java.lang.String, java.lang.String)' the number of arguments has changed
org.xwiki.lesscss.LESSCache: In method 'public void set(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.Object)' the number of arguments has changed
- Added new methods to the unstable Icon Module
org.xwiki.icon.IconManager: Method 'public java.lang.String render(java.lang.String, java.lang.String, boolean)' has been added to an interface
org.xwiki.icon.IconManager: Method 'public java.lang.String renderHTML(java.lang.String, java.lang.String)' has been added to an interface
org.xwiki.icon.IconManager: Method 'public java.lang.String renderHTML(java.lang.String, java.lang.String, boolean)' has been added to an interface
org.xwiki.icon.IconSetCache: Method 'public void clear(java.lang.String, java.lang.String)' has been added to an interface
org.xwiki.icon.IconSetCache: Method 'public org.xwiki.icon.IconSet get(java.lang.String, java.lang.String)' has been added to an interface
org.xwiki.icon.IconSetCache: Method 'public void put(java.lang.String, java.lang.String, org.xwiki.icon.IconSet)' has been added to an interface
org.xwiki.icon.IconSetManager: Method 'public org.xwiki.icon.IconSet getIconSet(java.lang.String)' has been added to an interface