diff --git a/organize/tracking/README.txt b/organize/tracking/README.txt
index 8c08d90..21334f1 100644
--- a/organize/tracking/README.txt
+++ b/organize/tracking/README.txt
@@ -59,6 +59,17 @@ Recording changes to objects
>>> len(changes)
1
+Recording assignment changes
+----------------------------
+
+ >>> from loops.organize.tracking.change import recordAssignment, recordDeassignment
+ >>> component.provideHandler(recordAssignment)
+ >>> component.provideHandler(recordDeassignment)
+
+ >>> t01.assignChild(johnC)
+ >>> len(changes)
+ 2
+
Fin de partie
=============
diff --git a/organize/tracking/change.py b/organize/tracking/change.py
index c2e7da4..2946849 100644
--- a/organize/tracking/change.py
+++ b/organize/tracking/change.py
@@ -78,14 +78,23 @@ class ChangeManager(object):
return getPersonForUser(self.context, principal=principal)
return None
- def recordModification(self, event=None):
+ def recordModification(self, action='modify', **kw):
if not self.valid:
return
uid = util.getUidForObject(self.context)
personUid = util.getUidForObject(self.person)
last = self.storage.getLastUserTrack(uid, 0, personUid)
- if last is None or last.metadata['timeStamp'] < getTimeStamp() - 5:
- self.storage.saveUserTrack(uid, 0, personUid, dict(action='modify'))
+ update = (last is not None and last.data.get('action') == action and
+ last.metadata['timeStamp'] >= getTimeStamp() - 5)
+ data = dict(action=action)
+ relation = kw.get('relation')
+ if relation is not None:
+ data['predicate'] = util.getUidForObject(relation.predicate)
+ data['second'] = util.getUidForObject(relation.second)
+ if update:
+ self.storage.updateTrack(last, data)
+ else:
+ self.storage.saveUserTrack(uid, 0, personUid, data, update)
class ChangeRecord(Track):
@@ -95,4 +104,12 @@ class ChangeRecord(Track):
@adapter(ILoopsObject, IObjectModifiedEvent)
def recordModification(obj, event):
- ChangeManager(obj).recordModification(event)
+ ChangeManager(obj).recordModification()
+
+@adapter(ILoopsObject, IAssignmentEvent)
+def recordAssignment(obj, event):
+ ChangeManager(obj).recordModification('assign', relation=event.relation)
+
+@adapter(ILoopsObject, IDeassignmentEvent)
+def recordDeassignment(obj, event):
+ ChangeManager(obj).recordModification('deassign', relation=event.relation)
diff --git a/organize/tracking/configure.zcml b/organize/tracking/configure.zcml
index c192bec..2b0cee7 100644
--- a/organize/tracking/configure.zcml
+++ b/organize/tracking/configure.zcml
@@ -17,6 +17,8 @@
+
+