Diff for /versionedFile/versionedFile.py between versions 1.4 and 1.16

version 1.4, 2004/06/04 08:10:26 version 1.16, 2004/10/25 12:59:11
Line 1 Line 1
 from OFS.Folder import Folder  from OFS.Folder import Folder
 from OFS.Image import File  from OFS.Image import File
 from OFS.Image import cookId  from OFS.Image import cookId
 from Globals import DTMLFile, InitializeClass  from Globals import DTMLFile, InitializeClass,package_home
 from Products.PageTemplates.PageTemplateFile import PageTemplateFile  from Products.PageTemplates.PageTemplateFile import PageTemplateFile
 from AccessControl import getSecurityManager  from AccessControl import getSecurityManager
 from Products.PageTemplates.PageTemplate import PageTemplate  from Products.PageTemplates.PageTemplate import PageTemplate
   from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
 from AccessControl import ClassSecurityInfo  from AccessControl import ClassSecurityInfo
   import os.path
   import time
   
 def sortv(x,y):  def sortv(x,y):
     return cmp(x[0],y[0])      return cmp(x[0],y[0])
Line 13  def sortv(x,y): Line 16  def sortv(x,y):
 class versionedFileFolder(Folder):  class versionedFileFolder(Folder):
     """Folder with versioned files"""      """Folder with versioned files"""
   
       
     meta_type = "versionedFileFolder"      meta_type = "versionedFileFolder"
   
     security= ClassSecurityInfo()      security= ClassSecurityInfo()
     security.declareProtected('AUTHENTICATED_USER','addFileForm')      security.declareProtected('AUTHENTICATED_USER','addFileForm')
           
     def getVersionedFiles(self):      manage_options = Folder.manage_options+(
           {'label':'Generate Index.html','action':'generateIndexHTML'},
                   {'label':'Generate history_template.html','action':'generateHistoryHTML'},
           )
   
       def helpDownload(self):
           """download help"""
           
           pt=PageTemplateFile('Products/versionedFile/zpt/helpDownload').__of__(self)
           return pt()
       
       def generateIndexHTML(self,RESPONSE=None):
           """lege standard index.html an"""
   
           
   
           
           if not hasattr(self,'index.html'):
               zt=ZopePageTemplate('index.html')
               self._setObject('index.html',zt)
               default_content_fn = os.path.join(package_home(globals()),
                                                  'zpt/versionFileFolderMain.zpt')
               text = open(default_content_fn).read()
               zt.pt_edit(text, 'text/html')
   
           else:
               return "already exists!"
           
           if RESPONSE is not None:
               RESPONSE.redirect('manage_main')
   
   
       def generateHistoryHTML(self,RESPONSE=None):
           """lege standard index.html an"""
   
           
   
           
           if not hasattr(self,'history_template.html'):
               zt=ZopePageTemplate('history_template.html')
               self._setObject('history_template.html',zt)
               default_content_fn = os.path.join(package_home(globals()),
                                                  'zpt/versionHistory.zpt')
               text = open(default_content_fn).read()
               zt.pt_edit(text, 'text/html')
   
           else:
               return "already exists!"
           
           if RESPONSE is not None:
               RESPONSE.redirect('manage_main')
   
       def getVersionedFiles(self,sortField='title'):
         """get all versioned files"""          """get all versioned files"""
                   
           def sortName(x,y):
               return cmp(x[1].title,y[1].title)
   
           def sortDate(x,y):
               return cmp(x[1].getLastVersion().getTime(),y[1].getLastVersion().getTime)
   
           def sortAuthor(x,y):
               
               return cmp(x[1].getLastVersion().lastEditor(),y[1].getLastVersion().lastEditor())
           
     versionedFiles=self.ZopeFind(self,obj_metatypes=['versionedFile'])      versionedFiles=self.ZopeFind(self,obj_metatypes=['versionedFile'])
                 
           if sortField=='title':
               versionedFiles.sort(sortName)
           elif sortField=='date':
               versionedFiles.sort(sortDate)
           elif sortField=='author':
               versionedFiles.sort(sortAuthor)
   
         return versionedFiles          return versionedFiles
   
   
Line 38  class versionedFileFolder(Folder): Line 111  class versionedFileFolder(Folder):
         """main"""          """main"""
         ext=self.ZopeFind(self,obj_ids=["index.html"])          ext=self.ZopeFind(self,obj_ids=["index.html"])
         if ext:          if ext:
             return ext[0]              return ext[0][1]()
                   
         pt=PageTemplateFile('Products/versionedFile/zpt/versionFileFolderMain').__of__(self)          pt=PageTemplateFile('Products/versionedFile/zpt/versionFileFolderMain').__of__(self)
         return pt()          return pt()
Line 50  class versionedFileFolder(Folder): Line 123  class versionedFileFolder(Folder):
         return out()          return out()
   
   
     def addFile(self,vC,file,content_type='',RESPONSE=None):      def addFile(self,vC,file,author,newName='',content_type='',RESPONSE=None):
         """ add a new file"""          """ add a new file"""
           if newName=='':
         id=file.filename          id=file.filename
           else:
               id=newName
                   
         vC=self.REQUEST.form['vC']          vC=self.REQUEST.form['vC']
         manage_addVersionedFile(self,id,'','')          manage_addVersionedFile(self,id,'','')
         ob=self._getOb(id)          ob=self._getOb(id)
         ob.title=id          ob.title=id
         file2=file          file2=file
         ob.manage_addVersionedFileObject(id,vC,file2,content_type=content_type)          ob.manage_addVersionedFileObject(id,vC,author,file2,content_type=content_type)
   
         RESPONSE.redirect(self.REQUEST['URL1'])          RESPONSE.redirect(self.REQUEST['URL1'])
   
Line 107  class versionedFileObject(File): Line 183  class versionedFileObject(File):
                                Kind='File',kind='file')                                 Kind='File',kind='file')
     manage_editForm._setName('manage_editForm')      manage_editForm._setName('manage_editForm')
   
       def getTime(self):
           """getTime"""
           #return self.bobobase_modification_time().ISO()
           if hasattr(self,'time'):
               return time.strftime("%Y-%m-%d %H:%M:%S",self.time)
       elif hasattr(self,'timefixed'):
           return self.timefixed
           else:
           setattr(self,'timefixed',self.bobobase_modification_time().ISO())
               return self.bobobase_modification_time().ISO()
   
   
   
       
   
       def download(self):
           """download and lock"""
           
           
           self.content_type="application/octet-stream"
           self.REQUEST.RESPONSE.redirect(self.absolute_url())
       
       def downloadLocked(self):
           """download and lock"""
           
           
           if self.REQUEST['AUTHENTICATED_USER']=='Anonymous User':
               return "please login first"
           if not self.aq_parent.lockedBy=="":
               return "cannot be locked because is already locked by %s"%self.lockedBy
           self.aq_parent.lockedBy=self.REQUEST['AUTHENTICATED_USER']
   
           self.content_type="application/octet-stream"
           self.REQUEST.RESPONSE.redirect(self.absolute_url())
   
     def setVersionNumber(self,versionNumber):      def setVersionNumber(self,versionNumber):
         """set version"""          """set version"""
Line 118  class versionedFileObject(File): Line 228  class versionedFileObject(File):
   
     def lastEditor(self):      def lastEditor(self):
         """last Editor"""          """last Editor"""
           if hasattr(self,'author'):
               return self.author            
           else:
         jar=self._p_jar          jar=self._p_jar
         oid=self._p_oid          oid=self._p_oid
   
         if jar is None or oid is None: return None          if jar is None or oid is None: return None
   
         return jar.db().history(oid)[0]['user_name']          return jar.db().history(oid)[0]['user_name']
   
           
Line 128  class versionedFileObject(File): Line 243  class versionedFileObject(File):
                   
 manage_addVersionedFileObjectForm=DTMLFile('dtml/fileAdd', globals(),Kind='VersionedFileObject',kind='versionedFileObject', version='1')  manage_addVersionedFileObjectForm=DTMLFile('dtml/fileAdd', globals(),Kind='VersionedFileObject',kind='versionedFileObject', version='1')
   
 def manage_addVersionedFileObject(self,id,vC='',file='',title='',precondition='', content_type='',  def manage_addVersionedFileObject(self,id,vC='',author='', file='',title='',precondition='', content_type='',
                    REQUEST=None):                     REQUEST=None):
     """Add a new File object.      """Add a new File object.
   
Line 146  def manage_addVersionedFileObject(self,i Line 261  def manage_addVersionedFileObject(self,i
     # First, we create the file without data:      # First, we create the file without data:
     self._setObject(id, versionedFileObject(id,title,'',content_type, precondition))      self._setObject(id, versionedFileObject(id,title,'',content_type, precondition))
     self._getOb(id).versionComment=str(vC)      self._getOb(id).versionComment=str(vC)
       self._getOb(id).time=time.localtime()
       
       setattr(self._getOb(id),'author',author)
           
     # Now we "upload" the data.  By doing this in two steps, we      # Now we "upload" the data.  By doing this in two steps, we
     # can use a database trick to make the upload more efficient.      # can use a database trick to make the upload more efficient.
Line 163  def manage_addVersionedFileObject(self,i Line 281  def manage_addVersionedFileObject(self,i
 class versionedFile(Folder):  class versionedFile(Folder):
     """Versioniertes File"""      """Versioniertes File"""
   
     def __init__(self, id, title, lockedBy):      def __init__(self, id, title, lockedBy,author):
         """init"""          """init"""
         self.id=id          self.id=id
         self.title=title          self.title=title
         self.lockedBy=lockedBy          self.lockedBy=lockedBy
           self.author=author
         
                   
     meta_type="versionedFile"      meta_type="versionedFile"
   
     
     def getLastVersion(self):      def getLastVersion(self):
         """Last Version"""          """Last Version"""
         tmp=0          tmp=0
Line 189  class versionedFile(Folder): Line 310  class versionedFile(Folder):
         """main view"""          """main view"""
         lastVersion=self.getLastVersion()          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:"+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())          return "File: %s Version:%i modified:%s size:%s modified by:%s"%(self.title,lastVersion.versionNumber,lastVersion.getTime(),lastVersion.getSize(),lastVersion.lastEditor())
                                                                                                                                                     
     def getVersion(self):      def getVersion(self):
         tmp=0          tmp=0
Line 206  class versionedFile(Folder): Line 327  class versionedFile(Folder):
   
     def history(self):      def history(self):
         """history"""          """history"""
   
           ext=self.ZopeFind(self.aq_parent,obj_ids=["history_template.html"])
           if ext:
               return getattr(self,ext[0][1].getId())()
           
         pt=PageTemplateFile('Products/versionedFile/zpt/versionHistory').__of__(self)          pt=PageTemplateFile('Products/versionedFile/zpt/versionHistory').__of__(self)
         return pt()          return pt()
   
Line 218  class versionedFile(Folder): Line 344  class versionedFile(Folder):
         ret.sort(sortv)          ret.sort(sortv)
         return ret          return ret
   
               security.declareProtected('AUTHENTICATED_USER','unlock')   
     def unlock(self,RESPONSE):      def unlock(self,RESPONSE):
         """unlock"""          """unlock"""
         if str(self.lockedBy) in [str(self.REQUEST['AUTHENTICATED_USER'])]:          if str(self.lockedBy) in [str(self.REQUEST['AUTHENTICATED_USER'])]:
Line 227  class versionedFile(Folder): Line 353  class versionedFile(Folder):
         else:          else:
             return "Sorry, not locked by you! (%s,%s)"%(self.lockedBy,self.REQUEST['AUTHENTICATED_USER'])              return "Sorry, not locked by you! (%s,%s)"%(self.lockedBy,self.REQUEST['AUTHENTICATED_USER'])
                   
     security= ClassSecurityInfo()      
     security.declareProtected('AUTHENTICATED_USER','addVersionedFileObjectForm')      security.declareProtected('AUTHENTICATED_USER','addVersionedFileObjectForm')
   
     def addVersionedFileObjectForm(self):      def addVersionedFileObjectForm(self):
Line 241  class versionedFile(Folder): Line 367  class versionedFile(Folder):
         else:          else:
             return "Sorry file is locked by somebody else"              return "Sorry file is locked by somebody else"
                   
     def manage_addVersionedFileObject(self,id,vC,file='',title='',precondition='', content_type='',RESPONSE=None):      def manage_addVersionedFileObject(self,id,vC,author,file='',title='',precondition='', content_type='',changeName='no',newName='', RESPONSE=None):
         """add"""          """add"""
                   
         vC=self.REQUEST['vC']          vC=self.REQUEST['vC']
           author=self.REQUEST['author']
           
           if changeName=="yes":
               self.title=file.filename[0:]
   
           if not newName=='':
               self.title=newName[0:]
   
         id="V%i"%self.getVersion()+"_"+self.title          id="V%i"%self.getVersion()+"_"+self.title
         manage_addVersionedFileObject(self,id,vC,file,"V%i"%self.getVersion()+"_"+self.title,precondition, content_type)          manage_addVersionedFileObject(self,id,vC,author,file,"V%i"%self.getVersion()+"_"+self.title,precondition, content_type)
         objs=self.ZopeFind(self,obj_ids=[id])[0][1].setVersionNumber(int(self.getVersion()))          objs=self.ZopeFind(self,obj_ids=[id])[0][1].setVersionNumber(int(self.getVersion()))
   
         if RESPONSE:          if RESPONSE:
Line 254  class versionedFile(Folder): Line 388  class versionedFile(Folder):
   
     security.declareProtected('AUTHENTICATED_USER','downloadLocked')      security.declareProtected('AUTHENTICATED_USER','downloadLocked')
   
       def download(self):
           """download and lock"""
           self.getLastVersion().content_type="application/octet-stream"
           self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1']+'/'+self.getId()+'/'+self.getLastVersion().getId())
       
     def downloadLocked(self):      def downloadLocked(self):
         """download and lock"""          """download and lock"""
         if self.REQUEST['AUTHENTICATED_USER']=='Anonymous User':          if self.REQUEST['AUTHENTICATED_USER']=='Anonymous User':
Line 261  class versionedFile(Folder): Line 400  class versionedFile(Folder):
         if not self.lockedBy=="":          if not self.lockedBy=="":
             return "cannot be locked because is already locked by %s"%self.lockedBy              return "cannot be locked because is already locked by %s"%self.lockedBy
         self.lockedBy=self.REQUEST['AUTHENTICATED_USER']          self.lockedBy=self.REQUEST['AUTHENTICATED_USER']
                   self.getLastVersion().content_type="application/octet-stream"
         self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1']+'/'+self.getId()+'/'+self.getLastVersion().getId())          self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1']+'/'+self.getId()+'/'+self.getLastVersion().getId())
           
 def manage_addVersionedFileForm(self):  def manage_addVersionedFileForm(self):
Line 269  def manage_addVersionedFileForm(self): Line 408  def manage_addVersionedFileForm(self):
     pt=PageTemplateFile('Products/versionedFile/zpt/addVersionedFile.zpt').__of__(self)      pt=PageTemplateFile('Products/versionedFile/zpt/addVersionedFile.zpt').__of__(self)
     return pt()      return pt()
   
 def manage_addVersionedFile(self,id,title,lockedBy, RESPONSE=None):  def manage_addVersionedFile(self,id,title,lockedBy, author=None, RESPONSE=None):
     """add the OSAS_root"""      """add the OSAS_root"""
     newObj=versionedFile(id,title,lockedBy)      newObj=versionedFile(id,title,lockedBy,author)
     self._setObject(id,newObj)      self._setObject(id,newObj)
      
     if RESPONSE is not None:      if RESPONSE is not None:
         RESPONSE.redirect('manage_main')          RESPONSE.redirect('manage_main')
   

Removed from v.1.4  
changed lines
  Added in v.1.16


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>