Annotation of versionedFile/versionedFile.py, revision 1.1
1.1 ! dwinter 1: from OFS.Folder import Folder
! 2: from OFS.Image import File
! 3: from OFS.Image import cookId
! 4: from Globals import DTMLFile, InitializeClass
! 5: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
! 6: from AccessControl import getSecurityManager
! 7: from Products.PageTemplates.PageTemplate import PageTemplate
! 8: from AccessControl import ClassSecurityInfo
! 9:
! 10: def sortv(x,y):
! 11: return cmp(x[0],y[0])
! 12:
! 13: class versionedFileFolder(Folder):
! 14: """Folder with versioned files"""
! 15:
! 16: meta_type = "versionedFileFolder"
! 17:
! 18: security= ClassSecurityInfo()
! 19: security.declareProtected('AUTHENTICATED_USER','addFileForm')
! 20:
! 21: def getVersionedFiles(self):
! 22: """get all versioned files"""
! 23: versionedFiles=self.ZopeFind(self,obj_metatypes="versionedFiles")
! 24: print versionedFiles
! 25: return versionedFiles
! 26:
! 27:
! 28: def index_html(self):
! 29: """main"""
! 30: pt=PageTemplateFile('Products/versionedFile/zpt/versionFileFolderMain').__of__(self)
! 31: return pt()
! 32:
! 33:
! 34: def addFileForm(self):
! 35: """add a file"""
! 36: out=DTMLFile('dtml/newFileAdd', globals(),Kind='VersionedFileObject',kind='versionedFileObject',version='1').__of__(self)
! 37: return out()
! 38:
! 39:
! 40: def addFile(self,vC,file,content_type='',RESPONSE=None):
! 41: """ add a new file"""
! 42: id=file.filename
! 43:
! 44: vC=self.REQUEST.form['vC']
! 45: manage_addVersionedFile(self,id,'','')
! 46: ob=self._getOb(id)
! 47: ob.title=id
! 48: print "MYVC",vC
! 49: ob.manage_addVersionedFileObject(self,id,vC,file,content_type=content_type)
! 50:
! 51: RESPONSE.redirect(self.REQUEST['URL1'])
! 52:
! 53:
! 54: manage_addVersionedFileFolderForm=DTMLFile('dtml/folderAdd', globals())
! 55:
! 56:
! 57: def manage_addVersionedFileFolder(self, id, title='',
! 58: createPublic=0,
! 59: createUserF=0,
! 60: REQUEST=None):
! 61: """Add a new Folder object with id *id*.
! 62:
! 63: If the 'createPublic' and 'createUserF' parameters are set to any true
! 64: value, an 'index_html' and a 'UserFolder' objects are created respectively
! 65: in the new folder.
! 66: """
! 67: ob=versionedFileFolder()
! 68: ob.id=str(id)
! 69: ob.title=title
! 70: self._setObject(id, ob)
! 71: ob=self._getOb(id)
! 72:
! 73: checkPermission=getSecurityManager().checkPermission
! 74:
! 75: if createUserF:
! 76: if not checkPermission('Add User Folders', ob):
! 77: raise Unauthorized, (
! 78: 'You are not authorized to add User Folders.'
! 79: )
! 80: ob.manage_addUserFolder()
! 81:
! 82:
! 83: if REQUEST is not None:
! 84: return self.manage_main(self, REQUEST, update_menu=1)
! 85:
! 86:
! 87:
! 88: class versionedFileObject(File):
! 89: """File Object im Folder"""
! 90:
! 91: meta_type = "versionedFileObject"
! 92:
! 93: manage_editForm =DTMLFile('dtml/fileEdit',globals(),
! 94: Kind='File',kind='file')
! 95: manage_editForm._setName('manage_editForm')
! 96:
! 97:
! 98: def setVersionNumber(self,versionNumber):
! 99: """set version"""
! 100: self.versionNumber=versionNumber
! 101:
! 102: def getVersionNumber(self):
! 103: """get version"""
! 104: return self.versionNumber
! 105:
! 106: def lastEditor(self):
! 107: """last Editor"""
! 108: jar=self._p_jar
! 109: oid=self._p_oid
! 110: if jar is None or oid is None: return None
! 111: return jar.db().history(oid)[0]['user_name']
! 112:
! 113:
! 114:
! 115:
! 116: manage_addVersionedFileObjectForm=DTMLFile('dtml/fileAdd', globals(),Kind='VersionedFileObject',kind='versionedFileObject', version='1')
! 117:
! 118: def manage_addVersionedFileObject(self,id,vC='',file='',title='',precondition='', content_type='',
! 119: REQUEST=None):
! 120: """Add a new File object.
! 121:
! 122: Creates a new File object 'id' with the contents of 'file'"""
! 123:
! 124: id=str(id)
! 125: title=str(title)
! 126: content_type=str(content_type)
! 127: precondition=str(precondition)
! 128:
! 129: id, title = cookId(id, title, file)
! 130:
! 131: self=self.this()
! 132:
! 133: # First, we create the file without data:
! 134: self._setObject(id, versionedFileObject(id,title,'',content_type, precondition))
! 135: self._getOb(id).versionComment=str(vC)
! 136:
! 137: # Now we "upload" the data. By doing this in two steps, we
! 138: # can use a database trick to make the upload more efficient.
! 139: if file:
! 140: self._getOb(id).manage_upload(file)
! 141: if content_type:
! 142: self._getOb(id).content_type=content_type
! 143:
! 144: if REQUEST is not None:
! 145: REQUEST['RESPONSE'].redirect(self.absolute_url()+'/manage_main')
! 146:
! 147:
! 148:
! 149:
! 150: class versionedFile(Folder):
! 151: """Versioniertes File"""
! 152:
! 153: def __init__(self, id, title, lockedBy):
! 154: """init"""
! 155: self.id=id
! 156: self.title=title
! 157: self.lockedBy=lockedBy
! 158:
! 159: meta_type="versionedFile"
! 160:
! 161: def getLastVersion(self):
! 162: """Last Version"""
! 163: tmp=0
! 164: lastVersion=None
! 165: print "FI",self.ZopeFind(self)
! 166: for version in self.ZopeFind(self):
! 167: print version
! 168: if hasattr(version[1],'versionNumber'):
! 169: print "HI",version[1].versionNumber
! 170: if int(version[1].versionNumber) > tmp:
! 171: tmp=int(version[1].versionNumber,)
! 172: lastVersion=version[1]
! 173: return lastVersion
! 174:
! 175: def index_html(self):
! 176: """main view"""
! 177: lastVersion=self.getLastVersion()
! 178: #return "File:"+self.title+" Version:%i"%lastVersion.versionNumber," modified:",lastVersion.bobobase_modification_time()," size:",lastVersion.getSize(),"modified by:",lastVersion.lastEditor()
! 179: return "File: %s Version:%i modified:%s size:%s modified by:%s"%(self.title,lastVersion.versionNumber,lastVersion.bobobase_modification_time(),lastVersion.getSize(),lastVersion.lastEditor())
! 180:
! 181: def getVersion(self):
! 182: tmp=0
! 183: for version in self.ZopeFind(self):
! 184: print version
! 185: if hasattr(version[1],'versionNumber'):
! 186: print "HI",version[1].versionNumber
! 187: if int(version[1].versionNumber) > tmp:
! 188: tmp=int(version[1].versionNumber,)
! 189: return tmp+1
! 190:
! 191: security= ClassSecurityInfo()
! 192: security.declareProtected('AUTHENTICATED_USER','unlock')
! 193:
! 194: def history(self):
! 195: """history"""
! 196: pt=PageTemplateFile('Products/versionedFile/zpt/versionHistory').__of__(self)
! 197: return pt()
! 198:
! 199: def getVersions(self):
! 200: """get all versions"""
! 201: ret=[]
! 202: for version in self.ZopeFind(self):
! 203: if hasattr(version[1],'versionNumber'):
! 204: ret.append((version[1].versionNumber,version[1]))
! 205: ret.sort(sortv)
! 206: return ret
! 207:
! 208:
! 209: def unlock(self,RESPONSE):
! 210: """unlock"""
! 211: if str(self.lockedBy) in str(self.REQUEST['AUTHENTICATED_USER']):
! 212: self.lockedBy=''
! 213: RESPONSE.redirect(self.REQUEST['URL2'])
! 214: else:
! 215: return "Sorry, not locked by you! (%s,%s)"%(self.lockedBy,self.REQUEST['AUTHENTICATED_USER'])
! 216:
! 217: security= ClassSecurityInfo()
! 218: security.declareProtected('AUTHENTICATED_USER','addVersionedFileObjectForm')
! 219:
! 220: def addVersionedFileObjectForm(self):
! 221: """add a new version"""
! 222: print self.REQUEST['AUTHENTICATED_USER']
! 223: if str(self.REQUEST['AUTHENTICATED_USER']) in "Anonymous User":
! 224: return "please login first"
! 225: if (self.lockedBy==self.REQUEST['AUTHENTICATED_USER']) or (self.lockedBy==''):
! 226: out=DTMLFile('dtml/fileAdd', globals(),Kind='VersionedFileObject',kind='versionedFileObject',version=self.getVersion()).__of__(self)
! 227: return out()
! 228: else:
! 229: return "Sorry file is locked by somebody else"
! 230:
! 231: def manage_addVersionedFileObject(self,id,vC,file='',title='',precondition='', content_type='',RESPONSE=None):
! 232: """add"""
! 233:
! 234: vC=self.REQUEST['vC']
! 235: id="V%i"%self.getVersion()+"_"+self.title
! 236: manage_addVersionedFileObject(self,id,vC,file,"V%i"%self.getVersion()+"_"+self.title,precondition, content_type)
! 237: objs=self.ZopeFind(self,obj_ids=[id])[0][1].setVersionNumber(int(self.getVersion()))
! 238:
! 239: if RESPONSE:
! 240: RESPONSE.redirect(self.REQUEST['URL2'])
! 241:
! 242: security.declareProtected('AUTHENTICATED_USER','downloadLocked')
! 243:
! 244: def downloadLocked(self):
! 245: """download and lock"""
! 246: if self.REQUEST['AUTHENTICATED_USER']=='Anonymous User':
! 247: return "please login first"
! 248: if not self.lockedBy=="":
! 249: return "cannot be locked because is already locked by %s"%self.lockedBy
! 250: self.lockedBy=self.REQUEST['AUTHENTICATED_USER']
! 251:
! 252: self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1']+'/'+self.getId()+'/'+self.getLastVersion().getId())
! 253:
! 254: def manage_addVersionedFileForm(self):
! 255: """interface for adding the OSAS_root"""
! 256: pt=PageTemplateFile('Products/versionedFile/zpt/addVersionedFile.zpt').__of__(self)
! 257: return pt()
! 258:
! 259: def manage_addVersionedFile(self,id,title,lockedBy, RESPONSE=None):
! 260: """add the OSAS_root"""
! 261: newObj=versionedFile(id,title,lockedBy)
! 262: self._setObject(id,newObj)
! 263: if RESPONSE is not None:
! 264: RESPONSE.redirect('manage_main')
! 265:
! 266:
! 267: InitializeClass(versionedFile)
! 268: InitializeClass(versionedFileFolder)
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>