diff --git a/news/173.bugfix b/news/173.bugfix new file mode 100644 index 0000000..8b501d8 --- /dev/null +++ b/news/173.bugfix @@ -0,0 +1 @@ +Don't ignore sort_on values which are not ZCatalog indexes. @davisagli diff --git a/setup.py b/setup.py index 5271a71..1fc1b42 100644 --- a/setup.py +++ b/setup.py @@ -43,7 +43,6 @@ "plone.registry", "plone.uuid", "Products.GenericSetup", - "Products.ZCatalog", "python-dateutil", "Zope", "zope.dottedname", diff --git a/src/plone/app/querystring/queryparser.py b/src/plone/app/querystring/queryparser.py index 1f0a056..e6f7b14 100644 --- a/src/plone/app/querystring/queryparser.py +++ b/src/plone/app/querystring/queryparser.py @@ -78,12 +78,9 @@ def parseFormquery(context, formquery, sort_on=None, sort_order=None): # Add sorting (sort_on and sort_order) to the query if sort_on: - catalog = getToolByName(context, "portal_catalog") - # I get crazy sort_ons like '194' or 'null'. - if sort_on in catalog.indexes(): - query["sort_on"] = sort_on - if sort_order: - query["sort_order"] = sort_order + query["sort_on"] = sort_on + if sort_order: + query["sort_order"] = sort_order return query diff --git a/src/plone/app/querystring/registryreader.py b/src/plone/app/querystring/registryreader.py index ad6e23f..1042b12 100644 --- a/src/plone/app/querystring/registryreader.py +++ b/src/plone/app/querystring/registryreader.py @@ -2,11 +2,8 @@ from plone.app.querystring.interfaces import IQuerystringRegistryReader from plone.base.utils import safe_text from plone.i18n.normalizer.interfaces import IIDNormalizer -from Products.CMFCore.utils import getToolByName -from Products.ZCTextIndex.interfaces import IZCTextIndex from zope.component import getUtility from zope.component import queryUtility -from zope.component.hooks import getSite from zope.globalrequest import getRequest from zope.i18n import translate from zope.i18nmessageid import Message @@ -117,14 +114,9 @@ def mapOperations(self, values): def mapSortableIndexes(self, values): """Map sortable indexes""" - catalog = getToolByName(getSite(), "portal_catalog")._catalog sortables = {} for key, field in values.get("%s.field" % self.prefix).items(): - if ( - field["sortable"] - and key in catalog.indexes - and not IZCTextIndex.providedBy(catalog.getIndex(key)) - ): + if field["sortable"]: sortables[key] = values.get(f"{self.prefix}.field.{key}") values["sortable"] = sortables return values diff --git a/src/plone/app/querystring/tests/testQueryBuilder.py b/src/plone/app/querystring/tests/testQueryBuilder.py index 5bfcaaa..8880ed4 100644 --- a/src/plone/app/querystring/tests/testQueryBuilder.py +++ b/src/plone/app/querystring/tests/testQueryBuilder.py @@ -407,6 +407,10 @@ def test_munge_search_term(self): for _in, _out in search_term_tests: self.assertEqual(munge_search_term(_in), _out) + def test_query_builder_unknown_sort(self): + results = self.querybuilder(query=self.query, sort_on="unknown") + self.assertEqual(len(results), 1) + class TestQuerybuilderResultTypes(unittest.TestCase): layer = TEST_PROFILE_PLONEAPPQUERYSTRING_INTEGRATION_TESTING diff --git a/src/plone/app/querystring/tests/testQueryParser.py b/src/plone/app/querystring/tests/testQueryParser.py index d42c08f..94ff512 100644 --- a/src/plone/app/querystring/tests/testQueryParser.py +++ b/src/plone/app/querystring/tests/testQueryParser.py @@ -191,7 +191,14 @@ def test_sort_on_unknown(self): sort_on="unknown", sort_order="reverse", ) - self.assertEqual(parsed, {"Title": {"query": "Welcome to Plone"}}) + self.assertEqual( + parsed, + { + "Title": {"query": "Welcome to Plone"}, + "sort_on": "unknown", + "sort_order": "reverse", + }, + ) def test_path_explicit(self): data = {