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..1265b45 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,10 @@ 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))) return True diff --git a/organize/stateful/view_macros.pt b/organize/stateful/view_macros.pt index 6a4286d..9aa02a8 100644 --- a/organize/stateful/view_macros.pt +++ b/organize/stateful/view_macros.pt @@ -112,7 +112,8 @@
State: - + tal:define="stateObject view/stateful/getStateObject" + tal:content="stateObject/title" /> - Transition: diff --git a/organize/tracking/change.py b/organize/tracking/change.py index b3e3057..d9e8bbd 100644 --- a/organize/tracking/change.py +++ b/organize/tracking/change.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2008 Helmut Merz helmutm@cy55.de +# Copyright (c) 2013 Helmut Merz helmutm@cy55.de # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -18,8 +18,6 @@ """ Recording changes to loops objects. - -$Id$ """ from zope.app.container.interfaces import IObjectAddedEvent, IObjectRemovedEvent @@ -53,6 +51,9 @@ class ChangeManager(BaseRecordManager): @Lazy def valid(self): + req = util.getRequest() + if req and req.form.get('organize.suppress_tracking'): + return False return (not (self.context is None or self.storage is None or self.personId is None) @@ -70,6 +71,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 +97,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)