File:  [Repository] / versionedFile / versionedFile.py
Revision 1.2: download - view: text, annotated - select for diffs - revision graph
Tue Mar 23 10:43:55 2004 UTC (20 years, 2 months ago) by dwinter
Branches: MAIN
CVS tags: HEAD
fixed uers aelter pythin versionen listen mit klammern versehen

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

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