diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 7303350..4cee50b 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -11,23 +11,20 @@ jobs: strategy: fail-fast: false matrix: - python: - - "3.8" - - "3.11" plone: - - "6.0-dev" - - "6.1-dev" + - ["3.11", "6.0-dev"] + - ["3.12", "6.1-dev"] steps: - uses: actions/checkout@v4 - - name: Setup Plone ${{ matrix.plone }} with Python ${{ matrix.python }} + - name: Setup Plone ${{ matrix.plone[1] }} with Python ${{ matrix.plone[0] }} id: setup uses: plone/setup-plone@v2.0.0 with: - python-version: ${{ matrix.python }} - plone-version: ${{ matrix.plone }} - + python-version: ${{ matrix.plone[0] }} + plone-version: ${{ matrix.plone[1] }} + setuptools-version: "74.0.0" - name: Install package run: | make VENV=off install diff --git a/.gitignore b/.gitignore index 486392f..fc71f6a 100644 --- a/.gitignore +++ b/.gitignore @@ -46,6 +46,7 @@ local.cfg /venv/ .installed.txt +forest.* ## # Add extra configuration options in .meta.toml: diff --git a/.meta.toml b/.meta.toml index f9a6aa2..088c323 100644 --- a/.meta.toml +++ b/.meta.toml @@ -3,7 +3,7 @@ # See the inline comments on how to expand/tweak this configuration file [meta] template = "default" -commit-id = "a89af8f2" +commit-id = "5d22fbf8" [github] jobs = [ @@ -13,3 +13,8 @@ jobs = [ "release_ready", "circular", ] + +[gitignore] +extra_lines = """ +forest.* +""" diff --git a/CHANGES.rst b/CHANGES.rst index 8553602..6c873a5 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,7 +4,8 @@ Changelog 3.1.4 (unreleased) ------------------ -- Nothing changed yet. +- Fix existing_content tile for Plone 6.1 without portal_properties. + [pbauer] 3.1.3 (2024-04-17) diff --git a/pyproject.toml b/pyproject.toml index 668eda2..16e4e0a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -83,6 +83,7 @@ Zope = [ 'Products.CMFCore', 'Products.CMFDynamicViewFTI', ] python-dateutil = ['dateutil'] +pytest-plone = ['pytest', 'zope.pytestlayer', 'plone.testing', 'plone.app.testing'] ## # Add extra configuration options in .meta.toml: diff --git a/setup.py b/setup.py index 8cab4af..f7bdeab 100644 --- a/setup.py +++ b/setup.py @@ -40,9 +40,9 @@ install_requires=[ "plone.app.blocks", "plone.app.tiles>=4.0.0", + "plone.base", "plone.subrequest", "plone.tiles>=1.8.0", - "Products.CMFPlone>=6.0.0", "requests", "setuptools", "Zope", diff --git a/src/plone/app/standardtiles/contentlisting.py b/src/plone/app/standardtiles/contentlisting.py index cf17a65..3c378eb 100644 --- a/src/plone/app/standardtiles/contentlisting.py +++ b/src/plone/app/standardtiles/contentlisting.py @@ -3,12 +3,12 @@ from plone.app.standardtiles import PloneMessageFactory as _ from plone.app.z3cform.widget import QueryStringFieldWidget from plone.autoform.directives import widget +from plone.base.utils import get_top_request from plone.registry.interfaces import IRegistry from plone.supermodel.model import Schema from plone.tiles import Tile from plone.tiles.interfaces import ITileType from Products.CMFCore.interfaces import IFolderish -from Products.CMFPlone.utils import get_top_request from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile from z3c.form.interfaces import IValue from z3c.form.util import getSpecification diff --git a/src/plone/app/standardtiles/existingcontent.py b/src/plone/app/standardtiles/existingcontent.py index b6c6471..75b0095 100644 --- a/src/plone/app/standardtiles/existingcontent.py +++ b/src/plone/app/standardtiles/existingcontent.py @@ -8,12 +8,12 @@ from plone.app.standardtiles import PloneMessageFactory as _ from plone.app.z3cform.widget import RelatedItemsFieldWidget from plone.autoform import directives as form +from plone.base.utils import safe_text from plone.memoize.view import memoize from plone.registry.interfaces import IRegistry from plone.supermodel import model from plone.tiles import Tile from plone.uuid.interfaces import IUUID -from Products.CMFPlone.utils import safe_unicode from repoze.xmliter.utils import getHTMLSerializer from z3c.form import validator from zExceptions import Unauthorized @@ -124,7 +124,7 @@ class IExistingContentTile(model.Schema): view_template = schema.Choice( title=_("Display mode"), - source=_("Available Content Views"), + source="Available Content Views", required=True, ) @@ -174,8 +174,10 @@ def content_view(self): def content_view_name(self): context = self.content_context if context is not None: - view_name = self.data.get("view_template") or context.getLayout() - return view_name + if self.data.get("view_template") == "default_layout": + return context.getLayout() + else: + return self.data.get("view_template") or context.getLayout() return "" _marker = dict() @@ -221,7 +223,7 @@ def item_panels(self): # after element is closed until last # element of the root tree. child_copy = copy.deepcopy(child) - child_html = safe_unicode(serializer(child_copy)) + child_html = safe_text(serializer(child_copy)) panel_html.append(child_html) panel_html = "".join(panel_html) result.append(panel_html) @@ -269,7 +271,9 @@ def availableContentViewsVocabulary(context): registry = getUtility(IRegistry) listing_views = registry.get("plone.app.standardtiles.content_views", {}) or {} - voc = [SimpleVocabulary.createTerm("", "", "Default view")] + voc = [ + SimpleVocabulary.createTerm("default_layout", "default_layout", "Default view") + ] for key, label in sorted(listing_views.items(), key=itemgetter(1)): voc.append(SimpleVocabulary.createTerm(key, key, label)) return SimpleVocabulary(voc) diff --git a/src/plone/app/standardtiles/html.py b/src/plone/app/standardtiles/html.py index 1bd6a08..4e02ecf 100644 --- a/src/plone/app/standardtiles/html.py +++ b/src/plone/app/standardtiles/html.py @@ -1,11 +1,11 @@ from plone.app.standardtiles import _PMF as _ +from plone.base.utils import safe_text from plone.subrequest import ISubRequest from plone.supermodel.directives import primary from plone.supermodel.model import Schema from plone.tiles import Tile from plone.tiles.directives import ignore_querystring from Products.CMFCore.utils import getToolByName -from Products.CMFPlone.utils import safe_unicode from zope import schema @@ -34,11 +34,11 @@ def __call__(self): transforms = getToolByName(self.context, "portal_transforms") data = transforms.convertTo( "text/x-html-safe", - safe_unicode(content), + safe_text(content), mimetype="text/html", context=self.context, ) content = data.getData() else: content = "

" - return f"{safe_unicode(content)}" + return f"{safe_text(content)}" diff --git a/src/plone/app/standardtiles/navigation.py b/src/plone/app/standardtiles/navigation.py index b002c1d..6a8cd91 100644 --- a/src/plone/app/standardtiles/navigation.py +++ b/src/plone/app/standardtiles/navigation.py @@ -8,6 +8,7 @@ from plone.app.standardtiles import PloneMessageFactory as _ from plone.app.vocabularies.catalog import CatalogSource as CatalogSourceBase from plone.base.defaultpage import is_default_page +from plone.base.interfaces import INonStructuralFolder from plone.i18n.normalizer.interfaces import IIDNormalizer from plone.memoize.instance import memoize from plone.supermodel.model import Schema @@ -18,7 +19,6 @@ from Products.CMFDynamicViewFTI.interfaces import IBrowserDefault from Products.CMFPlone.browser.navtree import NavtreeQueryBuilder from Products.CMFPlone.browser.navtree import SitemapNavtreeStrategy -from Products.CMFPlone.interfaces import INonStructuralFolder from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile from z3c.form.interfaces import IValue from z3c.form.util import getSpecification diff --git a/src/plone/app/standardtiles/setuphandlers.py b/src/plone/app/standardtiles/setuphandlers.py index bb7b795..2653769 100644 --- a/src/plone/app/standardtiles/setuphandlers.py +++ b/src/plone/app/standardtiles/setuphandlers.py @@ -1,5 +1,5 @@ +from plone.base.interfaces import INonInstallable from plone.registry.interfaces import IRegistry -from Products.CMFPlone.interfaces import INonInstallable from zope.component import getUtility from zope.interface import implementer diff --git a/src/plone/app/standardtiles/sitemap.py b/src/plone/app/standardtiles/sitemap.py index 771b76f..ec2547e 100644 --- a/src/plone/app/standardtiles/sitemap.py +++ b/src/plone/app/standardtiles/sitemap.py @@ -1,8 +1,8 @@ from plone.app.standardtiles import PloneMessageFactory as _ from plone.app.standardtiles.navigation import NavigationTile +from plone.base.interfaces.controlpanel import INavigationSchema from plone.registry.interfaces import IRegistry from plone.supermodel.model import Schema -from Products.CMFPlone.interfaces.controlpanel import INavigationSchema from zope import schema from zope.component import getUtility from zope.interface import implementer diff --git a/src/plone/app/standardtiles/templates/existingcontent_view.pt b/src/plone/app/standardtiles/templates/existingcontent_view.pt index 9b214c4..b93b65a 100644 --- a/src/plone/app/standardtiles/templates/existingcontent_view.pt +++ b/src/plone/app/standardtiles/templates/existingcontent_view.pt @@ -58,7 +58,6 @@ dummy python: plone_layout.mark_view(view); portal_url portal_state/portal_url; checkPermission nocall: context/portal_membership/checkPermission; - site_properties context/portal_properties/site_properties; fix python:request.set('ACTUAL_URL', context.absolute_url()); ">
diff --git a/src/plone/app/standardtiles/templates/login.pt b/src/plone/app/standardtiles/templates/login.pt index 3434a08..ecd1822 100644 --- a/src/plone/app/standardtiles/templates/login.pt +++ b/src/plone/app/standardtiles/templates/login.pt @@ -72,7 +72,7 @@
diff --git a/src/plone/app/standardtiles/tests/test_head.py b/src/plone/app/standardtiles/tests/test_head.py index ca4d9db..2c614f0 100644 --- a/src/plone/app/standardtiles/tests/test_head.py +++ b/src/plone/app/standardtiles/tests/test_head.py @@ -4,10 +4,10 @@ from plone.app.testing import TEST_USER_ID from plone.app.testing import TEST_USER_NAME from plone.app.testing import TEST_USER_PASSWORD +from plone.base.interfaces import ISecuritySchema +from plone.base.interfaces import ISiteSchema from plone.registry.interfaces import IRegistry from plone.testing.zope import Browser -from Products.CMFPlone.interfaces import ISecuritySchema -from Products.CMFPlone.interfaces import ISiteSchema from unittest import TestCase from zope.component import getUtility diff --git a/src/plone/app/standardtiles/tests/test_layout.py b/src/plone/app/standardtiles/tests/test_layout.py index 56897e0..9888f2c 100644 --- a/src/plone/app/standardtiles/tests/test_layout.py +++ b/src/plone/app/standardtiles/tests/test_layout.py @@ -5,11 +5,11 @@ from plone.app.testing import TEST_USER_ID from plone.app.testing import TEST_USER_NAME from plone.app.testing import TEST_USER_PASSWORD +from plone.base.interfaces import ISecuritySchema +from plone.base.interfaces import ISiteSchema from plone.registry.interfaces import IRegistry from plone.testing.zope import Browser from Products.CMFCore.utils import getToolByName -from Products.CMFPlone.interfaces import ISecuritySchema -from Products.CMFPlone.interfaces import ISiteSchema from unittest import TestCase from zope.component import queryUtility diff --git a/src/plone/app/standardtiles/tests/test_setup.py b/src/plone/app/standardtiles/tests/test_setup.py index 3978c77..9f72998 100644 --- a/src/plone/app/standardtiles/tests/test_setup.py +++ b/src/plone/app/standardtiles/tests/test_setup.py @@ -1,6 +1,6 @@ from plone.app.standardtiles.testing import PASTANDARDTILES_INTEGRATION_TESTING +from plone.base.utils import get_installer from plone.registry.interfaces import IRegistry -from Products.CMFPlone.utils import get_installer from zope.component import getUtility import unittest