version 1.71, 2007/03/21 19:29:23
|
version 1.72, 2007/03/22 19:56:22
|
Line 506 class CDLIBasketContainer(OrderedFolder)
|
Line 506 class CDLIBasketContainer(OrderedFolder)
|
trash.manage_pasteObjects(cut) |
trash.manage_pasteObjects(cut) |
|
|
security.declareProtected('manage','manageBaskets') |
security.declareProtected('manage','manageBaskets') |
def manageBaskets(self,ids,submit,REQUEST=None,RESPONSE=None): |
def manageBaskets(self,submit,ids=None,basket1="",basket2="",REQUEST=None,RESPONSE=None): |
"""manage baskets, delete or copy""" |
"""manage baskets, delete or copy""" |
if submit=="delete": |
if submit=="delete": |
self.deleteBaskets(ids) |
self.deleteBaskets(ids) |
|
|
|
elif submit=="join": |
|
flag,msg=self.joinBasket("joinedBasket", ids) |
|
logging.info("joining %s %s"%(flag,msg)) |
|
|
|
elif submit=="subtract": |
|
logging.info("BBBb %s %s"%(basket1,basket2)) |
|
flag,msg=self.subtractBasket("subtractedBasket", basket1,basket2) |
|
logging.info("subtract %s %s"%(flag,msg)) |
|
|
if RESPONSE: |
if RESPONSE: |
RESPONSE.redirect(self.absolute_url()) |
RESPONSE.redirect(self.absolute_url()) |
Line 635 class CDLIBasketContainer(OrderedFolder)
|
Line 642 class CDLIBasketContainer(OrderedFolder)
|
|
|
return baskets |
return baskets |
|
|
def joinBasket(self,newbasket,oldbaskets,delete=False): |
|
|
def subtractBasket(self,newBasket,basket1,basket2): |
|
"""subtract basket2 from basket1 |
|
(i.e. newbasket will contain alle elements of basket1 which are not in basket2), |
|
if basket2 contains files which are not in basket1, then theses files fill be ignored |
|
|
|
@param newbasket: name of the new basket |
|
@param basket1: basket where basket2 will be subtracted from |
|
@param basket2: see above |
|
|
|
""" |
|
logging.info("CCCCC %s %s"%(basket1,basket2)) |
|
|
|
try: |
|
newB=self.addBasket(newBasket) |
|
except: |
|
return False, "cannot create the new basket" |
|
|
|
|
|
|
|
|
|
|
|
bas2= getattr(self,basket2) |
|
bas2content=bas2.getContent() |
|
bas2ids=[x[0] for x in bas2content] |
|
|
|
|
|
|
|
bas1= getattr(self,basket1) |
|
bas1content=bas1.getContent() |
|
|
|
|
|
newBasketContent={} |
|
|
|
for id,version in bas1content: |
|
if not (id in bas2ids): |
|
newBasketContent[id]=version |
|
|
|
username=self.getActualUserName() |
|
|
|
logging.info("sbc %s"%newBasketContent) |
|
newB.addObjectsWithVersion(newBasketContent,username=username,catalog=self.CDLICatalog) |
|
|
|
return True, "" |
|
|
|
|
|
def joinBasket(self,newBasket,oldBaskets): |
"""join two baskets |
"""join two baskets |
@param newbasket: name of the new basket |
@param newbasket: name of the new basket |
@param oldbaskets: list of baskets to be joined |
@param oldbaskets: list of baskets to be joined |
@param delete: (optional) delete the old baskets |
|
""" |
""" |
|
try: |
|
newB=self.addBasket(newBasket) |
|
except: |
|
return False, "cannot create the new basket" |
|
|
|
newBasketContent={} |
|
for ob in oldBaskets: |
|
x= getattr(self,ob,None) |
|
if x is None: |
|
return False, "cannot find basket: %s"%ob |
|
|
|
ids=x.getContent() # hole den Inhalt |
|
|
|
for id,version in ids: |
|
if newBasketContent.has_key(id): # p number gibt's schon |
|
newBasketContent[id]=max(newBasketContent[id],version) # speichere die groessere Versionsnumber |
|
else: |
|
newBasketContent[id]=version |
|
username=self.getActualUserName() |
|
|
|
logging.info("nbc %s"%newBasketContent) |
|
newB.addObjectsWithVersion(newBasketContent,username=username,catalog=self.CDLICatalog) |
|
|
|
return True, "" |
|
|
def getNewId(self): |
def getNewId(self): |
"""createIds""" |
"""createIds""" |
Line 786 class CDLIBasket(Folder,CatalogAware):
|
Line 861 class CDLIBasket(Folder,CatalogAware):
|
self.shortDescription=shortDescription |
self.shortDescription=shortDescription |
self.comment=comment |
self.comment=comment |
|
|
|
def getActualUserName(self): |
|
"""get name of the actualuser""" |
|
|
|
return str(self.REQUEST['AUTHENTICATED_USER']) |
|
|
|
|
def getLastVersion(self): |
def getLastVersion(self): |
Line 850 class CDLIBasket(Folder,CatalogAware):
|
Line 929 class CDLIBasket(Folder,CatalogAware):
|
|
|
return obj |
return obj |
|
|
|
def addObjectsWithVersion(self,ids,deleteOld=None,username=None,catalog=None): |
|
"""generate a new version of the basket with objects added, |
|
hier wird jedoch nicht die letzte Version jedes Files hinzugefuegt, s |
|
ondern ids is ein Tupel mit der Id (d.h. der p-number) und der Versionsnummer. |
|
""" |
|
logging.info("add to basket (%s)"%(self.getId())) |
|
lastVersion=self.getLastVersion() |
|
|
|
if not catalog: |
|
catalog=self.CDLICatalog |
|
|
|
if lastVersion is None: |
|
oldContent=[] |
|
else: |
|
oldContent=lastVersion.content.getContent() |
|
|
|
if deleteOld: |
|
oldContent=[] |
|
|
|
newContent=[] |
|
added=0 |
|
|
|
for id,version in ids.iteritems(): |
|
logging.info("adding %s %s"%(id,version)) |
|
id=id.split(".")[0] # title nur die pnumber ohne atf |
|
|
|
try: |
|
founds=catalog.search({'title':id}) |
|
except: |
|
founds=[] |
|
logging.info(" found %s "%(founds)) |
|
for found in founds: |
|
if found.getObject() not in oldContent: |
|
|
|
#TODO: was passiert wenn, man eine Object dazufgt, das schon da ist aber eine neuere version |
|
newContent.append((found.getObject().getVersions()[version-1][1],found.getObject())) |
|
added+=1 |
|
|
|
content=oldContent+newContent |
|
if not username: |
|
logging.error("XXXXXXXXXXX %s"%repr(self)) |
|
user=self.getActualUserName() |
|
else: |
|
user = username |
|
|
|
ob=manage_addCDLIBasketVersion(self,user,comment="",basketContent=content) |
|
logging.info("add to basket (%s) done"%(self.getId())) |
|
return added |
|
|
|
|
def addObjects(self,ids,deleteOld=None,username=None): |
def addObjects(self,ids,deleteOld=None,username=None): |
"""generate a new version of the basket with objects added""" |
"""generate a new version of the basket with objects added""" |
logging.info("add to basket (%s)"%(self.getId())) |
logging.info("add to basket (%s)"%(self.getId())) |
Line 889 class CDLIBasket(Folder,CatalogAware):
|
Line 1018 class CDLIBasket(Folder,CatalogAware):
|
|
|
|
|
|
|
|
def getContent(self): |
|
"""print content""" |
|
ret=[] |
|
|
|
lv=self.getLastVersion() |
|
for obj in lv.content.getContent(): |
|
logging.info("XXXXXXXXXX %s"%repr(obj)) |
|
ret.append((obj[1].getId(),obj[0].versionNumber)) |
|
|
|
return ret |
|
|
def getContentIds(self): |
def getContentIds(self): |
"""print basket content""" |
"""print basket content""" |
Line 976 class CDLIBasketVersion(Implicit,Persist
|
Line 1115 class CDLIBasketVersion(Implicit,Persist
|
return True |
return True |
return False |
return False |
|
|
|
def downloadListOfPnumbers(self): |
|
"""download pnumbers of the basket as list""" |
|
|
|
basket_name=self.aq_parent.title |
|
|
|
ids=self.getContent() # get the list of objects |
|
logging.error(ids) |
|
ret="\n".join([x[1].getId().split(".")[0] for x in ids]) |
|
|
|
self.REQUEST.RESPONSE.setHeader("Content-Disposition","""attachement; filename="%s.txt" """%basket_name) |
|
self.REQUEST.RESPONSE.setHeader("Content-Type","application/octet-stream") |
|
length=len(ret) |
|
self.REQUEST.RESPONSE.setHeader("Content-Length",length) |
|
self.REQUEST.RESPONSE.write(ret) |
|
|
security.declareProtected('View','downloadObjectsAsOneFile') |
security.declareProtected('View','downloadObjectsAsOneFile') |
def downloadObjectsAsOneFile(self,lock=None,procedure=None,REQUEST=None,check="yes",current="no"): |
def downloadObjectsAsOneFile(self,lock=None,procedure=None,REQUEST=None,check="yes",current="no"): |
"""download all selected files in one file""" |
"""download all selected files in one file""" |