Plone 6.0.6 released

Release notes for Plone 6.0.6

If you want to jump straight in, here are two important links:

Highlights

Major changes since 6.0.5:

  • plonetheme.barceloneta and plone.staticresources: Update to Bootstrap 5.3 release. Adopt colormode related variables from Bootstrap 5.3.
    You may need to update your custom themes. See note below.
  • plone.restapi: Added @site and @navroot endpoints.
  • plone.app.relationfield: Removed unneeded dependency on plone.app.dexterity.
    This fixes a cyclic dependency: plone.app.dexterity depends on plone.app.layout which depends on plone.app.relationfield.
  • plone.app.locales: updates for eu, es, pt_BR.
  • plone.volto: Two bugfixes for migration from Classic UI to Volto:
    • Let the migration-form @@migrate_to_volto transform richtext to slate-blocks by default.
    • Fix value of unchecked checkboxes in migrate_to_volto.

Volto frontend

The default frontend for new Plone 6 sites is Volto. Latest release is 16.21.2. See the changelog.
Note that this is a JavaScript frontend that you need to run in a separate process with NodeJS.

Also, existing Plone sites need some or more extensive changes to be upgraded before they can use the Volto Frontend. Please read the guide on migrating from Plone Classic UI to Volto.

Classic UI

The HTML based and server side rendered UI that was present in Plone 5.2 and earlier major Plone releases is still available and has also been updated and improved upon in Plone 6. Our documentation now refers to this frontend as 'Classic UI'. Support for Classic UI is especially relevant for existing Plone sites which for whatever reason or requirements are not yet ready to be upgraded to the Volto frontend.

Updating custom themes

Now that Bootstrap 5.3 is available, you may need to update your custom theme for Classic UI.
This is not caused by Plone 6.0.6 moving to Bootstrap 5.3.
You could stay on Plone 6.0.5, and still have a problem with your custom theme, simply because Bootstrap 5.3 is available.

The problem is described in this bobtemplates.plone issue.
Let's assume that a while ago you have followed the theming training to create a theme based on the standard Barceloneta theme. All is working fine.
But now you want to have a fresh install, so you remove node_modules and package-lock.json.
You run npm install, still fine.
Then you run npm run build and get an error:

Error: Undefined variable.
   ╷
55 │     "primary": $primary-text-emphasis-dark,

The problem here is that you get Bootstrap 5.3, but your theme expects 5.2.
There are two ways to solve this.

If you want to keep using Bootstrap 5.2:

  • Edit package.json and let the dependencies contain this: "@plone/plonetheme-barceloneta-base": "~3.0.3".
    This version has a proper pin so you stay on Bootstrap 5.2.
  • Run rm -rf node_modules package-lock.json && npm install && npm run build.
  • If you want to create a new theme based on Bootstrap 5.2, make sure to use bobtemplates.plone==6.2.7.

If you are fine with upgrading to Bootstrap 5.3:

  • Edit package.json and let the dependencies contain this: "@plone/plonetheme-barceloneta-base": "~3.1.0".
  • In styles/theme.scss add two imports in part 3:
    • After variables.colors.plone add this line: @import "@plone/plonetheme-barceloneta-base/scss/variables.colors.dark.plone";
    • After bootstrap/scss/variables add this line: @import "bootstrap/scss/variables-dark";
  • Run rm -rf node_modules package-lock.json && npm install && npm run build.
  • If you want to create a new theme based on Bootstrap 5.3, make sure to use bobtemplates.plone>=6.3.

Python compatibility

This release supports Python 3.8, 3.9, 3.10, and 3.11.

pip, buildout, setuptools

In Plone core we use these versions to install Plone:

pip==23.1.2
setuptools==67.8.0
wheel==0.40.0
zc.buildout==3.0.1

In general you are free to use whatever versions work for you, but these worked for us.

Note that setuptools 66 or higher is more strict with what versions it can recognize. If you run pip or buildout and it suddenly cannot find a package with a non-standard version, then this may be the cause.

When you install Plone with pip on Python 3.11, you may want to set environment variable _PIP_USE_IMPORTLIB_METADATA=0.
This can give a large performance increase when reinstalling packages.
Or wait on a new pip version with a fix.
See pip issue 12079.

Installation

For installation instructions, see the documentation.

Issues

If you find any issues, please report them in the main issue tracker.

6 Likes

I updated a site (with buildout, so I am not sure if it happens only here)

  1. The calendar/DateWidget looks broken

  1. There is a strange (?) javascript warning.

Can anyone confirm and I will add it to issue tracker

@@syndication-controlpanel

Result error, and I don't know which update resulted this since I didn't do a test till now.

Here is the full error message:

Traceback (innermost last):
Module ZPublisher.WSGIPublisher, line 181, in transaction_pubevents
Module ZPublisher.WSGIPublisher, line 390, in publish_module
Module ZPublisher.WSGIPublisher, line 285, in publish
Module ZPublisher.mapply, line 85, in mapply
Module ZPublisher.WSGIPublisher, line 68, in call_object
Module plone.z3cform.layout, line 61, in call
Module plone.z3cform.layout, line 45, in update
Module Products.CMFPlone.controlpanel.browser.syndication, line 53, in update
Module plone.z3cform.fieldsets.extensible, line 62, in update
Module plone.z3cform.patch, line 31, in GroupForm_update
Module z3c.form.group, line 132, in update
Module z3c.form.form, line 129, in updateWidgets
Module plone.app.registry.browser.controlpanel, line 45, in getContent
Module plone.registry.registry, line 71, in forInterface
KeyError: 'Interface plone.base.interfaces.syndication.ISiteSyndicationSettings defines a field allowed, for which there is no record.'

Synducation Properties is empty and cannot be enable.

I fix this with an profile, but if you have custom settings, this will be overridden with this fix:

  <genericsetup:registerProfile
      name="fix_registry"
      title="Fix registry settings"
      description="Remove unused Registry Entries, Reinstall new Entries for SiteSyndication"
      provides="Products.GenericSetup.interfaces.EXTENSION"
      for="Products.CMFPlone.interfaces.IMigratingPloneSiteRoot"
      directory="profiles/fix-registry"
      />
<?xml version="1.0" encoding="utf-8"?>
<registry>

  <!-- uninstall old registry settings -->
  <record name="Products.CMFPlone.interfaces.syndication.ISiteSyndicationSettings.allowed"
          remove="True"
  />
  <record name="Products.CMFPlone.interfaces.syndication.ISiteSyndicationSettings.allowed_feed_types"
          remove="True"
  />
  <record name="Products.CMFPlone.interfaces.syndication.ISiteSyndicationSettings.default_enabled"
          remove="True"
  />
  <record name="Products.CMFPlone.interfaces.syndication.ISiteSyndicationSettings.max_items"
          remove="True"
  />
  <record name="Products.CMFPlone.interfaces.syndication.ISiteSyndicationSettings.render_body"
          remove="True"
  />
  <record name="Products.CMFPlone.interfaces.syndication.ISiteSyndicationSettings.search_rss_enabled"
          remove="True"
  />
  <record name="Products.CMFPlone.interfaces.syndication.ISiteSyndicationSettings.show_author_info"
          remove="True"
  />
  <record name="Products.CMFPlone.interfaces.syndication.ISiteSyndicationSettings.show_syndication_button"
          remove="True"
  />
  <record name="Products.CMFPlone.interfaces.syndication.ISiteSyndicationSettings.show_syndication_link"
          remove="True"
  />

  <!-- install new registry settings -->
  <records interface="plone.base.interfaces.syndication.ISiteSyndicationSettings" />

</registry>

Thanks for your solution. Can you point me to a link about how I can use these codes? Many thanks.

Have you a custom addon?

  1. DateTime, Date and Time field where refactored to use HTML5 default field types. pat-datetime-picker also skips its JS calendar if native browser support is available. So this looks like your browser native picker (obviously Safari). You can also check the current behavior on the demo page demo.plone.org ... EDIT: theres an issue about datepicker support here pat-datetime-picker relies on browser language configuration instead of Plone configuration · Issue #1328 · plone/mockup · GitHub

  2. The JS warning can be safely ignored since we use a custom patched select2 module ...

No... so I have to start learning to create one?

I opened this issue two weeks ago, but did not have time yet to work on it, or wrap my head around what the correct solution would be.

If you don't want to create a custom add-on to update these settings, I have a workaround in that issue:
A way to fix it in a site is to create an xml file like this and upload it in the configuration registry on the Import tab:

<?xml version="1.0"?>
<registry>
  <records interface="plone.base.interfaces.syndication.ISiteSyndicationSettings" />
</registry>

Then the errors are gone, but the old settings have not been taken over.

not mandatory, you can import the registry via Zope Management Interface

  • zmi -> portal_setup -> Advanced Import Tab -> Select a profile by id
  • select Current base profile (profile-Products.CMFPlone:plone)
  • check only the option Configuration Registry (Plone)

But be aware, this override and reset all you custom registry settings of Plone. Please Backup your Database before you go this way. I would not do it that way,

@mauritsvanrees way is definitly safer :wink:

Thx @mauritsvanrees @1letter

Thanks. I used a 'bit old version of Safari', but it is not 'very practical' (amongst onther things, it does not close the picker after one has selected a date).

That said: I see that the same happens on https://classic.demo.plone.org

On Firefox it looks good

Slightly off topic: I tried some other 'pat stuff', and it looks like pat-moment is not working anymore (for example
class="pat-moment" data-pat-moment="format:relative;

Is this 'related'?

You see the default enabled patterns here: mockup/src/patterns.js at master · plone/mockup · GitHub

The wrapper for Momentjs would be pat-display-time Patterns/src/pat/display-time/display-time.js at master · Patternslib/Patterns · GitHub

I assume that mean that all sites that are updated to Plone 6 Classic will need to change all templates with 'pat-moment' to pat-display-time (?)

yes. pat-moment was created in mockup and got removed during ES6 update in favor of already existing patternslib's pat-display-time.

1 Like

Is there some documentation of which 'syntax' to use for plone?

For example <time class="pat-display-time" datetime="${context/created}"> does not work

Take a look at the patternslib docu Display time — Patterns

EDIT: change your datetime value to ${python:context.created().ISO()}

1 Like

Thanks. For reference: If it is just Date (not time) it can be for example (isoformat instead of ISO):

<time class="pat-display-time" 
datetime="${python:context.initial_due_date.isoformat()}" 
data-pat-display-time="output-format: dddd Do MMMM YYYY">

( which returns Saturday 24th June 2023 )

I updated my existing theme to Bootstrap 5.3

in my manifest.cfg having a theme parameter

absolute_url = context/absolute_url

now causes:

Traceback (most recent call last):
  File "/usr/local/Plone6/lib/python3.8/site-packages/Products/PageTemplates/Expressions.py", line 105, in boboAwareZopeTraverse
    validate(object, object, name, found)
AccessControl.unauthorized.Unauthorized: You are not allowed to access 'absolute_url' in this context

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/Plone6/lib/python3.8/site-packages/plone/transformchain/transformer.py", line 50, in __call__
    newResult = handler.transformIterable(result, encoding)
  File "/usr/local/Plone6/lib/python3.8/site-packages/plone/app/theming/transform.py", line 177, in transformIterable
    params = prepareThemeParameters(
  File "/usr/local/Plone6/lib/python3.8/site-packages/plone/app/theming/utils.py", line 719, in prepareThemeParameters
    params[name] = quote_param(expression(expressionContext))
  File "/usr/local/Plone6/lib/python3.8/site-packages/zope/tales/expressions.py", line 250, in __call__
    return self._eval(econtext)
  File "/usr/local/Plone6/lib/python3.8/site-packages/Products/PageTemplates/Expressions.py", line 213, in _eval
    ob = self._subexprs[-1](econtext)
  File "/usr/local/Plone6/lib/python3.8/site-packages/zope/tales/expressions.py", line 153, in _eval
    ob = self._traverser(ob, element, econtext)
  File "/usr/local/Plone6/lib/python3.8/site-packages/Products/PageTemplates/Expressions.py", line 109, in boboAwareZopeTraverse
    raise NotFound(name)
zExceptions.NotFound: absolute_url
[6] > /usr/local/Plone6/lib/python3.8/site-packages/Products/PageTemplates/Expressions.py(109)boboAwareZopeTraverse()
-> raise NotFound(name)

however, having this in the parameters seems to be OK:

parent_url = context/aq_parent/absolute_url

Is absolute_url now a reserved keyword?

EDIT: answering my own question, not a reserved keyword, this also fails:

abs_url = context/absolute_url