add indexing of place

This commit is contained in:
Frédéric Péters 2011-12-01 20:37:18 +01:00
parent a3120e3616
commit db831555ad
5 changed files with 73 additions and 1 deletions

View File

@ -30,7 +30,12 @@
edit_permission="tabellio.agenda.AddAgendaPortlet"
/>
<plone:behavior
title="Event SearchableText indexer behavior"
description="Enables the dynamic SearchableText indexer for Events"
provides="tabellio.agenda.indexer.IEventIndexer"
for="plone.dexterity.interfaces.IDexterityContent"
/>
<!-- Register an extension profile to make the product installable -->
<genericsetup:registerProfile

View File

@ -0,0 +1,64 @@
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
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')

View File

@ -23,6 +23,7 @@
<!-- enabled behaviors -->
<property name="behaviors">
<element value="plone.app.content.interfaces.INameFromTitle" />
<element value="tabellio.agenda.indexer.IEventIndexer"/>
</property>
<!-- View information -->

View File

@ -23,6 +23,7 @@
<!-- enabled behaviors -->
<property name="behaviors">
<element value="plone.app.content.interfaces.INameFromTitle" />
<element value="tabellio.agenda.indexer.IEventIndexer"/>
</property>
<!-- View information -->

View File

@ -23,6 +23,7 @@
<!-- enabled behaviors -->
<property name="behaviors">
<element value="plone.app.content.interfaces.INameFromTitle" />
<element value="tabellio.agenda.indexer.IEventIndexer"/>
</property>
<!-- View information -->