Skip to content

Commit 8aecac4

Browse files
authored
Merge pull request #191 from plone/backport-sort-on-fix
Don't validate sort_on prematurely [backport for Plone 6.1]
2 parents d8a2ea5 + 72b97eb commit 8aecac4

6 files changed

Lines changed: 17 additions & 17 deletions

File tree

news/173.bugfix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Don't ignore sort_on values which are not ZCatalog indexes. @davisagli

setup.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@
5252
"plone.registry",
5353
"plone.uuid",
5454
"Products.GenericSetup",
55-
"Products.ZCatalog",
5655
"python-dateutil",
5756
"Zope",
5857
"zope.dottedname",

src/plone/app/querystring/queryparser.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -78,12 +78,9 @@ def parseFormquery(context, formquery, sort_on=None, sort_order=None):
7878

7979
# Add sorting (sort_on and sort_order) to the query
8080
if sort_on:
81-
catalog = getToolByName(context, "portal_catalog")
82-
# I get crazy sort_ons like '194' or 'null'.
83-
if sort_on in catalog.indexes():
84-
query["sort_on"] = sort_on
85-
if sort_order:
86-
query["sort_order"] = sort_order
81+
query["sort_on"] = sort_on
82+
if sort_order:
83+
query["sort_order"] = sort_order
8784
return query
8885

8986

src/plone/app/querystring/registryreader.py

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,8 @@
22
from plone.app.querystring.interfaces import IQuerystringRegistryReader
33
from plone.base.utils import safe_text
44
from plone.i18n.normalizer.interfaces import IIDNormalizer
5-
from Products.CMFCore.utils import getToolByName
6-
from Products.ZCTextIndex.interfaces import IZCTextIndex
75
from zope.component import getUtility
86
from zope.component import queryUtility
9-
from zope.component.hooks import getSite
107
from zope.globalrequest import getRequest
118
from zope.i18n import translate
129
from zope.i18nmessageid import Message
@@ -117,14 +114,9 @@ def mapOperations(self, values):
117114

118115
def mapSortableIndexes(self, values):
119116
"""Map sortable indexes"""
120-
catalog = getToolByName(getSite(), "portal_catalog")._catalog
121117
sortables = {}
122118
for key, field in values.get("%s.field" % self.prefix).items():
123-
if (
124-
field["sortable"]
125-
and key in catalog.indexes
126-
and not IZCTextIndex.providedBy(catalog.getIndex(key))
127-
):
119+
if field["sortable"]:
128120
sortables[key] = values.get(f"{self.prefix}.field.{key}")
129121
values["sortable"] = sortables
130122
return values

src/plone/app/querystring/tests/testQueryBuilder.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -411,6 +411,10 @@ def test_munge_search_term(self):
411411
for _in, _out in search_term_tests:
412412
self.assertEqual(munge_search_term(_in), _out)
413413

414+
def test_query_builder_unknown_sort(self):
415+
results = self.querybuilder(query=self.query, sort_on="unknown")
416+
self.assertEqual(len(results), 1)
417+
414418

415419
class TestQuerybuilderResultTypes(unittest.TestCase):
416420
layer = TEST_PROFILE_PLONEAPPQUERYSTRING_INTEGRATION_TESTING

src/plone/app/querystring/tests/testQueryParser.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,14 @@ def test_sort_on_unknown(self):
191191
sort_on="unknown",
192192
sort_order="reverse",
193193
)
194-
self.assertEqual(parsed, {"Title": {"query": "Welcome to Plone"}})
194+
self.assertEqual(
195+
parsed,
196+
{
197+
"Title": {"query": "Welcome to Plone"},
198+
"sort_on": "unknown",
199+
"sort_order": "reverse",
200+
},
201+
)
195202

196203
def test_path_explicit(self):
197204
data = {

0 commit comments

Comments
 (0)