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.
tabellio.agenda/tabellio/agenda/indexer.py

66 lines
1.8 KiB
Python

from zope.interface import Interface
from five import grok
from plone.indexer import indexer
from plone.z3cform import z2
from z3c.form.interfaces import IFormLayer
from event import IEvent
from parlevent import IParlEvent
from comevent import IComEvent
from burevent import IBurEvent
class IEventIndexer(Interface):
"""Dexterity behavior interface for enabling the dynamic SearchableText
indexer on Event objects."""
class FakeView(object):
"""This fake view is used for enabled z3c forms z2 mode on.
"""
def __init__(self, context, request):
self.context = context
self.request = request
@indexer(IEventIndexer)
def event_dynamic_searchable_text_indexer(obj):
"""Dynamic searchable text indexer.
"""
# We need to make sure that we have z2 mode switched on for z3c form.
# Since we do not really have any view to do this on, we just use
# a fake view. For switching z2 mode on, it's only necessary that
# there is a view.request.
view = FakeView(obj, obj.REQUEST)
z2.switch_on(view, request_layer=IFormLayer)
indexed = []
for fieldname in ('title', 'place',):
try:
value = getattr(obj, fieldname)
except AttributeError:
continue
if not value:
continue
if type(value) is list:
for item in value:
item_value = item.to_object.title
# be sure that it is utf-8 encoded
if isinstance(item_value, unicode):
item_value = item_value.encode('utf-8')
indexed.append(item_value)
else:
if isinstance(value, unicode):
value = value.encode('utf-8')
indexed.append(value)
return ' '.join(indexed)
grok.global_adapter(event_dynamic_searchable_text_indexer,
name='SearchableText')