X-Git-Url: https://scm.cri.ensmp.fr/git/Plinn.git/blobdiff_plain/3c4367d8e03450e9a73e61f4247145d2b6c86a33..959d888c17d1403d2eeecc19bc4b5e2c8d1debf6:/ContentHistory.py?ds=inline diff --git a/ContentHistory.py b/ContentHistory.py deleted file mode 100755 index ab745a7..0000000 --- a/ContentHistory.py +++ /dev/null @@ -1,106 +0,0 @@ -# -*- coding: utf-8 -*- -####################################################################################### -# Plinn - http://plinn.org # -# Copyright © 2005-2009 Benoît PIN # -# # -# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # -####################################################################################### -""" -Module to manage history of contents (comparisons, copy to present). - - - -""" - -from Globals import InitializeClass -from AccessControl import ClassSecurityInfo -from ExtensionClass import Base -import Acquisition -from zope.interface import implements -from OFS.History import historicalRevision -from Products.PluginIndexes.common import safe_callable -from interfaces import IContentHistory -from Products.CMFCore.permissions import ModifyPortalContent -from permissions import ViewHistory -from struct import pack, unpack -from DateTime import DateTime - -class ContentHistory(Base, Acquisition.Implicit) : - """ Utility to manage historical entries of a content - """ - implements(IContentHistory) - security = ClassSecurityInfo() - - def __init__(self, content) : - self._content = content - - security.declareProtected(ViewHistory, 'listEntries') - def listEntries(self, first=0, last=20): - oid = self._content._p_oid - db = self._content._p_jar.db() - r = db.history(oid, size=last) - - if r is None: - # storage doesn't support history - return () - - r=r[first:] - - for d in r: - d['time']=DateTime(d['time']) - d['key']='.'.join(map(str, unpack(">HHHH", d['tid']))) - - return r - - security.declareProtected(ViewHistory, 'getHistoricalRevisionByKey') - def getHistoricalRevisionByKey(self, key, withContext=False): - - serial = apply(pack, ('>HHHH',) + tuple(map(int, key.split('.')))) - content = self._content - rev = historicalRevision(content, serial) - rev = rev.__of__(content.aq_parent) - if withContext is False : - return rev, DateTime(rev._p_mtime) - else : - ctx = {} - if isinstance(withContext, int) : - first = max(withContext-1, 0) - entries = self.listEntries(first=first, last=withContext+2) - - if len(entries) == 3 : - ctx['next'], ctx['current'], ctx['previous'] = entries - elif len(entries) == 2 : - serials = [e['tid'] for e in entries] - i = serials.index(serial) - if i == 0 : - # last (newest) transaction - ctx['current'], ctx['previous'] = entries - else : - ctx['next'], ctx['current'] = entries - elif len(entries) == 1 : - ctx['current'] = entries[0] - return rev, ctx - - - security.declareProtected(ViewHistory, 'compare') - def compare(self, leftkey, rightkey): - raise NotImplementedError - - - security.declareProtected(ModifyPortalContent, 'restore') - def restore(self, key): - raise NotImplementedError - -InitializeClass(ContentHistory) \ No newline at end of file