diff --git a/compound/book/view_macros.pt b/compound/book/view_macros.pt index 350e946..43be71b 100644 --- a/compound/book/view_macros.pt +++ b/compound/book/view_macros.pt @@ -7,8 +7,10 @@ tal:attributes="class string:content-$level">

+ tal:content="related/title" /> +
+
@@ -91,6 +93,7 @@
+ diff --git a/organize/stateful/browser.py b/organize/stateful/browser.py index 713d552..6ded626 100644 --- a/organize/stateful/browser.py +++ b/organize/stateful/browser.py @@ -23,7 +23,9 @@ Views and actions for states management. from zope import component from zope.app.pagetemplate import ViewPageTemplateFile from zope.cachedescriptors.property import Lazy +from zope.event import notify from zope.i18n import translate +from zope.lifecycleevent import ObjectModifiedEvent, Attributes from cybertools.browser.action import Action, actions from cybertools.composer.schema.field import Field @@ -138,8 +140,7 @@ class ChangeStateForm(ObjectForm, ChangeStateBase): @Lazy def schema(self): - # TODO: create schema directly, use field information specified - # in transition + # TODO: use field information specified in transition commentsField = Field('comments', _(u'label_transition_comments'), 'textarea', description=_(u'desc_transition_comments')) @@ -151,8 +152,11 @@ class ChangeStateForm(ObjectForm, ChangeStateBase): class ChangeState(EditObject, ChangeStateBase): def update(self): - print '***', self.request.form + comments = self.request.form.get('comments') or u'' self.stateful.doTransition(self.action) + notify(ObjectModifiedEvent(self.view.virtualTargetObject, + dict(transition=self.action, comments=comments))) + #Attributes(IStateful, 'state', 'comments'))) return True diff --git a/organize/tracking/change.py b/organize/tracking/change.py index b3e3057..98141c8 100644 --- a/organize/tracking/change.py +++ b/organize/tracking/change.py @@ -70,6 +70,12 @@ class ChangeManager(BaseRecordManager): if relation is not None: data['predicate'] = util.getUidForObject(relation.predicate) data['second'] = util.getUidForObject(relation.second) + event = kw.get('event') + if event is not None: + desc = getattr(event, 'descriptions', ()) + for item in desc: + if isinstance(item, dict): + data.update(item) if update: self.storage.updateTrack(last, data) else: @@ -90,16 +96,18 @@ class ChangeRecord(Track): @adapter(ILoopsObject, IObjectModifiedEvent) def recordModification(obj, event): - ChangeManager(obj).recordModification() + ChangeManager(obj).recordModification(event=event) @adapter(ILoopsObject, IObjectAddedEvent) def recordAdding(obj, event): - ChangeManager(obj).recordModification('add') + ChangeManager(obj).recordModification('add', event=event) @adapter(ILoopsObject, IAssignmentEvent) def recordAssignment(obj, event): - ChangeManager(obj).recordModification('assign', relation=event.relation) + ChangeManager(obj).recordModification('assign', + event=event, relation=event.relation) @adapter(ILoopsObject, IDeassignmentEvent) def recordDeassignment(obj, event): - ChangeManager(obj).recordModification('deassign', relation=event.relation) + ChangeManager(obj).recordModification('deassign', + event=event, relation=event.relation)