## $Id: objecthistory.py 7371 2011-12-18 10:42:19Z henrik $ ## ## Copyright (C) 2011 Uli Fouquet & Henrik Bettermann ## 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, ISIRPObject from waeup.sirp.utils.helpers import get_current_principal class ObjectHistory(grok.Adapter): """A history for objects. For any object implementing `ISIRPObject` which is annotatable, we provide histories. A history for such an object can be obtained by adapting it to `IObjectHistory`. """ grok.context(ISIRPObject) 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.id == 'zope.anybody': user = 'Anonymous' else: user = user.title msg = '%s - %s by %s' % (timestamp, msg, user) msgs.append(msg) self._annotations[self.history_key] = msgs return