Annotation of cdli/cdli_files.py, revision 1.1

1.1     ! dwinter     1: """CDLI extensions of the filearchive"""
        !             2: from Products.versionedFile.versionedFile import *
        !             3: from Products.ZCatalog.CatalogPathAwareness import CatalogAware
        !             4: from tempfile import mkstemp
        !             5: import os.path
        !             6: import os
        !             7: from types import *
        !             8: 
        !             9: class Basket(Folder):
        !            10:     """shopping basket"""
        !            11:     
        !            12:     meta_type="Basket"
        !            13:     _v_stack={}
        !            14: 
        !            15:     def storeAllLink(self,results):
        !            16:         """erzeuge link zum speicher aller results"""
        !            17:         nr=self.REQUEST['_ZopeId']
        !            18:         
        !            19:         if results:
        !            20:             self._v_stack[nr]=[x.getObject().getId() for x in results]
        !            21:         
        !            22:         return self.absolute_url()+"/storeAll?id="+nr
        !            23:     
        !            24:     def storeAll(self,id):
        !            25:         """store all"""
        !            26:         try:
        !            27:             results=self._v_stack[id]
        !            28:         except:
        !            29:             #TODO: write expired page
        !            30:             return "expired"
        !            31:         
        !            32:         return self.storeInBasketForm(results)
        !            33:         
        !            34:     def storeInBasketForm(self,ids):
        !            35:         """ store an object form"""
        !            36:         
        !            37:         if type(ids) is not ListType:
        !            38:             ids=[ids]
        !            39:         self.REQUEST.SESSION['ids']=ids[0:]
        !            40:         
        !            41:         self.REQUEST.SESSION['BACKLINK']=self.REQUEST['HTTP_REFERER']
        !            42: 
        !            43:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','storeBasketObject.zpt')).__of__(self)
        !            44:         return pt()
        !            45:         
        !            46:     def storeInBasket(self,username,ids=None,RESPONSE=None,REQUEST=None):
        !            47:         """store it"""
        !            48:         
        !            49:         if not ids:
        !            50:             ids=REQUEST.SESSION['ids']
        !            51:             
        !            52:         self.REQUEST.SESSION['basketUser']=username
        !            53:         
        !            54:         baskets=self.ZopeFind(self,obj_ids=[username])
        !            55:         if len(baskets)>0:
        !            56:             basket=baskets[0][1]
        !            57:         else:
        !            58:             manage_addBasketObject(self,username)
        !            59:             basket=self._getOb(username)
        !            60:         
        !            61:         
        !            62:         basket.addObjects(ids)
        !            63:         back=self.REQUEST.SESSION.get('BACKLINK', None)
        !            64: 
        !            65:         if RESPONSE:
        !            66:             RESPONSE.redirect(back)
        !            67:             
        !            68: 
        !            69:     
        !            70:     def showBasket(self,user=None,set=None,RESPONSE=None):
        !            71:         """show the basket"""
        !            72:         
        !            73:         if user:
        !            74:             self.REQUEST.SESSION['basketUser']=user
        !            75:         
        !            76:         if not user and not set:
        !            77:             user=self.REQUEST.SESSION.get('basketUser',None)
        !            78:         
        !            79:         if not user:
        !            80:             pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','authorizeBasketUser.zpt')).__of__(self)
        !            81:             return pt()
        !            82:         else:
        !            83:             baskets=self.ZopeFind(self,obj_ids=[user])
        !            84:         
        !            85: 
        !            86:         if len(baskets)>0:
        !            87:             RESPONSE.redirect(baskets[0][1].absolute_url())
        !            88:             return True 
        !            89:         else:
        !            90:             pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','emptyBasket.zpt')).__of__(self)
        !            91:             return pt()
        !            92:         
        !            93: 
        !            94: def manage_addBasketForm(self):
        !            95:     """add the basket form"""
        !            96:     pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addBasket.zpt')).__of__(self)
        !            97:     return pt()
        !            98: 
        !            99: def manage_addBasket(self,id,title,RESPONSE=None):
        !           100:     """add the basket"""
        !           101:     ob=Basket()
        !           102:     
        !           103:     ob.id=str(id)
        !           104:     ob.title=title
        !           105:     self._setObject(id, ob)
        !           106:     ob=self._getOb(id)
        !           107:     
        !           108:     if RESPONSE is not None:
        !           109:         RESPONSE.redirect('manage_main')
        !           110: 
        !           111:     
        !           112: class BasketObject(Folder):
        !           113:     """Basket Object"""
        !           114:     
        !           115:     def __init__(self):
        !           116:            """init basket object"""
        !           117:            self.contents=[]
        !           118: 
        !           119:     def numberOfItems(self):
        !           120:         """return anzahl der elemente im basket"""
        !           121:         return len(self.contents)
        !           122:     
        !           123:     def addObjects(self,ids):
        !           124:         """addObjects"""
        !           125:         
        !           126:         for id in ids:
        !           127:             founds=self.CDLICatalog.search({'path':id})
        !           128:             for found in founds:
        !           129:                 if found.getObject() not in self.contents:
        !           130:                     tm=self.contents[0:]
        !           131:                     tm.append(found.getObject())
        !           132:                     self.contents=tm[0:]
        !           133:     
        !           134:         return True
        !           135: 
        !           136:     def index_html(self):
        !           137:            """view the basket"""
        !           138:            pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','basketObject_index_html.zpt')).__of__(self)
        !           139:            return pt()
        !           140: 
        !           141:     def deleteObjects(self,ids,RESPONSE=None):
        !           142:         """delete objects"""
        !           143:         list = self.contents[0:]
        !           144:         for content in list:
        !           145:                
        !           146:                 if content.getId() in ids:
        !           147:                     self.contents.remove(content)
        !           148:         
        !           149: 
        !           150:         if RESPONSE:
        !           151:                RESPONSE.redirect(self.absolute_url())
        !           152: 
        !           153: 
        !           154:  
        !           155:     def downloadObjectsAsOneFile(self,REQUEST):
        !           156:         """download all selected files in one file"""
        !           157:         ret=""
        !           158:         for object in self.contents:
        !           159: 
        !           160:                 ret+=object.getLastVersion().data
        !           161:         
        !           162:         self.REQUEST.RESPONSE.setHeader("Content-Disposition","""attachement; filename="basket_%s.atf" """%self.getId())
        !           163:         self.REQUEST.RESPONSE.setHeader("Content-Type","application/octet-stream")
        !           164:         len=len(ret)
        !           165:         self.REQUEST.RESPONSE.setHeader("Content-Length",len)
        !           166:         self.REQUEST.RESPONSE.write(ret)    
        !           167: def manage_addBasketObjectForm(self):
        !           168:     """add form"""
        !           169:     pass
        !           170: 
        !           171: def manage_addBasketObject(self,id,title='',RESPONSE=None):
        !           172:     """add"""
        !           173:     
        !           174:     ob=BasketObject()
        !           175:     
        !           176:     ob.id=str(id)
        !           177:     ob.title=title
        !           178:     self._setObject(id, ob)
        !           179:     ob=self._getOb(id)
        !           180:     
        !           181:     if RESPONSE is not None:
        !           182:         RESPONSE.redirect('manage_main')
        !           183: 
        !           184:     
        !           185: class CDLIFile(versionedFile,CatalogAware):
        !           186:     """CDLI file"""
        !           187:     
        !           188:     meta_type="CDLI file"
        !           189:     default_catalog='CDLICatalog'
        !           190: 
        !           191:     
        !           192:         
        !           193: def manage_addCDLIFileForm(self):
        !           194:     """interface for adding the OSAS_root"""
        !           195:     pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addCDLIFile.zpt')).__of__(self)
        !           196:     return pt()
        !           197: 
        !           198: def manage_addCDLIFile(self,id,title,lockedBy, author=None, RESPONSE=None):
        !           199:     """add the OSAS_root"""
        !           200:     newObj=CDLIFile(id,title,lockedBy,author)
        !           201:     self._setObject(id,newObj)
        !           202:    
        !           203:     if RESPONSE is not None:
        !           204:         RESPONSE.redirect('manage_main')
        !           205: 
        !           206: 
        !           207: class CDLIFileObject(versionedFileObject):
        !           208:     """CDLI file object"""
        !           209:     
        !           210:     meta_type="CDLI File Object"
        !           211:     
        !           212:     def view(self):
        !           213:         """view file"""
        !           214:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','viewCDLIFile.zpt')).__of__(self)
        !           215:         return pt()
        !           216:     
        !           217: manage_addCDLIFileObjectForm=DTMLFile('dtml/fileAdd', globals(),Kind='CDLIFileObject',kind='CDLIFileObject', version='1')
        !           218: 
        !           219: def manage_addCDLIFileObject(self,id,vC='',author='', file='',title='',precondition='', content_type='',
        !           220:                    REQUEST=None):
        !           221:     """Add a new File object.
        !           222: 
        !           223:     Creates a new File object 'id' with the contents of 'file'"""
        !           224: 
        !           225:     id=str(id)
        !           226:     title=str(title)
        !           227:     content_type=str(content_type)
        !           228:     precondition=str(precondition)
        !           229:     
        !           230:     id, title = cookId(id, title, file)
        !           231: 
        !           232:     self=self.this()
        !           233: 
        !           234:     # First, we create the file without data:
        !           235:     self._setObject(id, CDLIFileObject(id,title,'',content_type, precondition))
        !           236:     self._getOb(id).versionComment=str(vC)
        !           237:     self._getOb(id).time=time.localtime()
        !           238:     
        !           239:     setattr(self._getOb(id),'author',author)
        !           240:     
        !           241:     # Now we "upload" the data.  By doing this in two steps, we
        !           242:     # can use a database trick to make the upload more efficient.
        !           243:     if file:
        !           244:         self._getOb(id).manage_upload(file)
        !           245:     if content_type:
        !           246:         self._getOb(id).content_type=content_type
        !           247: 
        !           248:     if REQUEST is not None:
        !           249:         REQUEST['RESPONSE'].redirect(self.absolute_url()+'/manage_main')
        !           250: 
        !           251: 
        !           252: class CDLIFileFolder(versionedFileFolder):
        !           253:     """CDLI folder"""
        !           254:     
        !           255:     meta_type="CDLI Folder"
        !           256:     filesMetaType=['CDLI file']
        !           257:     folderMetaType=['CDLI Folder']
        !           258:     default_catalog='CDLICatalog'
        !           259:     
        !           260:     def uploadATF(self,upload,RESPONSE):
        !           261:         """upload an atf file"""
        !           262:         mks
        !           263:         
        !           264:         
        !           265:     def findObjectsFromList(self,upload,RESPONSE):
        !           266:         """findObjectsFromList (, TAB oder LINE separated)"""
        !           267:         txt=upload.read()
        !           268:         txt=txt.replace(",","\n")
        !           269:         txt=txt.replace("\t","\n")
        !           270:         idsTmp=txt.split("\n")
        !           271:         ids=[]
        !           272:         for id in idsTmp: # make sure that no empty lines
        !           273:             idTmp=id.lstrip().rstrip()
        !           274:             if len(idTmp)>0:
        !           275:                 ids.append(idTmp)
        !           276:         #self.REQUEST.SESSION['ids']=" OR ".join(ids)
        !           277:         
        !           278:         RESPONSE.redirect("filelist.html?path=%s"%" OR ".join(ids))
        !           279:     
        !           280:     def createAllFilesAsSingleFile(self,RESPONSE=None):
        !           281:         """download all files"""
        !           282:         
        !           283:         def sortF(x,y):
        !           284:             return cmp(x[0],y[0])
        !           285:         
        !           286:         catalog=getattr(self,self.default_catalog)
        !           287:         #tf,tfilename=mkstemp()
        !           288:         
        !           289:         
        !           290:         list=[(x.getId,x) for x in catalog()]
        !           291:         list.sort(sortF)
        !           292:         
        !           293:         RESPONSE.setHeader("Content-Disposition","""attachement; filename=%s"""%"all.atf")
        !           294:         RESPONSE.setHeader("Content-Type","application/octet-stream")
        !           295:        
        !           296:         for l in list:
        !           297:             obj=l[1].getObject()
        !           298:             
        !           299:             if obj.meta_type=="CDLI file":
        !           300:                 
        !           301:                 #os.write(tf,obj.getLastVersion().data)
        !           302:                 if RESPONSE:
        !           303:                     RESPONSE.write(obj.getLastVersion().data)
        !           304:         #os.close(tf)
        !           305:         #RESPONSE.redirect(self.absolute_url()+"/downloadFile?fn="%tfilename)
        !           306:         return True
        !           307:     
        !           308:     def downloadFile(self,fn):
        !           309:         """download fn - not used yet"""
        !           310:         self.REQUEST.RESPONSE.setHeader("Content-Disposition","""attachement; filename=%s"""%self.getLastVersion().getId())
        !           311:         self.REQUEST.RESPONSE.setHeader("Content-Type","application/octet-stream")
        !           312:         self.REQUEST.RESPONSE.write(file(fn).read())
        !           313:         
        !           314:       
        !           315:                 
        !           316:     def hasParent(self):
        !           317:         """returns true falls subfolder"""
        !           318:       
        !           319:         if self.aq_parent.meta_type in self.folderMetaType:
        !           320:             return True
        !           321:         else:
        !           322:             return False
        !           323:         
        !           324:     def getFolders(self):
        !           325:         """get all subfolders"""
        !           326:         ret=[]
        !           327:         folders=self.ZopeFind(self,obj_metatypes=self.folderMetaType)
        !           328:         for folder in folders:
        !           329:             ret.append((folder[1],
        !           330:                         len(self.ZopeFind(folder[1],obj_metatypes=self.folderMetaType)),
        !           331:                         len(self.ZopeFind(folder[1],obj_metatypes=self.filesMetaType))
        !           332:                         ))
        !           333:         return ret
        !           334:     
        !           335:             
        !           336:     def getFolders_OLD(self):
        !           337:         """get all subfolders"""
        !           338:         ret=[]
        !           339:         folders=self.ZopeFind(self,obj_metatypes=self.folderMetaType)
        !           340:         for folder in folders:
        !           341:             ret.append((folder[1],
        !           342:                         len(self.ZopeFind(folder[1],obj_metatypes=self.folderMetaType)),
        !           343:                         len(getattr(self,self.default_catalog)({'path':folder[0]}))
        !           344:                         ))
        !           345:         return ret
        !           346:     
        !           347:     def index_html(self):
        !           348:         """main"""
        !           349:         ext=self.ZopeFind(self,obj_ids=["index.html"])
        !           350:         if ext:
        !           351:             return ext[0][1]()
        !           352:         
        !           353:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','CDLIFileFolderMain')).__of__(self)
        !           354:         return pt()
        !           355:     
        !           356:     def importFiles(self,comment="",author="" ):
        !           357:         """import files"""
        !           358:         folderName="/Users/dwinter/Documents/workspace/cdli/atf"
        !           359:         
        !           360:         files=os.listdir(folderName)
        !           361:         for f in files:
        !           362:             folder=f[0:3]
        !           363:             f2=f[0:5]
        !           364:             obj=self.ZopeFind(self,obj_ids=[folder])
        !           365:             
        !           366:             if not obj:
        !           367:                 manage_addCDLIFileFolder(self,folder,folder)
        !           368:                 fobj=getattr(self,folder)
        !           369:         
        !           370:             else:
        !           371:                 fobj=obj[0][1]
        !           372:             
        !           373:             obj2=fobj.ZopeFind(fobj,obj_ids=[f2])
        !           374:         
        !           375:             if not obj2:
        !           376:                 manage_addCDLIFileFolder(fobj,f2,f2)
        !           377:                 fobj2=getattr(fobj,f2)
        !           378:         
        !           379:             else:
        !           380:                 fobj2=obj2[0][1]
        !           381:               
        !           382:             print f
        !           383:             file2=file(os.path.join(folderName,f))   
        !           384:             id=f
        !           385:             manage_addCDLIFile(fobj2,f,'','')
        !           386:             id=f
        !           387:             ob=fobj2._getOb(f)
        !           388:             ob.title=id
        !           389:             
        !           390:             manage_addCDLIFileObject(ob,id,comment,author,file2,content_type='')
        !           391:     
        !           392:         return "ok"
        !           393: manage_addCDLIFileFolderForm=DTMLFile('dtml/folderAdd', globals())
        !           394: 
        !           395:     
        !           396: def manage_addCDLIFileFolder(self, id, title='',
        !           397:                      createPublic=0,
        !           398:                      createUserF=0,
        !           399:                      REQUEST=None):
        !           400:     """Add a new Folder object with id *id*.
        !           401: 
        !           402:     If the 'createPublic' and 'createUserF' parameters are set to any true
        !           403:     value, an 'index_html' and a 'UserFolder' objects are created respectively
        !           404:     in the new folder.
        !           405:     """
        !           406:     ob=CDLIFileFolder()
        !           407:     ob.id=str(id)
        !           408:     ob.title=title
        !           409:     self._setObject(id, ob)
        !           410:     ob=self._getOb(id)
        !           411: 
        !           412:     checkPermission=getSecurityManager().checkPermission
        !           413: 
        !           414:     if createUserF:
        !           415:         if not checkPermission('Add User Folders', ob):
        !           416:             raise Unauthorized, (
        !           417:                   'You are not authorized to add User Folders.'
        !           418:                   )
        !           419:         ob.manage_addUserFolder()
        !           420: 
        !           421:   
        !           422:     if REQUEST is not None:
        !           423:         return self.manage_main(self, REQUEST, update_menu=1)
        !           424: 
        !           425: 

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