--- cdli/cdli_files.py 2006/02/13 20:35:35 1.5 +++ cdli/cdli_files.py 2006/02/28 15:17:52 1.8 @@ -250,6 +250,7 @@ class CDLIBasketContainer(OrderedFolder) meta_type="CDLIBasketContainer" + def getBasketIdfromName(self,basketname): """get id from name""" @@ -360,16 +361,22 @@ class CDLIBasketContainer(OrderedFolder) self.last=last return last - def setActiveBasket(self,basketId): + def setActiveBasket(self,basketId,REQUEST=None): """store active basketId in a cookie""" self.REQUEST.RESPONSE.setCookie("CDLIActiveBasket",basketId,path="/") - + if REQUEST: + REQUEST.RESPONSE.redirect(REQUEST['URL1']) + def getActiveBasket(self): """get active basket from cookie""" id= self.REQUEST.cookies.get('CDLIActiveBasket',None) - obj=getattr(self,id,None) + if id: + obj=getattr(self,str(id),None) + else: + obj=None return obj + def getActualUserName(self): """get name of the actualuser""" return str(self.REQUEST['AUTHENTICATED_USER']) @@ -381,26 +388,35 @@ class CDLIBasketContainer(OrderedFolder) ob=manage_addCDLIBasket(self,newBasketName) return ob - def storeInBasket(self,ids,submit,newBasketName=None,RESPONSE=None,REQUEST=None): + def storeInBasket(self,submit,ids=None,newBasketName=None,fromFileList=None,RESPONSE=None,REQUEST=None): """store it""" - + if not ids: + ids=self.REQUEST.SESSION['fileIds'] + if type(ids) is not ListType: ids=[ids] - if submit=="store in new basket": + if (submit.lower()=="store in new basket") or (submit.lower()=="new basket"): basketRet=self.addBasket(newBasketName) self.setActiveBasket(basketRet.getId()) basket=getattr(self,basketRet.getId()) - elif submit=="store in active basket": + elif (submit.lower()=="store in active basket") or (submit.lower()=="active basket"): basket=self.getActiveBasket() - - basket.addObjects(ids) - back=self.REQUEST['HTTP_REFERER'] + + added=basket.addObjects(ids) + back=self.REQUEST['HTTP_REFERER'].split("?")[0]+"?basketName="+basket.title+"&numberOfObjects="+str(added) + + + if fromFileList: + return self.cdli_main.findObjectsFromList(list=self.REQUEST.SESSION['fileIds'],basketName=basket.title,numberOfObjects=added) + if RESPONSE: + RESPONSE.redirect(back) - + return True + def manage_addCDLIBasketContainerForm(self): """add the CDLIBasketContainer form""" pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addCDLIBasketContainer.zpt')).__of__(self) @@ -496,23 +512,23 @@ class CDLIBasket(Folder,CatalogAware): oldContent=[] newContent=[] - + added=0 for id in ids: founds=self.CDLICatalog.search({'title':id}) - print id,founds + for found in founds: if found.getObject() not in oldContent: #TODO: was passiert wenn, man eine Object dazufŸgt, das schon da ist aber eine neuere version newContent.append((found.getObject().getLastVersion(),found.getObject())) - + added+=1 content=oldContent+newContent user=self.getActualUserName() ob=manage_addCDLIBasketVersion(self,user,comment="",basketContent=content) - + return added def deleteObjects(self,ids,RESPONSE=None): """delete objects""" @@ -720,10 +736,18 @@ class CDLIFile(versionedFile,CatalogAwar meta_type="CDLI file" default_catalog='CDLICatalog' - def isContainedInBaskets(self): - """check is this file is part of any basket""" - - return [x.getObject() for x in self.CDLIBasketCatalog.search({'getFileNamesInLastVersion':self.getId()})] + + + def isContainedInBaskets(self,context=None): + """check is this file is part of any basket + @param context: (optional) necessessary if CDLIBasketCatalog is not an (inherited) attribute of self, context.CDLIBasketCatalog + has to exist. + """ + + if not context: + context=self + + return [x.getObject() for x in context.CDLIBasketCatalog.search({'getFileNamesInLastVersion':self.getId()})] def addCDLIFileObjectForm(self): @@ -959,20 +983,46 @@ class CDLIFileFolder(versionedFileFolder RESPONSE.redirect(self.aq_parent.absolute_url()) - def findObjectsFromList(self,upload,RESPONSE): + def findObjectsFromList(self,start=None,upload=None,list=None,basketName=None,numberOfObjects=None,RESPONSE=None): """findObjectsFromList (, TAB oder LINE separated)""" - txt=upload.read() - txt=txt.replace(",","\n") - txt=txt.replace("\t","\n") - idsTmp=txt.split("\n") - ids=[] - for id in idsTmp: # make sure that no empty lines - idTmp=id.lstrip().rstrip() - if len(idTmp)>0: - ids.append(idTmp) - #self.REQUEST.SESSION['ids']=" OR ".join(ids) + if upload: # list from file upload + txt=upload.read() + txt=txt.replace(",","\n") + txt=txt.replace("\t","\n") + idsTmp=txt.split("\n") + ids=[] + for id in idsTmp: # make sure that no empty lines + idTmp=id.lstrip().rstrip() + if len(idTmp)>0: + + ids.append(idTmp) + + #self.REQUEST.SESSION['ids']=" OR ".join(ids) + + pt=getattr(self,'filelist.html') + self.REQUEST.SESSION['searchList']=ids + return pt(search=ids) + + if basketName: + #TODO: get rid of one of these.. + + pt=getattr(self,'filelist.html') + return pt(basketName=basketName,numberOfObjects=numberOfObjects) + + if list: # got already a list + ret=[] + for fileId in list: + if len(fileId.split("."))==1: + fileId=fileId+".atf" + + ret+=self.CDLICatalog({'title':fileId}) + #TODO: get rid of one of these.. + self.REQUEST.SESSION['fileIds']=[x.getObject().getId() for x in ret]#store fieldIds in session for further usage + self.REQUEST.SESSION['searchList']=self.REQUEST.SESSION['fileIds'] + return ret - RESPONSE.redirect("filelist.html?path=%s"%" OR ".join(ids)) + if start: + RESPONSE.redirect("filelist.html?start:int="+str(start)) def createAllFilesAsSingleFile(self,RESPONSE=None): """download all files"""