diff --git a/i18n/browser.py b/i18n/browser.py index 5a82329..d01bcb1 100644 --- a/i18n/browser.py +++ b/i18n/browser.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2012 Helmut Merz helmutm@cy55.de +# Copyright (c) 2015 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 @@ -20,6 +20,7 @@ View extension for support of i18n content. """ +from datetime import date, datetime from zope import interface, component from zope.app.pagetemplate import ViewPageTemplateFile from zope.app.session.interfaces import ISession @@ -28,6 +29,7 @@ from zope.i18n.interfaces import IUserPreferredLanguages from zope.i18n.negotiator import negotiator from cybertools.meta.interfaces import IOptions +from cybertools.util import format from loops.common import adapted @@ -76,6 +78,8 @@ class I18NView(object): """ View mix-in class. """ + timeStampFormat = 'short' + @Lazy def languageInfo(self): return LanguageInfo(self.context, self.request) @@ -114,3 +118,10 @@ class I18NView(object): self.setLanguage(lang) return self() + def formatTimeStamp(self, ts, f='dateTime'): + if not ts: + return u'' + value = datetime.fromtimestamp(ts) + return format.formatDate(value, f, self.timeStampFormat, + self.languageInfo.language) + diff --git a/organize/party.py b/organize/party.py index 1d87a7f..a5a2876 100644 --- a/organize/party.py +++ b/organize/party.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2013 Helmut Merz helmutm@cy55.de +# Copyright (c) 2015 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 @@ -35,7 +35,7 @@ from zope.traversing.api import getName from cybertools.organize.party import Person as BasePerson from cybertools.relation.interfaces import IRelationRegistry from cybertools.typology.interfaces import IType -from loops.common import AdapterBase +from loops.common import AdapterBase, baseObject from loops.concept import Concept from loops.interfaces import IConcept from loops.organize.interfaces import IAddress, IPerson, IHasRole @@ -64,7 +64,7 @@ def getPersonForUser(context, request=None, principal=None): principal = getattr(request, 'principal', None) if principal is None: return None - loops = context.getLoopsRoot() + loops = baseObject(context).getLoopsRoot() pa = annotations(principal).get(ANNOTATION_KEY, None) if pa is None: return None diff --git a/organize/personal/browser/notification.py b/organize/personal/browser/notification.py index 17bb00a..90697f3 100644 --- a/organize/personal/browser/notification.py +++ b/organize/personal/browser/notification.py @@ -24,7 +24,9 @@ from zope import component from zope.app.pagetemplate import ViewPageTemplateFile from zope.cachedescriptors.property import Lazy +from cybertools.util.date import formatTimeStamp from loops.browser.concept import ConceptView +from loops.common import adapted, baseObject from loops.organize.personal.notification import Notifications from loops.organize.party import getPersonForUser from loops import util @@ -50,3 +52,22 @@ class NotificationsListing(ConceptView): def getNotifications(self, unreadOnly=True): tracks = self.notifications.listTracks() return tracks + + def getNotificationsFormatted(self, unreadOnly=True): + result = [] + for track in self.getNotifications(unreadOnly): + data = track.data + s = util.getObjectForUid(data.get('sender')) + sender = dict(label=s.title, + url=self.nodeView.getUrlForTarget(baseObject(s))) + obj = util.getObjectForUid(track.taskId) + object = dict(label=obj.title, + url=self.nodeView.getUrlForTarget(baseObject(obj))) + read_ts = self.formatTimeStamp(data.get('read_ts')) + item = dict(timeStamp=self.formatTimeStamp(track.timeStamp), + sender=sender, + object=object, + text=data.get('text') or u'', + read_ts=read_ts) + result.append(item) + return result diff --git a/organize/personal/browser/personal_macros.pt b/organize/personal/browser/personal_macros.pt index 108acdd..c5988f8 100644 --- a/organize/personal/browser/personal_macros.pt +++ b/organize/personal/browser/personal_macros.pt @@ -58,9 +58,16 @@