## ## objecthistory.py ## Login : ## Started on Fri Jun 10 16:06:02 2011 Uli Fouquet ## $Id$ ## ## Copyright (C) 2011 Uli Fouquet ## 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 ## the Free Software Foundation; either version 2 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; if not, write to the Free Software ## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ## import grok from datetime import datetime from persistent.list import PersistentList from zope.annotation.interfaces import IAnnotations from waeup.sirp.interfaces import IObjectHistory, IWAeUPObject from waeup.sirp.utils.helpers import get_current_principal class ObjectHistory(grok.Adapter): """A history for objects. For any object implementing `IWAeUPObject` which is annotatable, we provide histories. A history for such an object can be obtained by adapting it to `IObjectHistory`. """ grok.context(IWAeUPObject) grok.implements(IObjectHistory) history_key = 'waeup.history' def __init__(self, context): from zope.security.proxy import removeSecurityProxy self.context = removeSecurityProxy(context) self._annotations = IAnnotations(self.context) def _getMessages(self): return self._annotations.get(self.history_key, PersistentList()) @property def messages(self): """Get all messages as a persistent list of strings. """ return self._getMessages() def addMessage(self, msg): """Add the message (history entry) in msg. Any message will be stored with a timestamp and the current user (principal). """ msgs = self._getMessages() timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") user = get_current_principal() if user is None: user = 'system' elif user.title == 'Applicant': user = 'applicant' else: user = user.id msg = '%s - %s by %s' % (timestamp, msg, user) msgs.append(msg) self._annotations[self.history_key] = msgs return