XWiki Enterprise 3.0 Milestone 3

Last modified by Thomas Mortagne on 2023/10/13

Third milestone of the XWiki Enterprise 3.0 version (Roadmap).

New and Noteworthy (since XWiki Enterprise 3.0 Milestone 2)

Dashboard Editing

A visual editor for the dashboards was implemented, accessible in the "Inline Form" edit mode of a page that contains a dashboard. It implements the following features:

  • Gadgets can be dragged by their title bar and moved around in different columns of the dashboard (XWIKI-5939)
    moveGadget.png
  • A new gadget can be added by choosing from the macros in the wiki, using a dialog similar to the WYSIWYG editor macro dialog (XWIKI-5940).
    addGadget.png
  • A gadget can be removed from the dashboard using the gadget settings action (XWIKI-5941).
    removeGadget.png

Gallery macro and office presentation viewer based on it

The Gallery Macro helps you create a simple image gallery where images are displayed using a slide-show view. You can use images from any source, both internal (attached to a wiki page) and external. The gallery macro collects all the images it finds in the macro content. The Office Macro has been improved to use the gallery macro when displaying office presentations:

presentation.png

Search live suggestions

This release introduces the first iteration on a "suggestions as you type" feature for the search box

searchSuggest.png

The suggestions proposed come from several sources, configurable in the Administration UI (category "Search Suggest"). The sources configured by default include "Document name", "Document content", "Attachment name", "Attachment content" and "Users".

User status

Users can now post status messages which will be visible on the main dashboard and on the user profile.

messageStream.png

Users can follow each other's activity streams.

follow.png

Improved macro support in the WYSIWYG content editor

In order to fix XWIKI-5691 and a few related bugs we had to refactor the way macros are displayed inside the rich text area of the WYSIWYG content editor. Along with this we introduced a few improvements in the way users interact with macros. Here's a list of changes:

  • Macros are displayed now 100% like in view mode. Previously we were using a button HTML element to protect the macro output which gave macro output an inherent box layout. This was noticeable especially for multi-line in-line macros. This is fixed now:

    inLineMacro.png

  • Macros that have output are emphasized only when hovered or selected.
  • You can navigate the macro output with the arrow keys. The macro output feels like the rest of the content except that you can't edit it in place.
  • You can copy content from the macro output.
  • Press Enter to edit macro.
  • Press Space to toggle between collapsed and expanded state.
  • Ctrl + Shift + R reloads the macros.
  • Ctrl + Shift + E expands all/selected macros.
  • Ctrl + Shift + C collapses all/selected macros.
  • Ctrl + Shift + M to open the insert macro wizard.

Known issues that we'd like to fix for 3.0 final:

  • You can cut text from macro output.
  • You can drag text into/from macro output.
  • Placing the caret before/after a macro is still tricky.

Rendering and Commons top level projects

Extension Manager

This is an experimental feature at this stage and the UI part is not done yet.

  • Add minimalistic XAR support
    • Install/uninstall/upgradde a xar extension
    • The xar can have infinite number of pages and attachments, it's just limited by the size of each attachment right now until the storage API support fully streamed attachments
    • Very limited upgrade: import add a new version to make sure to not loose anything, there is no real document merging handling
    • Delete pages from old version not in the new version when upgrading a XAR extension
  • Add multiwiki support (install any extension on a specific wiki only)
  • Add extension events

extensionmanager.png

See Extension Module documentation for more details.

Filesystem Attachment Store

The goal of this store is to allow very large documents to be added as page attachments in the wiki.

The FileSystem Attachment Store is now fully implemented (we were missing the Recycle Bin implementation in XWiki Enterprise 3.0 Milestone 2, see XWIKI-6071 - The Recycle Bin allows users to delete attachments and restore them by rolling back the document and does not depend on the database for storage even of deleted attachments). It's still experimental as we need more feedback on how well it works before we can declare it production-ready.

To enable it:

  • Make the following changes to your xwiki.cfg file, under the "Storage" section:
    #-# The attachment storage.
    xwiki.store.attachment.hint=file

    #-# The attachment versioning storage. Use 'void' to disable attachment versioning.
    xwiki.store.attachment.versioning.hint=file

    #-# The attachment recycle bin storage
    xwiki.store.attachment.recyclebin.hint=file
  • Start your wiki and as Admin, open the <your site>/xwiki/bin/edit/XWiki/XWikiPreferences?editor=object page and scroll down until you find Maximum Upload Size, and change that number to something huge like: 99999999999999999. Then click save at the bottom of the page.

Miscellaneous

  • UI improvements
    • XWIKI-5993: Align Copy Page UI on other action features

      copyPage.png

    • XWIKI-5990: Make User Account Activation form conform to the inline form standard
  • Object editor bug fixes
    • XWIKI-5832: Cannot create groups or add members to existing groups using the object editor
  • More PDF export bug fixes
    • XWIKI-5112: Anchor in title breaks PDF export
    • XWIKI-6046: Wiki markup in document titles ends up as visible XML in exported PDFs
  • WYSIWYG content editor bug fixes and improvements
  • Proper rights check for copy page feature. The Copy menu item is now available on any page you have view access. In order to copy the page you must have edit rights on the target space and if the target page already exists you must have delete right on it.
  • Include macro improvements
  • Improved syntax guide
    • XE-839: Add XWiki Syntax 2.1 link specifications to syntax guide
  • Declaration of documents requiring to be saved with particular right (edit, programming, etc.) using an XObject
  • XE-831 Provide a XClass that allow to mark pages that require to be saved by a user with certain rights
  • XE-832 Add XWiki.RequiredRightClass to XE documents that require to be saved with certain rights

Translations

  • The following translations have been updated: de, es, fr, nl, ru, sv.

Known issues

Test Report

You can check the manual test report to learn about what was tested and the results on various browsers.

Backward Compatibility and Migration Notes

General Notes

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,....

You may also want to import the default wiki XAR in order to benefit from the improvements listed above.

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.

XWiki Enterprise 3.0 Milestone 3 specific notes

  • Because of the implementation of XWIKI-5938, when upgrading from 2.x to 3.0, if the dashboard macro was used in its form from 2.5 (with the macro calls in the source of the page), it needs to be manually converted to the objects form.

API Breakages

The following xwiki-core APIs were modified since XWiki Enterprise 2.7 (API breakages in modules that were moved to Rendering or Commons top level projects are not included):

ERROR: 7002: com.xpn.xwiki.api.XWiki: Method 'public java.lang.Object getExoPortalService(java.lang.String)' has been removed
ERROR: 7002: com.xpn.xwiki.api.XWiki: Method 'public java.lang.Object getExoService(java.lang.String)' has been removed
ERROR: 7002: com.xpn.xwiki.api.XWiki: Method 'public java.lang.Object getPortalService(java.lang.String)' has been removed
ERROR: 7002: com.xpn.xwiki.api.XWiki: Method 'public java.lang.Object getService(java.lang.String)' has been removed
ERROR: 7002: com.xpn.xwiki.api.XWikiCompatibilityAspect: Method 'public java.lang.Object ajc$interMethod$com_xpn_xwiki_api_XWikiCompatibilityAspect$com_xpn_xwiki_api_XWiki$getPortalService(com.xpn.xwiki.api.XWiki, java.lang.String)' has been removed
ERROR: 7002: com.xpn.xwiki.api.XWikiCompatibilityAspect: Method 'public java.lang.Object ajc$interMethod$com_xpn_xwiki_api_XWikiCompatibilityAspect$com_xpn_xwiki_api_XWiki$getService(com.xpn.xwiki.api.XWiki, java.lang.String)' has been removed
ERROR: 7002: com.xpn.xwiki.api.XWikiCompatibilityAspect: Method 'public java.lang.Object ajc$interMethodDispatch1$com_xpn_xwiki_api_XWikiCompatibilityAspect$com_xpn_xwiki_api_XWiki$getPortalService(com.xpn.xwiki.api.XWiki, java.lang.String)' has been removed
ERROR: 7002: com.xpn.xwiki.api.XWikiCompatibilityAspect: Method 'public java.lang.Object ajc$interMethodDispatch1$com_xpn_xwiki_api_XWikiCompatibilityAspect$com_xpn_xwiki_api_XWiki$getService(com.xpn.xwiki.api.XWiki, java.lang.String)' has been removed
ERROR: 7002: com.xpn.xwiki.pdf.api.PdfExport: Method 'public byte[] convertToStrictXHtml(byte[], com.xpn.xwiki.XWikiContext)' has been removed
ERROR: 7002: com.xpn.xwiki.pdf.api.PdfExport: Method 'public java.lang.String convertToStrictXHtml(java.lang.String)' has been removed
ERROR: 7002: com.xpn.xwiki.pdf.api.PdfExport: Method 'public byte[] convertXHtmlToXMLFO(byte[], com.xpn.xwiki.XWikiContext)' has been removed
ERROR: 7002: com.xpn.xwiki.pdf.api.PdfExport: Method 'public java.lang.String convertXHtmlToXMLFO(java.lang.String, com.xpn.xwiki.XWikiContext)' has been removed
ERROR: 7005: com.xpn.xwiki.pdf.api.PdfExport: Parameter 3 of 'public void export(com.xpn.xwiki.doc.XWikiDocument, java.io.OutputStream, int, com.xpn.xwiki.XWikiContext)' has changed its type to com.xpn.xwiki.pdf.api.PdfExport$ExportType
ERROR: 7005: com.xpn.xwiki.pdf.api.PdfExport: Parameter 3 of 'public void exportHtml(java.lang.String, java.io.OutputStream, int, com.xpn.xwiki.XWikiContext)' has changed its type to com.xpn.xwiki.pdf.api.PdfExport$ExportType
ERROR: 7002: com.xpn.xwiki.pdf.api.PdfExport: Method 'public void exportXHtml(byte[], java.io.OutputStream, int, com.xpn.xwiki.XWikiContext)' has been removed
ERROR: 7002: org.xwiki.container.Request: Method 'public org.xwiki.url.XWikiURL getURL()' has been removed
ERROR: 7012: org.xwiki.bridge.DocumentModelBridge: Method 'public org.xwiki.rendering.syntax.Syntax getSyntax()' has been added to an interface
ERROR: 7012: org.xwiki.bridge.DocumentModelBridge: Method 'public org.xwiki.rendering.block.XDOM getXDOM()' has been added to an interface
ERROR: 8001: org.xwiki.officeimporter.OfficeImporter: Class org.xwiki.officeimporter.OfficeImporter removed
ERROR: 8001: org.xwiki.officeimporter.OfficeImporterFilter: Class org.xwiki.officeimporter.OfficeImporterFilter removed
ERROR: 7002: org.xwiki.officeimporter.OfficeImporterVelocityBridge: Method 'public java.lang.String getLastErrorMessage()' has been removed
ERROR: 7002: org.xwiki.officeimporter.OfficeImporterVelocityBridge: Method 'public boolean importDocument(byte[], java.lang.String, java.lang.String, java.util.Map)' has been removed
ERROR: 7002: org.xwiki.officeimporter.builder.PresentationBuilder: Method 'public org.xwiki.officeimporter.document.XDOMOfficeDocument build(java.io.InputStream, java.lang.String)' has been removed
ERROR: 7002: org.xwiki.officeimporter.builder.PresentationBuilder: Method 'public org.xwiki.officeimporter.document.XDOMOfficeDocument build(byte[])' has been removed
ERROR: 7002: org.xwiki.officeimporter.builder.XDOMOfficeDocumentBuilder: Method 'public org.xwiki.officeimporter.document.XDOMOfficeDocument build(byte[], org.xwiki.bridge.DocumentName, boolean)' has been removed
ERROR: 7002: org.xwiki.officeimporter.builder.XHTMLOfficeDocumentBuilder: Method 'public org.xwiki.officeimporter.document.XHTMLOfficeDocument build(byte[], org.xwiki.bridge.DocumentName, boolean)' has been removed
ERROR: 7012: org.xwiki.officeimporter.openoffice.OpenOfficeConverter: Method 'public boolean isMediaTypeSupported(java.lang.String)' has been added to an interface
ERROR: 8001: org.xwiki.officeimporter.openoffice.OpenOfficeDocumentConverter: Class org.xwiki.officeimporter.openoffice.OpenOfficeDocumentConverter removed
ERROR: 7002: org.xwiki.officeimporter.openoffice.OpenOfficeManager: Method 'public org.artofsolving.jodconverter.OfficeDocumentConverter getDocumentConverter()' has been removed
ERROR: 7002: org.xwiki.officeimporter.splitter.XDOMOfficeDocumentSplitter: Method 'public java.util.Map split(org.xwiki.officeimporter.document.XDOMOfficeDocument, int[], java.lang.String, org.xwiki.bridge.DocumentName)' has been removed
ERROR: 7012: org.xwiki.extension.CoreExtension: Method 'public boolean isGuessed()' has been added to an interface
ERROR: 7006: org.xwiki.extension.Extension: Return type of method 'public java.lang.String getId()' has been changed to org.xwiki.extension.ExtensionId
ERROR: 7002: org.xwiki.extension.Extension: Method 'public java.lang.String getVersion()' has been removed
ERROR: 7002: org.xwiki.extension.ExtensionManager: Method 'public int coundAvailableExtensions()' has been removed
ERROR: 7002: org.xwiki.extension.ExtensionManager: Method 'public int coundInstalledExtensions()' has been removed
ERROR: 7002: org.xwiki.extension.ExtensionManager: Method 'public java.util.List getAvailableExtensions(int, int)' has been removed
ERROR: 7002: org.xwiki.extension.ExtensionManager: Method 'public java.util.List getInstalledExtensions(int, int)' has been removed
ERROR: 7002: org.xwiki.extension.ExtensionManager: Method 'public org.xwiki.extension.LocalExtension installExtension(org.xwiki.extension.ExtensionId)' has been removed
ERROR: 7004: org.xwiki.extension.ExtensionManager: In method 'public org.xwiki.extension.Extension resolveExtension(org.xwiki.extension.ExtensionId)' the number of arguments has changed
ERROR: 7002: org.xwiki.extension.ExtensionManager: Method 'public void uninstallExtension(java.lang.String)' has been removed
ERROR: 7012: org.xwiki.extension.LocalExtension: Method 'public java.util.Collection getNamespaces()' has been added to an interface
ERROR: 7002: org.xwiki.extension.LocalExtension: Method 'public boolean isEnabled()' has been removed
ERROR: 7012: org.xwiki.extension.LocalExtension: Method 'public boolean isInstalled()' has been added to an interface
ERROR: 7012: org.xwiki.extension.LocalExtension: Method 'public boolean isInstalled(java.lang.String)' has been added to an interface
ERROR: 7004: org.xwiki.extension.handler.ExtensionHandler: In method 'public void install(org.xwiki.extension.LocalExtension)' the number of arguments has changed
ERROR: 7004: org.xwiki.extension.handler.ExtensionHandler: In method 'public void uninstall(org.xwiki.extension.LocalExtension)' the number of arguments has changed
ERROR: 7004: org.xwiki.extension.handler.ExtensionHandler: In method 'public void upgrade(org.xwiki.extension.LocalExtension, org.xwiki.extension.LocalExtension)' the number of arguments has changed
ERROR: 7004: org.xwiki.extension.handler.ExtensionHandlerManager: In method 'public void install(org.xwiki.extension.LocalExtension)' the number of arguments has changed
ERROR: 7004: org.xwiki.extension.handler.ExtensionHandlerManager: In method 'public void uninstall(org.xwiki.extension.LocalExtension)' the number of arguments has changed
ERROR: 7004: org.xwiki.extension.handler.ExtensionHandlerManager: In method 'public void upgrade(org.xwiki.extension.LocalExtension, org.xwiki.extension.LocalExtension)' the number of arguments has changed
ERROR: 7006: org.xwiki.extension.repository.CoreExtensionRepository: Return type of method 'public java.util.List getCoreExtensions()' has been changed to java.util.Collection
ERROR: 7006: org.xwiki.extension.repository.ExtensionRepository: Return type of method 'public java.util.List getExtensions(int, int)' has been changed to java.util.Collection
ERROR: 7004: org.xwiki.extension.repository.LocalExtensionRepository: In method 'public java.util.List getBackwardDependencies(java.lang.String)' the number of arguments has changed
ERROR: 7006: org.xwiki.extension.repository.LocalExtensionRepository: Return type of method 'public java.util.List getBackwardDependencies(java.lang.String)' has been changed to java.util.Collection
ERROR: 7012: org.xwiki.extension.repository.LocalExtensionRepository: Method 'public org.xwiki.extension.LocalExtension getInstalledExtension(java.lang.String, java.lang.String)' has been added to an interface
ERROR: 7012: org.xwiki.extension.repository.LocalExtensionRepository: Method 'public java.util.Collection getInstalledExtensions(java.lang.String)' has been added to an interface
ERROR: 7012: org.xwiki.extension.repository.LocalExtensionRepository: Method 'public java.util.Collection getInstalledExtensions()' has been added to an interface
ERROR: 7002: org.xwiki.extension.repository.LocalExtensionRepository: Method 'public org.xwiki.extension.LocalExtension getLocalExtension(java.lang.String)' has been removed
ERROR: 7006: org.xwiki.extension.repository.LocalExtensionRepository: Return type of method 'public java.util.List getLocalExtensions()' has been changed to java.util.Collection
ERROR: 7004: org.xwiki.extension.repository.LocalExtensionRepository: In method 'public org.xwiki.extension.LocalExtension installExtension(org.xwiki.extension.Extension, boolean)' the number of arguments has changed
ERROR: 7004: org.xwiki.extension.repository.LocalExtensionRepository: In method 'public void uninstallExtension(org.xwiki.extension.LocalExtension)' the number of arguments has changed

The following XWiki GWT APIs were modified since XWiki Enterprise 2.7:

ERROR: 6004: org.xwiki.gwt.dom.client.Style: Changed type of field BACKGROUND_COLOR from java.lang.String to org.xwiki.gwt.dom.client.Property
ERROR: 6011: org.xwiki.gwt.user.client.ui.rta.RichTextArea: Field DISABLED has been removed, but it was previously a constant
ERROR: 7002: org.xwiki.gwt.wysiwyg.client.RichTextEditorController: Method 'protected void initTextArea()' has been removed
ERROR: 7012: org.xwiki.gwt.wysiwyg.client.Strings: Method 'public java.lang.String gadget()' has been added to an interface
ERROR: 7012: org.xwiki.gwt.wysiwyg.client.Strings: Method 'public java.lang.String gadgetInsertActionLabel()' has been added to an interface
ERROR: 7012: org.xwiki.gwt.wysiwyg.client.Strings: Method 'public java.lang.String gadgetInsertDialogCaption()' has been added to an interface
ERROR: 7012: org.xwiki.gwt.wysiwyg.client.Strings: Method 'public java.lang.String gadgetInsertDialogTitle()' has been added to an interface
ERROR: 7012: org.xwiki.gwt.wysiwyg.client.Strings: Method 'public java.lang.String gadgetNoGadgetSelected()' has been added to an interface
ERROR: 7012: org.xwiki.gwt.wysiwyg.client.Strings: Method 'public java.lang.String gadgetTitleDescription()' has been added to an interface
ERROR: 7012: org.xwiki.gwt.wysiwyg.client.Strings: Method 'public java.lang.String gadgetTitleLabel()' has been added to an interface
ERROR: 7012: org.xwiki.gwt.wysiwyg.client.Strings: Method 'public java.lang.String macroCollapseAllShortcutKeyLabel()' has been added to an interface
ERROR: 7012: org.xwiki.gwt.wysiwyg.client.Strings: Method 'public java.lang.String macroCollapseShortcutKeyLabel()' has been added to an interface
ERROR: 7012: org.xwiki.gwt.wysiwyg.client.Strings: Method 'public java.lang.String macroEditShortcutKeyLabel()' has been added to an interface
ERROR: 7012: org.xwiki.gwt.wysiwyg.client.Strings: Method 'public java.lang.String macroExpandAllShortcutKeyLabel()' has been added to an interface
ERROR: 7012: org.xwiki.gwt.wysiwyg.client.Strings: Method 'public java.lang.String macroExpandShortcutKeyLabel()' has been added to an interface
ERROR: 7012: org.xwiki.gwt.wysiwyg.client.Strings: Method 'public java.lang.String macroInsertShortcutKeyLabel()' has been added to an interface
ERROR: 7012: org.xwiki.gwt.wysiwyg.client.Strings: Method 'public java.lang.String macroRefreshShortcutKeyLabel()' has been added to an interface
ERROR: 6011: org.xwiki.gwt.wysiwyg.client.plugin.color.ColorCell: Field SELECTED_STYLE_NAME has been removed, but it was previously a constant
ERROR: 7002: org.xwiki.gwt.wysiwyg.client.plugin.color.ColorPicker: Method 'public java.lang.String convertToHex(java.lang.String)' has been removed
ERROR: 7002: org.xwiki.gwt.wysiwyg.client.plugin.color.ColorPlugin: Method 'protected org.xwiki.gwt.user.client.ui.rta.cmd.Executable getBackColorExecutable()' has been removed
ERROR: 8001: org.xwiki.gwt.wysiwyg.client.plugin.color.MozillaColorPlugin: Class org.xwiki.gwt.wysiwyg.client.plugin.color.MozillaColorPlugin removed
ERROR: 8001: org.xwiki.gwt.wysiwyg.client.plugin.color.exec.BackColorExecutable: Class org.xwiki.gwt.wysiwyg.client.plugin.color.exec.BackColorExecutable removed
ERROR: 8001: org.xwiki.gwt.wysiwyg.client.plugin.color.exec.HiliteColorExecutable: Class org.xwiki.gwt.wysiwyg.client.plugin.color.exec.HiliteColorExecutable removed
ERROR: 7004: org.xwiki.gwt.wysiwyg.client.plugin.macro.MacroDisplayer: In method 'public MacroDisplayer()' the number of arguments has changed
ERROR: 7004: org.xwiki.gwt.wysiwyg.client.plugin.macro.MacroDisplayer: In method 'protected org.xwiki.gwt.dom.client.Element createReadOnlyBox()' the number of arguments has changed
ERROR: 7002: org.xwiki.gwt.wysiwyg.client.plugin.macro.MacroDisplayer: Method 'protected java.lang.String getMacroContainerTagName()' has been removed
ERROR: 7002: org.xwiki.gwt.wysiwyg.client.plugin.macro.MacroDisplayer: Method 'public void setTextArea(org.xwiki.gwt.user.client.ui.rta.RichTextArea)' has been removed
ERROR: 4001: org.xwiki.gwt.wysiwyg.client.plugin.macro.MacroPlugin: Removed com.google.gwt.event.dom.client.DoubleClickHandler from the set of implemented interfaces
ERROR: 4001: org.xwiki.gwt.wysiwyg.client.plugin.macro.MacroPlugin: Removed com.google.gwt.event.shared.EventHandler from the set of implemented interfaces
ERROR: 7002: org.xwiki.gwt.wysiwyg.client.plugin.macro.MacroPlugin: Method 'public void onDoubleClick(com.google.gwt.event.dom.client.DoubleClickEvent)' has been removed
ERROR: 4001: org.xwiki.gwt.wysiwyg.client.plugin.macro.MacroSelector: Removed com.google.gwt.event.dom.client.MouseDownHandler from the set of implemented interfaces
ERROR: 7002: org.xwiki.gwt.wysiwyg.client.plugin.macro.MacroSelector: Method 'public void onMouseDown(com.google.gwt.event.dom.client.MouseDownEvent)' has been removed
ERROR: 8001: org.xwiki.gwt.wysiwyg.client.plugin.submit.exec.EnableExecutable: Class org.xwiki.gwt.wysiwyg.client.plugin.submit.exec.EnableExecutable removed
ERROR: 8001: org.xwiki.gwt.wysiwyg.client.plugin.submit.exec.ResetExecutable: Class org.xwiki.gwt.wysiwyg.client.plugin.submit.exec.ResetExecutable removed
Tags:
   

Get Connected