20
20
from zope.catalog.interfaces import ICatalog
21
21
from zope.component import getUtility
22
from zope.intid.interfaces import IIntIds
22
23
from zope.security.proxy import removeSecurityProxy
24
from zc.catalog.catalogindex import ValueIndex
25
from zc.catalog.extentcatalog import Catalog
26
from zc.catalog.extentcatalog import FilterExtent
25
from schooltool.app.catalog import AttributeCatalog
26
from schooltool.contact.interfaces import IContact
27
from schooltool.person.interfaces import IPerson
28
28
from schooltool.table.catalog import ConvertingIndex
29
from schooltool.table.catalog import FilterImplementing
30
from schooltool.utility.utility import UtilitySetUp
35
INTERVENTION_CATALOG_KEY = 'schooltool.intervention'
39
return Catalog(FilterExtent(FilterImplementing(
40
interfaces.IInterventionMarker)))
43
def catalogSetUp(catalog):
44
catalog['first_name'] = ConvertingIndex(converter=getStudentFirstName)
45
catalog['last_name'] = ConvertingIndex(converter=getStudentLastName)
46
catalog['persons_responsible'] = ConvertingIndex(
47
converter=interfaces.IInterventionPersonsResponsible)
48
catalog['created'] = ValueIndex('created')
49
catalog['schoolYearId'] = ConvertingIndex(converter=getSchoolYearId)
50
catalog['intervention_type'] = ConvertingIndex(
51
converter=interfaces.IInterventionType)
54
catalogSetUpSubscriber = UtilitySetUp(
55
catalogFactory, ICatalog, INTERVENTION_CATALOG_KEY, setUp=catalogSetUp)
58
def getInterventionCatalog(container):
59
return getUtility(ICatalog, INTERVENTION_CATALOG_KEY)
30
import interfaces, intervention
33
class InterventionCatalog(AttributeCatalog):
34
version = '1 - replaced catalog utility'
35
interface = interfaces.IInterventionMarker
36
attributes = ('created',)
38
def setIndexes(self, catalog):
39
super(InterventionCatalog, self).setIndexes(catalog)
40
catalog['first_name'] = ConvertingIndex(converter=getStudentFirstName)
41
catalog['last_name'] = ConvertingIndex(converter=getStudentLastName)
42
catalog['persons_responsible'] = ConvertingIndex(
43
converter=interfaces.IInterventionPersonsResponsible)
44
catalog['schoolYearId'] = ConvertingIndex(converter=getSchoolYearId)
45
catalog['intervention_type'] = ConvertingIndex(
46
converter=interfaces.IInterventionType)
49
getInterventionCatalog = InterventionCatalog.get
62
52
def getStudentFirstName(obj):
63
return obj.student.first_name
53
return IContact(IPerson(obj)).first_name
66
56
def getStudentLastName(obj):
67
return obj.student.last_name
57
return IContact(IPerson(obj)).last_name
70
60
def getMessagePersonsResponsible(obj):
61
util = getUtility(IIntIds)
62
return [util.getId(contact) for contact in obj.recipients]
74
65
def getGoalPersonsResponsible(obj):
75
66
# XXX not using removeSecurityProxy caused ZODB to crash
76
67
# Cannot pickle <type 'zope.security._proxy._Proxy'> objects
77
return removeSecurityProxy(obj.persons_responsible)
68
util = getUtility(IIntIds)
69
return [util.getId(contact)
70
for contact in removeSecurityProxy(obj.persons_responsible)]
80
73
def getMessageType(obj):
103
96
value = value[:47] + '...'
100
def updatePersonsResponsibleIndex(event):
101
if event.rel_type != intervention.URIResponsible:
103
if (interfaces.IInterventionMessage.providedBy(event.participant1) or
104
interfaces.IInterventionGoal.providedBy(event.participant1)):
105
obj = event.participant1
107
obj = event.participant2
109
util = getUtility(IIntIds)
110
catalog = getInterventionCatalog()
113
obj_intid = util.queryId(obj)
114
if obj_intid is not None and obj_intid in catalog.extent:
115
catalog.index_doc(obj_intid, obj)