--- cdli/cdli_files.py 2006/07/14 19:08:30 1.37 +++ cdli/cdli_files.py 2006/07/25 07:51:49 1.40 @@ -13,6 +13,7 @@ from OFS.Folder import manage_addFolder import re from AccessControl import ClassSecurityInfo from Acquisition import Implicit +from Globals import Persistent from threading import Thread from ZPublisher.HTTPRequest import HTTPRequest from ZPublisher.HTTPResponse import HTTPResponse @@ -20,7 +21,27 @@ from ZPublisher.BaseRequest import Reque import threading +class BasketContent(SimpleItem): + """classe fuer den Inhalt eines Baskets""" + + def __init__(self,content=[]): + """content""" + self.contentList=content[0:] + + def getContent(self): + """get content""" + return self.contentList + + def setContent(self,content): + self.contentList=content[0:] + + def numberOfItems(self): + """number""" + + return len(self.getContent()) + + class uploadATFfinallyThread(Thread): """class for adding uploaded filed (temporarily stored in the staging area at /tmp""" @@ -152,7 +173,7 @@ class uploadATFfinallyThread(Thread): #if a basketname is give, add files to the basket if not (basketname ==''): self.result+="

Add basket

" - basketId=ctx2.basketContainer.getBasketIdfromName(basketname) + basketId=ctx2.basketContainer.ketIdfromName(basketname) if not basketId: # create new basket ob=ctx2.basketContainer.addBasket(basketname) @@ -446,7 +467,9 @@ class BasketObject_old(Folder): def numberOfItems(self): """return anzahl der elemente im basket""" - return len(self.contents) + num=len(self.contents) + + return num def addObjects(self,ids): """addObjects""" @@ -560,6 +583,14 @@ class CDLIBasketContainer(OrderedFolder) security=ClassSecurityInfo() meta_type="CDLIBasketContainer" + def upDateBaskets(self): + """update content in to objects""" + + founds=self.ZopeFind(self,obj_metatypes=['CDLIBasketVersion'],search_sub=1) + + for found in founds: + found[1].updateBasket() + security.declareProtected('manage','deleteBaskets') def deleteBaskets(self,ids=None): """delete baskets, i.e. move them into trash folder""" @@ -693,7 +724,7 @@ class CDLIBasketContainer(OrderedFolder) baskets.sort(sortAuthor) elif sortField=='comment': baskets.sort(sortComment) - print "got the baskets" + return baskets @@ -785,6 +816,7 @@ class CDLIBasket(Folder,CatalogAware): meta_type="CDLIBasket" default_catalog="CDLIBasketCatalog" + def getFile(self,obj): return obj[1] @@ -840,12 +872,22 @@ class CDLIBasket(Folder,CatalogAware): def getLastVersion(self): """hole letzte version""" - ids=[int(x[0]) for x in self.ZopeFind(self,obj_metatypes=["CDLIBasketVersion"])] + + ids=[] + idsTmp= self.objectIds() + for x in idsTmp: + try: + ids.append(int(x)) + except: + pass ids.sort() + if len(ids)==0: return None else: ob=getattr(self,str(ids[-1])) + + return ob def getVersions(self): @@ -860,7 +902,7 @@ class CDLIBasket(Folder,CatalogAware): ids=[ids] lastVersion=self.getLastVersion() - oldContent=lastVersion.basketContent[0:] + oldContent=lastVersion.content.getContent() newContent=[] #first copy the old @@ -883,10 +925,13 @@ class CDLIBasket(Folder,CatalogAware): ob=manage_addCDLIBasketVersion(self,user,comment="",basketContent=newContent) + obj=self._getOb(ob.getId()) if RESPONSE: - obj=self._getOb(ob.getId()) + RESPONSE.redirect(obj.absolute_url()) - + + return obj + def addObjects(self,ids,deleteOld=None,username=None): """generate a new version of the basket with objects added""" @@ -895,7 +940,7 @@ class CDLIBasket(Folder,CatalogAware): if lastVersion is None: oldContent=[] else: - oldContent=lastVersion.basketContent[0:] + oldContent=lastVersion.content.getContent() if deleteOld: oldContent=[] @@ -935,7 +980,7 @@ class CDLIBasket(Folder,CatalogAware): ids=[ids] lastVersion=self.getLastVersion() - oldContent=lastVersion.basketContent[0:] + oldContent=lastVersion.content.getContent() newContent=[] for obj in oldContent: if obj[1].getId() not in ids: @@ -969,12 +1014,25 @@ def manage_addCDLIBasket(self,title,shor else: return ob -class CDLIBasketVersion(SimpleItem): +class CDLIBasketVersion(Implicit,Persistent,Folder): """version of a basket""" meta_type="CDLIBasketVersion" security=ClassSecurityInfo() + def updateBasket(self): + """update""" + try: + self._setObject('content',BasketContent(self.basketContent)) + except: + try: + if len(self.basketContent)>0: + self.content.setContent(self.basketContent) + except: + print "error",self.getId(),self.aq_parent.getId() + self.basketContent=[] + + def containsNonActualFiles(self): """returns True if basket contains one or more non current files""" @@ -1004,7 +1062,7 @@ class CDLIBasketVersion(SimpleItem): #check if a locked object exist in the basket. lockedObjects={} - for object in self.basketContent: + for object in self.content.getContent(): if not object[1].lockedBy=="": lockedObjects[object[1].title]=repr(object[1].lockedBy) @@ -1022,7 +1080,7 @@ class CDLIBasketVersion(SimpleItem): procedure="downloadAll" - for object in self.basketContent: + for object in self.content.getContent(): if (procedure=="downloadAll") or (object[1].lockedBy=='') or (object[1].lockedBy==self.REQUEST['AUTHENTICATED_USER']): if current=="no": #version as they are in the basket @@ -1050,7 +1108,7 @@ class CDLIBasketVersion(SimpleItem): def numberOfItems(self): """return anzahl der elemente im basket""" - return len(self.basketContent) + return self.content.numberOfItems() def getTime(self): """getTime""" @@ -1066,14 +1124,15 @@ class CDLIBasketVersion(SimpleItem): def getContent(self): """get Basket Content""" - return self.basketContent + return self.content.getContent() def __init__(self,id,user,comment="",basketContent=[]): """ init a basket version""" self.id=id self.coment=comment - self.basketContent=basketContent[0:] + self._setObject('content',BasketContent(basketContent)) + #self.basketContent=basketContent[0:]a self.user=user self.time=time.localtime() @@ -1090,8 +1149,9 @@ class CDLIBasketVersion(SimpleItem): """view the basket""" if self.REQUEST.get('change',False): - - self.aq_parent.updateObjects(self.REQUEST['change']) + ob=self.aq_parent.updateObjects(self.REQUEST['change']) + + self.REQUEST.RESPONSE.redirect(ob.absolute_url())#go to new basket, because changing generates a new basket pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','BasketVersionMain.zpt')).__of__(self) return pt() @@ -1169,6 +1229,20 @@ class CDLIFileObject(CatalogAware,versio pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','viewCDLIFile.zpt')).__of__(self) return pt() + security.declarePublic('getPNumber') + def getPNumber(self): + """get the pnumber""" + try: + txt=re.match("&[Pp](\d*)\s*=([^\r\n]*)",self.data[0:]) + except: + txt=self.data[0:] + + return "ERROR" + try: + return "P"+txt.group(1) + except: + return "ERROR" + security.declarePublic('getDesignation') def getDesignation(self): """get the designation out of the file""" @@ -1651,7 +1725,7 @@ class CDLIRoot(Folder): ret=[] for f in self.ZopeFind(self,obj_metatypes="CDLI file",search_sub=1): un=f[1].forceunlock() - print un + if un and un !="": ret.append((f[0],un)) print ret @@ -1785,10 +1859,10 @@ class CDLIRoot(Folder): self.REQUEST.SESSION['newPs']=tmp['newPs'] self.REQUEST.SESSION['tmpdir']=tmp['dir'] #del(self.cdli_main.tmpStore2[threadName]) - print "here the templates" + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','uploadCheck.zpt')).__of__(self) - print "init p" + return pt(changed=tmp['changed'],errors=tmp['errors'],dir=tmp['dir'],newPs=tmp['newPs'],basketLen=tmp['basketLen'],numberOfFiles=tmp['numberOfFiles'], basketNameFromId=tmp['basketNameFromId'],basketNameFromFile=tmp['basketNameFromFile'],basketId=tmp['basketId'])