diff --git a/last_commit.txt b/last_commit.txt index 93da32f38c..b9f7a9654a 100644 --- a/last_commit.txt +++ b/last_commit.txt @@ -1,112 +1,55 @@ -Repository: plone.app.discussion +Repository: plone.app.upgrade -Branch: refs/heads/4.x -Date: 2024-08-19T15:01:31+02:00 -Author: Gil Forcada Codinachs (gforcada) -Commit: https://github.com/plone/plone.app.discussion/commit/c0cba64999f2a1bd717cf2352be421ed69513890 - -Add missing icon - -The `view` action of comments had no icon on Plone 6. - -Files changed: -M plone/app/discussion/profiles/default/types/Discussion_Item.xml - -b'diff --git a/plone/app/discussion/profiles/default/types/Discussion_Item.xml b/plone/app/discussion/profiles/default/types/Discussion_Item.xml\nindex c05efcb9..eccc9c20 100644\n--- a/plone/app/discussion/profiles/default/types/Discussion_Item.xml\n+++ b/plone/app/discussion/profiles/default/types/Discussion_Item.xml\n@@ -30,6 +30,7 @@\n condition_expr=""\n title="View"\n url_expr="string:${object_url}/@@view"\n+ icon_expr="string:toolbar-action/view"\n visible="True"\n >\n \n' - -Repository: plone.app.discussion - - -Branch: refs/heads/4.x -Date: 2024-08-19T15:01:31+02:00 -Author: Gil Forcada Codinachs (gforcada) -Commit: https://github.com/plone/plone.app.discussion/commit/3c5f4570dcc625c54b5da5606b47f83a6885f163 - -Add news entry - -Files changed: -A news/+ignore.bugfix - -b"diff --git a/news/+ignore.bugfix b/news/+ignore.bugfix\nnew file mode 100644\nindex 00000000..7f7f4e85\n--- /dev/null\n+++ b/news/+ignore.bugfix\n@@ -0,0 +1,2 @@\n+Add missing icon on comments' `view` action\n+[gforcada]\n" - -Repository: plone.app.discussion - - -Branch: refs/heads/4.x -Date: 2024-08-19T16:21:53+02:00 +Branch: refs/heads/master +Date: 2024-08-13T18:51:41+02:00 Author: Maurits van Rees (mauritsvanrees) -Commit: https://github.com/plone/plone.app.discussion/commit/6983e3505b4985f9f15a1800467aecf1e5078acd +Commit: https://github.com/plone/plone.app.upgrade/commit/100cf0e4c061c8c22130f06e523150f39a2f9563 -Register contenttype icon. Add upgrade step for updating the icons. +6.1: Cleanup plone.app.discussion settings when the package is not available. -Files changed: -A news/222.bugfix -A plone/app/discussion/profiles/to_2002/registry.xml -A plone/app/discussion/profiles/to_2002/types/Discussion_Item.xml -A plone/app/discussion/setuphandlers.py -M plone/app/discussion/configure.zcml -M plone/app/discussion/profiles/default/metadata.xml -M plone/app/discussion/profiles/default/registry.xml -M plone/app/discussion/profiles/default/types/Discussion_Item.xml -M plone/app/discussion/upgrades.zcml -D news/+ignore.bugfix - -b'diff --git a/news/+ignore.bugfix b/news/+ignore.bugfix\ndeleted file mode 100644\nindex 7f7f4e85..00000000\n--- a/news/+ignore.bugfix\n+++ /dev/null\n@@ -1,2 +0,0 @@\n-Add missing icon on comments\' `view` action\n-[gforcada]\ndiff --git a/news/222.bugfix b/news/222.bugfix\nnew file mode 100644\nindex 00000000..6f0a228f\n--- /dev/null\n+++ b/news/222.bugfix\n@@ -0,0 +1,3 @@\n+Add missing icon on comments\' `view` action\n+Register contenttype icon for comments.\n+[gforcada, maurits]\ndiff --git a/plone/app/discussion/configure.zcml b/plone/app/discussion/configure.zcml\nindex e2b82f2d..ada1914f 100644\n--- a/plone/app/discussion/configure.zcml\n+++ b/plone/app/discussion/configure.zcml\n@@ -46,6 +46,11 @@\n for="plone.base.interfaces.IPloneSiteRoot"\n directory="profiles/default"\n />\n+ \n \n \n \ndiff --git a/plone/app/discussion/profiles/default/metadata.xml b/plone/app/discussion/profiles/default/metadata.xml\nindex 38abca6d..4cad4f61 100644\n--- a/plone/app/discussion/profiles/default/metadata.xml\n+++ b/plone/app/discussion/profiles/default/metadata.xml\n@@ -1,6 +1,6 @@\n \n \n- 2001\n+ 2002\n \n profile-plone.resource:default\n profile-plone.app.registry:default\ndiff --git a/plone/app/discussion/profiles/default/registry.xml b/plone/app/discussion/profiles/default/registry.xml\nindex 2a1aaffc..944359d3 100644\n--- a/plone/app/discussion/profiles/default/registry.xml\n+++ b/plone/app/discussion/profiles/default/registry.xml\n@@ -4,4 +4,10 @@\n False\n False\n \n+ \n+ \n+ Plone Image\n+ \n+ ++plone++bootstrap-icons/chat-left-text.svg\n+ \n \ndiff --git a/plone/app/discussion/profiles/default/types/Discussion_Item.xml b/plone/app/discussion/profiles/default/types/Discussion_Item.xml\nindex eccc9c20..01f73b0e 100644\n--- a/plone/app/discussion/profiles/default/types/Discussion_Item.xml\n+++ b/plone/app/discussion/profiles/default/types/Discussion_Item.xml\n@@ -10,7 +10,7 @@\n Comments added to a content item.\n- discussionitem_icon.png\n+ ++plone++bootstrap-icons/chat-left-text.svg\n Discussion Item\n \n plone.Comment\ndiff --git a/plone/app/discussion/profiles/to_2002/registry.xml b/plone/app/discussion/profiles/to_2002/registry.xml\nnew file mode 100644\nindex 00000000..e7886adb\n--- /dev/null\n+++ b/plone/app/discussion/profiles/to_2002/registry.xml\n@@ -0,0 +1,9 @@\n+\n+\n+ \n+ \n+ Plone Image\n+ \n+ ++plone++bootstrap-icons/chat-left-text.svg\n+ \n+\ndiff --git a/plone/app/discussion/profiles/to_2002/types/Discussion_Item.xml b/plone/app/discussion/profiles/to_2002/types/Discussion_Item.xml\nnew file mode 100644\nindex 00000000..95bbadbc\n--- /dev/null\n+++ b/plone/app/discussion/profiles/to_2002/types/Discussion_Item.xml\n@@ -0,0 +1,26 @@\n+\n+\n+ ++plone++bootstrap-icons/chat-left-text.svg\n+ \n+ \n+ \n+ \n+ \n+ \n+\ndiff --git a/plone/app/discussion/setuphandlers.py b/plone/app/discussion/setuphandlers.py\nnew file mode 100644\nindex 00000000..7b9e9c6b\n--- /dev/null\n+++ b/plone/app/discussion/setuphandlers.py\n@@ -0,0 +1,10 @@\n+from plone.base.interfaces import INonInstallable\n+from zope.interface import implementer\n+\n+\n+@implementer(INonInstallable)\n+class HiddenProfiles:\n+ def getNonInstallableProfiles(self):\n+ return [\n+ "plone.app.contenttypes:to_2002",\n+ ]\ndiff --git a/plone/app/discussion/upgrades.zcml b/plone/app/discussion/upgrades.zcml\nindex d265d428..5f716f6e 100644\n--- a/plone/app/discussion/upgrades.zcml\n+++ b/plone/app/discussion/upgrades.zcml\n@@ -108,4 +108,23 @@\n />\n \n \n+ \n+\n+ \n+ \n+ \n+\n \n' - -Repository: plone.app.discussion - - -Branch: refs/heads/4.x -Date: 2024-08-19T16:29:55+02:00 -Author: Maurits van Rees (mauritsvanrees) -Commit: https://github.com/plone/plone.app.discussion/commit/7b599163bed9cc58f21653172afe3371f7b9477c - -zpretty +If the site contains comments, we throw an error and stop the upgrade. +The advice then is to add the `plone.app.discussion` package. Files changed: -M plone/app/discussion/profiles/default/types/Discussion_Item.xml -M plone/app/discussion/profiles/to_2002/types/Discussion_Item.xml +A news/211.bugfix +A plone/app/upgrade/v61/profiles/uninstall-discussion/actions.xml +A plone/app/upgrade/v61/profiles/uninstall-discussion/browserlayer.xml +A plone/app/upgrade/v61/profiles/uninstall-discussion/catalog.xml +A plone/app/upgrade/v61/profiles/uninstall-discussion/controlpanel.xml +A plone/app/upgrade/v61/profiles/uninstall-discussion/registry.xml +A plone/app/upgrade/v61/profiles/uninstall-discussion/types.xml +A plone/app/upgrade/v61/profiles/uninstall-discussion/workflows.xml +M plone/app/upgrade/v61/configure.zcml +M plone/app/upgrade/v61/final.py +M plone/app/upgrade/v61/profiles.zcml -b'diff --git a/plone/app/discussion/profiles/default/types/Discussion_Item.xml b/plone/app/discussion/profiles/default/types/Discussion_Item.xml\nindex 01f73b0e..64c98c61 100644\n--- a/plone/app/discussion/profiles/default/types/Discussion_Item.xml\n+++ b/plone/app/discussion/profiles/default/types/Discussion_Item.xml\n@@ -28,9 +28,9 @@\n \n \ndiff --git a/plone/app/discussion/profiles/to_2002/types/Discussion_Item.xml b/plone/app/discussion/profiles/to_2002/types/Discussion_Item.xml\nindex 95bbadbc..92fb9496 100644\n--- a/plone/app/discussion/profiles/to_2002/types/Discussion_Item.xml\n+++ b/plone/app/discussion/profiles/to_2002/types/Discussion_Item.xml\n@@ -16,9 +16,9 @@\n \n \n' +b'diff --git a/news/211.bugfix b/news/211.bugfix\nnew file mode 100644\nindex 00000000..f0d647ee\n--- /dev/null\n+++ b/news/211.bugfix\n@@ -0,0 +1,4 @@\n+6.1: Cleanup ``plone.app.discussion`` settings when the package is not available.\n+If the site contains comments, we throw an error and stop the upgrade.\n+The advice then is to add the ``plone.app.discussion`` package.\n+[maurits]\ndiff --git a/plone/app/upgrade/v61/configure.zcml b/plone/app/upgrade/v61/configure.zcml\nindex c20e0358..b941668c 100644\n--- a/plone/app/upgrade/v61/configure.zcml\n+++ b/plone/app/upgrade/v61/configure.zcml\n@@ -71,8 +71,8 @@\n >\n \n \n \n \ndiff --git a/plone/app/upgrade/v61/final.py b/plone/app/upgrade/v61/final.py\nindex f3fa8ef2..38e5446f 100644\n--- a/plone/app/upgrade/v61/final.py\n+++ b/plone/app/upgrade/v61/final.py\n@@ -1,4 +1,12 @@\n+from plone.registry.interfaces import IRegistry\n+from zope.component import getUtility\n+from Acquisition import aq_parent\n+from importlib.metadata import distribution\n+from importlib.metadata import PackageNotFoundError\n+from plone.app.upgrade.utils import loadMigrationProfile\n+from plone.browserlayer.utils import unregister_layer\n from Products.CMFCore.utils import getToolByName\n+from zope.component import getSiteManager\n \n import logging\n \n@@ -21,3 +29,77 @@ def remove_portal_properties_tool(context):\n # AttributeError: \'PropertiesTool\' object has no attribute \'__of__\'\n portal._delOb("portal_properties")\n logger.info("Removed portal_properties tool.")\n+\n+\n+def maybe_cleanup_discussion(context):\n+ """Cleanup some left-overs from plone.app.discussion.\n+\n+ But only do this when the package is not available.\n+ In Plone 6.1, the package was made into a core add-on.\n+ Meaning: it no longer gets pulled in by Products.CMFPlone,\n+ but only by the Plone package.\n+ """\n+ # First check if the GS profile was installed.\n+ profile_id = "plone.app.discussion:default"\n+ if context.getLastVersionForProfile(profile_id) == "unknown":\n+ logger.info("%s was not installed, nothing to do.", profile_id)\n+ return\n+ try:\n+ distribution("plone.app.discussion")\n+ logger.info("The plone.app.discussion package is available, so we do nothing.")\n+ return\n+ except PackageNotFoundError:\n+ logger.info("plone.app.discussion package not found, will cleanup.")\n+\n+ # First check if there are any actual discussion items in the site.\n+ catalog = getToolByName(context, "portal_catalog")\n+ brains = catalog.unrestrictedSearchResults(portal_type="Discussion Item")\n+ total = len(brains)\n+ if total:\n+ raise ValueError(\n+ f"{total} Discussion Items (comments) were found in the site, but "\n+ "plone.app.discussion is missing.\\nThis package is optional since "\n+ "Plone 6.1.\\nPlease add plone.app.discussion to your Plone installation "\n+ "if you want to keep using them."\n+ )\n+\n+ # First apply a profile. This is mostly a copy of the uninstall profile\n+ # of plone.app.discussion.\n+ loadMigrationProfile(context, "profile-plone.app.upgrade.v61:uninstall-discussion")\n+\n+ # The registry keys were registered via the IDiscussionSettings interface\n+ # which no longer exists, so we remove them one by one.\n+ registry = getUtility(IRegistry)\n+ records = registry.records\n+ to_remove = [\n+ key\n+ for key in records.keys()\n+ if "plone.app.discussion.interfaces.IDiscussionSettings" in key\n+ ]\n+ for key in to_remove:\n+ del records[key]\n+ logger.info("Removed all IDiscussionSettings registry records.")\n+\n+ # Gather the FTIs that have the plone.allowdiscussion behavior.\n+ # It can appear with the name or the interface identifier.\n+ portal_types = getToolByName(context, "portal_types")\n+ old_behaviors = {\n+ "plone.allowdiscussion",\n+ "plone.app.dexterity.behaviors.discussion.IAllowDiscussion",\n+ }\n+ ftis_to_fix = (\n+ fti\n+ for fti in portal_types.objectValues("Dexterity FTI")\n+ if set(fti.behaviors) & old_behaviors\n+ )\n+ for fti in ftis_to_fix:\n+ # Remove the behavior. Remember this is a tuple.\n+ behaviors = [\n+ behavior for behavior in fti.behaviors if behavior not in old_behaviors\n+ ]\n+ # Set the updated behaviors\n+ fti.behaviors = tuple(behaviors)\n+ logger.info("Removed plone.allowdiscussion behavior from %s", fti)\n+\n+ # Mark GS profile as not installed/activated.\n+ context.unsetLastVersionForProfile(profile_id)\ndiff --git a/plone/app/upgrade/v61/profiles.zcml b/plone/app/upgrade/v61/profiles.zcml\nindex 1dd84f37..74cac9b2 100644\n--- a/plone/app/upgrade/v61/profiles.zcml\n+++ b/plone/app/upgrade/v61/profiles.zcml\n@@ -11,4 +11,13 @@\n provides="Products.GenericSetup.interfaces.EXTENSION"\n />\n \n+ \n+ \n+\n \ndiff --git a/plone/app/upgrade/v61/profiles/uninstall-discussion/actions.xml b/plone/app/upgrade/v61/profiles/uninstall-discussion/actions.xml\nnew file mode 100644\nindex 00000000..680e5e96\n--- /dev/null\n+++ b/plone/app/upgrade/v61/profiles/uninstall-discussion/actions.xml\n@@ -0,0 +1,13 @@\n+\n+\n+ \n+ \n+ \n+\ndiff --git a/plone/app/upgrade/v61/profiles/uninstall-discussion/browserlayer.xml b/plone/app/upgrade/v61/profiles/uninstall-discussion/browserlayer.xml\nnew file mode 100644\nindex 00000000..078a4cbb\n--- /dev/null\n+++ b/plone/app/upgrade/v61/profiles/uninstall-discussion/browserlayer.xml\n@@ -0,0 +1,6 @@\n+\n+\n+ \n+\ndiff --git a/plone/app/upgrade/v61/profiles/uninstall-discussion/catalog.xml b/plone/app/upgrade/v61/profiles/uninstall-discussion/catalog.xml\nnew file mode 100644\nindex 00000000..e4584ca6\n--- /dev/null\n+++ b/plone/app/upgrade/v61/profiles/uninstall-discussion/catalog.xml\n@@ -0,0 +1,28 @@\n+\n+\n+\n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+\n+\ndiff --git a/plone/app/upgrade/v61/profiles/uninstall-discussion/controlpanel.xml b/plone/app/upgrade/v61/profiles/uninstall-discussion/controlpanel.xml\nnew file mode 100644\nindex 00000000..f76f5d75\n--- /dev/null\n+++ b/plone/app/upgrade/v61/profiles/uninstall-discussion/controlpanel.xml\n@@ -0,0 +1,14 @@\n+\n+\n+\n+ \n+\n+\ndiff --git a/plone/app/upgrade/v61/profiles/uninstall-discussion/registry.xml b/plone/app/upgrade/v61/profiles/uninstall-discussion/registry.xml\nnew file mode 100644\nindex 00000000..b5109eae\n--- /dev/null\n+++ b/plone/app/upgrade/v61/profiles/uninstall-discussion/registry.xml\n@@ -0,0 +1,8 @@\n+\n+\n+ \n+ \n+\ndiff --git a/plone/app/upgrade/v61/profiles/uninstall-discussion/types.xml b/plone/app/upgrade/v61/profiles/uninstall-discussion/types.xml\nnew file mode 100644\nindex 00000000..e854062b\n--- /dev/null\n+++ b/plone/app/upgrade/v61/profiles/uninstall-discussion/types.xml\n@@ -0,0 +1,9 @@\n+\n+\n+ \n+\ndiff --git a/plone/app/upgrade/v61/profiles/uninstall-discussion/workflows.xml b/plone/app/upgrade/v61/profiles/uninstall-discussion/workflows.xml\nnew file mode 100644\nindex 00000000..b7269a77\n--- /dev/null\n+++ b/plone/app/upgrade/v61/profiles/uninstall-discussion/workflows.xml\n@@ -0,0 +1,13 @@\n+\n+\n+ \n+ \n+\n' -Repository: plone.app.discussion +Repository: plone.app.upgrade -Branch: refs/heads/4.x -Date: 2024-08-21T12:20:51+02:00 -Author: Maurits van Rees (mauritsvanrees) -Commit: https://github.com/plone/plone.app.discussion/commit/f71e608714cef1bb0f2e1539b66b96f3daf652c8 - -Fix copy-paste leftover. - -Files changed: -M plone/app/discussion/setuphandlers.py - -b'diff --git a/plone/app/discussion/setuphandlers.py b/plone/app/discussion/setuphandlers.py\nindex 7b9e9c6b..ca898bae 100644\n--- a/plone/app/discussion/setuphandlers.py\n+++ b/plone/app/discussion/setuphandlers.py\n@@ -6,5 +6,5 @@\n class HiddenProfiles:\n def getNonInstallableProfiles(self):\n return [\n- "plone.app.contenttypes:to_2002",\n+ "plone.app.discussion:to_2002",\n ]\n' - -Repository: plone.app.discussion - - -Branch: refs/heads/4.x -Date: 2024-09-02T16:34:09+02:00 +Branch: refs/heads/master +Date: 2024-09-02T16:35:17+02:00 Author: Maurits van Rees (mauritsvanrees) -Commit: https://github.com/plone/plone.app.discussion/commit/512d53bdbd5bf95fa76a728c45b1106b97543770 +Commit: https://github.com/plone/plone.app.upgrade/commit/97c18165d6a88e813cf1682db1f8b3c2a7d3c4a2 -Merge pull request #222 from plone/gforcada-patch-2 +Merge pull request #330 from plone/pa-discussion-core-addon -Add missing icon +6.1: Cleanup plone.app.discussion settings when package is missing Files changed: -A news/222.bugfix -A plone/app/discussion/profiles/to_2002/registry.xml -A plone/app/discussion/profiles/to_2002/types/Discussion_Item.xml -A plone/app/discussion/setuphandlers.py -M plone/app/discussion/configure.zcml -M plone/app/discussion/profiles/default/metadata.xml -M plone/app/discussion/profiles/default/registry.xml -M plone/app/discussion/profiles/default/types/Discussion_Item.xml -M plone/app/discussion/upgrades.zcml - -b'diff --git a/news/222.bugfix b/news/222.bugfix\nnew file mode 100644\nindex 00000000..6f0a228f\n--- /dev/null\n+++ b/news/222.bugfix\n@@ -0,0 +1,3 @@\n+Add missing icon on comments\' `view` action\n+Register contenttype icon for comments.\n+[gforcada, maurits]\ndiff --git a/plone/app/discussion/configure.zcml b/plone/app/discussion/configure.zcml\nindex e2b82f2d..ada1914f 100644\n--- a/plone/app/discussion/configure.zcml\n+++ b/plone/app/discussion/configure.zcml\n@@ -46,6 +46,11 @@\n for="plone.base.interfaces.IPloneSiteRoot"\n directory="profiles/default"\n />\n+ \n \n \n \ndiff --git a/plone/app/discussion/profiles/default/metadata.xml b/plone/app/discussion/profiles/default/metadata.xml\nindex 38abca6d..4cad4f61 100644\n--- a/plone/app/discussion/profiles/default/metadata.xml\n+++ b/plone/app/discussion/profiles/default/metadata.xml\n@@ -1,6 +1,6 @@\n \n \n- 2001\n+ 2002\n \n profile-plone.resource:default\n profile-plone.app.registry:default\ndiff --git a/plone/app/discussion/profiles/default/registry.xml b/plone/app/discussion/profiles/default/registry.xml\nindex 2a1aaffc..944359d3 100644\n--- a/plone/app/discussion/profiles/default/registry.xml\n+++ b/plone/app/discussion/profiles/default/registry.xml\n@@ -4,4 +4,10 @@\n False\n False\n \n+ \n+ \n+ Plone Image\n+ \n+ ++plone++bootstrap-icons/chat-left-text.svg\n+ \n \ndiff --git a/plone/app/discussion/profiles/default/types/Discussion_Item.xml b/plone/app/discussion/profiles/default/types/Discussion_Item.xml\nindex c05efcb9..64c98c61 100644\n--- a/plone/app/discussion/profiles/default/types/Discussion_Item.xml\n+++ b/plone/app/discussion/profiles/default/types/Discussion_Item.xml\n@@ -10,7 +10,7 @@\n Comments added to a content item.\n- discussionitem_icon.png\n+ ++plone++bootstrap-icons/chat-left-text.svg\n Discussion Item\n \n plone.Comment\n@@ -28,6 +28,7 @@\n \n+\n+ \n+ \n+ Plone Image\n+ \n+ ++plone++bootstrap-icons/chat-left-text.svg\n+ \n+\ndiff --git a/plone/app/discussion/profiles/to_2002/types/Discussion_Item.xml b/plone/app/discussion/profiles/to_2002/types/Discussion_Item.xml\nnew file mode 100644\nindex 00000000..92fb9496\n--- /dev/null\n+++ b/plone/app/discussion/profiles/to_2002/types/Discussion_Item.xml\n@@ -0,0 +1,26 @@\n+\n+\n+ ++plone++bootstrap-icons/chat-left-text.svg\n+ \n+ \n+ \n+ \n+ \n+ \n+\ndiff --git a/plone/app/discussion/setuphandlers.py b/plone/app/discussion/setuphandlers.py\nnew file mode 100644\nindex 00000000..ca898bae\n--- /dev/null\n+++ b/plone/app/discussion/setuphandlers.py\n@@ -0,0 +1,10 @@\n+from plone.base.interfaces import INonInstallable\n+from zope.interface import implementer\n+\n+\n+@implementer(INonInstallable)\n+class HiddenProfiles:\n+ def getNonInstallableProfiles(self):\n+ return [\n+ "plone.app.discussion:to_2002",\n+ ]\ndiff --git a/plone/app/discussion/upgrades.zcml b/plone/app/discussion/upgrades.zcml\nindex d265d428..5f716f6e 100644\n--- a/plone/app/discussion/upgrades.zcml\n+++ b/plone/app/discussion/upgrades.zcml\n@@ -108,4 +108,23 @@\n />\n \n \n+ \n+\n+ \n+ \n+ \n+\n \n' +A news/211.bugfix +A plone/app/upgrade/v61/profiles/uninstall-discussion/actions.xml +A plone/app/upgrade/v61/profiles/uninstall-discussion/browserlayer.xml +A plone/app/upgrade/v61/profiles/uninstall-discussion/catalog.xml +A plone/app/upgrade/v61/profiles/uninstall-discussion/controlpanel.xml +A plone/app/upgrade/v61/profiles/uninstall-discussion/registry.xml +A plone/app/upgrade/v61/profiles/uninstall-discussion/types.xml +A plone/app/upgrade/v61/profiles/uninstall-discussion/workflows.xml +M plone/app/upgrade/v61/configure.zcml +M plone/app/upgrade/v61/final.py +M plone/app/upgrade/v61/profiles.zcml + +b'diff --git a/news/211.bugfix b/news/211.bugfix\nnew file mode 100644\nindex 00000000..f0d647ee\n--- /dev/null\n+++ b/news/211.bugfix\n@@ -0,0 +1,4 @@\n+6.1: Cleanup ``plone.app.discussion`` settings when the package is not available.\n+If the site contains comments, we throw an error and stop the upgrade.\n+The advice then is to add the ``plone.app.discussion`` package.\n+[maurits]\ndiff --git a/plone/app/upgrade/v61/configure.zcml b/plone/app/upgrade/v61/configure.zcml\nindex c20e0358..b941668c 100644\n--- a/plone/app/upgrade/v61/configure.zcml\n+++ b/plone/app/upgrade/v61/configure.zcml\n@@ -71,8 +71,8 @@\n >\n \n \n \n \ndiff --git a/plone/app/upgrade/v61/final.py b/plone/app/upgrade/v61/final.py\nindex f3fa8ef2..38e5446f 100644\n--- a/plone/app/upgrade/v61/final.py\n+++ b/plone/app/upgrade/v61/final.py\n@@ -1,4 +1,12 @@\n+from plone.registry.interfaces import IRegistry\n+from zope.component import getUtility\n+from Acquisition import aq_parent\n+from importlib.metadata import distribution\n+from importlib.metadata import PackageNotFoundError\n+from plone.app.upgrade.utils import loadMigrationProfile\n+from plone.browserlayer.utils import unregister_layer\n from Products.CMFCore.utils import getToolByName\n+from zope.component import getSiteManager\n \n import logging\n \n@@ -21,3 +29,77 @@ def remove_portal_properties_tool(context):\n # AttributeError: \'PropertiesTool\' object has no attribute \'__of__\'\n portal._delOb("portal_properties")\n logger.info("Removed portal_properties tool.")\n+\n+\n+def maybe_cleanup_discussion(context):\n+ """Cleanup some left-overs from plone.app.discussion.\n+\n+ But only do this when the package is not available.\n+ In Plone 6.1, the package was made into a core add-on.\n+ Meaning: it no longer gets pulled in by Products.CMFPlone,\n+ but only by the Plone package.\n+ """\n+ # First check if the GS profile was installed.\n+ profile_id = "plone.app.discussion:default"\n+ if context.getLastVersionForProfile(profile_id) == "unknown":\n+ logger.info("%s was not installed, nothing to do.", profile_id)\n+ return\n+ try:\n+ distribution("plone.app.discussion")\n+ logger.info("The plone.app.discussion package is available, so we do nothing.")\n+ return\n+ except PackageNotFoundError:\n+ logger.info("plone.app.discussion package not found, will cleanup.")\n+\n+ # First check if there are any actual discussion items in the site.\n+ catalog = getToolByName(context, "portal_catalog")\n+ brains = catalog.unrestrictedSearchResults(portal_type="Discussion Item")\n+ total = len(brains)\n+ if total:\n+ raise ValueError(\n+ f"{total} Discussion Items (comments) were found in the site, but "\n+ "plone.app.discussion is missing.\\nThis package is optional since "\n+ "Plone 6.1.\\nPlease add plone.app.discussion to your Plone installation "\n+ "if you want to keep using them."\n+ )\n+\n+ # First apply a profile. This is mostly a copy of the uninstall profile\n+ # of plone.app.discussion.\n+ loadMigrationProfile(context, "profile-plone.app.upgrade.v61:uninstall-discussion")\n+\n+ # The registry keys were registered via the IDiscussionSettings interface\n+ # which no longer exists, so we remove them one by one.\n+ registry = getUtility(IRegistry)\n+ records = registry.records\n+ to_remove = [\n+ key\n+ for key in records.keys()\n+ if "plone.app.discussion.interfaces.IDiscussionSettings" in key\n+ ]\n+ for key in to_remove:\n+ del records[key]\n+ logger.info("Removed all IDiscussionSettings registry records.")\n+\n+ # Gather the FTIs that have the plone.allowdiscussion behavior.\n+ # It can appear with the name or the interface identifier.\n+ portal_types = getToolByName(context, "portal_types")\n+ old_behaviors = {\n+ "plone.allowdiscussion",\n+ "plone.app.dexterity.behaviors.discussion.IAllowDiscussion",\n+ }\n+ ftis_to_fix = (\n+ fti\n+ for fti in portal_types.objectValues("Dexterity FTI")\n+ if set(fti.behaviors) & old_behaviors\n+ )\n+ for fti in ftis_to_fix:\n+ # Remove the behavior. Remember this is a tuple.\n+ behaviors = [\n+ behavior for behavior in fti.behaviors if behavior not in old_behaviors\n+ ]\n+ # Set the updated behaviors\n+ fti.behaviors = tuple(behaviors)\n+ logger.info("Removed plone.allowdiscussion behavior from %s", fti)\n+\n+ # Mark GS profile as not installed/activated.\n+ context.unsetLastVersionForProfile(profile_id)\ndiff --git a/plone/app/upgrade/v61/profiles.zcml b/plone/app/upgrade/v61/profiles.zcml\nindex 1dd84f37..74cac9b2 100644\n--- a/plone/app/upgrade/v61/profiles.zcml\n+++ b/plone/app/upgrade/v61/profiles.zcml\n@@ -11,4 +11,13 @@\n provides="Products.GenericSetup.interfaces.EXTENSION"\n />\n \n+ \n+ \n+\n \ndiff --git a/plone/app/upgrade/v61/profiles/uninstall-discussion/actions.xml b/plone/app/upgrade/v61/profiles/uninstall-discussion/actions.xml\nnew file mode 100644\nindex 00000000..680e5e96\n--- /dev/null\n+++ b/plone/app/upgrade/v61/profiles/uninstall-discussion/actions.xml\n@@ -0,0 +1,13 @@\n+\n+\n+ \n+ \n+ \n+\ndiff --git a/plone/app/upgrade/v61/profiles/uninstall-discussion/browserlayer.xml b/plone/app/upgrade/v61/profiles/uninstall-discussion/browserlayer.xml\nnew file mode 100644\nindex 00000000..078a4cbb\n--- /dev/null\n+++ b/plone/app/upgrade/v61/profiles/uninstall-discussion/browserlayer.xml\n@@ -0,0 +1,6 @@\n+\n+\n+ \n+\ndiff --git a/plone/app/upgrade/v61/profiles/uninstall-discussion/catalog.xml b/plone/app/upgrade/v61/profiles/uninstall-discussion/catalog.xml\nnew file mode 100644\nindex 00000000..e4584ca6\n--- /dev/null\n+++ b/plone/app/upgrade/v61/profiles/uninstall-discussion/catalog.xml\n@@ -0,0 +1,28 @@\n+\n+\n+\n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+\n+\ndiff --git a/plone/app/upgrade/v61/profiles/uninstall-discussion/controlpanel.xml b/plone/app/upgrade/v61/profiles/uninstall-discussion/controlpanel.xml\nnew file mode 100644\nindex 00000000..f76f5d75\n--- /dev/null\n+++ b/plone/app/upgrade/v61/profiles/uninstall-discussion/controlpanel.xml\n@@ -0,0 +1,14 @@\n+\n+\n+\n+ \n+\n+\ndiff --git a/plone/app/upgrade/v61/profiles/uninstall-discussion/registry.xml b/plone/app/upgrade/v61/profiles/uninstall-discussion/registry.xml\nnew file mode 100644\nindex 00000000..b5109eae\n--- /dev/null\n+++ b/plone/app/upgrade/v61/profiles/uninstall-discussion/registry.xml\n@@ -0,0 +1,8 @@\n+\n+\n+ \n+ \n+\ndiff --git a/plone/app/upgrade/v61/profiles/uninstall-discussion/types.xml b/plone/app/upgrade/v61/profiles/uninstall-discussion/types.xml\nnew file mode 100644\nindex 00000000..e854062b\n--- /dev/null\n+++ b/plone/app/upgrade/v61/profiles/uninstall-discussion/types.xml\n@@ -0,0 +1,9 @@\n+\n+\n+ \n+\ndiff --git a/plone/app/upgrade/v61/profiles/uninstall-discussion/workflows.xml b/plone/app/upgrade/v61/profiles/uninstall-discussion/workflows.xml\nnew file mode 100644\nindex 00000000..b7269a77\n--- /dev/null\n+++ b/plone/app/upgrade/v61/profiles/uninstall-discussion/workflows.xml\n@@ -0,0 +1,13 @@\n+\n+\n+ \n+ \n+\n'