Annotation of basket/basket.py, revision 1.1
1.1 ! dwinter 1: ###objects to store and manage objects in baskets
! 2:
! 3: import os
! 4: import os.path
! 5: import urllib
! 6: import cgi
! 7:
! 8:
! 9: from OFS.OrderedFolder import OrderedFolder
! 10: from OFS.SimpleItem import SimpleItem
! 11:
! 12: from AccessControl import ClassSecurityInfo
! 13: from AccessControl.User import UserFolder
! 14: from Globals import InitializeClass
! 15: from Globals import DTMLFile
! 16: import Globals
! 17: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
! 18: from Products.PageTemplates.PageTemplate import PageTemplate
! 19: from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
! 20: from Globals import Persistent, package_home
! 21: from Acquisition import Implicit
! 22: from Products.ZCatalog.CatalogPathAwareness import CatalogAware
! 23:
! 24: refBasis="http://vlp.mpiwg-berlin.mpg.de/references?id=%s"
! 25: #basis url for references
! 26:
! 27: publicationStatus=['private','restricted','open','published']
! 28: # private only access for the owner, restricted only for users in accessGroup, open open for everyone, published occurs in basket list
! 29:
! 30: class Basket(OrderedFolder):
! 31: """Basket class"""
! 32:
! 33: meta_type="basket"
! 34:
! 35: security=ClassSecurityInfo()
! 36:
! 37: manage_options=OrderedFolder.manage_options+(
! 38: {'label':'manage main','action':'changeBasketForm'},
! 39: )
! 40:
! 41: def __init__(self,id,title,comment,owner,publicationStatus,shortDescription,accessGroups=None):
! 42: '''
! 43: init the basket
! 44: @param id: id
! 45: @param title: title of the basket
! 46: @param comment: description of the basket
! 47: @param shortDescription: short description of the basket for the overviewList
! 48: @param owner: user object describing the owner
! 49: @param publication_status: one of publicationStatus if restricted, optional parameter accessGroups has to be set
! 50: @param aaccessGroups: default value is none, contains list of groups which are allowed to access this basket
! 51: '''
! 52:
! 53: self.id=id
! 54: self.title=title
! 55: self.comment=comment
! 56: self.owner=owner
! 57: self.publicationStatus=publicationStatus
! 58: self.accessGroups=accessGroups
! 59: self.shortDecription=shortDescription
! 60:
! 61: security.declareProtected('View','getOwner')
! 62:
! 63: def getNewId(self):
! 64: """createIds"""
! 65: last=getattr(self,'last',0)
! 66: last +=1
! 67: while len(self.ZopeFind(self,obj_ids=[str(last)]))>0:
! 68: last+=1
! 69: return last
! 70:
! 71: def addBasketText(self,REQUEST=None):
! 72: """add a text"""
! 73: id=self.getNewId()
! 74: manage_addBasketText(self,str(id),'','',RESPONSE=None)
! 75: if REQUEST:
! 76: REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket")
! 77:
! 78: def deleteObject(self,id,REQUEST=None):
! 79: """delete object"""
! 80: self.manage_delObjects([id])
! 81: if REQUEST:
! 82: REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket")
! 83:
! 84: def moveUp(self,id,REQUEST=None):
! 85: """move id one up"""
! 86: self.moveObjectsUp([id], 1)
! 87: if REQUEST:
! 88: REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket")
! 89:
! 90: def moveDown(self,id,REQUEST=None):
! 91: """move id one up"""
! 92: self.moveObjectsDown([id], 1)
! 93: if REQUEST:
! 94: REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket")
! 95:
! 96: def moveTop(self,id,REQUEST=None):
! 97: """move to top"""
! 98: self.moveObjectsToTop([id])
! 99: if REQUEST:
! 100: REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket")
! 101:
! 102: def moveBottom(self,id,REQUEST=None):
! 103: """move to top"""
! 104: self.moveObjectsToBottom([id])
! 105: if REQUEST:
! 106: REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket")
! 107:
! 108: def getOwner(self):
! 109: """get Owner as string"""
! 110: return self.owner
! 111:
! 112: def changeBasketForm(self):
! 113: """form for changing the basket"""
! 114: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeBasket.zpt')).__of__(self)
! 115: return pt()
! 116:
! 117: def changeBasket(self,title,comment,shortDescription,publicationStatus=None,username=None,accessGroups=None,RESPONSE=None,target=None):
! 118: '''
! 119: init the basket
! 120: @param title: title of the basket
! 121: @param comment: description of the basket
! 122: @param owner: user object describing the owner
! 123: @param publication_status: one of publicationStatus if restricted, optional parameter accessGroups has to be set
! 124: @param aaccessGroups: default value is none, contains list of groups which are allowed to access this basket
! 125: '''
! 126: #TODO:what happens in username does not exists
! 127: #find username
! 128: owner=username
! 129:
! 130: self.title=title
! 131: self.comment=comment
! 132: if owner:
! 133: self.owner=owner
! 134: if publicationStatus:
! 135: self.publicationStatus=publicationStatus
! 136: if accessGroups:
! 137: self.accessGroups=accessGroups
! 138: self.shortDescription=shortDescription
! 139:
! 140:
! 141: if RESPONSE is not None:
! 142: if target:
! 143: RESPONSE.redirect(target)
! 144: else:
! 145: RESPONSE.redirect('manage_main')
! 146:
! 147: def index_html(self):
! 148: """generische ansicht"""
! 149:
! 150: if hasattr(self,"BasketMain_template"):
! 151: obj=getattr(self,"BasketMain_template")
! 152: return obj()
! 153: else:
! 154: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','BasketMain_template_standard.zpt')).__of__(self)
! 155: pt.content_type="text/html"
! 156: return pt()
! 157:
! 158: def manageBasket(self):
! 159: """manage the basket"""
! 160:
! 161: if hasattr(self,"BasketMain_manage_template"):
! 162: obj=getattr(self,"BasketMain_manage_template")
! 163: return obj()
! 164: else:
! 165: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','BasketMain_manage_template_standard.zpt')).__of__(self)
! 166: pt.content_type="text/html"
! 167: return pt()
! 168:
! 169: def isAuthorized(self,role="read"):
! 170: """check whether actual user is authorized"""
! 171: #TODO implement isAuthorized to do type, read or edit
! 172: return True
! 173:
! 174: def getActualUserName(self):
! 175: """get username of actual user"""
! 176: return self.REQUEST['AUTHENTICATED_USER'].getUserName()
! 177:
! 178: def getObjects(self):
! 179: """"get objects"""
! 180: return [getattr(self,x['id']) for x in self._objects]
! 181:
! 182: def numberOfObjects(self):
! 183: """anzahl der elemente im basket"""
! 184: return len(self._objects)
! 185:
! 186: def changeBasketComments(self,REQUEST):
! 187: """Change comment of basket elements"""
! 188: form=REQUEST.form
! 189:
! 190: for key in form.keys():
! 191: splitted=key.split("_")
! 192: objects=self.ZopeFind(self,obj_ids=[splitted[0]])
! 193: if len(objects)>0:
! 194: objects[0][1].comment=form[key]
! 195:
! 196: if REQUEST:
! 197: REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket")
! 198:
! 199:
! 200: def selectThisBasketAsCurrent(self,REQUEST=None):
! 201: """select this basket for further work"""
! 202: REQUEST.RESPONSE.setCookie('vlp_basket',self.getId(),path="/")
! 203:
! 204: if REQUEST:
! 205: REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket")
! 206:
! 207: def getCurrentBasket(self):
! 208: """select this basket for further work"""
! 209: return self.REQUEST.cookies.get('vlp_basket',None)
! 210:
! 211: def generateNewObject(self,type,link,title='',comment='',REQUEST=None):
! 212: """generate a new object in the basket"""
! 213:
! 214: if type=="xref":
! 215:
! 216: splitted=urllib.unquote(link).split("?")
! 217: if len(splitted)>1:
! 218: #assumes references id is contained in the url as parameter id=
! 219: params=cgi.parse_qs(splitted[1])
! 220: xref=params.get('id',None)
! 221: return False
! 222: else:
! 223: #addumes link contains only the reference id
! 224: xref=link
! 225:
! 226: id=self.getNewId()
! 227: title=""
! 228:
! 229: if xref is None:
! 230: #no parameter id
! 231: return False
! 232: manage_addBasketXRef(self,str(id),title,comment,xref)
! 233:
! 234: if REQUEST:
! 235: REQUEST.RESPONSE.redirect(REQUEST['HTTP_REFERER'])
! 236: else:
! 237: return True
! 238:
! 239: def manage_addBasketForm(self):
! 240: """form for adding a basket"""
! 241: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addBasket.zpt')).__of__(self)
! 242: return pt()
! 243:
! 244: def manage_addBasket(self,id,title,comment,username,publicationStatus,accessGroups=None,RESPONSE=None):
! 245: """add a basket object"""
! 246: #TODO:what happens in username does not exists
! 247: #find username
! 248: owner=username
! 249:
! 250: newObj=Basket(id,title,comment,owner,publicationStatus,accessGroups=None)
! 251:
! 252: self._setObject(id,newObj)
! 253:
! 254: if RESPONSE is not None:
! 255: RESPONSE.redirect('manage_main')
! 256:
! 257: class BasketBasis(SimpleItem):
! 258: """basic class for baskets"""
! 259:
! 260: security=ClassSecurityInfo()
! 261:
! 262: manage_options=SimpleItem.manage_options+(
! 263: {'label':'manage main','action':'changeBasketBasisForm'},
! 264: )
! 265:
! 266: def __init__(self,id,title,comment):
! 267: '''
! 268: init basket basis
! 269: @param id: id
! 270: @param title: title
! 271: @param comment commentar:
! 272: '''
! 273: self.id=id
! 274: self.title=title
! 275: self.comment=comment
! 276:
! 277: def changeBasketBasisForm(self):
! 278: """form for changing the basket"""
! 279: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeBasketBasis.zpt')).__of__(self)
! 280: return pt()
! 281:
! 282: def changeBasketBasis(self,title,comment,RESPONSE=None):
! 283: '''
! 284: init the basket
! 285: @param title: title of the basket
! 286: @param comment: description of the basket
! 287: '''
! 288:
! 289: self.title=title
! 290: self.comment=comment
! 291:
! 292: if RESPONSE is not None:
! 293: RESPONSE.redirect('manage')
! 294:
! 295: def linkToObject(self):
! 296: """generate url to open the resource, has to be implemented in the different objects, generic return None"""
! 297: return None
! 298:
! 299: def content_html(self,type):
! 300: """generische ausgabe des objectes als html"""
! 301: if hasattr(self,type+"_template"):
! 302: obj=getattr(self,type+"_template")
! 303: return obj()
! 304: else:
! 305: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','%s_template_standard.zpt'%type)).__of__(self)
! 306: pt.content_type="text/html"
! 307: return pt()
! 308:
! 309: class BasketXRef(BasketBasis):
! 310: """class for internal references based on xrefs"""
! 311:
! 312: security=ClassSecurityInfo()
! 313: meta_type="BasketXRef"
! 314:
! 315: manage_options=BasketBasis.manage_options+(
! 316: {'label':'manage xref','action':'changeBasketXRefForm'},
! 317: )
! 318:
! 319: def changeBasketXRefForm(self):
! 320: """form for changing the basket"""
! 321: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeBasketXRef.zpt')).__of__(self)
! 322: return pt()
! 323:
! 324: def changeBasketXRef(self,xref,RESPONSE=None):
! 325: '''
! 326: change the basket
! 327: @param xref: reference
! 328: '''
! 329:
! 330: self.xref=xref
! 331:
! 332: if RESPONSE is not None:
! 333: RESPONSE.redirect('manage')
! 334:
! 335: def linkToObject(self):
! 336: """generate url to open the resource"""
! 337: return refBasis%self.xref
! 338:
! 339: def content_html(self):
! 340: """format object as html fragment"""
! 341:
! 342: type=self.xref[0:3]
! 343: return BasketBasis.content_html(self,"BasketXRef_%s"%type)
! 344:
! 345: def manage_addBasketXRefForm(self):
! 346: """form for adding a basket"""
! 347: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addBasketXRef.zpt')).__of__(self)
! 348: return pt()
! 349:
! 350: def manage_addBasketXRef(self,id,title,comment,xref,RESPONSE=None):
! 351: """add a basketXRef object"""
! 352:
! 353:
! 354: newObj=BasketXRef(id,title,comment)
! 355: newObj.xref=xref
! 356:
! 357: self._setObject(id,newObj)
! 358:
! 359: if RESPONSE is not None:
! 360: RESPONSE.redirect('manage_main')
! 361:
! 362: class BasketInternalLink(BasketBasis):
! 363: """class for internal referencens based on links"""
! 364:
! 365: security=ClassSecurityInfo()
! 366: meta_type="BasketInternalLink"
! 367:
! 368: manage_options=BasketBasis.manage_options+(
! 369: {'label':'manage internal link','action':'changeBasketInternalLinkForm'},
! 370: )
! 371:
! 372: def changeBasketInternalLinkForm(self):
! 373: """form for changing the basket"""
! 374: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeBasketInternalLink.zpt')).__of__(self)
! 375: return pt()
! 376:
! 377: def changeBasketInternalLink(self,link,linkText,RESPONSE=None):
! 378: '''
! 379: change the Internallink
! 380: @param link: reference
! 381: @param linkText: reference
! 382: '''
! 383:
! 384: self.link=link
! 385: self.linkText=linkText
! 386:
! 387: if RESPONSE is not None:
! 388: RESPONSE.redirect('manage')
! 389:
! 390: def content_html(self):
! 391: """format object as html fragment"""
! 392:
! 393: return BasketBasis.content_html(self,"BasketInternalLink")
! 394:
! 395: def linkToObject(self):
! 396: """link to the object (internalLink)"""
! 397: return self.link
! 398:
! 399: def manage_addBasketInternalLinkForm(self):
! 400: """form for adding a basket"""
! 401: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addBasketInternalLink.zpt')).__of__(self)
! 402: return pt()
! 403:
! 404: def manage_addBasketInternalLink(self,id,title,comment,link,linkText,RESPONSE=None):
! 405: """add a basketXRef object"""
! 406:
! 407:
! 408: newObj=BasketInternalLink(id,title,comment)
! 409: newObj.link=link
! 410: newObj.linkText=linkText
! 411:
! 412: self._setObject(id,newObj)
! 413:
! 414: if RESPONSE is not None:
! 415: RESPONSE.redirect('manage_main')
! 416:
! 417:
! 418: class BasketExternalLink(BasketBasis):
! 419: """class for external links"""
! 420:
! 421: security=ClassSecurityInfo()
! 422: meta_type="BasketExternalLink"
! 423:
! 424: manage_options=BasketBasis.manage_options+(
! 425: {'label':'manage internal link','action':'changeBasketExternalLinkForm'},
! 426: )
! 427:
! 428: def changeBasketExternalLinkForm(self):
! 429: """form for changing the basket"""
! 430: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeBasketExternalLink.zpt')).__of__(self)
! 431: return pt()
! 432:
! 433: def changeBasketExternalLink(self,link,linkText,RESPONSE=None):
! 434: '''
! 435: change the Externallink
! 436: @param link: reference
! 437: @param linkText: reference
! 438: '''
! 439:
! 440: self.link=link
! 441: self.linkText=linkText
! 442:
! 443: if RESPONSE is not None:
! 444: RESPONSE.redirect('manage')
! 445:
! 446: def content_html(self):
! 447: """format object as html fragment"""
! 448:
! 449: return BasketBasis.content_html(self,"BasketExternalLink")
! 450:
! 451: def linkToObject(self):
! 452: """link to the object (externalLink)"""
! 453: return self.link
! 454:
! 455: def manage_addBasketExternalLinkForm(self):
! 456: """form for adding a basket"""
! 457: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addBasketExternalLink.zpt')).__of__(self)
! 458: return pt()
! 459:
! 460: def manage_addBasketExternalLink(self,id,title,comment,link,linkText,RESPONSE=None):
! 461: """add a basket external link object"""
! 462:
! 463: newObj=BasketExternalLink(id,title,comment)
! 464: newObj.link=link
! 465: newObj.linkText=linkText
! 466:
! 467: self._setObject(id,newObj)
! 468:
! 469: if RESPONSE is not None:
! 470: RESPONSE.redirect('manage_main')
! 471:
! 472:
! 473: class BasketText(BasketBasis):
! 474: """class for text elements in baskets"""
! 475:
! 476: security=ClassSecurityInfo()
! 477: meta_type="BasketText"
! 478:
! 479: def content_html(self):
! 480: """format object as html fragment"""
! 481: return "" # text has no content
! 482: #return BasketBasis.content_html(self,"BasketText")
! 483:
! 484: def manage_addBasketTextForm(self):
! 485: """form for adding a basket"""
! 486: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addBasketText.zpt')).__of__(self)
! 487: return pt()
! 488:
! 489: def manage_addBasketText(self,id,title,comment,RESPONSE=None):
! 490: """add a basketXRef object"""
! 491:
! 492:
! 493: newObj=BasketText(id,title,comment)
! 494:
! 495: self._setObject(id,newObj)
! 496:
! 497: if RESPONSE is not None:
! 498: RESPONSE.redirect('manage_main')
! 499:
! 500:
! 501:
! 502:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>