plone.app.discussion/plone/app/discussion/patches.py

48 lines
1.7 KiB
Python
Raw Normal View History

from Acquisition import aq_inner, aq_parent
from zope.annotation.interfaces import IAnnotations
from Products.CMFPlone.utils import base_hasattr
from Products.CMFPlone.utils import safe_callable
from Products.CMFCore.utils import getToolByName
from plone.app.discussion.conversation import ANNOTATION_KEY
# security.declareProtected(ManageZCatalogEntries, 'clearFindAndRebuild')
def patchedClearFindAndRebuild(self):
"""Empties catalog, then finds all contentish objects (i.e. objects
with an indexObject method), and reindexes them.
This may take a long time.
"""
def indexObject(obj, path):
if (base_hasattr(obj, 'indexObject') and
safe_callable(obj.indexObject)):
try:
obj.indexObject()
annotions = IAnnotations(obj)
catalog = getToolByName(obj, 'portal_catalog', None)
if ANNOTATION_KEY in annotions:
conversation = annotions[ANNOTATION_KEY]
conversation = conversation.__of__(obj)
for comment in conversation.getComments():
try:
comment = comment.__of__(conversation)
if catalog:
catalog.indexObject(comment)
except StopIteration: # pragma: no cover
pass
except TypeError:
# Catalogs have 'indexObject' as well, but they
# take different args, and will fail
pass
self.manage_catalogClear()
portal = aq_parent(aq_inner(self))
portal.ZopeFindAndApply(portal, search_sub=True, apply_func=indexObject)