Annotation of basket/basket.py, revision 1.8

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

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