Annotation of basket/basket.py, revision 1.13

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

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