Annotation of ECHO_content/ECHO_Nav.py, revision 1.13

1.1       dwinter     1: # Objekte zur Erzeugung von Navigationselementen
                      2: 
1.11      dwinter     3: from Globals import DTMLFile
                      4: from OFS.Image import Image,cookId
1.1       dwinter     5: from OFS.Folder import Folder
                      6: from OFS.SimpleItem import SimpleItem
                      7: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
                      8: from Products.PageTemplates.PageTemplate import PageTemplate
                      9: import re
                     10: import string
                     11: from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
                     12: import os.path
                     13: from Globals import package_home
                     14: import urllib
1.11      dwinter    15: 
                     16: class ECHO_contentType(Image):
                     17:     """ContentType Object"""
                     18: 
                     19:     meta_type="ECHO_contentType"
                     20: 
                     21:     
                     22:     manage_options=Image.manage_options+(
                     23:         {'label':'Change Description','action':'changeECHO_contentTypeForm'},
                     24:        )
                     25: 
                     26:     def changeECHO_contentTypeForm(self):
                     27:         """Change the description text"""
                     28:         pt=PageTemplateFile('Products/ECHO_content/zpt/changeECHO_contentType.zpt').__of__(self)
                     29:         return pt()
                     30: 
                     31:     def changeECHO_contentType(self,description,RESPONSE=None):
                     32:         """Change the Content"""
                     33:         self.description=description
                     34:         if RESPONSE is not None:
                     35:             RESPONSE.redirect('manage_main')
                     36: 
                     37: manage_addECHO_contentTypeForm=DTMLFile('dtml/ECHO_contentTypeAdd',globals(),
                     38:                              Kind='ECHO_contentType',kind='ECHO_contentType')
                     39: 
                     40: def manage_addECHO_contentType(self, id, file=None, title='', precondition='', content_type='', description='',
                     41:                     REQUEST=None):
                     42:     """
                     43:     Add a new Image object.
                     44: 
                     45:     Creates a new Image object 'id' with the contents of 'file'.
                     46:     """
                     47: 
                     48:     id=str(id)
                     49:     title=str(title)
                     50:     content_type=str(content_type)
                     51:     precondition=str(precondition)
                     52: 
                     53:     id, title = cookId(id, title, file)
                     54: 
                     55:     self=self.this()
                     56: 
                     57:     # First, we create the image without data:
                     58:     self._setObject(id, ECHO_contentType(id,title,'',content_type, precondition))
                     59: 
                     60:     self._getOb(id).description=description
                     61:         
                     62:     # Now we "upload" the data.  By doing this in two steps, we
                     63:     # can use a database trick to make the upload more efficient.
                     64:     if file:
                     65:         self._getOb(id).manage_upload(file)
                     66:     if content_type:
                     67:         self._getOb(id).content_type=content_type
                     68: 
                     69:     if REQUEST is not None:
                     70:         try:    url=self.DestinationURL()
                     71:         except: url=REQUEST['URL1']
                     72:         REQUEST.RESPONSE.redirect('%s/manage_main' % url)
                     73:     return id
                     74: 
1.1       dwinter    75: 
                     76: class ECHO_sqlElement(SimpleItem):
                     77:     """Erzeuge navigation aus sql-abfrage"""
                     78:     meta_type="ECHO_sqlElement"
                     79:     baseUrl=""
                     80:     
1.10      dwinter    81:     def __init__(self,id,title,query,field,searchField,baseUrl,weight,contentType):
1.1       dwinter    82:         """init"""
                     83:         self.id=id
                     84:         self.title=title
                     85:         self.query=query
                     86:         self.field=field
1.7       dwinter    87:         if searchField=="":
                     88:             self.searchField=field
                     89:         else:
                     90:             self.searchField=searchField
1.1       dwinter    91:         self.baseUrl=baseUrl
1.3       dwinter    92:         self.weight=weight
1.10      dwinter    93:         self.content=contentType
1.1       dwinter    94: 
                     95:     manage_options= SimpleItem.manage_options+(
                     96:         {'label':'Main Config','action':'changeECHO_sqlElementForm'},
                     97:         )
                     98: 
1.7       dwinter    99:     def getSearchField(self):
                    100:         try:
                    101:             return self.searchField
                    102:         except:
                    103:             return self.field
                    104:         
1.3       dwinter   105:     def getWeight(self):
1.4       dwinter   106:         """get weight"""
                    107:         if hasattr(self,'weight'):
                    108:             return self.weight
1.3       dwinter   109:         else:
                    110:             return 0
                    111:         
1.10      dwinter   112:     def getcontentType(self):
1.6       dwinter   113:         """get weight"""
                    114:         
1.10      dwinter   115:         if hasattr(self,'contentType'):
                    116:             return self.contentType
1.6       dwinter   117:         else:
                    118:             return 0
1.3       dwinter   119:         
                    120: 
1.1       dwinter   121:     def changeECHO_sqlElementForm(self):
                    122:         """change"""
1.6       dwinter   123:         
                    124:         pt=PageTemplateFile('Products/ECHO_content/zpt/changeECHO_sqlElement.zpt').__of__(self)
1.1       dwinter   125:         return pt()
                    126: 
1.10      dwinter   127:     def changeECHO_sqlElement(self,title,query,field,searchField,baseUrl,weight,contentType,RESPONSE=None):
1.1       dwinter   128:         """change"""
                    129:         self.title=title
                    130:         self.query=query
                    131:         self.field=field
1.7       dwinter   132:         self.searchField=searchField
1.1       dwinter   133:         self.baseUrl=baseUrl
1.3       dwinter   134:         self.weight=weight
1.10      dwinter   135:         self.contentType=contentType
1.6       dwinter   136:         
1.1       dwinter   137:         if RESPONSE is not None:
                    138:             RESPONSE.redirect('manage_main')
                    139: 
                    140:     def searchQuery(self):
                    141:         return self.search(var=self.query)
                    142:     
                    143:     def getNavList(self):
                    144:         """ausgabe der treffer list für navigation"""
                    145:         records=self.searchQuery()
                    146:         if not records:
                    147:             return []
                    148:         else:
                    149:             ret=[]
                    150:             for record in records:
1.7       dwinter   151:                 try:
                    152:                     ret.append((getattr(record,self.field),self.baseUrl+urllib.quote(str(getattr(record,self.getSearchField())))))
                    153:                 except:
                    154:                     """notrhing"""
                    155:                     
1.1       dwinter   156:             return ret
                    157:     
                    158: 
1.6       dwinter   159: def manage_addECHO_sqlElementForm(self):
1.1       dwinter   160:     """Form for adding"""
1.6       dwinter   161:     pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_sqlElement.zpt').__of__(self)
1.1       dwinter   162:     return pt()
                    163: 
1.10      dwinter   164: def manage_addECHO_sqlElement(self,id,title,query,field,searchField,baseUrl,weight,contentType,RESPONSE=None):
1.1       dwinter   165:     """Add an ECHO_sqlelement"""
1.10      dwinter   166:     self._setObject(id,ECHO_sqlElement(id,title,query,field,searchField,baseUrl,weight,contentType))
1.1       dwinter   167:     
                    168:     if RESPONSE is not None:
                    169:         RESPONSE.redirect('manage_main')
                    170: 
                    171: 
                    172: class ECHO_pageTemplate(ZopePageTemplate):
                    173:     """pageTemplate Objekt"""
                    174:     meta_type="ECHO_pageTemplate"
                    175: 
                    176:     _default_content_fn = os.path.join(package_home(globals()),
1.6       dwinter   177:                                        'html/ECHO_pageTemplateDefault.html')
1.1       dwinter   178: 
1.3       dwinter   179:     manage_options=ZopePageTemplate.manage_options+(
1.6       dwinter   180:         {'label':'Weight and Type','action':'changeECHO_pageTemplateWeightForm'},
1.3       dwinter   181:         )
                    182: 
                    183:     def changeECHO_pageTemplateWeightForm(self):
1.4       dwinter   184:         """change"""
1.6       dwinter   185:         pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_pageTemplateWeight.zpt').__of__(self)
1.4       dwinter   186:         return pt()
                    187: 
1.10      dwinter   188:     def changeECHO_pageTemplateWeight(self,weight,contentType,RESPONSE=None):
1.4       dwinter   189:         """change"""
                    190:         self.weight=weight
1.10      dwinter   191:         self.contentType=contentType
1.3       dwinter   192: 
1.4       dwinter   193:         if RESPONSE is not None:
                    194:             RESPONSE.redirect('manage_main')
                    195:         
                    196:     def getWeight(self):
                    197:         """get weight"""
                    198:         if hasattr(self,'weight'):
                    199:             return self.weight
                    200:         else:
                    201:             return 0
1.6       dwinter   202:         
1.10      dwinter   203:     def getcontentType(self):
1.6       dwinter   204:         """get weight"""
                    205:         if hasattr(self,'weight'):
                    206:             return self.weight
                    207:         else:
                    208:             return 0
                    209: 
1.3       dwinter   210: 
                    211: 
1.1       dwinter   212: 
1.10      dwinter   213:     ## def __init__(self, id, text=None, contentType=None):
1.1       dwinter   214: ##         self.id = str(id)
                    215: ##         self.ZBindings_edit(self._default_bindings)
                    216: ##         if text is None:
                    217: ##             text = open(self._default_cont).read()
1.10      dwinter   218: ##         self.pt_edit(text, contentType)
1.1       dwinter   219: 
1.6       dwinter   220: def manage_addECHO_pageTemplateForm(self):
1.1       dwinter   221:     """Form for adding"""
1.6       dwinter   222:     pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_pageTemplate.zpt').__of__(self)
1.1       dwinter   223:     return pt()
                    224: 
                    225: from urllib import quote
                    226: 
                    227: 
1.10      dwinter   228: def manage_addECHO_pageTemplate(self, id, weight= 0,contentType=0,title=None, text=None,
1.1       dwinter   229:                            REQUEST=None, submit=None):
                    230:     "Add a Page Template with optional file content."
                    231: 
                    232:     
                    233:     id = str(id)
                    234:     if REQUEST is None:
                    235:         self._setObject(id, ECHO_pageTemplate(id, text))
                    236:         ob = getattr(self, id)
1.3       dwinter   237:         setattr(ob,'weight',weight)
1.10      dwinter   238:         setattr(ob,'contentType',contentType)
1.1       dwinter   239:         if title:
                    240:             ob.pt_setTitle(title)
                    241:         return ob
                    242:     else:
                    243:         file = REQUEST.form.get('file')
                    244:         headers = getattr(file, 'headers', None)
                    245:         if headers is None or not file.filename:
                    246:             zpt = ECHO_pageTemplate(id)
                    247:         else:
1.10      dwinter   248:             zpt = ECHO_pageTemplate(id, file, headers.get('contentType'))
1.1       dwinter   249: 
                    250:         self._setObject(id, zpt)
1.3       dwinter   251:         ob = getattr(self, id)
                    252:         setattr(ob,'weight',weight)
1.8       dwinter   253:         if title:
                    254:             ob.pt_setTitle(title)
                    255:         
1.1       dwinter   256:         try:
                    257:             u = self.DestinationURL()
                    258:         except AttributeError:
                    259:             u = REQUEST['URL1']
                    260: 
                    261:         if submit == " Add and Edit ":
                    262:             u = "%s/%s" % (u, quote(id))
                    263:         REQUEST.RESPONSE.redirect(u+'/manage_main')
                    264:     return ''
                    265: 
                    266: 
                    267: class ECHO_navigation(Folder):
                    268:     """Navigations Element"""
                    269:     meta_type="ECHO_Navigation"
                    270: 
1.7       dwinter   271:     displayedMetaTypes=['ImageCollectionIFrame','ECHO_collection','ECHO_pageTemplate','ZSQLExtendFolder','ECHO_sqlElement','ECHO_resource','ECHO_externalLink']
1.1       dwinter   272:     
                    273:     def __init__(self,id,title,pathToHierarchy):
                    274:         """init"""
                    275:         self.id=id
                    276:         self.title=title
                    277:         self.pathToHierarchy=pathToHierarchy
                    278: 
                    279:     manage_options = Folder.manage_options+(
                    280:         {'label':'Main Config','action':'ECHO_navigationConfigForm'},
                    281:         )
                    282: 
                    283:     def ECHO_navigationConfigForm(self):
                    284:         """configForm"""
1.6       dwinter   285:         pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_navigation.zpt').__of__(self)
1.1       dwinter   286:         return pt()
                    287:     
                    288:     def ECHO_navigationConfig(self,title,pathToHierarchy,RESPONSE=None):
                    289:         """config"""
                    290:         self.title=title
                    291:         self.pathToHierarchy=pathToHierarchy
                    292: 
                    293:         if RESPONSE is not None:
                    294:             RESPONSE.redirect('manage_main')
                    295: 
                    296: 
                    297:     def getColls(self,obj,depth):
                    298:         nav={}
                    299:         #print "HERE",obj.
                    300:         for keys in obj.__dict__.keys():
                    301:             x=getattr(obj,keys)
                    302:             if hasattr(x,"meta_type"):
                    303:                 if x.meta_type in self.displayedMetaTypes:
                    304:                     if depth>1:
                    305:                         nav[x.getId()]=(self.getColls(x,depth-1),x)
                    306:                     else:
                    307:                         nav[x.getId()]=(None,x)
                    308:         return nav
                    309:     
                    310:     def createNavHash(self,depth):
                    311:         """Auslesen des Hierarchiebuames"""
                    312:         temp=self.pathToHierarchy[0:]
                    313:         temp=re.sub("/",".",temp)
                    314:         temp="self.aq_parent"+temp
                    315:         
                    316:         objtemp=eval(temp)
                    317:         nav={}
                    318:         obj=objtemp
                    319:         
                    320:         #exec(obj)
                    321: 
                    322:         #objtemp = compile(temp,'<string>','single')
                    323:         #obj=eval(objtemp)
1.4       dwinter   324:         #print obj 
1.1       dwinter   325:         
                    326:         #print obj.__dict__.keys()
                    327:         
                    328:         for keys in obj.__dict__.keys():
                    329:             x=getattr(obj,keys)
                    330:             if hasattr(x,"meta_type"):
                    331:                 #print x.meta_type
                    332:                 if x.meta_type in self.displayedMetaTypes:
1.5       dwinter   333:                    
1.1       dwinter   334:                     if depth>1:
                    335:                         nav[x.getId()]=(self.getColls(x,int(depth)-1),x)
                    336:                     else:
                    337:                         nav[x.getId()]=(None,x)
                    338:                     
                    339: 
                    340:         #print nav
                    341:         return nav
                    342: 
1.5       dwinter   343:     def barFromHash(self,hash,start=None,sortField=None):
1.1       dwinter   344:         """Erzeuge Navigations Element"""
                    345:         #print "hash",hash
                    346:         listNav=[]
                    347:         if not start:
                    348:             temp=hash
1.5       dwinter   349:             sortField="weight"
1.1       dwinter   350:         else: # list mit pfad zum hash
                    351:             temp=hash
1.7       dwinter   352:             #print "HI",sortField
1.5       dwinter   353:             if not sortField:
                    354:                 tempObj=self.pathToHierarchy[0:]
                    355:                 tempObj=re.sub("/",".",tempObj)
                    356:                 tempObj="self.aq_parent"+tempObj
                    357: 
                    358:                 objtemp=eval(tempObj)
                    359: 
                    360:                 obj=objtemp
                    361: 
                    362:                 for x in start:
1.7       dwinter   363:                     #print "OBJ",start,obj,obj.getId(),x
1.5       dwinter   364: 
                    365:                     obj=getattr(obj,x)
                    366: 
                    367:                 if hasattr(obj,'sortfield'):
                    368:                     sortField=obj.sortfield
                    369:                 else:
                    370:                     sortField='weight'
1.7       dwinter   371:             #print "START",start
1.1       dwinter   372:             for x in start:
1.7       dwinter   373:                 #print "N2",x,temp[x]
                    374:                 try:
1.5       dwinter   375:                     temp=temp[x][0]
1.7       dwinter   376:                 except:
                    377:                     """nothing"""
                    378:                     return []
                    379:             #print "TEMP",temp,self.tempSorted(temp, field=sortField)
1.13    ! dwinter   380: 
1.5       dwinter   381:         for x in self.tempSorted(temp, field=sortField):
1.4       dwinter   382:             if not temp[x][1].title == "":
                    383:                 if temp[x][1].meta_type=="ECHO_sqlElement":
                    384:                     for z in temp[x][1].getNavList():
                    385:                         listNav.append((z[0],z[1]))
                    386:                 else:
1.7       dwinter   387:                     # add label fals existiert und nicht leer
                    388:                     if hasattr(temp[x][1],'label'):
                    389:                         if not temp[x][1].label=='':
                    390:                             label=temp[x][1].label
1.13    ! dwinter   391:                             
1.7       dwinter   392:                         else:
                    393:                             label=temp[x][1].title
                    394:                     else:
                    395:                         label=temp[x][1].title                            
1.4       dwinter   396:                     
1.9       dwinter   397:                     listNav.append((label,createPath(self.absolute_url(),temp[x][1].absolute_url()),temp[x][1]))
1.7       dwinter   398:                     
                    399:         #print self.getId(),start
                    400:         #print listNav
1.1       dwinter   401: 
                    402:         #html=""
                    403:         #for k in listNav:
                    404:         #    print k
                    405:         #    html=html+"<a href='%s'>%s</a>   "% (self.absolute_url()+createPath(k[1][1].absolute_url()),k[0])
                    406: 
                    407:         return listNav
                    408: 
1.5       dwinter   409:     def tempSorted(self,hash,field="weight"):
1.4       dwinter   410:         ls=[]
1.13    ! dwinter   411: 
1.4       dwinter   412:         for x in hash.keys():
                    413:             #print hash[x][1]
1.5       dwinter   414:             if hasattr(hash[x][1],field):
                    415:                 weight=getattr(hash[x][1],field)
1.4       dwinter   416:                 #print weight
                    417:             else:
                    418:                 weight=0
                    419: 
                    420:             ls.append((x,weight))
                    421: 
                    422:         ls.sort(sortWeight)
                    423:         
                    424:         return [x[0] for x in ls]
                    425: 
                    426:     
                    427:         
                    428:             
1.1       dwinter   429:     def isSelectedPath(self,item):
                    430:         """test is path is already selected"""
                    431:         found=re.search("\?(.*)",item[1])
                    432:         if found:
                    433:             temp=re.sub(" ","%20",found.group(0))
                    434:             #print temp+"::"+self.REQUEST['QUERY_STRING']
                    435:             if ("?"+self.REQUEST['QUERY_STRING'])==temp:
                    436:                 return 1
                    437: 
                    438:         if re.search(item[1],self.REQUEST['URL']):
                    439:             return 1
                    440:         else:
                    441:             return 0
                    442:         
                    443:     
                    444:     def buttonsFromHash(self,hash,start=None,orientation="horizontal"):
                    445:         
                    446:         """Generate Buttons"""
                    447:         if orientation=="horizontal":
                    448:             html="<table><tr>"
                    449:             startTag="<td>"
                    450:             endTag="</td>"
                    451:             endHtml="</tr></table>"
                    452: 
                    453:         else:
                    454:             html="<table>"
                    455:             startTag="<tr><td>"
                    456:             endTag="</td></tr>"
                    457:             endHtml="</table>"
                    458:             
                    459:         if not start:
                    460:             temp=hash
                    461:         else:
                    462:             temp=hash
                    463:             for x in start:
                    464:                 temp=temp[x][0]
                    465:                 #print temp
                    466:         
1.5       dwinter   467:         for key in self.tempSorted(temp):
1.1       dwinter   468:             
                    469:             description=temp[x][1].title
1.2       dwinter   470:          
1.3       dwinter   471:             url=createPath(self.absolute_url(),temp[key][1].absolute_url())
1.2       dwinter   472: 
1.1       dwinter   473:             if (self.REQUEST['URL']==url) | (self.REQUEST['URL']==url+"/index_html"):
                    474:                 html=html+startTag+"[%s]" % description+endTag
                    475:             else:                
                    476:                 html=html+startTag+"[<a href='%s'>%s</a>]" % (url,description)+endTag
                    477:             
                    478: 
                    479:         html=html+endHtml
                    480:         
                    481:         return html
                    482: 
                    483:     def mainNavBar(self):
                    484:         """print main navigation bar"""
                    485:         keys=""
1.13    ! dwinter   486: 
1.1       dwinter   487:         try:
                    488:             keys=self.buttonsFromHash(self.createNavHash(0))
                    489:         except:
                    490:             keys=""
                    491:             
                    492:         return keys
                    493: 
                    494:     def mainNavElements(self):
                    495:         """print main navigation bar"""
                    496:         keys=""
1.12      dwinter   497:         #print "NAVELEMENT",self.getId()
1.5       dwinter   498:         #try:
                    499:       
                    500:         keys=self.barFromHash(self.createNavHash(0))
1.12      dwinter   501:         
1.5       dwinter   502:         #except:
                    503:         #    keys=""
1.1       dwinter   504:             
                    505:         return keys
1.12      dwinter   506: 
                    507:     def numberOfMainNavElements(self):
                    508:    """number of main elements"""
                    509: 
                    510:    return len(self.barFromHash(self.createNavHash(0))) 
                    511: 
1.1       dwinter   512:     def secondNavElements(self):
                    513:         """Zweite Ordnung"""
                    514:         
                    515:         hash=self.createNavHash(2)
                    516:         actual_url=self.REQUEST['URL']
                    517:         
                    518:         ult_temp=re.sub(self.absolute_url(),"",actual_url)
                    519:         #print ult_temp
                    520: 
                    521:         splitted=ult_temp.split("/")
                    522:         
                    523: 
                    524:         ## if splitted[len(splitted)-1]=="index_html":
                    525: ##             start=[splitted[len(splitted)-2]]
                    526: ##         else:
                    527: ##             start=[splitted[len(splitted)-1]]
                    528: 
                    529:         start=[splitted[2]]
1.7       dwinter   530:         #print start
                    531:        
                    532:         keys=self.barFromHash(hash,start=start)
                    533:         
                    534:         
                    535:         return keys
                    536: 
                    537:     def navElements(self,order):
                    538:         """n-te Ordnung"""
                    539:         
                    540:         hash=self.createNavHash(order)
                    541:         actual_url=self.REQUEST['URL']
                    542:         
                    543:         ult_temp=re.sub(self.absolute_url(),"",actual_url)
                    544:         #print ult_temp
                    545: 
                    546:         splitted=ult_temp.split("/")
                    547:         
                    548: 
                    549:         ## if splitted[len(splitted)-1]=="index_html":
                    550: ##             start=[splitted[len(splitted)-2]]
                    551: ##         else:
                    552: ##             start=[splitted[len(splitted)-1]]
                    553: 
                    554:         start=splitted[2:order+1]
1.1       dwinter   555:         #print start
1.5       dwinter   556:        
1.1       dwinter   557:         keys=self.barFromHash(hash,start=start)
                    558:         
                    559:         
                    560:         return keys
                    561: 
                    562: 
                    563:     def secondNavBar(self):
                    564:         """Zweite Ordnung"""
                    565: 
                    566:         hash=self.createNavHash(2)
                    567:         actual_url=self.REQUEST['URL']
                    568:         
                    569:         ult_temp=re.sub(self.absolute_url(),"",actual_url)
                    570:         #print ult_temp
                    571: 
                    572:         splitted=ult_temp.split("/")
                    573:         
                    574: 
                    575:         ## if splitted[len(splitted)-1]=="index_html":
                    576: ##             start=[splitted[len(splitted)-2]]
                    577: ##         else:
                    578: ##             start=[splitted[len(splitted)-1]]
                    579: 
                    580:         start=[splitted[2]]
                    581:         #print start
                    582:         
                    583:         keys=self.buttonsFromHash(hash,start=start,orientation="vertical")
                    584:         
                    585:         
                    586:         return keys
                    587: 
1.6       dwinter   588: def manage_addECHO_navigationForm(self):
1.1       dwinter   589:     """Form for adding"""
1.6       dwinter   590:     pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_navigation.zpt').__of__(self)
1.1       dwinter   591:     return pt()
                    592: 
1.6       dwinter   593: def manage_addECHO_navigation(self,id,title,pathToHierarchy,RESPONSE=None):
1.1       dwinter   594:     """Add an ECHO_root"""
                    595:     self._setObject(id,ECHO_navigation(id,title,pathToHierarchy))
                    596:     
                    597:     if RESPONSE is not None:
                    598:         RESPONSE.redirect('manage_main')
                    599: 
                    600: 
                    601: #helpers
                    602: 
1.3       dwinter   603: 
                    604: 
                    605: def createPath(url1,url2):
                    606:     temp1=url1.split("/")
                    607:     temp2=url2.split("/")
                    608:     for test in temp1:
                    609:         if temp2[0]==test:
                    610:             del temp2[0]
                    611: 
                    612:     return url1+"/"+string.join(temp2,"/")
1.4       dwinter   613: 
                    614: def sortWeight(x,y):
                    615:     #print x[1],y[1]
                    616:     return cmp(x[1],y[1])
1.1       dwinter   617:     

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