From 9947ba32f8e54f691a866810598d73bdc8e240e1 Mon Sep 17 00:00:00 2001 From: hvelarde Date: Thu, 14 Jan 2016 16:37:02 -0200 Subject: [PATCH] Clean to make it run under Plone 5 * remove hard dependency to Products.Archetypes * remove subscriber to IObjectAddedEvent; when a tile is added, there nothing on it so it makes no sense to update link integrity references * add conditionals to allow running the code under both, Plone 4 and 5 * use a better name for the event handler * remove all checking that is irrelevant; all of those things have to be present under Plone 4 --- setup.py | 1 - src/collective/cover/events.py | 45 +++++++++++---------------- src/collective/cover/subscribers.zcml | 15 +++------ 3 files changed, 23 insertions(+), 38 deletions(-) diff --git a/setup.py b/setup.py index 48855ca9b..f899abba6 100644 --- a/setup.py +++ b/setup.py @@ -80,7 +80,6 @@ 'plone.tiles', 'plone.uuid', 'plone.z3cform', - 'Products.Archetypes', 'Products.CMFCore', 'Products.CMFPlone >=4.2', 'Products.GenericSetup', diff --git a/src/collective/cover/events.py b/src/collective/cover/events.py index 6d58b3bef..a2b062333 100644 --- a/src/collective/cover/events.py +++ b/src/collective/cover/events.py @@ -1,16 +1,20 @@ # -*- coding: utf-8 -*- +from collective.cover.config import PLONE_VERSION from collective.cover.interfaces import ICover from five import grok -from plone import api from plone.app.iterate.interfaces import ICheckinEvent from plone.app.linkintegrity.handlers import getObjectsFromLinks -from plone.app.linkintegrity.handlers import referencedRelationship from plone.app.linkintegrity.parser import extractLinks -from plone.app.linkintegrity.references import updateReferences from plone.app.textfield.value import RichTextValue -from Products.Archetypes.interfaces import IReferenceable from zope.annotation.interfaces import IAnnotations +if PLONE_VERSION.startswith('5'): + from plone.app.linkintegrity.handlers import updateReferences +else: + from plone.app.linkintegrity.handlers import referencedRelationship + from plone.app.linkintegrity.references import updateReferences + from Products.Archetypes.interfaces import IReferenceable + @grok.subscribe(ICover, ICheckinEvent) def override_object_annotations(cover, event): @@ -35,29 +39,15 @@ def override_object_annotations(cover, event): old_annotations[key] = new_annotations[key] -def modifiedCoverTile(obj, event): - """Ensure link integrity on Rich Text tiles. +def update_link_integrity(obj, event): + """Update link integrity information on modification/removal of + tiles. - Keyword arguments: - obj -- Dexterity-based object that was modified - event -- event fired + :param obj: cover object that was modified + :type obj: Dexterity-based content type + :param event: event fired + :type event: """ - pu = api.portal.get_tool('portal_url') - if pu is None: - # `getObjectFromLinks` is not possible without access - # to `portal_url` - return - rc = api.portal.get_tool('reference_catalog') - if rc is None: - # `updateReferences` is not possible without access - # to `reference_catalog` - return - referenceable_parent = IReferenceable(obj.context, None) - if referenceable_parent is None: - # `updateReferences` is not possible - # if parent object isn't referenceable - return - refs = set() for name, value in obj.data.items(): @@ -68,4 +58,7 @@ def modifiedCoverTile(obj, event): links = extractLinks(value) refs |= getObjectsFromLinks(obj.context, links) - updateReferences(IReferenceable(obj.context), referencedRelationship, refs) + if PLONE_VERSION.startswith('5'): + updateReferences(obj.context, refs) + else: + updateReferences(IReferenceable(obj.context), referencedRelationship, refs) diff --git a/src/collective/cover/subscribers.zcml b/src/collective/cover/subscribers.zcml index ea1aa9e6f..c6c615138 100644 --- a/src/collective/cover/subscribers.zcml +++ b/src/collective/cover/subscribers.zcml @@ -1,31 +1,24 @@ + xmlns:zcml="http://namespaces.zope.org/zcml"> - - -