22
22
from persistent import Persistent
23
import zope.lifecycleevent
24
from zope.catalog.text import TextIndex
23
25
from zope.container.btree import BTreeContainer
24
26
from zope.container.contained import Contained
25
27
from zope.component import adapts, adapter
26
from zope.component import getUtility
27
28
from zope.interface import implements, implementer
28
from zope.intid import addIntIdSubscriber
29
from zope.intid.interfaces import IIntIds
30
from zope.lifecycleevent import ObjectAddedEvent
31
from zope.lifecycleevent.interfaces import IObjectRemovedEvent
32
29
from zope.security.proxy import removeSecurityProxy
34
31
from schooltool.app.app import InitBase, StartUpBase
35
32
from schooltool.app.interfaces import ISchoolToolApplication
33
from schooltool.app.catalog import AttributeCatalog
34
from zope.index.text.interfaces import ISearchableText
36
35
from schooltool.cando import interfaces
37
36
from schooltool.cando.skill import URISkillSet
38
37
from schooltool.relationship import URIObject
40
39
from schooltool.relationship.interfaces import InvalidRelationship
41
40
from schooltool.relationship.interfaces import IBeforeRelationshipEvent
42
41
from schooltool.relationship.interfaces import IBeforeRemovingRelationshipEvent
42
from schooltool.table.catalog import ConvertingSetIndex
45
45
URILayer = URIObject(
475
475
child_nodes=child_nodes_in_model)
478
def nodeModifiedOnNodeLayerChange(event):
479
match = event.match(NodeLayer)
482
zope.lifecycleevent.modified(match.node)
478
485
def getOrderedByHierarchy(layers):
479
486
layers = list(layers)
531
538
if 'schooltool.cando.document' not in self.app:
532
539
self.app['schooltool.cando.document'] = DocumentContainer()
542
def get_node_layer_names(node):
543
return [l.__name__ for l in node.layers]
546
def get_node_layer_titles(node):
547
return [l.title for l in node.layers]
550
class NodeCatalog(AttributeCatalog):
552
version = '1.1 - update layers and layer titles'
553
interface = interfaces.INode
554
attributes = ('title', 'label', 'description',
555
'required', 'retired')
557
def setIndexes(self, catalog):
558
super(NodeCatalog, self).setIndexes(catalog)
559
catalog['text'] = TextIndex('getSearchableText', ISearchableText, True)
560
catalog['layers'] = ConvertingSetIndex(converter=get_node_layer_names)
561
catalog['layer_titles'] = ConvertingSetIndex(converter=get_node_layer_titles)
564
getNodeCatalog = NodeCatalog.get
567
class SearchableTextNode(object):
569
adapts(interfaces.INode)
570
implements(ISearchableText)
572
def __init__(self, context):
573
self.context = context
575
def getSearchableText(self):
578
self.context.label or '',
579
self.context.description or '',
581
result.extend([l.title for l in self.context.layers])
582
return ' '.join(result)