Release Notes for XWiki 9.7-rc-1

Version 12.2 by Clément Aubin on 2017/08/23

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 notification globally on an application.

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.

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: 

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.

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):

aifrimxwiki
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