Annotation of basket/basket.py, revision 1.7

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

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