Annotation of basket/basket.py, revision 1.15

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.14      casties    25: from groups import manage_addGroupFolder
1.3       dwinter    26: 
1.14      casties    27: from Products.ECHO_content.ECHO_helpers import unicodify
1.3       dwinter    28: 
1.1       dwinter    29: refBasis="http://vlp.mpiwg-berlin.mpg.de/references?id=%s1.3       dwinter    30: 
1.6       dwinter    31: basketMetatypes=['BasketXRef','BasketInternalLink','BasketExternalLink','BasketText','BasketFile']
1.3       dwinter    32: 
1.1       dwinter    33: #basis url for references
                     34: 
1.2       dwinter    35: publicationStatusList=['private','hidden','open_intern','open','group'] 
1.1       dwinter    36: # private only access for the owner, restricted only for users in accessGroup, open open for everyone, published occurs in basket list
                     37: 
1.2       dwinter    38: class BasketBasis(OrderedFolder):
                     39:     """Basis class for BasketFolder and Baskets"""
1.1       dwinter    40:     
                     41:     security=ClassSecurityInfo()
1.8       dwinter    42:     
1.9       dwinter    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:     
1.8       dwinter    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:      
1.1       dwinter    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
1.2       dwinter    78:     
1.1       dwinter    79:         return last
1.2       dwinter    80:     
1.6       dwinter    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:     
1.1       dwinter    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:
1.8       dwinter   101:             REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket#"+str(id))
1.1       dwinter   102:     
1.2       dwinter   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:
1.8       dwinter   109:             REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket#"+str(id))
1.2       dwinter   110:         
1.1       dwinter   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:
1.8       dwinter   121:             REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket#"+id)
1.1       dwinter   122:     
                    123:     def moveDown(self,id,REQUEST=None):
                    124:         """move id one up"""
                    125:         self.moveObjectsDown([id], 1)
                    126:         if REQUEST:
1.8       dwinter   127:             REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket#"+id)
1.1       dwinter   128:             
                    129:     def moveTop(self,id,REQUEST=None):
                    130:         """move to top"""
                    131:         self.moveObjectsToTop([id])
                    132:         if REQUEST:
1.8       dwinter   133:             REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket#"+id)
1.1       dwinter   134:   
                    135:     def moveBottom(self,id,REQUEST=None):
                    136:         """move to top"""
                    137:         self.moveObjectsToBottom([id])
                    138:         if REQUEST:
1.8       dwinter   139:             REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket#"+id)
1.2       dwinter   140:     
                    141:     security.declareProtected('View','getOwner')
1.1       dwinter   142:           
                    143:     def getOwner(self):
                    144:         """get Owner as string"""
1.14      casties   145:         return unicodify(self.owner)
1.1       dwinter   146:     
1.14      casties   147:     def getTitle(self):
                    148:         """get title"""
                    149:         return unicodify(self.title)
1.2       dwinter   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"""
1.14      casties   157:         return self.objectValues()
                    158:         #return [getattr(self,x['id']) for x in self._objects]
1.2       dwinter   159:    
                    160:     def numberOfObjects(self):
                    161:         """anzahl der elemente im basket"""
                    162:         return len(self._objects)
1.14      casties   163: 
1.2       dwinter   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"
1.8       dwinter   184:             if self.checkPermission('authorized'):
1.2       dwinter   185:                 for object in self.getObjects():
1.8       dwinter   186:                     if object.publicationStatus=='open_intern' or object.publicationStatus=='open':
1.2       dwinter   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:      
1.4       dwinter   205:         id=self.REQUEST.cookies.get('vlp_basket',None)
                    206:    if id:  
                    207:        return getattr(self,id,None)
                    208:    else:
1.5       dwinter   209:        return None
                    210:         
                    211:          
1.2       dwinter   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"):
1.13      casties   218:             obj=getattr(self,"BasketFolder_template")
                    219:             return obj(mode=mode)
1.2       dwinter   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()
1.3       dwinter   246:         publicationStatus="private"
1.2       dwinter   247:         manage_addBasket(self,str(id),title,"",username,publicationStatus,RESPONSE=None)
                    248:         newObj=getattr(self,str(id))
1.3       dwinter   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'])
1.2       dwinter   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:     
1.3       dwinter   283:     publicationStatusList=publicationStatusList
                    284:     
1.2       dwinter   285:     manage_options=OrderedFolder.manage_options+(
                    286:         {'label':'manage main','action':'changeBasketForm'},
                    287:         )
                    288:     
1.8       dwinter   289:  
                    290:     def saveButton(self,actualId):
                    291:         """return the save button"""
                    292:         ret="""
                    293:         <a class="editLink" style="cursor:pointer"
1.11      dwinter   294:                     onClick="forms.changeSetContents.actualId.value='%s';forms.changeSetContents.submit();">save</a> -
1.8       dwinter   295:     
                    296:         """%actualId
                    297:         return ret
                    298:     
1.3       dwinter   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"""
1.14      casties   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: 
1.3       dwinter   320:     
1.2       dwinter   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:         
1.14      casties   348:       
                    349:     def getComment(self):
                    350:         """get the comment"""
1.15    ! dwinter   351:         return unicodify(self.comment)
1.2       dwinter   352:         
1.14      casties   353: 
                    354:     def getShortDescription(self):
                    355:         """get the short description"""
                    356:         return unicodify(self.shortDescription)
                    357: 
1.2       dwinter   358:         
                    359:     security.declareProtected('Manage','changeBasketForm')
1.1       dwinter   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: 
1.3       dwinter   365: 
1.1       dwinter   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:     
1.2       dwinter   418:  
1.1       dwinter   419:     def changeBasketComments(self,REQUEST):
                    420:         """Change comment of basket elements"""
                    421:         form=REQUEST.form
1.8       dwinter   422: 
1.1       dwinter   423:         for key in form.keys():
                    424:             splitted=key.split("_")
                    425:             objects=self.ZopeFind(self,obj_ids=[splitted[0]])
                    426:             if len(objects)>0:
1.2       dwinter   427:                 setattr(objects[0][1],splitted[1],form[key])
                    428: 
1.1       dwinter   429:    
                    430:         if REQUEST:
1.8       dwinter   431:             REQUEST.RESPONSE.redirect(self.absolute_url()+"/manageBasket#"+form.get('actualId',''))  
1.1       dwinter   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:         
1.2       dwinter   441:    
1.1       dwinter   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:
1.8       dwinter   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)
1.1       dwinter   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: 
1.2       dwinter   486: def manage_addBasket(self,id,title,comment,username,publicationStatus,shortDescription="",accessGroups=None,RESPONSE=None):
1.1       dwinter   487:     """add a basket object"""
                    488:     #TODO:what happens in username does not exists
                    489:     #find username
                    490:     owner=username
1.2       dwinter   491:   
1.3       dwinter   492:     newObj=Basket(id,title,comment,owner,publicationStatus,shortDescription)
                    493: 
1.1       dwinter   494:     self._setObject(id,newObj)
                    495:     
                    496:     if RESPONSE is not None:
                    497:         RESPONSE.redirect('manage_main')
                    498:      
1.8       dwinter   499: class BasketObject(SimpleItem):
1.1       dwinter   500:     """basic class for baskets"""
                    501:     
1.2       dwinter   502:     #security=ClassSecurityInfo()
1.1       dwinter   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
1.14      casties   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: 
1.1       dwinter   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()
1.6       dwinter   559: 
1.8       dwinter   560: class BasketFile(BasketObject,File):
1.6       dwinter   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"""
1.12      dwinter   575: 
1.6       dwinter   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"
1.12      dwinter   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: 
1.6       dwinter   588:     def upDateFile(self,fileUpload=None,comment=None,title="",REQUEST=None):
                    589:         """update file"""
1.7       dwinter   590:         
1.6       dwinter   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:
1.7       dwinter   596:             
1.6       dwinter   597:             if title=="":
                    598:                 title=fileUpload.filename
1.7       dwinter   599:             
                    600:             self.title=title    
1.6       dwinter   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:         
1.10      dwinter   614:         return BasketObject.content_html(self,"BasketFile")
1.6       dwinter   615:     
                    616: def manage_addBasketFile(self,id,title,comment,fileUpload,content_type='',precondition='',REQUEST=None):
                    617:     """add a basket file"""
1.1       dwinter   618:     
1.6       dwinter   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:         
1.8       dwinter   641: class BasketXRef(BasketObject):
1.1       dwinter   642:     """class for internal references based on xrefs"""
                    643:     
1.2       dwinter   644:     #security=ClassSecurityInfo()
1.1       dwinter   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]
1.10      dwinter   675:         return BasketObject.content_html(self,"BasketXRef_%s"%type)
1.1       dwinter   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:        
1.8       dwinter   694: class BasketInternalLink(BasketObject):
1.1       dwinter   695:     """class for internal referencens based on links"""
                    696:     
1.2       dwinter   697:     #security=ClassSecurityInfo()
1.1       dwinter   698:     meta_type="BasketInternalLink"
                    699:     
1.10      dwinter   700:     manage_options=BasketObject.manage_options+(
1.1       dwinter   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:         
1.10      dwinter   725:         return BasketObject.content_html(self,"BasketInternalLink")
1.1       dwinter   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:     
1.8       dwinter   750: class BasketExternalLink(BasketObject):
1.1       dwinter   751:     """class for external links"""
                    752:     
1.2       dwinter   753:     #security=ClassSecurityInfo()
1.1       dwinter   754:     meta_type="BasketExternalLink"
                    755:     
1.10      dwinter   756:     manage_options=BasketObject.manage_options+(
1.1       dwinter   757:         {'label':'manage internal link','action':'changeBasketExternalLinkForm'},
                    758:         )
1.14      casties   759: 
                    760:     def getLinkText(self):
                    761:         """get the link text"""
                    762:         return unicodify(self.linkText)
1.1       dwinter   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:         
1.10      dwinter   785:         return BasketObject.content_html(self,"BasketExternalLink")
1.1       dwinter   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:     
1.8       dwinter   809: class BasketText(BasketObject):
1.1       dwinter   810:     """class for text elements in baskets"""
                    811:     
1.2       dwinter   812:     #security=ClassSecurityInfo()
1.1       dwinter   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>