Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[fc] Repository: plone.app.versioningbehavior
Branch: refs/heads/master Date: 2018-12-03T02:16:24+01:00 Author: Gil Forcada Codinachs (gforcada) <gil.gnome@gmail.com> Commit: plone/plone.app.versioningbehavior@77f326f Place changeNote as last field in the form Fixes plone/Products.CMFPlone#2640 Files changed: M plone/app/versioningbehavior/behaviors.py Repository: plone.app.versioningbehavior Branch: refs/heads/master Date: 2018-12-03T02:17:51+01:00 Author: Gil Forcada Codinachs (gforcada) <gil.gnome@gmail.com> Commit: plone/plone.app.versioningbehavior@ea971b3 Update CHANGES.rst Files changed: M CHANGES.rst Repository: plone.app.versioningbehavior Branch: refs/heads/master Date: 2018-12-05T09:04:31+01:00 Author: Jens W. Klein (jensens) <jk@kleinundpartner.at> Commit: plone/plone.app.versioningbehavior@d3d7ede Merge pull request #44 from plone/gforcada-patch-1 Place changeNote as last field in the form Files changed: M CHANGES.rst M plone/app/versioningbehavior/behaviors.py
- Loading branch information
Showing
1 changed file
with
31 additions
and
19 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,38 +1,50 @@ | ||
Repository: Products.CMFPlone | ||
Repository: plone.app.versioningbehavior | ||
|
||
|
||
Branch: refs/heads/master | ||
Date: 2018-12-04T16:58:20+01:00 | ||
Author: ale-rt (ale-rt) <alessandro.pisa@gmail.com> | ||
Commit: https://github.com/plone/Products.CMFPlone/commit/2a02f1eebff05c5b4a00a6163ee13b1f5008f336 | ||
Date: 2018-12-03T02:16:24+01:00 | ||
Author: Gil Forcada Codinachs (gforcada) <gil.gnome@gmail.com> | ||
Commit: https://github.com/plone/plone.app.versioningbehavior/commit/77f326f0c3c26e5c8fd61516d1e832edfab1f753 | ||
|
||
Restore the possibility to sort catalog query results with multiple indexes | ||
Place changeNote as last field in the form | ||
|
||
Fixes #2464 | ||
Fixes https://github.com/plone/Products.CMFPlone/issues/2640 | ||
|
||
Files changed: | ||
A news/2464.fixed | ||
M Products/CMFPlone/CatalogTool.py | ||
M Products/CMFPlone/tests/testCatalogTool.py | ||
M plone/app/versioningbehavior/behaviors.py | ||
|
||
b"diff --git a/Products/CMFPlone/CatalogTool.py b/Products/CMFPlone/CatalogTool.py\nindex 20d8fb7f2..cafc4b433 100644\n--- a/Products/CMFPlone/CatalogTool.py\n+++ b/Products/CMFPlone/CatalogTool.py\n@@ -437,10 +437,20 @@ def searchResults(self, query=None, **kw):\n if not show_inactive and not self.allow_inactive(kw):\n kw['effectiveRange'] = DateTime()\n \n- sort_on = kw.get('sort_on')\n- if sort_on and sort_on not in self.indexes():\n- # I get crazy sort_ons like '194' or 'null'.\n- kw.pop('sort_on')\n+ # filter out invalid sort_on indexes\n+ sort_on = kw.get('sort_on') or []\n+ if isinstance(sort_on, six.string_types):\n+ sort_on = [sort_on]\n+ valid_indexes = self.indexes()\n+ try:\n+ sort_on = [idx for idx in sort_on if idx in valid_indexes]\n+ except TypeError:\n+ # sort_on is not iterable\n+ sort_on = []\n+ if not sort_on:\n+ kw.pop('sort_on', None)\n+ else:\n+ kw['sort_on'] = sort_on\n \n return ZCatalog.searchResults(self, query, **kw)\n \ndiff --git a/Products/CMFPlone/tests/testCatalogTool.py b/Products/CMFPlone/tests/testCatalogTool.py\nindex 5f491ef7e..f3fa4adc1 100644\n--- a/Products/CMFPlone/tests/testCatalogTool.py\n+++ b/Products/CMFPlone/tests/testCatalogTool.py\n@@ -2,6 +2,7 @@\n # -*- encoding: utf-8 -*-\n from Acquisition import aq_base\n from DateTime import DateTime\n+from functools import partial\n from OFS.ObjectManager import REPLACEABLE\n from plone.app.testing import setRoles\n from plone.app.testing import TEST_USER_ID\n@@ -11,21 +12,23 @@\n from plone.indexer.wrapper import IndexableObjectWrapper\n from plone.uuid.interfaces import IAttributeUUID\n from plone.uuid.interfaces import IUUID\n-from Products.CMFCore.permissions import AccessInactivePortalContent\n from Products.CMFCore.indexing import processQueue\n+from Products.CMFCore.permissions import AccessInactivePortalContent\n from Products.CMFPlone.CatalogTool import CatalogTool\n from Products.CMFPlone.CatalogTool import is_folderish\n from Products.CMFPlone.tests import dummy\n from Products.CMFPlone.tests.PloneTestCase import PloneTestCase\n from Products.CMFPlone.tests.utils import folder_position\n+from z3c.form.interfaces import IFormLayer\n from zope.event import notify\n from zope.interface import alsoProvides\n from zope.lifecycleevent import ObjectCreatedEvent\n-from z3c.form.interfaces import IFormLayer\n+\n import transaction\n import unittest\n import zope.interface\n \n+\n user2 = 'u2'\n group2 = 'g2'\n \n@@ -552,6 +555,36 @@ def afterSetUp(self):\n self.folder.doc5.reindexObject()\n self.folder.doc6.reindexObject()\n \n+ def testSortMultipleColumns(self):\n+ path = '/'.join(self.folder.getPhysicalPath())\n+ query = partial(self.catalog, path=path)\n+ brains = query(sort_on=['portal_type', 'sortable_title'])\n+ self.assertListEqual(\n+ [brain.getPath() for brain in brains],\n+ [\n+ '/plone/Members/test_user_1_/doc2',\n+ '/plone/Members/test_user_1_/doc3',\n+ '/plone/Members/test_user_1_/doc',\n+ '/plone/Members/test_user_1_/doc5',\n+ '/plone/Members/test_user_1_/doc6',\n+ '/plone/Members/test_user_1_/doc4',\n+ '/plone/Members/test_user_1_'\n+ ],\n+ )\n+ brains = query(sort_on=['portal_type', 'getId'])\n+ self.assertListEqual(\n+ [brain.getPath() for brain in brains],\n+ [\n+ '/plone/Members/test_user_1_/doc',\n+ '/plone/Members/test_user_1_/doc2',\n+ '/plone/Members/test_user_1_/doc3',\n+ '/plone/Members/test_user_1_/doc4',\n+ '/plone/Members/test_user_1_/doc5',\n+ '/plone/Members/test_user_1_/doc6',\n+ '/plone/Members/test_user_1_',\n+ ]\n+ )\n+\n def testUnknownSortOnIsIgnored(self):\n # You should not get a CatalogError when an invalid sort_on is passed.\n # I get crazy sort_ons like '194' or 'null'.\ndiff --git a/news/2464.fixed b/news/2464.fixed\nnew file mode 100644\nindex 000000000..208e85080\n--- /dev/null\n+++ b/news/2464.fixed\n@@ -0,0 +1 @@\n+Restore the possibility to sort catalog query results with multiple indexes\n" | ||
b"diff --git a/plone/app/versioningbehavior/behaviors.py b/plone/app/versioningbehavior/behaviors.py\nindex bad3c4f..82638c1 100644\n--- a/plone/app/versioningbehavior/behaviors.py\n+++ b/plone/app/versioningbehavior/behaviors.py\n@@ -40,6 +40,7 @@ class IVersionable(model.Schema):\n default=True,\n required=False)\n \n+ form.order_after(changeNote='*')\n form.omitted('changeNote')\n form.no_omit(IEditForm, 'changeNote')\n form.no_omit(IAddForm, 'changeNote')\n@@ -82,4 +83,4 @@ def versioning_enabled(self):\n \n @versioning_enabled.setter\n def versioning_enabled(self, value):\n- setattr(self.context, 'versioning_enabled', value)\n\\ No newline at end of file\n+ setattr(self.context, 'versioning_enabled', value)\n" | ||
|
||
Repository: Products.CMFPlone | ||
Repository: plone.app.versioningbehavior | ||
|
||
|
||
Branch: refs/heads/master | ||
Date: 2018-12-05T08:53:57+01:00 | ||
Date: 2018-12-03T02:17:51+01:00 | ||
Author: Gil Forcada Codinachs (gforcada) <gil.gnome@gmail.com> | ||
Commit: https://github.com/plone/plone.app.versioningbehavior/commit/ea971b31e54e0de2a51e8d65430d55e12f26b98f | ||
|
||
Update CHANGES.rst | ||
|
||
Files changed: | ||
M CHANGES.rst | ||
|
||
b'diff --git a/CHANGES.rst b/CHANGES.rst\nindex 1e056c6..59d7c36 100644\n--- a/CHANGES.rst\n+++ b/CHANGES.rst\n@@ -14,8 +14,9 @@ New features:\n \n Bug fixes:\n \n-- *add item here*\n-\n+- Move change notes field to be the last field of the form (just above the buttons).\n+ https://github.com/plone/Products.CMFPlone/issues/2640\n+ [gforcada]\n \n 1.3.5 (2018-11-02)\n ------------------\n' | ||
|
||
Repository: plone.app.versioningbehavior | ||
|
||
|
||
Branch: refs/heads/master | ||
Date: 2018-12-05T09:04:31+01:00 | ||
Author: Jens W. Klein (jensens) <jk@kleinundpartner.at> | ||
Commit: https://github.com/plone/Products.CMFPlone/commit/0aa4ec5a81224fcb60f12be70e321d3301f9941c | ||
Commit: https://github.com/plone/plone.app.versioningbehavior/commit/d3d7eded073dd503b2b350d16d589ebdbf1643d7 | ||
|
||
Merge pull request #2648 from plone/5.2.x-2464-fix-sorting-multiple-columns | ||
Merge pull request #44 from plone/gforcada-patch-1 | ||
|
||
Restore the possibility to sort catalog query results with multiple indexes [5.2.x] | ||
Place changeNote as last field in the form | ||
|
||
Files changed: | ||
A news/2464.fixed | ||
M Products/CMFPlone/CatalogTool.py | ||
M Products/CMFPlone/tests/testCatalogTool.py | ||
M CHANGES.rst | ||
M plone/app/versioningbehavior/behaviors.py | ||
|
||
b"diff --git a/Products/CMFPlone/CatalogTool.py b/Products/CMFPlone/CatalogTool.py\nindex 20d8fb7f2..cafc4b433 100644\n--- a/Products/CMFPlone/CatalogTool.py\n+++ b/Products/CMFPlone/CatalogTool.py\n@@ -437,10 +437,20 @@ def searchResults(self, query=None, **kw):\n if not show_inactive and not self.allow_inactive(kw):\n kw['effectiveRange'] = DateTime()\n \n- sort_on = kw.get('sort_on')\n- if sort_on and sort_on not in self.indexes():\n- # I get crazy sort_ons like '194' or 'null'.\n- kw.pop('sort_on')\n+ # filter out invalid sort_on indexes\n+ sort_on = kw.get('sort_on') or []\n+ if isinstance(sort_on, six.string_types):\n+ sort_on = [sort_on]\n+ valid_indexes = self.indexes()\n+ try:\n+ sort_on = [idx for idx in sort_on if idx in valid_indexes]\n+ except TypeError:\n+ # sort_on is not iterable\n+ sort_on = []\n+ if not sort_on:\n+ kw.pop('sort_on', None)\n+ else:\n+ kw['sort_on'] = sort_on\n \n return ZCatalog.searchResults(self, query, **kw)\n \ndiff --git a/Products/CMFPlone/tests/testCatalogTool.py b/Products/CMFPlone/tests/testCatalogTool.py\nindex 5f491ef7e..f3fa4adc1 100644\n--- a/Products/CMFPlone/tests/testCatalogTool.py\n+++ b/Products/CMFPlone/tests/testCatalogTool.py\n@@ -2,6 +2,7 @@\n # -*- encoding: utf-8 -*-\n from Acquisition import aq_base\n from DateTime import DateTime\n+from functools import partial\n from OFS.ObjectManager import REPLACEABLE\n from plone.app.testing import setRoles\n from plone.app.testing import TEST_USER_ID\n@@ -11,21 +12,23 @@\n from plone.indexer.wrapper import IndexableObjectWrapper\n from plone.uuid.interfaces import IAttributeUUID\n from plone.uuid.interfaces import IUUID\n-from Products.CMFCore.permissions import AccessInactivePortalContent\n from Products.CMFCore.indexing import processQueue\n+from Products.CMFCore.permissions import AccessInactivePortalContent\n from Products.CMFPlone.CatalogTool import CatalogTool\n from Products.CMFPlone.CatalogTool import is_folderish\n from Products.CMFPlone.tests import dummy\n from Products.CMFPlone.tests.PloneTestCase import PloneTestCase\n from Products.CMFPlone.tests.utils import folder_position\n+from z3c.form.interfaces import IFormLayer\n from zope.event import notify\n from zope.interface import alsoProvides\n from zope.lifecycleevent import ObjectCreatedEvent\n-from z3c.form.interfaces import IFormLayer\n+\n import transaction\n import unittest\n import zope.interface\n \n+\n user2 = 'u2'\n group2 = 'g2'\n \n@@ -552,6 +555,36 @@ def afterSetUp(self):\n self.folder.doc5.reindexObject()\n self.folder.doc6.reindexObject()\n \n+ def testSortMultipleColumns(self):\n+ path = '/'.join(self.folder.getPhysicalPath())\n+ query = partial(self.catalog, path=path)\n+ brains = query(sort_on=['portal_type', 'sortable_title'])\n+ self.assertListEqual(\n+ [brain.getPath() for brain in brains],\n+ [\n+ '/plone/Members/test_user_1_/doc2',\n+ '/plone/Members/test_user_1_/doc3',\n+ '/plone/Members/test_user_1_/doc',\n+ '/plone/Members/test_user_1_/doc5',\n+ '/plone/Members/test_user_1_/doc6',\n+ '/plone/Members/test_user_1_/doc4',\n+ '/plone/Members/test_user_1_'\n+ ],\n+ )\n+ brains = query(sort_on=['portal_type', 'getId'])\n+ self.assertListEqual(\n+ [brain.getPath() for brain in brains],\n+ [\n+ '/plone/Members/test_user_1_/doc',\n+ '/plone/Members/test_user_1_/doc2',\n+ '/plone/Members/test_user_1_/doc3',\n+ '/plone/Members/test_user_1_/doc4',\n+ '/plone/Members/test_user_1_/doc5',\n+ '/plone/Members/test_user_1_/doc6',\n+ '/plone/Members/test_user_1_',\n+ ]\n+ )\n+\n def testUnknownSortOnIsIgnored(self):\n # You should not get a CatalogError when an invalid sort_on is passed.\n # I get crazy sort_ons like '194' or 'null'.\ndiff --git a/news/2464.fixed b/news/2464.fixed\nnew file mode 100644\nindex 000000000..208e85080\n--- /dev/null\n+++ b/news/2464.fixed\n@@ -0,0 +1 @@\n+Restore the possibility to sort catalog query results with multiple indexes\n" | ||
b"diff --git a/CHANGES.rst b/CHANGES.rst\nindex 1e056c6..59d7c36 100644\n--- a/CHANGES.rst\n+++ b/CHANGES.rst\n@@ -14,8 +14,9 @@ New features:\n \n Bug fixes:\n \n-- *add item here*\n-\n+- Move change notes field to be the last field of the form (just above the buttons).\n+ https://github.com/plone/Products.CMFPlone/issues/2640\n+ [gforcada]\n \n 1.3.5 (2018-11-02)\n ------------------\ndiff --git a/plone/app/versioningbehavior/behaviors.py b/plone/app/versioningbehavior/behaviors.py\nindex bad3c4f..82638c1 100644\n--- a/plone/app/versioningbehavior/behaviors.py\n+++ b/plone/app/versioningbehavior/behaviors.py\n@@ -40,6 +40,7 @@ class IVersionable(model.Schema):\n default=True,\n required=False)\n \n+ form.order_after(changeNote='*')\n form.omitted('changeNote')\n form.no_omit(IEditForm, 'changeNote')\n form.no_omit(IAddForm, 'changeNote')\n@@ -82,4 +83,4 @@ def versioning_enabled(self):\n \n @versioning_enabled.setter\n def versioning_enabled(self, value):\n- setattr(self.context, 'versioning_enabled', value)\n\\ No newline at end of file\n+ setattr(self.context, 'versioning_enabled', value)\n" | ||
|