--- basket/basket.py 2006/01/19 16:25:49 1.1 +++ basket/basket.py 2006/03/02 19:57:32 1.2 @@ -24,50 +24,22 @@ from Products.ZCatalog.CatalogPathAwaren refBasis="http://vlp.mpiwg-berlin.mpg.de/references?id=%s" #basis url for references -publicationStatus=['private','restricted','open','published'] +publicationStatusList=['private','hidden','open_intern','open','group'] # private only access for the owner, restricted only for users in accessGroup, open open for everyone, published occurs in basket list -class Basket(OrderedFolder): - """Basket class""" - - meta_type="basket" +class BasketBasis(OrderedFolder): + """Basis class for BasketFolder and Baskets""" security=ClassSecurityInfo() - - manage_options=OrderedFolder.manage_options+( - {'label':'manage main','action':'changeBasketForm'}, - ) - - def __init__(self,id,title,comment,owner,publicationStatus,shortDescription,accessGroups=None): - ''' - init the basket - @param id: id - @param title: title of the basket - @param comment: description of the basket - @param shortDescription: short description of the basket for the overviewList - @param owner: user object describing the owner - @param publication_status: one of publicationStatus if restricted, optional parameter accessGroups has to be set - @param aaccessGroups: default value is none, contains list of groups which are allowed to access this basket - ''' - - self.id=id - self.title=title - self.comment=comment - self.owner=owner - self.publicationStatus=publicationStatus - self.accessGroups=accessGroups - self.shortDecription=shortDescription - - security.declareProtected('View','getOwner') - def getNewId(self): """createIds""" last=getattr(self,'last',0) last +=1 while len(self.ZopeFind(self,obj_ids=[str(last)]))>0: last+=1 + return last - + def addBasketText(self,REQUEST=None): """add a text""" id=self.getNewId() @@ -75,6 +47,14 @@ class Basket(OrderedFolder): if REQUEST: REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket") + def addBasketExternalLink(self,REQUEST=None): + """add an external link""" + id=self.getNewId() + + manage_addBasketExternalLink(self,str(id),"","","","",RESPONSE=None) + if REQUEST: + REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket") + def deleteObject(self,id,REQUEST=None): """delete object""" self.manage_delObjects([id]) @@ -104,11 +84,184 @@ class Basket(OrderedFolder): self.moveObjectsToBottom([id]) if REQUEST: REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket") + + security.declareProtected('View','getOwner') def getOwner(self): """get Owner as string""" return self.owner + def isAuthorized(self,role="read"): + """check whether actual user is authorized""" + #TODO implement isAuthorized to do type, read or edit + return True + + def getActualUserName(self): + """get username of actual user""" + return self.REQUEST['AUTHENTICATED_USER'].getUserName() + + def getObjects(self): + """"get objects""" + 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""" + + meta_type="Basket Folder" + + #security=ClassSecurityInfo() + + def getSets(self,mode='open'): + """get sets, depending on mode selected""" + ret=[] + + if mode=='open': + + for object in self.getObjects(): + + if object.publicationStatus=='open': + ret.append(object) + return ret + elif mode=='open_intern': + print "open_intern" + if self.groupFolder.isMemberOf('user'): + print "---public" + for object in self.getObjects(): + print object.getId(),object.publicationStatus + if object.publicationStatus=='open_intern': + ret.append(object) + return ret + else: + return ret + elif mode=='private': + for object in self.getObjects(): + if object.groupFolder.isMemberOf('admin') or object.groupFolder.isMemberOf('editor'): + ret.append(object) + return ret + elif mode=='groups': + for object in self.getObjects(): + if object.groupFolder.isMemberOf('reader') or object.groupFolder.isMemberOf('editor') or object.groupFolder.isMemberOf('admin'): + ret.append(object) + return ret + + def checkPermission(self,modus): + """check permission""" + if modus=='open': + return True + elif modus=='private': + return self.isMemberOf('admin') + + def getCurrentBasket(self): + """select this basket for further work""" + + return self.REQUEST.cookies.get('vlp_basket',None) + + def index_html(self,mode='open'): + """generische ansicht""" + + #check if user has right for other modi + + if hasattr(self,"BasketFolder_template"): + obj=getattr(self,"BaskeFolder_template") + return obj() + else: + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','BasketFolder_template_standard.zpt')).__of__(self) + pt.content_type="text/html" + return pt(mode=mode) + + def __init__(self,id,title): + """init basket folder""" + + self.id=id + self.title=title + + def manageBasketFolder(self): + """manage the basket""" + + if hasattr(self,"BasketFolder_manage_template"): + obj=getattr(self,"BasketFolder_manage_template") + return obj() + else: + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','BasketFolder_manage_template_standard.zpt')).__of__(self) + pt.content_type="text/html" + return pt() + + def addBasket(self,title,RESPONSE=None): + """add a new basket""" + id=self.getNewId() + username=self.getActualUserName() + publicatonStatus="private" + manage_addBasket(self,str(id),title,"",username,publicationStatus,RESPONSE=None) + newObj=getattr(self,str(id)) + if RESPONSE: + RESPONSE.redirect(newObj.absolute_url()+'/manageBasket') + + +def manage_addBasketFolderForm(self): + """form for adding a basket""" + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addBasketFolder.zpt')).__of__(self) + return pt() + +def manage_addBasketFolder(self,id,title,RESPONSE=None): + """add a basket folder object""" + + + newObj=BasketFolder(id,title) + + self._setObject(id,newObj) + + if RESPONSE is not None: + RESPONSE.redirect('manage_main') + +class Basket(BasketBasis): + """Basket class""" + + meta_type="basket" + + security=ClassSecurityInfo() + + manage_options=OrderedFolder.manage_options+( + {'label':'manage main','action':'changeBasketForm'}, + ) + + def checkRef(self,xref): + """check if XRef is already in Basket""" + + founds=self.ZopeFind(self,obj_metatypes=["BasketXRef"]) + for found in founds: + if self.xref==xref: + return True + return False + + def __init__(self,id,title,comment,owner,publicationStatus,shortDescription): + ''' + init the basket + @param id: id + @param title: title of the basket + @param comment: description of the basket + @param shortDescription: short description of the basket for the overviewList + @param owner: user object describing the owner + @param publication_status: one of publicationStatus if restricted, optional parameter accessGroups has to be set + ''' + + self.id=id + self.title=title + self.comment=comment + self.owner=owner + self.publicationStatus=publicationStatus + self.shortDescription=shortDescription + + + + def getTitle(self): + """print name""" + return self.title + + security.declareProtected('Manage','changeBasketForm') def changeBasketForm(self): """form for changing the basket""" pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeBasket.zpt')).__of__(self) @@ -166,23 +319,7 @@ class Basket(OrderedFolder): pt.content_type="text/html" return pt() - def isAuthorized(self,role="read"): - """check whether actual user is authorized""" - #TODO implement isAuthorized to do type, read or edit - return True - - def getActualUserName(self): - """get username of actual user""" - return self.REQUEST['AUTHENTICATED_USER'].getUserName() - - def getObjects(self): - """"get objects""" - return [getattr(self,x['id']) for x in self._objects] - - def numberOfObjects(self): - """anzahl der elemente im basket""" - return len(self._objects) - + def changeBasketComments(self,REQUEST): """Change comment of basket elements""" form=REQUEST.form @@ -191,7 +328,8 @@ class Basket(OrderedFolder): splitted=key.split("_") objects=self.ZopeFind(self,obj_ids=[splitted[0]]) if len(objects)>0: - objects[0][1].comment=form[key] + setattr(objects[0][1],splitted[1],form[key]) + if REQUEST: REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket") @@ -204,10 +342,7 @@ class Basket(OrderedFolder): if REQUEST: REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket") - def getCurrentBasket(self): - """select this basket for further work""" - return self.REQUEST.cookies.get('vlp_basket',None) - + def generateNewObject(self,type,link,title='',comment='',REQUEST=None): """generate a new object in the basket""" @@ -232,7 +367,9 @@ class Basket(OrderedFolder): manage_addBasketXRef(self,str(id),title,comment,xref) if REQUEST: - REQUEST.RESPONSE.redirect(REQUEST['HTTP_REFERER']) + import random + rd=random.random() + REQUEST.RESPONSE.redirect(REQUEST['HTTP_REFERER']+'&-dummy='+str(rd)) else: return True @@ -241,13 +378,13 @@ def manage_addBasketForm(self): pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addBasket.zpt')).__of__(self) return pt() -def manage_addBasket(self,id,title,comment,username,publicationStatus,accessGroups=None,RESPONSE=None): +def manage_addBasket(self,id,title,comment,username,publicationStatus,shortDescription="",accessGroups=None,RESPONSE=None): """add a basket object""" #TODO:what happens in username does not exists #find username owner=username - - newObj=Basket(id,title,comment,owner,publicationStatus,accessGroups=None) + + newObj=Basket(id,title,comment,owner,publicationStatus,shortDescription,accessGroups) self._setObject(id,newObj) @@ -257,7 +394,7 @@ def manage_addBasket(self,id,title,comme class BasketBasis(SimpleItem): """basic class for baskets""" - security=ClassSecurityInfo() + #security=ClassSecurityInfo() manage_options=SimpleItem.manage_options+( {'label':'manage main','action':'changeBasketBasisForm'}, @@ -309,7 +446,7 @@ class BasketBasis(SimpleItem): class BasketXRef(BasketBasis): """class for internal references based on xrefs""" - security=ClassSecurityInfo() + #security=ClassSecurityInfo() meta_type="BasketXRef" manage_options=BasketBasis.manage_options+( @@ -362,7 +499,7 @@ def manage_addBasketXRef(self,id,title,c class BasketInternalLink(BasketBasis): """class for internal referencens based on links""" - security=ClassSecurityInfo() + #security=ClassSecurityInfo() meta_type="BasketInternalLink" manage_options=BasketBasis.manage_options+( @@ -418,7 +555,7 @@ def manage_addBasketInternalLink(self,id class BasketExternalLink(BasketBasis): """class for external links""" - security=ClassSecurityInfo() + #security=ClassSecurityInfo() meta_type="BasketExternalLink" manage_options=BasketBasis.manage_options+( @@ -473,7 +610,7 @@ def manage_addBasketExternalLink(self,id class BasketText(BasketBasis): """class for text elements in baskets""" - security=ClassSecurityInfo() + #security=ClassSecurityInfo() meta_type="BasketText" def content_html(self):