--- basket/basket.py 2006/04/05 16:54:59 1.6 +++ basket/basket.py 2009/04/21 07:57:00 1.15 @@ -22,9 +22,10 @@ from Globals import Persistent, package_ from Acquisition import Implicit from Products.ZCatalog.CatalogPathAwareness import CatalogAware - from groups import manage_addGroupFolder +from Products.ECHO_content.ECHO_helpers import unicodify + refBasis="http://vlp.mpiwg-berlin.mpg.de/references?id=%s" basketMetatypes=['BasketXRef','BasketInternalLink','BasketExternalLink','BasketText','BasketFile'] @@ -38,6 +39,36 @@ class BasketBasis(OrderedFolder): """Basis class for BasketFolder and Baskets""" security=ClassSecurityInfo() + + def content_html(self,type): + """generische ausgabe des objectes als html""" + if hasattr(self,type+"_template"): + obj=getattr(self,type+"_template") + return obj() + else: + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','%s_template_standard.zpt'%type)).__of__(self) + pt.content_type="text/html" + return pt() + + def checkPermission(self,modus): + """check permission""" + if modus=='open': + return True + elif modus=='private': + return self.groupFolder.isMemberOf('admin') + elif modus=='admin': + return self.groupFolder.isMemberOf('admin') + elif modus=='edit': + return (self.groupFolder.isMemberOf('editor') or self.groupFolder.isMemberOf('admin')) + elif modus=='publish': + return self.groupFolder.isMemberOf('publish') + elif modus=='authorized': + if self.getActualUserName().lower() == "anonymous user": + return False + else: + return True + + def getNewId(self): """createIds""" last=getattr(self,'last',0) @@ -67,7 +98,7 @@ class BasketBasis(OrderedFolder): id=self.getNewId() manage_addBasketText(self,str(id),'','',RESPONSE=None) if REQUEST: - REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket") + REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket#"+str(id)) def addBasketExternalLink(self,REQUEST=None): """add an external link""" @@ -75,7 +106,7 @@ class BasketBasis(OrderedFolder): manage_addBasketExternalLink(self,str(id),"","","","",RESPONSE=None) if REQUEST: - REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket") + REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket#"+str(id)) def deleteObject(self,id,REQUEST=None): """delete object""" @@ -87,36 +118,35 @@ class BasketBasis(OrderedFolder): """move id one up""" self.moveObjectsUp([id], 1) if REQUEST: - REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket") + REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket#"+id) def moveDown(self,id,REQUEST=None): """move id one up""" self.moveObjectsDown([id], 1) if REQUEST: - REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket") + REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket#"+id) def moveTop(self,id,REQUEST=None): """move to top""" self.moveObjectsToTop([id]) if REQUEST: - REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket") + REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket#"+id) def moveBottom(self,id,REQUEST=None): """move to top""" self.moveObjectsToBottom([id]) if REQUEST: - REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket") + REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket#"+id) security.declareProtected('View','getOwner') def getOwner(self): """get Owner as string""" - return self.owner + return unicodify(self.owner) - def isAuthorized(self,role="read"): - """check whether actual user is authorized""" - #TODO replace occurences with checkPermission - return True + def getTitle(self): + """get title""" + return unicodify(self.title) def getActualUserName(self): """get username of actual user""" @@ -124,11 +154,13 @@ class BasketBasis(OrderedFolder): def getObjects(self): """"get objects""" - return [getattr(self,x['id']) for x in self._objects] + return self.objectValues() + #return [getattr(self,x['id']) for x in self._objects] def numberOfObjects(self): """anzahl der elemente im basket""" return len(self._objects) + class BasketFolder(BasketBasis): """Folder for Baskets""" @@ -149,11 +181,9 @@ class BasketFolder(BasketBasis): return ret elif mode=='open_intern': print "open_intern" - if self.groupFolder.isMemberOf('user'): - print "---public" + if self.checkPermission('authorized'): for object in self.getObjects(): - print object.getId(),object.publicationStatus - if object.publicationStatus=='open_intern': + if object.publicationStatus=='open_intern' or object.publicationStatus=='open': ret.append(object) return ret else: @@ -185,8 +215,8 @@ class BasketFolder(BasketBasis): #check if user has right for other modi if hasattr(self,"BasketFolder_template"): - obj=getattr(self,"BaskeFolder_template") - return obj() + obj=getattr(self,"BasketFolder_template") + return obj(mode=mode) else: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','BasketFolder_template_standard.zpt')).__of__(self) pt.content_type="text/html" @@ -256,19 +286,16 @@ class Basket(BasketBasis): {'label':'manage main','action':'changeBasketForm'}, ) - def checkPermission(self,modus): - """check permission""" - if modus=='open': - return True - elif modus=='private': - return self.groupFolder.isMemberOf('admin') - elif modus=='admin': - return self.groupFolder.isMemberOf('admin') - elif modus=='edit': - return self.groupFolder.isMemberOf('edit') - elif modus=='publish': - return self.groupFolder.isMemberOf('publish') - + + def saveButton(self,actualId): + """return the save button""" + ret=""" + save - + + """%actualId + return ret + def manageUserRights_html(self): """manage user rights""" if hasattr(self,"Basket_manageUserRights_template"): @@ -282,13 +309,14 @@ class Basket(BasketBasis): def getBasketObjects(self): """get all basket objects""" - - objs=self.getObjects() - ret=[] - for x in objs: - if x.meta_type in basketMetatypes: - ret.append(x) - return ret +# objs=self.getObjects() +# ret=[] +# for x in objs: +# if x.meta_type in basketMetatypes: +# ret.append(x) +# return ret + return self.objectValues(basketMetatypes) + def checkRef(self,xref): """check if XRef is already in Basket""" @@ -317,11 +345,16 @@ class Basket(BasketBasis): self.publicationStatus=publicationStatus self.shortDescription=shortDescription + + def getComment(self): + """get the comment""" + return unicodify(self.comment) - - def getTitle(self): - """print name""" - return self.title + + def getShortDescription(self): + """get the short description""" + return unicodify(self.shortDescription) + security.declareProtected('Manage','changeBasketForm') def changeBasketForm(self): @@ -386,7 +419,7 @@ class Basket(BasketBasis): def changeBasketComments(self,REQUEST): """Change comment of basket elements""" form=REQUEST.form - + for key in form.keys(): splitted=key.split("_") objects=self.ZopeFind(self,obj_ids=[splitted[0]]) @@ -395,7 +428,7 @@ class Basket(BasketBasis): if REQUEST: - REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket") + REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket#"+form.get('actualId','')) def selectThisBasketAsCurrent(self,REQUEST=None): @@ -430,9 +463,18 @@ class Basket(BasketBasis): manage_addBasketXRef(self,str(id),title,comment,xref) if REQUEST: - import random - rd=random.random() - REQUEST.RESPONSE.redirect(REQUEST['HTTP_REFERER']+'&-dummy='+str(rd)) + #import random + #rd=random.random() + urlSplit=REQUEST['HTTP_REFERER'].split("?") + if len(urlSplit)>1: + parsed=cgi.parse_qs(urlSplit[1]) + parsed['-link']=link + qs=urllib.urlencode(parsed,doseq=True) + + else: + qs="" + + REQUEST.RESPONSE.redirect(urlSplit[0]+"?"+qs) else: return True @@ -454,7 +496,7 @@ def manage_addBasket(self,id,title,comme if RESPONSE is not None: RESPONSE.redirect('manage_main') -class BasketBasis(SimpleItem): +class BasketObject(SimpleItem): """basic class for baskets""" #security=ClassSecurityInfo() @@ -473,6 +515,15 @@ class BasketBasis(SimpleItem): self.id=id self.title=title self.comment=comment + + def getTitle(self): + """get the title""" + return unicodify(self.title) + + def getComment(self): + """get the comment""" + return unicodify(self.comment) + def changeBasketBasisForm(self): """form for changing the basket""" @@ -506,7 +557,7 @@ class BasketBasis(SimpleItem): pt.content_type="text/html" return pt() -class BasketFile(BasketBasis,File): +class BasketFile(BasketObject,File): """class for fileupload""" meta_type="BasketFile" @@ -521,24 +572,32 @@ class BasketFile(BasketBasis,File): 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) - - + try: + self.REQUEST.RESPONSE.write(self.data) + except: + try: + self.REQUEST.RESPONSE.write(str(self.data)) + except: + self.REQUEST.RESPONSE.write(repr(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 - + + self.title=title if fileUpload: self.manage_upload(fileUpload) @@ -552,7 +611,7 @@ class BasketFile(BasketBasis,File): """format object as html fragment""" - return BasketBasis.content_html(self,"BasketFile") + return BasketObject.content_html(self,"BasketFile") def manage_addBasketFile(self,id,title,comment,fileUpload,content_type='',precondition='',REQUEST=None): """add a basket file""" @@ -579,7 +638,7 @@ def manage_addBasketFile(self,id,title,c if REQUEST is not None: REQUEST['RESPONSE'].redirect(self.absolute_url()+'/manage_main') -class BasketXRef(BasketBasis): +class BasketXRef(BasketObject): """class for internal references based on xrefs""" #security=ClassSecurityInfo() @@ -613,7 +672,7 @@ class BasketXRef(BasketBasis): """format object as html fragment""" type=self.xref[0:3] - return BasketBasis.content_html(self,"BasketXRef_%s"%type) + return BasketObject.content_html(self,"BasketXRef_%s"%type) def manage_addBasketXRefForm(self): """form for adding a basket""" @@ -632,13 +691,13 @@ def manage_addBasketXRef(self,id,title,c if RESPONSE is not None: RESPONSE.redirect('manage_main') -class BasketInternalLink(BasketBasis): +class BasketInternalLink(BasketObject): """class for internal referencens based on links""" #security=ClassSecurityInfo() meta_type="BasketInternalLink" - manage_options=BasketBasis.manage_options+( + manage_options=BasketObject.manage_options+( {'label':'manage internal link','action':'changeBasketInternalLinkForm'}, ) @@ -663,7 +722,7 @@ class BasketInternalLink(BasketBasis): def content_html(self): """format object as html fragment""" - return BasketBasis.content_html(self,"BasketInternalLink") + return BasketObject.content_html(self,"BasketInternalLink") def linkToObject(self): """link to the object (internalLink)""" @@ -688,15 +747,19 @@ def manage_addBasketInternalLink(self,id RESPONSE.redirect('manage_main') -class BasketExternalLink(BasketBasis): +class BasketExternalLink(BasketObject): """class for external links""" #security=ClassSecurityInfo() meta_type="BasketExternalLink" - manage_options=BasketBasis.manage_options+( + manage_options=BasketObject.manage_options+( {'label':'manage internal link','action':'changeBasketExternalLinkForm'}, ) + + def getLinkText(self): + """get the link text""" + return unicodify(self.linkText) def changeBasketExternalLinkForm(self): """form for changing the basket""" @@ -719,7 +782,7 @@ class BasketExternalLink(BasketBasis): def content_html(self): """format object as html fragment""" - return BasketBasis.content_html(self,"BasketExternalLink") + return BasketObject.content_html(self,"BasketExternalLink") def linkToObject(self): """link to the object (externalLink)""" @@ -743,7 +806,7 @@ def manage_addBasketExternalLink(self,id RESPONSE.redirect('manage_main') -class BasketText(BasketBasis): +class BasketText(BasketObject): """class for text elements in baskets""" #security=ClassSecurityInfo() @@ -762,14 +825,9 @@ def manage_addBasketTextForm(self): def manage_addBasketText(self,id,title,comment,RESPONSE=None): """add a basketXRef object""" - newObj=BasketText(id,title,comment) self._setObject(id,newObj) if RESPONSE is not None: RESPONSE.redirect('manage_main') - - - - \ No newline at end of file