track changes also for users without Person objects; track creation of objects

git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@2940 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2008-10-26 14:22:00 +00:00
parent d1dbe47d57
commit 31c4eae66f
2 changed files with 21 additions and 9 deletions

View file

@ -50,14 +50,20 @@ class ChangeView(TrackView):
@Lazy @Lazy
def user(self): def user(self):
uid = self.metadata['userName'] uid = self.metadata['userName']
return util.getObjectForUid(uid) if uid.isdigit():
obj = util.getObjectForUid(uid)
if obj is not None:
return obj
return uid
@Lazy @Lazy
def userTitle(self): def userTitle(self):
if isinstance(self.user, basestring):
return self.user
return getattr(self.user, 'title', getName(self.user)) return getattr(self.user, 'title', getName(self.user))
@Lazy @Lazy
def userUrl(self): def userUrl(self):
user = self.user user = self.user
if user is not None: if user is not None and not isinstance(user, basestring):
return '%s/@@SelectedManagementView.html' % absoluteURL(user, self.request) return '%s/@@introspector.html' % absoluteURL(user, self.request)

View file

@ -59,7 +59,7 @@ class ChangeManager(object):
def valid(self): def valid(self):
return (not (self.context is None or return (not (self.context is None or
self.storage is None or self.storage is None or
self.person is None) self.personId is None)
and 'changes' in self.options('organize.tracking', ())) and 'changes' in self.options('organize.tracking', ()))
@Lazy @Lazy
@ -74,18 +74,20 @@ class ChangeManager(object):
return None return None
@Lazy @Lazy
def person(self): def personId(self):
principal = getCurrentPrincipal() principal = getCurrentPrincipal()
if principal is not None: if principal is not None:
return getPersonForUser(self.context, principal=principal) person = getPersonForUser(self.context, principal=principal)
if person is None:
return principal.id
return util.getUidForObject(person)
return None return None
def recordModification(self, action='modify', **kw): def recordModification(self, action='modify', **kw):
if not self.valid: if not self.valid:
return return
uid = util.getUidForObject(self.context) uid = util.getUidForObject(self.context)
personUid = util.getUidForObject(self.person) last = self.storage.getLastUserTrack(uid, 0, self.personId)
last = self.storage.getLastUserTrack(uid, 0, personUid)
update = (last is not None and last.data.get('action') == action and update = (last is not None and last.data.get('action') == action and
last.metadata['timeStamp'] >= getTimeStamp() - 5) last.metadata['timeStamp'] >= getTimeStamp() - 5)
data = dict(action=action) data = dict(action=action)
@ -96,7 +98,7 @@ class ChangeManager(object):
if update: if update:
self.storage.updateTrack(last, data) self.storage.updateTrack(last, data)
else: else:
self.storage.saveUserTrack(uid, 0, personUid, data, update) self.storage.saveUserTrack(uid, 0, self.personId, data, update)
class IChangeRecord(ITrack): class IChangeRecord(ITrack):
@ -115,6 +117,10 @@ class ChangeRecord(Track):
def recordModification(obj, event): def recordModification(obj, event):
ChangeManager(obj).recordModification() ChangeManager(obj).recordModification()
@adapter(ILoopsObject, IObjectCreatedEvent)
def recordModification(obj, event):
ChangeManager(obj).recordModification('create')
@adapter(ILoopsObject, IAssignmentEvent) @adapter(ILoopsObject, IAssignmentEvent)
def recordAssignment(obj, event): def recordAssignment(obj, event):
ChangeManager(obj).recordModification('assign', relation=event.relation) ChangeManager(obj).recordModification('assign', relation=event.relation)