--- cdli/cdli_files.py 2006/03/18 01:39:10 1.11 +++ cdli/cdli_files.py 2006/03/19 03:27:21 1.12 @@ -9,8 +9,8 @@ import urlparse from OFS.OrderedFolder import OrderedFolder from OFS.SimpleItem import SimpleItem import time - - +from OFS.Folder import manage_addFolder +import re class Basket_old(Folder): """shopping basket - alte fassung """ @@ -250,7 +250,32 @@ class CDLIBasketContainer(OrderedFolder) security=ClassSecurityInfo() meta_type="CDLIBasketContainer" - + def deleteBaskets(self,ids=None): + """delete baskets, i.e. move them into trash folder""" + + + found=self.ZopeFind(self,obj_ids=['trash']) + + if len(found)<1: + manage_addFolder(self, 'trash') + trash=self._getOb('trash') + else: + trash=found[0][1] + + if type(ids) is not ListType: + ids=[ids] + cut=self.manage_cutObjects(ids) + trash.manage_pasteObjects(cut) + + def manageBaskets(self,ids,submit,REQUEST=None,RESPONSE=None): + """manage baskets, delete or copy""" + if submit=="delete": + self.deleteBaskets(ids) + + + + if RESPONSE: + RESPONSE.redirect(self.absolute_url()) def getBasketIdfromName(self,basketname): """get id from name""" @@ -372,8 +397,9 @@ class CDLIBasketContainer(OrderedFolder) 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']) + REQUEST.RESPONSE.redirect(REQUEST['URL1']+'?'+REQUEST['QUERY_STRING']) def getActiveBasket(self): """get active basket from cookie""" @@ -460,10 +486,15 @@ class CDLIBasket(Folder,CatalogAware): """teste ob im basket die aktuelle version ist""" actualNo=obj[1].getLastVersion().getVersionNumber() storedNo=obj[0].getVersionNumber() + + founds=self.CDLICatalog.search({'title':obj[0].getId()}) + if len(founds)>0 and founds[0].getObject().aq_parent.getId()==".trash": + return False, -1 + if actualNo==storedNo: - return True + return True , 0 else: - return False + return False, actualNo def history(self): """history""" @@ -538,9 +569,27 @@ class CDLIBasket(Folder,CatalogAware): return added - def deleteObjects(self,ids,RESPONSE=None): + def deleteObjects(self,ids,RESPONSE=None,REQUEST=None): """delete objects""" - #TODO: implement delete Objects + + if type(ids) is not ListType: + ids=[ids] + + lastVersion=self.getLastVersion() + oldContent=lastVersion.basketContent[0:] + newContent=[] + for obj in oldContent: + if obj[1].getId() not in ids: + newContent.append(obj) + + + user=self.getActualUserName() + + ob=manage_addCDLIBasketVersion(self,user,comment="",basketContent=newContent) + + if RESPONSE: + obj=self._getOb(ob.getId()) + RESPONSE.redirect(obj.absolute_url()) def manage_addCDLIBasketForm(self): """add the CDLIBasketContainer form""" @@ -666,12 +715,12 @@ class CDLIBasketVersion(SimpleItem): objId=result[1].getTitle() founds=self.CDLICatalog.search({'title':objId}) if len(founds)>0: - return founds[0].getObject().absolute_url() + return founds[0].getObject().getLastVersion().absolute_url() else: #assume version number splitted=objId.split("_") founds=self.CDLICatalog.search({'title':splitted[1]}) - return founds[0].getObject().absolute_url()+'/'+objId + return founds[0].getObject().getLastVersion().absolute_url()+'/'+objId def manage_addCDLIBasketVersion(self,user,comment="",basketContent=[],RESPONSE=None): """add a version""" @@ -698,12 +747,23 @@ class CDLIFileObject(versionedFileObject meta_type="CDLI File Object" - + security=ClassSecurityInfo() + def view(self): """view file""" pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','viewCDLIFile.zpt')).__of__(self) return pt() + security.declarePublic('getDesignation') + def getDesignation(self): + """get the designation out of the file""" + txt=re.search("&[Pp](.*)= (.*)",self.data) + + try: + return txt.group(2) + except: + return "ERROR" + manage_addCDLIFileObjectForm=DTMLFile('dtml/fileAdd', globals(),Kind='CDLIFileObject',kind='CDLIFileObject', version='1') def manage_addCDLIFileObject(self,id,vC='',author='', file='',title='',precondition='', content_type='', @@ -745,7 +805,7 @@ class CDLIFile(versionedFile,CatalogAwar default_catalog='CDLICatalog' - + 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 @@ -754,8 +814,16 @@ class CDLIFile(versionedFile,CatalogAwar if not context: context=self - - return [x.getObject() for x in context.CDLIBasketCatalog.search({'getFileNamesInLastVersion':self.getId()})] + + ret=[] + for x in context.CDLIBasketCatalog.search({'getFileNamesInLastVersion':self.getId()}): + #if the basket x is deleted it seemes to be that x is sometimes still in the Catalog, why? + try: + ret.append(x.getObject()) + except: + pass + return ret + #return [x.getObject() for x in context.CDLIBasketCatalog.search({'getFileNamesInLastVersion':self.getId()})] def addCDLIFileObjectForm(self): @@ -776,7 +844,6 @@ class CDLIFile(versionedFile,CatalogAwar except: pass - author=self.REQUEST.SESSION['author'] if changeName=="yes": filename=file.filename @@ -817,7 +884,7 @@ class CDLIFile(versionedFile,CatalogAwar return pt() else: - RESPONSE.redirect(self.REQUEST['URL2']) + RESPONSE.redirect(self.REQUEST['URL2']+'?uploaded=%s'%self.title) else: return self.ZopeFind(self,obj_ids=[id])[0][1] @@ -873,6 +940,22 @@ class CDLIFileFolder(versionedFileFolder folderMetaType=['CDLI Folder'] default_catalog='CDLICatalog' + def delete(self,ids): + """delete this file, i.e. move into a trash folder""" + + found=self.ZopeFind(self,obj_ids=['.trash']) + + if len(found)<1: + manage_addCDLIFileFolder(self, '.trash',title="Trash") + trash=self._getOb('.trash') + else: + trash=found[0][1] + + if type(ids) is not ListType: + ids=[ids] + cut=self.manage_cutObjects(ids) + trash.manage_pasteObjects(cut) + def getVersionNumbersFromIds(self,ids): """get the numbers of the current versions of documents described by their ids""" @@ -1007,6 +1090,7 @@ class CDLIFileFolder(versionedFileFolder txt=upload.read() txt=txt.replace(",","\n") txt=txt.replace("\t","\n") + txt=txt.replace("\r","\n") idsTmp=txt.split("\n") ids=[] for id in idsTmp: # make sure that no empty lines @@ -1016,7 +1100,7 @@ class CDLIFileFolder(versionedFileFolder ids.append(idTmp) #self.REQUEST.SESSION['ids']=" OR ".join(ids) - + pt=getattr(self,'filelist.html') self.REQUEST.SESSION['searchList']=ids return pt(search=ids) @@ -1032,7 +1116,7 @@ class CDLIFileFolder(versionedFileFolder 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