From fd4be514255798e82f3dc99c2dd0c54e2dc7257b Mon Sep 17 00:00:00 2001 From: helmutm Date: Sun, 20 Apr 2008 11:11:33 +0000 Subject: [PATCH] track concept assignments git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@2531 fd906abe-77d9-0310-91a1-e0d9ade77398 --- organize/tracking/README.txt | 11 +++++++++++ organize/tracking/change.py | 25 +++++++++++++++++++++---- organize/tracking/configure.zcml | 2 ++ 3 files changed, 34 insertions(+), 4 deletions(-) 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 @@ + +