Annotation of basket/basket.py, revision 1.9

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

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