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>