plone / Products.CMFPlone

The core of the Plone content management system
https://plone.org
GNU General Public License v2.0
249 stars 188 forks source link

PloneControlpanel should use extended expression context provided by PloneBaseTool #3288

Open thomasmassmann opened 3 years ago

thomasmassmann commented 3 years ago

PROBLEM REPORT

The PloneControlpanel uses the standard expression context provided by Products.CMFCore.Expression.createExprContext. The available keys are:

    data = {
        'object_url':   object_url,
        'folder_url':   folder.absolute_url(),
        'portal_url':   portal.absolute_url(),
        'object':       object,
        'folder':       folder,
        'portal':       portal,
        'nothing':      None,
        'request':      getattr(portal, 'REQUEST', None),
        'modules':      SecureModuleImporter,
        'member':       member,
        'here':         object,
        }

This is limiting the available actions and conditions in situations where a different navigation root other than the Plone site is used (e.g. multi-lingual sites, sub sites using lineage).

The PloneBaseTool already extends the expression context with new keys:

Other tools, such as the ActionsTool, use the extended expression context.

What I did:

Change the “Action” for the site control panel configlet from string:${portal_url}/@@site-controlpanel to string:${plone_portal_state/navigation_root_url}/@@site-controlpanel

What I expect to happen:

The @@overview-controlpanel view renders the site configlet with the portal url.

What actually happened:

A traceback with:

KeyError: 'plone_portal_state'

What version of Plone/ Addons I am using:

Plone 5.2.4 without any add-ons.

thomasmassmann commented 3 years ago

We already patched the enumConfiglets method in PloneControlpanel to use the correct expression context. The patch including tests can be found at https://github.com/cusyio/cusy.patches.cmfplone/blob/main/src/cusy/patches/cmfplone/controlpanel.py and https://github.com/cusyio/cusy.patches.cmfplone/blob/main/src/cusy/patches/cmfplone/tests/test_controlpanel.py.

thomasmassmann commented 3 years ago

Todo:

Optional backports (will there be any new releases for 5.0.x or 5.1.x?):