File:  [Repository] / basket / basket.py
Revision 1.15: download - view: text, annotated - select for diffs - revision graph
Tue Apr 21 07:57:00 2009 UTC (15 years, 2 months ago) by dwinter
Branches: MAIN
CVS tags: HEAD
error in basket and others

    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: from OFS.Image import File
   12: 
   13: from AccessControl import ClassSecurityInfo
   14: from AccessControl.User import UserFolder
   15: from Globals import InitializeClass
   16: from Globals import DTMLFile
   17: import Globals
   18: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
   19: from Products.PageTemplates.PageTemplate import PageTemplate
   20: from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
   21: from Globals import Persistent, package_home
   22: from Acquisition import Implicit
   23: from Products.ZCatalog.CatalogPathAwareness import CatalogAware
   24: 
   25: from groups import manage_addGroupFolder
   26: 
   27: from Products.ECHO_content.ECHO_helpers import unicodify
   28: 
   29: refBasis="http://vlp.mpiwg-berlin.mpg.de/references?id=%s" 
   30: 
   31: basketMetatypes=['BasketXRef','BasketInternalLink','BasketExternalLink','BasketText','BasketFile']
   32: 
   33: #basis url for references
   34: 
   35: publicationStatusList=['private','hidden','open_intern','open','group'] 
   36: # private only access for the owner, restricted only for users in accessGroup, open open for everyone, published occurs in basket list
   37: 
   38: class BasketBasis(OrderedFolder):
   39:     """Basis class for BasketFolder and Baskets"""
   40:     
   41:     security=ClassSecurityInfo()
   42:     
   43:     def content_html(self,type):
   44:         """generische ausgabe des objectes als html"""
   45:         if hasattr(self,type+"_template"):
   46:             obj=getattr(self,type+"_template")
   47:             return obj()
   48:         else:
   49:             pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','%s_template_standard.zpt'%type)).__of__(self)
   50:             pt.content_type="text/html"
   51:             return pt()
   52:     
   53:     def checkPermission(self,modus):
   54:         """check permission"""
   55:         if modus=='open':
   56:             return True
   57:         elif modus=='private':
   58:             return self.groupFolder.isMemberOf('admin')
   59:         elif modus=='admin':
   60:             return self.groupFolder.isMemberOf('admin')
   61:         elif modus=='edit':
   62:             return (self.groupFolder.isMemberOf('editor') or self.groupFolder.isMemberOf('admin'))
   63:         elif modus=='publish':
   64:             return self.groupFolder.isMemberOf('publish')
   65:         elif modus=='authorized':
   66:             if self.getActualUserName().lower() == "anonymous user":
   67:                 return False
   68:             else:
   69:                 return True
   70:             
   71:      
   72:     def getNewId(self):
   73:         """createIds"""
   74:         last=getattr(self,'last',0)
   75:         last +=1
   76:         while len(self.ZopeFind(self,obj_ids=[str(last)]))>0:
   77:             last+=1
   78:     
   79:         return last
   80:     
   81:     def addBasketFile(self,REQUEST=None,fileUpload=None,comment=None,title=""):
   82:         """add a file to the basket"""
   83:         if fileUpload==None:
   84:             pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addBasketFile.zpt')).__of__(self)
   85:             pt.content_type="text/html"
   86:             return pt()
   87:         else:
   88:             id=self.getNewId()
   89:             if title=="":
   90:                 title=fileUpload.filename
   91:                 
   92:             manage_addBasketFile(self,id,title,comment,fileUpload)
   93:             if REQUEST:
   94:                 REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket")
   95:     
   96:     def addBasketText(self,REQUEST=None):
   97:         """add a text"""
   98:         id=self.getNewId()
   99:         manage_addBasketText(self,str(id),'','',RESPONSE=None)
  100:         if REQUEST:
  101:             REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket#"+str(id))
  102:     
  103:     def addBasketExternalLink(self,REQUEST=None):
  104:         """add an external link"""
  105:         id=self.getNewId()
  106:         
  107:         manage_addBasketExternalLink(self,str(id),"","","","",RESPONSE=None)
  108:         if REQUEST:
  109:             REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket#"+str(id))
  110:         
  111:     def deleteObject(self,id,REQUEST=None):
  112:         """delete object"""
  113:         self.manage_delObjects([id])
  114:         if REQUEST:
  115:             REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket")
  116:     
  117:     def moveUp(self,id,REQUEST=None):
  118:         """move id one up"""
  119:         self.moveObjectsUp([id], 1)
  120:         if REQUEST:
  121:             REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket#"+id)
  122:     
  123:     def moveDown(self,id,REQUEST=None):
  124:         """move id one up"""
  125:         self.moveObjectsDown([id], 1)
  126:         if REQUEST:
  127:             REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket#"+id)
  128:             
  129:     def moveTop(self,id,REQUEST=None):
  130:         """move to top"""
  131:         self.moveObjectsToTop([id])
  132:         if REQUEST:
  133:             REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket#"+id)
  134:   
  135:     def moveBottom(self,id,REQUEST=None):
  136:         """move to top"""
  137:         self.moveObjectsToBottom([id])
  138:         if REQUEST:
  139:             REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket#"+id)
  140:     
  141:     security.declareProtected('View','getOwner')
  142:           
  143:     def getOwner(self):
  144:         """get Owner as string"""
  145:         return unicodify(self.owner)
  146:     
  147:     def getTitle(self):
  148:         """get title"""
  149:         return unicodify(self.title)
  150:     
  151:     def getActualUserName(self):
  152:         """get username of actual user"""
  153:         return self.REQUEST['AUTHENTICATED_USER'].getUserName()
  154:         
  155:     def getObjects(self):
  156:         """"get objects"""
  157:         return self.objectValues()
  158:         #return [getattr(self,x['id']) for x in self._objects]
  159:    
  160:     def numberOfObjects(self):
  161:         """anzahl der elemente im basket"""
  162:         return len(self._objects)
  163: 
  164:     
  165: class BasketFolder(BasketBasis):
  166:     """Folder for Baskets"""
  167:     
  168:     meta_type="Basket Folder"
  169:     
  170:     #security=ClassSecurityInfo()
  171:     
  172:     def getSets(self,mode='open'):
  173:         """get sets, depending on mode selected"""
  174:         ret=[]
  175:         
  176:         if mode=='open':
  177:             for object in self.getObjects():
  178:            
  179:                 if object.publicationStatus=='open':
  180:                     ret.append(object)
  181:             return ret
  182:         elif mode=='open_intern':
  183:             print "open_intern"
  184:             if self.checkPermission('authorized'):
  185:                 for object in self.getObjects():
  186:                     if object.publicationStatus=='open_intern' or object.publicationStatus=='open':
  187:                         ret.append(object)
  188:                 return ret
  189:             else:
  190:                 return ret
  191:         elif mode=='private':
  192:             for object in self.getObjects():
  193:                 if object.groupFolder.isMemberOf('admin') or object.groupFolder.isMemberOf('editor'):
  194:                     ret.append(object)
  195:             return ret
  196:         elif mode=='groups':
  197:             for object in self.getObjects():
  198:                 if object.groupFolder.isMemberOf('reader') or object.groupFolder.isMemberOf('editor') or object.groupFolder.isMemberOf('admin'):
  199:                     ret.append(object)
  200:                 return ret
  201: 
  202:     def getCurrentBasket(self):
  203:         """select this basket for further work"""
  204:      
  205:         id=self.REQUEST.cookies.get('vlp_basket',None)
  206: 	if id:	
  207: 		return getattr(self,id,None)
  208:   	else:
  209: 		return None
  210:         
  211:          
  212:     def index_html(self,mode='open'):
  213:         """generische ansicht"""
  214: 
  215:         #check if user has right for other modi
  216:         
  217:         if hasattr(self,"BasketFolder_template"):
  218:             obj=getattr(self,"BasketFolder_template")
  219:             return obj(mode=mode)
  220:         else:
  221:             pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','BasketFolder_template_standard.zpt')).__of__(self)
  222:             pt.content_type="text/html"
  223:             return pt(mode=mode)
  224:   
  225:     def __init__(self,id,title):
  226:         """init basket folder"""
  227:         
  228:         self.id=id
  229:         self.title=title
  230:         
  231:     def manageBasketFolder(self):
  232:         """manage the basket"""
  233:         
  234:         if hasattr(self,"BasketFolder_manage_template"):
  235:             obj=getattr(self,"BasketFolder_manage_template")
  236:             return obj()
  237:         else:
  238:             pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','BasketFolder_manage_template_standard.zpt')).__of__(self)
  239:             pt.content_type="text/html"
  240:             return pt()
  241:     
  242:     def addBasket(self,title,RESPONSE=None):
  243:         """add a new basket"""
  244:         id=self.getNewId()
  245:         username=self.getActualUserName()
  246:         publicationStatus="private"
  247:         manage_addBasket(self,str(id),title,"",username,publicationStatus,RESPONSE=None)
  248:         newObj=getattr(self,str(id))
  249:         #create a groupfolder
  250:         
  251:         manage_addGroupFolder(newObj,'groupFolder')
  252:         
  253:         #add current user to admin group of the new set
  254:         
  255:         newObj.groupFolder.addUserToGroups(str(self.REQUEST['AUTHENTICATED_USER']),['admin'])
  256:         if RESPONSE:
  257:             RESPONSE.redirect(newObj.absolute_url()+'/manageBasket')
  258:         
  259: 
  260: def manage_addBasketFolderForm(self):
  261:     """form for adding a basket"""
  262:     pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addBasketFolder.zpt')).__of__(self)
  263:     return pt()
  264: 
  265: def manage_addBasketFolder(self,id,title,RESPONSE=None):
  266:     """add a basket folder object"""
  267: 
  268:   
  269:     newObj=BasketFolder(id,title)
  270:     
  271:     self._setObject(id,newObj)
  272:     
  273:     if RESPONSE is not None:
  274:         RESPONSE.redirect('manage_main')
  275:      
  276: class Basket(BasketBasis):
  277:     """Basket class"""
  278:     
  279:     meta_type="basket"
  280:     
  281:     security=ClassSecurityInfo()
  282:     
  283:     publicationStatusList=publicationStatusList
  284:     
  285:     manage_options=OrderedFolder.manage_options+(
  286:         {'label':'manage main','action':'changeBasketForm'},
  287:         )
  288:     
  289:  
  290:     def saveButton(self,actualId):
  291:         """return the save button"""
  292:         ret="""
  293:         <a class="editLink" style="cursor:pointer"
  294:                     onClick="forms.changeSetContents.actualId.value='%s';forms.changeSetContents.submit();">save</a> -
  295:     
  296:         """%actualId
  297:         return ret
  298:     
  299:     def manageUserRights_html(self):
  300:         """manage user rights"""
  301:         if hasattr(self,"Basket_manageUserRights_template"):
  302:             obj=getattr(self,"Basket_manageUserRights_template")
  303:             return obj()
  304:         else:
  305:             pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','BasketMain_Basket_manageUserRights_standard.zpt')).__of__(self)
  306:             pt.content_type="text/html"
  307:             return pt()
  308:     
  309:  
  310:     def getBasketObjects(self):
  311:         """get all basket objects"""
  312: #         objs=self.getObjects()
  313: #         ret=[]
  314: #         for x in objs:
  315: #             if x.meta_type in basketMetatypes:
  316: #                ret.append(x)
  317: #         return ret
  318:         return self.objectValues(basketMetatypes)
  319: 
  320:     
  321:     def checkRef(self,xref):
  322:         """check if XRef is already in Basket"""
  323:         
  324:         founds=self.ZopeFind(self,obj_metatypes=["BasketXRef"])
  325:         for found in founds:
  326:             if self.xref==xref:
  327:                 return True
  328:         return False
  329:             
  330:     def __init__(self,id,title,comment,owner,publicationStatus,shortDescription):
  331:         '''
  332:         init the basket
  333:         @param id: id
  334:         @param title: title of the basket
  335:         @param comment: description of the basket
  336:         @param shortDescription: short description of the basket for the overviewList
  337:         @param owner: user object describing the owner
  338:         @param publication_status: one of publicationStatus if restricted, optional parameter accessGroups has to be set
  339:         '''
  340:         
  341:         self.id=id
  342:         self.title=title
  343:         self.comment=comment
  344:         self.owner=owner
  345:         self.publicationStatus=publicationStatus
  346:         self.shortDescription=shortDescription
  347:         
  348:       
  349:     def getComment(self):
  350:         """get the comment"""
  351:         return unicodify(self.comment)
  352:         
  353: 
  354:     def getShortDescription(self):
  355:         """get the short description"""
  356:         return unicodify(self.shortDescription)
  357: 
  358:         
  359:     security.declareProtected('Manage','changeBasketForm')
  360:     def changeBasketForm(self):
  361:         """form for changing the basket"""
  362:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeBasket.zpt')).__of__(self)
  363:         return pt()
  364: 
  365: 
  366:     def changeBasket(self,title,comment,shortDescription,publicationStatus=None,username=None,accessGroups=None,RESPONSE=None,target=None):
  367:         '''
  368:         init the basket
  369:         @param title: title of the basket
  370:         @param comment: description of the basket
  371:         @param owner: user object describing the owner
  372:         @param publication_status: one of publicationStatus if restricted, optional parameter accessGroups has to be set
  373:         @param aaccessGroups: default value is none, contains list of groups which are allowed to access this basket
  374:         '''
  375:          #TODO:what happens in username does not exists
  376:         #find username
  377:         owner=username
  378:     
  379:         self.title=title
  380:         self.comment=comment
  381:         if owner:
  382:             self.owner=owner
  383:         if publicationStatus:
  384:             self.publicationStatus=publicationStatus
  385:         if accessGroups:
  386:             self.accessGroups=accessGroups
  387:         self.shortDescription=shortDescription
  388:     
  389:         
  390:         if RESPONSE is not None:
  391:             if target:
  392:                 RESPONSE.redirect(target)
  393:             else:
  394:                 RESPONSE.redirect('manage_main')
  395:                 
  396:     def index_html(self):
  397:         """generische ansicht"""
  398: 
  399:         if hasattr(self,"BasketMain_template"):
  400:             obj=getattr(self,"BasketMain_template")
  401:             return obj()
  402:         else:
  403:             pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','BasketMain_template_standard.zpt')).__of__(self)
  404:             pt.content_type="text/html"
  405:             return pt()
  406:     
  407:     def manageBasket(self):
  408:         """manage the basket"""
  409:         
  410:         if hasattr(self,"BasketMain_manage_template"):
  411:             obj=getattr(self,"BasketMain_manage_template")
  412:             return obj()
  413:         else:
  414:             pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','BasketMain_manage_template_standard.zpt')).__of__(self)
  415:             pt.content_type="text/html"
  416:             return pt()
  417:     
  418:  
  419:     def changeBasketComments(self,REQUEST):
  420:         """Change comment of basket elements"""
  421:         form=REQUEST.form
  422: 
  423:         for key in form.keys():
  424:             splitted=key.split("_")
  425:             objects=self.ZopeFind(self,obj_ids=[splitted[0]])
  426:             if len(objects)>0:
  427:                 setattr(objects[0][1],splitted[1],form[key])
  428: 
  429:    
  430:         if REQUEST:
  431:             REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket#"+form.get('actualId',''))  
  432:               
  433: 
  434:     def selectThisBasketAsCurrent(self,REQUEST=None):
  435:         """select this basket for further work"""
  436:         REQUEST.RESPONSE.setCookie('vlp_basket',self.getId(),path="/")
  437:         
  438:         if REQUEST:
  439:             REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket")
  440:         
  441:    
  442:     def generateNewObject(self,type,link,title='',comment='',REQUEST=None):
  443:         """generate a new object in the basket"""
  444:         
  445:         if type=="xref":
  446: 
  447:             splitted=urllib.unquote(link).split("?")
  448:             if len(splitted)>1:
  449:                 #assumes references id is contained in the url as parameter id=
  450:                 params=cgi.parse_qs(splitted[1])
  451:                 xref=params.get('id',None)
  452:                 return False
  453:             else:
  454:                 #addumes link contains only the reference id
  455:                 xref=link
  456: 
  457:             id=self.getNewId()
  458:             title=""
  459: 
  460:             if xref is None:
  461:                 #no parameter id
  462:                 return False
  463:             manage_addBasketXRef(self,str(id),title,comment,xref)
  464:         
  465:         if REQUEST:
  466:             #import random
  467:             #rd=random.random()
  468:             urlSplit=REQUEST['HTTP_REFERER'].split("?")
  469:             if len(urlSplit)>1:
  470:                 parsed=cgi.parse_qs(urlSplit[1])
  471:                 parsed['-link']=link
  472:                 qs=urllib.urlencode(parsed,doseq=True)
  473:                 
  474:             else:
  475:                 qs=""
  476:                 
  477:             REQUEST.RESPONSE.redirect(urlSplit[0]+"?"+qs)
  478:         else:
  479:             return True
  480: 
  481: def manage_addBasketForm(self):
  482:     """form for adding a basket"""
  483:     pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addBasket.zpt')).__of__(self)
  484:     return pt()
  485: 
  486: def manage_addBasket(self,id,title,comment,username,publicationStatus,shortDescription="",accessGroups=None,RESPONSE=None):
  487:     """add a basket object"""
  488:     #TODO:what happens in username does not exists
  489:     #find username
  490:     owner=username
  491:   
  492:     newObj=Basket(id,title,comment,owner,publicationStatus,shortDescription)
  493: 
  494:     self._setObject(id,newObj)
  495:     
  496:     if RESPONSE is not None:
  497:         RESPONSE.redirect('manage_main')
  498:      
  499: class BasketObject(SimpleItem):
  500:     """basic class for baskets"""
  501:     
  502:     #security=ClassSecurityInfo()
  503:     
  504:     manage_options=SimpleItem.manage_options+(
  505:         {'label':'manage main','action':'changeBasketBasisForm'},
  506:         )
  507:     
  508:     def __init__(self,id,title,comment):
  509:         '''
  510:         init basket basis
  511:         @param id: id
  512:         @param title: title
  513:         @param comment commentar:
  514:         '''
  515:         self.id=id
  516:         self.title=title
  517:         self.comment=comment
  518: 
  519:     def getTitle(self):
  520:         """get the title"""
  521:         return unicodify(self.title)
  522: 
  523:     def getComment(self):
  524:         """get the comment"""
  525:         return unicodify(self.comment)
  526: 
  527:         
  528:     def changeBasketBasisForm(self):
  529:         """form for changing the basket"""
  530:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeBasketBasis.zpt')).__of__(self)
  531:         return pt()
  532:     
  533:     def changeBasketBasis(self,title,comment,RESPONSE=None):
  534:         '''
  535:         init the basket
  536:         @param title: title of the basket
  537:         @param comment: description of the basket
  538:         '''
  539:         
  540:         self.title=title
  541:         self.comment=comment
  542:         
  543:         if RESPONSE is not None:
  544:             RESPONSE.redirect('manage')
  545:     
  546:     def linkToObject(self):
  547:         """generate url to open the resource, has to be implemented in the different objects, generic return None"""
  548:         return None
  549:     
  550:     def content_html(self,type):
  551:         """generische ausgabe des objectes als html"""
  552:         if hasattr(self,type+"_template"):
  553:             obj=getattr(self,type+"_template")
  554:             return obj()
  555:         else:
  556:             pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','%s_template_standard.zpt'%type)).__of__(self)
  557:             pt.content_type="text/html"
  558:             return pt()
  559: 
  560: class BasketFile(BasketObject,File):
  561:     """class for fileupload"""
  562:     meta_type="BasketFile"
  563:     
  564:     def __init__(self,id,title,comment,content_type='',precondition=''):
  565:         """init"""
  566:         self.id=id
  567:         self.title=title
  568:         self.comment=comment
  569:         self.content_type=content_type
  570:         self.precondition=precondition
  571:         
  572:     
  573:     def download(self):
  574:         """download the file"""
  575: 
  576:         self.REQUEST.RESPONSE.setHeader("Content-Disposition","""attachement; filename=%s"""%self.title)
  577:         self.REQUEST.RESPONSE.setHeader("Content-Type","application/octet-stream")
  578:    
  579:         self.content_type="application/octet-stream"
  580: 	try:
  581:         	self.REQUEST.RESPONSE.write(self.data)
  582:         except:
  583: 		try:
  584: 			self.REQUEST.RESPONSE.write(str(self.data))
  585: 		except:
  586: 			self.REQUEST.RESPONSE.write(repr(self.data))
  587: 
  588:     def upDateFile(self,fileUpload=None,comment=None,title="",REQUEST=None):
  589:         """update file"""
  590:         
  591:         if fileUpload==None:
  592:             pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','upDateBasketFile.zpt')).__of__(self)
  593:             pt.content_type="text/html"
  594:             return pt()
  595:         else:
  596:             
  597:             if title=="":
  598:                 title=fileUpload.filename
  599:             
  600:             self.title=title    
  601:             if fileUpload:
  602:                 self.manage_upload(fileUpload)
  603:     
  604:             if comment:
  605:                 self.comment=comment
  606:                 
  607:             if REQUEST:
  608:                 REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket")
  609:     
  610:     def content_html(self):
  611:         """format object as html fragment"""
  612:         
  613:         
  614:         return BasketObject.content_html(self,"BasketFile")
  615:     
  616: def manage_addBasketFile(self,id,title,comment,fileUpload,content_type='',precondition='',REQUEST=None):
  617:     """add a basket file"""
  618:     
  619:     id=str(id)
  620:     title=str(title)
  621:     content_type=str(content_type)
  622:     precondition=str(precondition)
  623: 
  624:     #id, title = cookId(id, title, file)
  625: 
  626:     self=self.this()
  627: 
  628:     # First, we create the file without data:
  629:     self._setObject(id, BasketFile(id,title,comment,content_type, precondition))
  630: 
  631:     # Now we "upload" the data.  By doing this in two steps, we
  632:     # can use a database trick to make the upload more efficient.
  633:     if fileUpload:
  634:         self._getOb(id).manage_upload(fileUpload)
  635:     if content_type:
  636:         self._getOb(id).content_type=content_type
  637: 
  638:     if REQUEST is not None:
  639:         REQUEST['RESPONSE'].redirect(self.absolute_url()+'/manage_main')
  640:         
  641: class BasketXRef(BasketObject):
  642:     """class for internal references based on xrefs"""
  643:     
  644:     #security=ClassSecurityInfo()
  645:     meta_type="BasketXRef"
  646: 
  647:     manage_options=BasketBasis.manage_options+(
  648:         {'label':'manage xref','action':'changeBasketXRefForm'},
  649:         )
  650:     
  651:     def changeBasketXRefForm(self):
  652:         """form for changing the basket"""
  653:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeBasketXRef.zpt')).__of__(self)
  654:         return pt()
  655:     
  656:     def changeBasketXRef(self,xref,RESPONSE=None):
  657:         '''
  658:         change the basket
  659:         @param xref: reference
  660:         '''
  661:         
  662:         self.xref=xref
  663:         
  664:         if RESPONSE is not None:
  665:             RESPONSE.redirect('manage')
  666:       
  667:     def linkToObject(self):
  668:         """generate url to open the resource"""
  669:         return refBasis%self.xref
  670:     
  671:     def content_html(self):
  672:         """format object as html fragment"""
  673:         
  674:         type=self.xref[0:3]
  675:         return BasketObject.content_html(self,"BasketXRef_%s"%type)
  676:     
  677: def manage_addBasketXRefForm(self):
  678:     """form for adding a basket"""
  679:     pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addBasketXRef.zpt')).__of__(self)
  680:     return pt()
  681: 
  682: def manage_addBasketXRef(self,id,title,comment,xref,RESPONSE=None):
  683:     """add a basketXRef object"""
  684:     
  685:     
  686:     newObj=BasketXRef(id,title,comment)
  687:     newObj.xref=xref
  688:     
  689:     self._setObject(id,newObj)
  690:     
  691:     if RESPONSE is not None:
  692:         RESPONSE.redirect('manage_main')
  693:        
  694: class BasketInternalLink(BasketObject):
  695:     """class for internal referencens based on links"""
  696:     
  697:     #security=ClassSecurityInfo()
  698:     meta_type="BasketInternalLink"
  699:     
  700:     manage_options=BasketObject.manage_options+(
  701:         {'label':'manage internal link','action':'changeBasketInternalLinkForm'},
  702:         )
  703:  
  704:     def changeBasketInternalLinkForm(self):
  705:         """form for changing the basket"""
  706:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeBasketInternalLink.zpt')).__of__(self)
  707:         return pt()
  708:     
  709:     def changeBasketInternalLink(self,link,linkText,RESPONSE=None):
  710:         '''
  711:         change the Internallink
  712:         @param link: reference
  713:         @param linkText: reference
  714:         '''
  715:         
  716:         self.link=link
  717:         self.linkText=linkText
  718:         
  719:         if RESPONSE is not None:
  720:             RESPONSE.redirect('manage')
  721:     
  722:     def content_html(self):
  723:         """format object as html fragment"""
  724:         
  725:         return BasketObject.content_html(self,"BasketInternalLink")
  726:     
  727:     def linkToObject(self):
  728:         """link to the object (internalLink)"""
  729:         return self.link
  730:     
  731: def manage_addBasketInternalLinkForm(self):
  732:     """form for adding a basket"""
  733:     pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addBasketInternalLink.zpt')).__of__(self)
  734:     return pt()
  735: 
  736: def manage_addBasketInternalLink(self,id,title,comment,link,linkText,RESPONSE=None):
  737:     """add a basketXRef object"""
  738:     
  739:     
  740:     newObj=BasketInternalLink(id,title,comment)
  741:     newObj.link=link
  742:     newObj.linkText=linkText
  743:     
  744:     self._setObject(id,newObj)
  745:     
  746:     if RESPONSE is not None:
  747:         RESPONSE.redirect('manage_main')
  748:        
  749:     
  750: class BasketExternalLink(BasketObject):
  751:     """class for external links"""
  752:     
  753:     #security=ClassSecurityInfo()
  754:     meta_type="BasketExternalLink"
  755:     
  756:     manage_options=BasketObject.manage_options+(
  757:         {'label':'manage internal link','action':'changeBasketExternalLinkForm'},
  758:         )
  759: 
  760:     def getLinkText(self):
  761:         """get the link text"""
  762:         return unicodify(self.linkText)
  763:  
  764:     def changeBasketExternalLinkForm(self):
  765:         """form for changing the basket"""
  766:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeBasketExternalLink.zpt')).__of__(self)
  767:         return pt()
  768:     
  769:     def changeBasketExternalLink(self,link,linkText,RESPONSE=None):
  770:         '''
  771:         change the Externallink
  772:         @param link: reference
  773:         @param linkText: reference
  774:         '''
  775:         
  776:         self.link=link
  777:         self.linkText=linkText
  778:         
  779:         if RESPONSE is not None:
  780:             RESPONSE.redirect('manage')
  781:     
  782:     def content_html(self):
  783:         """format object as html fragment"""
  784:         
  785:         return BasketObject.content_html(self,"BasketExternalLink")
  786:     
  787:     def linkToObject(self):
  788:         """link to the object (externalLink)"""
  789:         return self.link
  790: 
  791: def manage_addBasketExternalLinkForm(self):
  792:     """form for adding a basket"""
  793:     pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addBasketExternalLink.zpt')).__of__(self)
  794:     return pt()
  795: 
  796: def manage_addBasketExternalLink(self,id,title,comment,link,linkText,RESPONSE=None):
  797:     """add a basket external link object"""
  798:     
  799:     newObj=BasketExternalLink(id,title,comment)
  800:     newObj.link=link
  801:     newObj.linkText=linkText
  802:     
  803:     self._setObject(id,newObj)
  804:     
  805:     if RESPONSE is not None:
  806:         RESPONSE.redirect('manage_main')
  807:        
  808:     
  809: class BasketText(BasketObject):
  810:     """class for text elements in baskets"""
  811:     
  812:     #security=ClassSecurityInfo()
  813:     meta_type="BasketText"
  814: 
  815:     def content_html(self):
  816:         """format object as html fragment"""
  817:         return "" # text has no content
  818:         #return BasketBasis.content_html(self,"BasketText")
  819:     
  820: def manage_addBasketTextForm(self):
  821:     """form for adding a basket"""
  822:     pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addBasketText.zpt')).__of__(self)
  823:     return pt()
  824: 
  825: def manage_addBasketText(self,id,title,comment,RESPONSE=None):
  826:     """add a basketXRef object"""
  827:     
  828:     newObj=BasketText(id,title,comment)
  829:     
  830:     self._setObject(id,newObj)
  831:     
  832:     if RESPONSE is not None:
  833:         RESPONSE.redirect('manage_main')

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>