This repository has been archived on 2023-02-21. You can view files and clone it, but cannot push or open issues or pull requests.
collective.task/src/collective/task/indexers.py

60 lines
1.6 KiB
Python
Raw Normal View History

from Acquisition import aq_parent
from five import grok
2013-07-08 09:47:36 +02:00
from plone.indexer.decorator import indexer
from Products.CMFCore.utils import getToolByName
2013-07-08 09:47:36 +02:00
from zope.lifecycleevent.interfaces import IObjectModifiedEvent
from zope.container.contained import ContainerModifiedEvent
from collective.dms.basecontent.dmsdocument import IDmsDocument
2013-07-08 09:47:36 +02:00
from collective.task.interfaces import IBaseTask
def get_document(obj):
parent = obj
while not IDmsDocument.providedBy(parent):
parent = aq_parent(parent)
if parent is None:
return obj
return parent
2013-07-08 09:47:36 +02:00
@indexer(IBaseTask)
def enquirer(obj, **kw):
2013-07-11 16:00:02 +02:00
return obj.enquirer and obj.enquirer[0] or ''
2013-07-08 09:47:36 +02:00
@indexer(IBaseTask)
def responsible(obj, **kw):
2013-07-11 16:00:02 +02:00
return obj.responsible and obj.responsible[0] or ''
@indexer(IBaseTask)
def deadline(obj, **kw):
return obj.deadline or obj.modified()
@indexer(IBaseTask)
def document_path(obj, **kw):
doc = get_document(obj)
return '/'.join(doc.getPhysicalPath())
@indexer(IBaseTask)
def document_title(obj, **kw):
doc = get_document(obj)
return doc.Title()
@grok.subscribe(IDmsDocument, IObjectModifiedEvent)
def reindex_brain_metadata_on_basetask(doc, event):
if isinstance(event, ContainerModifiedEvent):
return
catalog = getToolByName(doc, 'portal_catalog')
tasks = catalog.unrestrictedSearchResults({
'object_provides': IBaseTask.__identifier__,
'path': '/'.join(doc.getPhysicalPath())})
for b in tasks:
# reindex id index just to trigger the update of metadata on brain
b.getObject().reindexObject(idxs=['id'])