Release Notes for XWiki 9.7-rc-1

Last modified by Marius Dumitru Florea on 2018/08/29

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 brings small improvements to currently established features. The code viewer now provides a blame view by default and the notification center now allows the user to enable or disable notifications globally on an application, as well as toggling default notification filters provided by the platform.

New and Noteworthy (since XWiki 9.6)

Full list of issues fixed and Dashboard for XWiki 9.7.

For Users

Improved Attachment Index

 
The Attachments tab from the Page Index has been improved:

  • the Space and Page columns have been replaced with the Location column
  • the Type column is now the first column and you can sort and filter attachments by file type
  • the Type column uses the Icon Theme and shows a thumbnail preview for image attachments
  • there's a new column that displays the attachment file size, with support for sorting and filtering the attachments by their file size
  • attachments can be filtered by date using the new date range picker

We also fixed two important bugs:

  • the sort was not working correctly
  • attachments from hidden pages were displayed even if hidden pages were not visible

Improved Code Viewer with Blame View

 
The code viewer (More Actions > View Source) has been improved to look nicer and have proper line numbers that support highlighting and linking.

A new Blame View was also added to the code viewer. In this mode, each line of the document's content is annotated with the last author that modified it and the revision in which this modification was introduced. The blame view also works when viewing the source of a document revision (other than the latest one) so it can be accessed at any point in the history of a document. See the documentation for more details.

Gadget Wizard Update

 
The Gadget Wizard used to insert and edit the gadgets from the Dashboard has been updated to use the new Macro Wizard from the CKEditor.

New default notification filters

 
Default notification filters can now be created.
When a default notification filter is created, it appears as activated on every profile of every user. Each user can then choose to disable it (or re-enable it) by clicking on the "Advanced filtering options" link in its notification center.

In this version, only one default filter is provided (called "System Filter") and allows each user to hide (or not) notifications coming from the system user of XWiki.

Notifications Preferences

 
It is now possible to enable or disable all the notifications sent by an application.

Include and exclude Notification filters

 
A user can now define notification filters that are either inclusive or exclusive.

Notifications that come from a document that matches an exclusive filter will then be discarded.

Clickable versions in the changes view

 
When viewing the changes introduced between 2 document versions (diff), the compared versions are now clickable so that the document can be viewed at those specific revisions.

Deprecated and Internal Macros Hidden by Default

 
When inserting a macro, the WYSIWYG Editor (CKEditor) is now hiding the deprecated and internal macros from the "All Macros" category that is selected by default. In order to insert a deprecated or internal macro you need to explicitly select the corresponding category from the list. The following macros have been moved to the Deprecated category: Spaces, SpacesIndex and Workspaces.

Improvements when viewing a document version

 
When viewing a document revision (other than the last one), we're now showing the version information in the "last modified" section. Also, the "More actions" options are now displayed and the "view source" option will work on the currently displayed revision (instead of working on the latest version). Read more about document versioning in the documentation.

Display extension id

 
The extension id is now also displayed in the Dependencies section of the Repository Application.

Miscellaneous

  • The old WYSIWYG editor based on Google WebToolkit has been removed: In XWiki 8.2RC1 we made CKEditor the default WYSIWYG editor but the users could still use the old Google WebToolkit (GWT) editor by enabling it in the wiki administration. Starting with this version the old WYSIWYG editor is no longer available. CKEditor remains the only WYSIWYG editor option available in XWiki by default.

  • CKEditor Upgrade: The CKEditor has been upgraded from version 4.6.2 to 4.7.2. This brings a lot of bug fixes and some improvements:

    • select and manipulate arbitrary rectangular table fragments (a few cells, a row or a column)
    • paste from Microsoft Excel
    • improved paste from Word
    • new color picker

    See the CKEditor release notes for more information.

  • Macro List in Syntax Help: The Syntax Help page now displays the list of all the macros available in your wiki. This was previously covered by the XWiki.WikiMacros page which has now been removed.

  • Layout Macro Category: A new Layout Macro category was added and the following macros were moved to it: Dashboard, Container and Gallery.

For Admins

  • Extension Manager improvements: Extensions installed as dependencies but which don't have any backward dependencies anymore are now taken into account by the upgrade job.

  • Active Installs now sends java specification version: The Active Installs now sends the java specification version in its pings to extension.xwiki.org.
    See the documentation of the active installs for more informations.

For Developers

Jobs REST API improvements

 
Fail job started with async=false now return an error code 500. A serialized error message with complete stack trace is also provided in the Job status.

Syntax highlighting by default in the wiki editor

 
The Syntax Highlighting Application is now bundled and enabled by default.

Miscellaneous

  • Script Service API to get Macro descriptors: Example of usage: #set ($macroDescriptors = $services.rendering.getMacroDescriptors('xwiki/2.1'). Returns a List<MacroDescriptor>. More information in the Rendering Script Service documentation.

  • Refactored notifications module: For this release, we refactored the xwiki-platform-notifications modules by splitting it into multiple submodules. Some young APIs have been moved to sub packages.

    See XWIKI-14575.

Moved Modules

Upgrades

The following runtime dependencies have been upgraded (they have a different release cycle than XWiki Commons, XWiki Rendering, XWiki Platform and XWiki Enterprise):

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:

BrowserTest Result
Chrome30.pngGoogle Chrome 61Jira Tickets Marked as Fixed in the Release Notes
Firefox30.pngMozilla Firefox 55Not Tested
IE30.pngInternet Explorer 10Not Tested
IE30.pngInternet Explorer 11Not Tested

Here is the list of databases we support and how they have been tested for this release:

DatabaseTest Result
hypersql.pngHyperSQLNot Tested
mysql.pngMySQL 5.7Not Tested
oracle.pngOracle 11.2Jira Tickets Marked as Fixed in the Release Notes
postgresql.pngPostgreSQLNot Tested

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.

Issues specific to XWiki 9.7RC1

  • The Attachment Index doesn't obey the $blacklistedSpaces Velocity variable any more. It uses the hidden page query filter instead, so it follows the "Show hidden pages" settings from the user profile.
  • The old Google WebToolkit based WYSIWYG content editor has been removed and this brought some changes to the web.xml file:
    • the package org.xwiki.wysiwyg.server.filter has been renamed to org.xwiki.wysiwyg.filter
    • the gwtrpc and XWikiService servlets have been removed along with their mappings
    • the mapping for the XWikiContextInitializationFilter has been removed

    You can see all these changes below:

    ... ... @@ -80,7 +80,7 @@
    80 80   <!-- This filter is used to convert the HTML generated by the WYSIWYG editor to wiki syntax -->
    81 81   <filter>
    82 82   <filter-name>ConversionFilter</filter-name>
    83 - <filter-class>org.xwiki.wysiwyg.server.filter.ConversionFilter</filter-class>
    83 + <filter-class>org.xwiki.wysiwyg.filter.ConversionFilter</filter-class>
    84 84   </filter>
    85 85  
    86 86   <!-- A filter that dispatches requests to the right action depending on the button pressed in the editing form. This
    ... ... @@ -94,13 +94,13 @@
    94 94   <!-- This filter is used to initialize the XWiki context before processing a request. -->
    95 95   <filter>
    96 96   <filter-name>XWikiContextInitializationFilter</filter-name>
    97 - <filter-class>org.xwiki.wysiwyg.server.filter.XWikiContextInitializationFilter</filter-class>
    97 + <filter-class>org.xwiki.wysiwyg.filter.XWikiContextInitializationFilter</filter-class>
    98 98   </filter>
    99 99  
    100 100   <!-- This filter is used to initialize the XWiki context before processing a REST request. -->
    101 101   <filter>
    102 102   <filter-name>XWikiXmlRpcContextInitializationFilter</filter-name>
    103 - <filter-class>org.xwiki.wysiwyg.server.filter.XWikiContextInitializationFilter</filter-class>
    103 + <filter-class>org.xwiki.wysiwyg.filter.XWikiContextInitializationFilter</filter-class>
    104 104   <!-- A parameter used to identify the request as a an XML-RPC call -->
    105 105   <init-param>
    106 106   <param-name>mode</param-name>
    ... ... @@ -178,17 +178,9 @@
    178 178   <dispatcher>FORWARD</dispatcher>
    179 179   </filter-mapping>
    180 180  
    181 - <filter-mapping>
    182 - <filter-name>XWikiContextInitializationFilter</filter-name>
    183 - <servlet-name>gwtrpc</servlet-name>
    184 - <dispatcher>REQUEST</dispatcher>
    185 - <dispatcher>INCLUDE</dispatcher>
    186 - <dispatcher>FORWARD</dispatcher>
    187 - </filter-mapping>
    188 -
    189 189   <!-- TODO: This should be fixed. It's not normal that the REST module depends on the WYSIWYG module.
    190 190   "XWikiXmlRpcContextInitializationFilter" points to
    191 - org.xwiki.wysiwyg.server.filter.XWikiContextInitializationFilter -->
    183 + org.xwiki.wysiwyg.filter.XWikiContextInitializationFilter -->
    192 192   <filter-mapping>
    193 193   <filter-name>XWikiXmlRpcContextInitializationFilter</filter-name>
    194 194   <servlet-name>RestletServlet</servlet-name>
    ... ... @@ -280,19 +280,6 @@
    280 280   -->
    281 281   </servlet>
    282 282  
    283 - <!-- This is the entry point for all component-based XWiki GWT services. XWikiService servlet should be dropped
    284 - in favor of this servlet when we completely move to components. -->
    285 - <servlet>
    286 - <servlet-name>gwtrpc</servlet-name>
    287 - <servlet-class>org.xwiki.wysiwyg.server.XWikiRemoteServiceServlet</servlet-class>
    288 - </servlet>
    289 -
    290 - <!-- This is the entry pointy for XWiki GWT services -->
    291 - <servlet>
    292 - <servlet-name>XWikiService</servlet-name>
    293 - <servlet-class>com.xpn.xwiki.gwt.api.server.XWikiServiceImpl</servlet-class>
    294 - </servlet>
    295 -
    296 296   <!-- RESTful API Restlet servlet -->
    297 297   <servlet>
    298 298   <servlet-name>RestletServlet</servlet-name>
    ... ... @@ -332,16 +332,6 @@
    332 332   <url-pattern>/redirect</url-pattern>
    333 333   </servlet-mapping>
    334 334  
    335 - <servlet-mapping>
    336 - <servlet-name>gwtrpc</servlet-name>
    337 - <url-pattern>*.gwtrpc</url-pattern>
    338 - </servlet-mapping>
    339 -
    340 - <servlet-mapping>
    341 - <servlet-name>XWikiService</servlet-name>
    342 - <url-pattern>/XWikiService</url-pattern>
    343 - </servlet-mapping>
    344 -
    345 345   <!-- We override the mime type definition for javascript and css files, as some containers don't
    346 346   provide it, causing problems for javascript files containg velocity code, like
    347 347   fullscreen.js -->

API Breakages

The following APIs were modified since XWiki 9.6:

  • Not a breackage in the context of REST
    • Violation type:
      java.annotation.attributeValueChanged
    • Code:
      ## Old:
      class org.xwiki.extension.repository.xwiki.model.jaxb.ExtensionDependency

      ## New:
      class org.xwiki.extension.repository.xwiki.model.jaxb.ExtensionDependency
  • Young API
    • Violation type:
      java.method.removed
    • Code:
      ## Old:
      method java.util.List<org.xwiki.eventstream.RecordableEventDescriptor> org.xwiki.eventstream.RecordableEventDescriptorManager::getAllRecordableEventDescriptors() throws org.xwiki.eventstream.EventStreamException
  • Young API
    • Violation type:
      java.method.removed
    • Code:
      ## Old:
      method java.util.List<org.xwiki.eventstream.RecordableEventDescriptor> org.xwiki.eventstream.RecordableEventDescriptorManager::getAllRecordableEventDescriptorsAllWikis() throws org.xwiki.eventstream.EventStreamException
  • Young API
    • Violation type:
      java.method.addedToInterface
    • Code:
      ## Old:
      null

      ## New:
      method java.util.List<org.xwiki.eventstream.RecordableEventDescriptor> org.xwiki.eventstream.RecordableEventDescriptorManager::getRecordableEventDescriptors(boolean) throws org.xwiki.eventstream.EventStreamException
  • Young API
    • Violation type:
      java.method.removed
    • Code:
      ## Old:
      method java.util.List<org.xwiki.eventstream.RecordableEventDescriptor> org.xwiki.eventstream.script.EventStreamScriptService::getAllRecordableEventDescriptors() throws org.xwiki.eventstream.EventStreamException
  • Young API
    • Violation type:
      java.method.addedToInterface
    • Code:
      ## Old:
      null

      ## New:
      method int org.xwiki.notifications.NotificationConfiguration::liveNotificationsGraceTime()
  • Young API
    • Violation type:
      java.method.parameterTypeChanged
    • Code:
      ## Old:
      parameter void org.xwiki.notifications.NotificationPreference::<init>(java.lang.String, ===java.lang.String===, boolean)

      ## New:
      parameter void org.xwiki.notifications.NotificationPreference::<init>(java.lang.String, ===boolean===, org.xwiki.notifications.NotificationFormat)
  • Young API
    • Violation type:
      java.method.parameterTypeChanged
    • Code:
      ## Old:
      parameter void org.xwiki.notifications.NotificationPreference::<init>(java.lang.String, java.lang.String, ===boolean===)

      ## New:
      parameter void org.xwiki.notifications.NotificationPreference::<init>(java.lang.String, boolean, ===org.xwiki.notifications.NotificationFormat===)
  • Young API
    • Violation type:
      java.method.parameterTypeChanged
    • Code:
      ## Old:
      parameter void org.xwiki.notifications.NotificationPreference::<init>(java.lang.String, ===java.lang.String===, boolean, org.xwiki.notifications.NotificationFormat)

      ## New:
      parameter void org.xwiki.notifications.NotificationPreference::<init>(java.lang.String, ===boolean===, org.xwiki.notifications.NotificationFormat, java.util.Date)
  • Young API
    • Violation type:
      java.method.parameterTypeChanged
    • Code:
      ## Old:
      parameter void org.xwiki.notifications.NotificationPreference::<init>(java.lang.String, java.lang.String, ===boolean===, org.xwiki.notifications.NotificationFormat)

      ## New:
      parameter void org.xwiki.notifications.NotificationPreference::<init>(java.lang.String, boolean, ===org.xwiki.notifications.NotificationFormat===, java.util.Date)
  • Young API
    • Violation type:
      java.method.parameterTypeChanged
    • Code:
      ## Old:
      parameter void org.xwiki.notifications.NotificationPreference::<init>(java.lang.String, java.lang.String, boolean, ===org.xwiki.notifications.NotificationFormat===)

      ## New:
      parameter void org.xwiki.notifications.NotificationPreference::<init>(java.lang.String, boolean, org.xwiki.notifications.NotificationFormat, ===java.util.Date===)
  • Young API
    • Violation type:
      java.method.removed
    • Code:
      ## Old:
      method java.lang.String org.xwiki.notifications.NotificationPreference::getApplicationId()
  • Young API
    • Violation type:
      java.method.numberOfParametersChanged
    • Code:
      ## Old:
      method java.util.Map<java.lang.String, java.lang.Object> org.xwiki.notifications.NotificationFilter::queryFilterParams(org.xwiki.model.reference.DocumentReference, org.xwiki.notifications.NotificationFormat)

      ## New:
      method java.util.Map<java.lang.String, java.lang.Object> org.xwiki.notifications.NotificationFilter::queryFilterParams(org.xwiki.model.reference.DocumentReference, org.xwiki.notifications.NotificationFormat, java.util.List<java.lang.String>)
  • Young API, moved to org.xwiki.notifications.notifiers.NotificationDisplayer
    • Violation type:
      java.class.removed
    • Code:
      ## Old:
      interface org.xwiki.notifications.NotificationDisplayer
  • Young API, moved to org.xwiki.notifications.filters.NotificationFilter
    • Violation type:
      java.class.removed
    • Code:
      ## Old:
      interface org.xwiki.notifications.NotificationFilter
  • Young API, moved to org.xwiki.notifications.sources.NotificationManager
    • Violation type:
      java.class.removed
    • Code:
      ## Old:
      interface org.xwiki.notifications.NotificationManager
  • Young API, moved to org.xwiki.notifications.preferences.NotificationPreference
    • Violation type:
      java.class.removed
    • Code:
      ## Old:
      class org.xwiki.notifications.NotificationPreference
  • Young API, moved to org.xwiki.notifications.notifiers.NotificationRenderer
    • Violation type:
      java.class.removed
    • Code:
      ## Old:
      interface org.xwiki.notifications.NotificationRenderer
  • Young API, moved to org.xwiki.notifications.notifiers.email.NotificationEmailInterval
    • Violation type:
      java.class.removed
    • Code:
      ## Old:
      enum org.xwiki.notifications.email.NotificationEmailInterval
  • Young API, moved to org.xwiki.notifications.notifiers.email.NotificationEmailRenderer
    • Violation type:
      java.class.removed
    • Code:
      ## Old:
      interface org.xwiki.notifications.email.NotificationEmailRenderer
  • Young API, moved to org.xwiki.notifications.notifiers.rss.NotificationRSSRenderer
    • Violation type:
      java.class.removed
    • Code:
      ## Old:
      interface org.xwiki.notifications.rss.NotificationRSSRenderer
  • Young API, moved to org.xwiki.notifications.notifiers.rss.NotificationRSSManager
    • Violation type:
      java.class.removed
    • Code:
      ## Old:
      interface org.xwiki.notifications.rss.NotificationRSSManager
  • Young API, moved to org.xwiki.notifications.script.NotificationScriptService
    • Violation type:
      java.class.removed
    • Code:
      ## Old:
      class org.xwiki.notifications.script.NotificationScriptService
  • Caused by the move to JavaMail 1.6.0 which introduced generics in APIs
    • Violation type:
      java.method.returnTypeTypeParametersChanged
    • Code:
      ## Old:
      method java.util.Enumeration javax.mail.internet.MimeMessage::getAllHeaderLines() throws javax.mail.MessagingException @ org.xwiki.mail.ExtendedMimeMessage

      ## New:
      method java.util.Enumeration<java.lang.String> javax.mail.internet.MimeMessage::getAllHeaderLines() throws javax.mail.MessagingException @ org.xwiki.mail.ExtendedMimeMessage
  • Caused by the move to JavaMail 1.6.0 which introduced generics in APIs
    • Violation type:
      java.method.returnTypeTypeParametersChanged
    • Code:
      ## Old:
      method java.util.Enumeration javax.mail.internet.MimeMessage::getAllHeaders() throws javax.mail.MessagingException @ org.xwiki.mail.ExtendedMimeMessage

      ## New:
      method java.util.Enumeration<javax.mail.Header> javax.mail.internet.MimeMessage::getAllHeaders() throws javax.mail.MessagingException @ org.xwiki.mail.ExtendedMimeMessage
  • Caused by the move to JavaMail 1.6.0 which introduced generics in APIs
    • Violation type:
      java.method.returnTypeTypeParametersChanged
    • Code:
      ## Old:
      method java.util.Enumeration javax.mail.internet.MimeMessage::getMatchingHeaderLines(java.lang.String[]) throws javax.mail.MessagingException @ org.xwiki.mail.ExtendedMimeMessage

      ## New:
      method java.util.Enumeration<java.lang.String> javax.mail.internet.MimeMessage::getMatchingHeaderLines(java.lang.String[]) throws javax.mail.MessagingException @ org.xwiki.mail.ExtendedMimeMessage
  • Caused by the move to JavaMail 1.6.0 which introduced generics in APIs
    • Violation type:
      java.method.returnTypeTypeParametersChanged
    • Code:
      ## Old:
      method java.util.Enumeration javax.mail.internet.MimeMessage::getMatchingHeaders(java.lang.String[]) throws javax.mail.MessagingException @ org.xwiki.mail.ExtendedMimeMessage

      ## New:
      method java.util.Enumeration<javax.mail.Header> javax.mail.internet.MimeMessage::getMatchingHeaders(java.lang.String[]) throws javax.mail.MessagingException @ org.xwiki.mail.ExtendedMimeMessage
  • Caused by the move to JavaMail 1.6.0 which introduced generics in APIs
    • Violation type:
      java.method.returnTypeTypeParametersChanged
    • Code:
      ## Old:
      method java.util.Enumeration javax.mail.internet.MimeMessage::getNonMatchingHeaderLines(java.lang.String[]) throws javax.mail.MessagingException @ org.xwiki.mail.ExtendedMimeMessage

      ## New:
      method java.util.Enumeration<java.lang.String> javax.mail.internet.MimeMessage::getNonMatchingHeaderLines(java.lang.String[]) throws javax.mail.MessagingException @ org.xwiki.mail.ExtendedMimeMessage
  • Caused by the move to JavaMail 1.6.0 which introduced generics in APIs
    • Violation type:
      java.method.returnTypeTypeParametersChanged
    • Code:
      ## Old:
      method java.util.Enumeration javax.mail.internet.MimeMessage::getNonMatchingHeaders(java.lang.String[]) throws javax.mail.MessagingException @ org.xwiki.mail.ExtendedMimeMessage

      ## New:
      method java.util.Enumeration<javax.mail.Header> javax.mail.internet.MimeMessage::getNonMatchingHeaders(java.lang.String[]) throws javax.mail.MessagingException @ org.xwiki.mail.ExtendedMimeMessage
  • Not a breakage
    • Violation type:
      java.annotation.attributeValueChanged
    • Code:
      ## Old:
      class org.xwiki.rest.model.jaxb.JobStatus

      ## New:
      class org.xwiki.rest.model.jaxb.JobStatus

Credits

The following people have contributed code to this release (sorted alphabetically):

Alexandra Ifrim
Clément Aubin
Ecaterina Moraru (Valica)
Eduard Moraru
Guillaume Delhumeau
Marius Dumitru Florea
Pierre Bondoerffer
Sergiu Dumitriu
Subbu Dantu
Thomas Mortagne
Vincent Massol

Tags:
   

Get Connected