60 lines
1.6 KiB
Python
60 lines
1.6 KiB
Python
from Acquisition import aq_parent
|
|
from five import grok
|
|
from plone.indexer.decorator import indexer
|
|
from Products.CMFCore.utils import getToolByName
|
|
|
|
from zope.lifecycleevent.interfaces import IObjectModifiedEvent
|
|
from zope.container.contained import ContainerModifiedEvent
|
|
|
|
from collective.dms.basecontent.dmsdocument import IDmsDocument
|
|
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
|
|
|
|
@indexer(IBaseTask)
|
|
def enquirer(obj, **kw):
|
|
return obj.enquirer and obj.enquirer[0] or ''
|
|
|
|
|
|
@indexer(IBaseTask)
|
|
def responsible(obj, **kw):
|
|
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'])
|