File:  [Repository] / versionedFile / versionedFile.py
Revision 1.1: download - view: text, annotated - select for diffs - revision graph
Mon Mar 22 15:46:07 2004 UTC (20 years, 2 months ago) by dwinter
Branches: MAIN
CVS tags: HEAD
Initial revision

    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>