--- basket/basket.py 2006/04/03 18:19:45 1.5 +++ basket/basket.py 2006/04/05 16:54:59 1.6 @@ -8,6 +8,7 @@ import cgi from OFS.OrderedFolder import OrderedFolder from OFS.SimpleItem import SimpleItem +from OFS.Image import File from AccessControl import ClassSecurityInfo from AccessControl.User import UserFolder @@ -26,7 +27,7 @@ from groups import manage_addGroupFolder refBasis="http://vlp.mpiwg-berlin.mpg.de/references?id=%s" -basketMetatypes=['BasketXRef','BasketInternalLink','BasketExternalLink','BasketText'] +basketMetatypes=['BasketXRef','BasketInternalLink','BasketExternalLink','BasketText','BasketFile'] #basis url for references @@ -46,6 +47,21 @@ class BasketBasis(OrderedFolder): return last + def addBasketFile(self,REQUEST=None,fileUpload=None,comment=None,title=""): + """add a file to the basket""" + if fileUpload==None: + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addBasketFile.zpt')).__of__(self) + pt.content_type="text/html" + return pt() + else: + id=self.getNewId() + if title=="": + title=fileUpload.filename + + manage_addBasketFile(self,id,title,comment,fileUpload) + if REQUEST: + REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket") + def addBasketText(self,REQUEST=None): """add a text""" id=self.getNewId() @@ -126,7 +142,6 @@ class BasketFolder(BasketBasis): ret=[] if mode=='open': - for object in self.getObjects(): if object.publicationStatus=='open': @@ -490,7 +505,80 @@ class BasketBasis(SimpleItem): pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','%s_template_standard.zpt'%type)).__of__(self) pt.content_type="text/html" return pt() + +class BasketFile(BasketBasis,File): + """class for fileupload""" + meta_type="BasketFile" + + def __init__(self,id,title,comment,content_type='',precondition=''): + """init""" + self.id=id + self.title=title + self.comment=comment + self.content_type=content_type + self.precondition=precondition + + + def download(self): + """download the file""" + self.REQUEST.RESPONSE.setHeader("Content-Disposition","""attachement; filename=%s"""%self.title) + self.REQUEST.RESPONSE.setHeader("Content-Type","application/octet-stream") + + self.content_type="application/octet-stream" + self.REQUEST.RESPONSE.write(self.data) + + + def upDateFile(self,fileUpload=None,comment=None,title="",REQUEST=None): + """update file""" + if fileUpload==None: + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','upDateBasketFile.zpt')).__of__(self) + pt.content_type="text/html" + return pt() + else: + id=self.getNewId() + if title=="": + title=fileUpload.filename + + if fileUpload: + self.manage_upload(fileUpload) + if comment: + self.comment=comment + + if REQUEST: + REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket") + + def content_html(self): + """format object as html fragment""" + + + return BasketBasis.content_html(self,"BasketFile") + +def manage_addBasketFile(self,id,title,comment,fileUpload,content_type='',precondition='',REQUEST=None): + """add a basket file""" + + id=str(id) + title=str(title) + content_type=str(content_type) + precondition=str(precondition) + + #id, title = cookId(id, title, file) + + self=self.this() + + # First, we create the file without data: + self._setObject(id, BasketFile(id,title,comment,content_type, precondition)) + + # Now we "upload" the data. By doing this in two steps, we + # can use a database trick to make the upload more efficient. + if fileUpload: + self._getOb(id).manage_upload(fileUpload) + if content_type: + self._getOb(id).content_type=content_type + + if REQUEST is not None: + REQUEST['RESPONSE'].redirect(self.absolute_url()+'/manage_main') + class BasketXRef(BasketBasis): """class for internal references based on xrefs"""