from OFS.Folder import Folder
from OFS.Image import File
from OFS.Image import cookId
from Globals import DTMLFile, InitializeClass
from Products.PageTemplates.PageTemplateFile import PageTemplateFile
from AccessControl import getSecurityManager
from Products.PageTemplates.PageTemplate import PageTemplate
from AccessControl import ClassSecurityInfo
def sortv(x,y):
return cmp(x[0],y[0])
class versionedFileFolder(Folder):
"""Folder with versioned files"""
meta_type = "versionedFileFolder"
security= ClassSecurityInfo()
security.declareProtected('AUTHENTICATED_USER','addFileForm')
def getVersionedFiles(self):
"""get all versioned files"""
versionedFiles=self.ZopeFind(self,obj_metatypes="versionedFiles")
print versionedFiles
return versionedFiles
def index_html(self):
"""main"""
pt=PageTemplateFile('Products/versionedFile/zpt/versionFileFolderMain').__of__(self)
return pt()
def addFileForm(self):
"""add a file"""
out=DTMLFile('dtml/newFileAdd', globals(),Kind='VersionedFileObject',kind='versionedFileObject',version='1').__of__(self)
return out()
def addFile(self,vC,file,content_type='',RESPONSE=None):
""" add a new file"""
id=file.filename
vC=self.REQUEST.form['vC']
manage_addVersionedFile(self,id,'','')
ob=self._getOb(id)
ob.title=id
print "MYVC",vC
ob.manage_addVersionedFileObject(self,id,vC,file,content_type=content_type)
RESPONSE.redirect(self.REQUEST['URL1'])
manage_addVersionedFileFolderForm=DTMLFile('dtml/folderAdd', globals())
def manage_addVersionedFileFolder(self, id, title='',
createPublic=0,
createUserF=0,
REQUEST=None):
"""Add a new Folder object with id *id*.
If the 'createPublic' and 'createUserF' parameters are set to any true
value, an 'index_html' and a 'UserFolder' objects are created respectively
in the new folder.
"""
ob=versionedFileFolder()
ob.id=str(id)
ob.title=title
self._setObject(id, ob)
ob=self._getOb(id)
checkPermission=getSecurityManager().checkPermission
if createUserF:
if not checkPermission('Add User Folders', ob):
raise Unauthorized, (
'You are not authorized to add User Folders.'
)
ob.manage_addUserFolder()
if REQUEST is not None:
return self.manage_main(self, REQUEST, update_menu=1)
class versionedFileObject(File):
"""File Object im Folder"""
meta_type = "versionedFileObject"
manage_editForm =DTMLFile('dtml/fileEdit',globals(),
Kind='File',kind='file')
manage_editForm._setName('manage_editForm')
def setVersionNumber(self,versionNumber):
"""set version"""
self.versionNumber=versionNumber
def getVersionNumber(self):
"""get version"""
return self.versionNumber
def lastEditor(self):
"""last Editor"""
jar=self._p_jar
oid=self._p_oid
if jar is None or oid is None: return None
return jar.db().history(oid)[0]['user_name']
manage_addVersionedFileObjectForm=DTMLFile('dtml/fileAdd', globals(),Kind='VersionedFileObject',kind='versionedFileObject', version='1')
def manage_addVersionedFileObject(self,id,vC='',file='',title='',precondition='', content_type='',
REQUEST=None):
"""Add a new File object.
Creates a new File object 'id' with the contents of 'file'"""
id=str(id)
title=str(title)
content_type=str(content_type)
precondition=str(precondition)
id, title = cookId(id, title, file)
self=self.this()
# First, we create the file without data:
self._setObject(id, versionedFileObject(id,title,'',content_type, precondition))
self._getOb(id).versionComment=str(vC)
# Now we "upload" the data. By doing this in two steps, we
# can use a database trick to make the upload more efficient.
if file:
self._getOb(id).manage_upload(file)
if content_type:
self._getOb(id).content_type=content_type
if REQUEST is not None:
REQUEST['RESPONSE'].redirect(self.absolute_url()+'/manage_main')
class versionedFile(Folder):
"""Versioniertes File"""
def __init__(self, id, title, lockedBy):
"""init"""
self.id=id
self.title=title
self.lockedBy=lockedBy
meta_type="versionedFile"
def getLastVersion(self):
"""Last Version"""
tmp=0
lastVersion=None
print "FI",self.ZopeFind(self)
for version in self.ZopeFind(self):
print version
if hasattr(version[1],'versionNumber'):
print "HI",version[1].versionNumber
if int(version[1].versionNumber) > tmp:
tmp=int(version[1].versionNumber,)
lastVersion=version[1]
return lastVersion
def index_html(self):
"""main view"""
lastVersion=self.getLastVersion()
#return "File:"+self.title+" Version:%i"%lastVersion.versionNumber," modified:",lastVersion.bobobase_modification_time()," size:",lastVersion.getSize(),"modified by:",lastVersion.lastEditor()
return "File: %s Version:%i modified:%s size:%s modified by:%s"%(self.title,lastVersion.versionNumber,lastVersion.bobobase_modification_time(),lastVersion.getSize(),lastVersion.lastEditor())
def getVersion(self):
tmp=0
for version in self.ZopeFind(self):
print version
if hasattr(version[1],'versionNumber'):
print "HI",version[1].versionNumber
if int(version[1].versionNumber) > tmp:
tmp=int(version[1].versionNumber,)
return tmp+1
security= ClassSecurityInfo()
security.declareProtected('AUTHENTICATED_USER','unlock')
def history(self):
"""history"""
pt=PageTemplateFile('Products/versionedFile/zpt/versionHistory').__of__(self)
return pt()
def getVersions(self):
"""get all versions"""
ret=[]
for version in self.ZopeFind(self):
if hasattr(version[1],'versionNumber'):
ret.append((version[1].versionNumber,version[1]))
ret.sort(sortv)
return ret
def unlock(self,RESPONSE):
"""unlock"""
if str(self.lockedBy) in str(self.REQUEST['AUTHENTICATED_USER']):
self.lockedBy=''
RESPONSE.redirect(self.REQUEST['URL2'])
else:
return "Sorry, not locked by you! (%s,%s)"%(self.lockedBy,self.REQUEST['AUTHENTICATED_USER'])
security= ClassSecurityInfo()
security.declareProtected('AUTHENTICATED_USER','addVersionedFileObjectForm')
def addVersionedFileObjectForm(self):
"""add a new version"""
print self.REQUEST['AUTHENTICATED_USER']
if str(self.REQUEST['AUTHENTICATED_USER']) in "Anonymous User":
return "please login first"
if (self.lockedBy==self.REQUEST['AUTHENTICATED_USER']) or (self.lockedBy==''):
out=DTMLFile('dtml/fileAdd', globals(),Kind='VersionedFileObject',kind='versionedFileObject',version=self.getVersion()).__of__(self)
return out()
else:
return "Sorry file is locked by somebody else"
def manage_addVersionedFileObject(self,id,vC,file='',title='',precondition='', content_type='',RESPONSE=None):
"""add"""
vC=self.REQUEST['vC']
id="V%i"%self.getVersion()+"_"+self.title
manage_addVersionedFileObject(self,id,vC,file,"V%i"%self.getVersion()+"_"+self.title,precondition, content_type)
objs=self.ZopeFind(self,obj_ids=[id])[0][1].setVersionNumber(int(self.getVersion()))
if RESPONSE:
RESPONSE.redirect(self.REQUEST['URL2'])
security.declareProtected('AUTHENTICATED_USER','downloadLocked')
def downloadLocked(self):
"""download and lock"""
if self.REQUEST['AUTHENTICATED_USER']=='Anonymous User':
return "please login first"
if not self.lockedBy=="":
return "cannot be locked because is already locked by %s"%self.lockedBy
self.lockedBy=self.REQUEST['AUTHENTICATED_USER']
self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1']+'/'+self.getId()+'/'+self.getLastVersion().getId())
def manage_addVersionedFileForm(self):
"""interface for adding the OSAS_root"""
pt=PageTemplateFile('Products/versionedFile/zpt/addVersionedFile.zpt').__of__(self)
return pt()
def manage_addVersionedFile(self,id,title,lockedBy, RESPONSE=None):
"""add the OSAS_root"""
newObj=versionedFile(id,title,lockedBy)
self._setObject(id,newObj)
if RESPONSE is not None:
RESPONSE.redirect('manage_main')
InitializeClass(versionedFile)
InitializeClass(versionedFileFolder)
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>