File:  [Repository] / ECHO_content / ECHO_Nav.py
Revision 1.48: download - view: text, annotated - select for diffs - revision graph
Thu Oct 28 13:38:39 2004 UTC (19 years, 7 months ago) by dwinter
Branches: MAIN
CVS tags: HEAD
displaytypes fuer navigationshierarchie  nun in echo_nav konfigurierbar

    1: # Objekte zur Erzeugung von Navigationselementen
    2: 
    3: from Globals import DTMLFile
    4: from OFS.Image import Image,cookId
    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
   15: from ECHO_helpers import *
   16: from ECHO_collection import content_html
   17: from types import *
   18: 
   19: 
   20: from Globals import DTMLFile
   21: from OFS.Image import Image,cookId
   22: from OFS.Folder import Folder
   23: from OFS.SimpleItem import SimpleItem
   24: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
   25: from Products.PageTemplates.PageTemplate import PageTemplate
   26: import re
   27: import string
   28: from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
   29: import os.path
   30: from Globals import package_home
   31: import urllib
   32: from ECHO_helpers import displayTypes,checkOnlyOneInGroup
   33: from ECHO_collection import content_html
   34: 
   35: 
   36: 
   37: 
   38: class ECHO_ZCatalogElement(SimpleItem):
   39:     """Erzeuge navigation aus ZCatalog-abfrage"""
   40:     meta_type="ECHO_ZCatalogElement"
   41:     baseUrl=""
   42: 
   43:     def __init__(self,id,title,field,catalogId,baseUrl,weight,contentType):
   44:         """init"""
   45:         self.id=id
   46:         self.title=title
   47:         self.catalogId=catalogId
   48:         self.field=field
   49: 
   50:         self.baseUrl=baseUrl
   51:         self.weight=weight
   52:         self.content=contentType
   53: 
   54:         
   55:     manage_options= SimpleItem.manage_options+(
   56:         {'label':'Main Config','action':'changeECHO_ZCatalogElementForm'},
   57:         )
   58: 
   59:         
   60:     def getWeight(self):
   61:         """get weight"""
   62:         if hasattr(self,'weight'):
   63:             return self.weight
   64:         else:
   65:             return 0
   66:         
   67:     def getcontentType(self):
   68:         """get weight"""
   69:         
   70:         if hasattr(self,'contentType'):
   71:             return self.contentType
   72:         else:
   73:             return 0
   74:         
   75: 
   76:     def changeECHO_ZCatalogElementForm(self):
   77:         """change"""
   78:         
   79:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeECHO_ZCatalogElement.zpt')).__of__(self)
   80:         return pt()
   81: 
   82:     def changeECHO_ZCatalogElement(self,title,field,catalogId,baseUrl,weight,contentType,RESPONSE=None):
   83:         """change"""
   84:         self.title=title
   85:         self.catalogId=catalogId
   86:         self.field=field
   87:         self.baseUrl=baseUrl
   88:         self.weight=weight
   89:         self.contentType=contentType
   90:         
   91:         if RESPONSE is not None:
   92:             RESPONSE.redirect('manage_main')
   93:     def getKeywordList(self):
   94:         return getattr(self,self.catalogId).uniqueValuesFor(self.field)
   95:     
   96:     def getNavList(self):
   97:         """ausgabe der treffer list für navigation"""
   98:         
   99:         records=self.getKeywordList()
  100:         
  101:         
  102:         if not records:
  103:             return []
  104:         else:
  105:             ret=[]
  106:             for record in records:
  107:                 #print "RC",record
  108:                 #if record:
  109:                 #    ret.append((record,self.baseUrl+urllib.quote(record)))
  110:                 try:
  111:                     ret.append((record,self.baseUrl+urllib.quote(record)))
  112:                 except:
  113:                     """nothing"""
  114:                     
  115:             return ret
  116:     
  117: 
  118: def manage_addECHO_ZCatalogElementForm(self):
  119:     """Form for adding"""
  120:     pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ECHO_content/zpt/AddECHO_ZCatalogElement.zpt')).__of__(self)
  121:     return pt()
  122: 
  123: def manage_addECHO_ZCatalogElement(self,id,title,field,baseUrl,weight,contentType,RESPONSE=None):
  124:     """Add an ECHO_ZCatalogelement"""
  125:     self._setObject(id,ECHO_ZCatalogElement(id,title,field,baseUrl,weight,contentType))
  126:     
  127:     if RESPONSE is not None:
  128:         RESPONSE.redirect('manage_main')
  129: 
  130: 
  131: 
  132: class ECHO_contentType(Image):
  133:     """ContentType Object"""
  134: 
  135:     meta_type="ECHO_contentType"
  136: 
  137:     
  138:     manage_options=Image.manage_options+(
  139:         {'label':'Change Description','action':'changeECHO_contentTypeForm'},
  140:        )
  141: 
  142:     def changeECHO_contentTypeForm(self):
  143:         """Change the description text"""
  144:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeECHO_contentType.zpt')).__of__(self)
  145:         return pt()
  146:  
  147:     def changeECHO_contentType(self,description,RESPONSE=None):
  148:         """Change the Content"""
  149:         self.description=description
  150:         if RESPONSE is not None:
  151:             RESPONSE.redirect('manage_main')
  152: 
  153: manage_addECHO_contentTypeForm=DTMLFile('dtml/ECHO_contentTypeAdd',globals(),
  154:                              Kind='ECHO_contentType',kind='ECHO_contentType')
  155: 
  156: def manage_addECHO_contentType(self, id, file=None, title='', precondition='', content_type='', description='',
  157:                     REQUEST=None):
  158:     """
  159:     Add a new Image object.
  160: 
  161:     Creates a new Image object 'id' with the contents of 'file'.
  162:     """
  163: 
  164:     id=str(id)
  165:     title=str(title)
  166:     content_type=str(content_type)
  167:     precondition=str(precondition)
  168: 
  169:     id, title = cookId(id, title, file)
  170: 
  171:     self=self.this()
  172: 
  173:     # First, we create the image without data:
  174:     self._setObject(id, ECHO_contentType(id,title,'',content_type, precondition))
  175: 
  176:     self._getOb(id).description=description
  177:         
  178:     # Now we "upload" the data.  By doing this in two steps, we
  179:     # can use a database trick to make the upload more efficient.
  180:     if file:
  181:         self._getOb(id).manage_upload(file)
  182:     if content_type:
  183:         self._getOb(id).content_type=content_type
  184: 
  185:     if REQUEST is not None:
  186:         try:    url=self.DestinationURL()
  187:         except: url=REQUEST['URL1']
  188:         REQUEST.RESPONSE.redirect('%s/manage_main' % url)
  189:     return id
  190: 
  191: 
  192: class ECHO_sqlElement(SimpleItem):
  193:     """Erzeuge navigation aus sql-abfrage"""
  194:     meta_type="ECHO_sqlElement"
  195:     baseUrl=""
  196: 
  197: 
  198:     
  199:     def __init__(self,id,title,query,field,searchField,baseUrl,weight,contentType):
  200:         """init"""
  201:         self.id=id
  202:         self.title=title
  203:         self.query=query
  204:         self.field=field
  205:         if searchField=="":
  206:             self.searchField=field
  207:         else:
  208:             self.searchField=searchField
  209:         self.baseUrl=baseUrl
  210: 
  211:         self.content=contentType
  212: 
  213:     manage_options= SimpleItem.manage_options+(
  214:         {'label':'Main Config','action':'changeECHO_sqlElementForm'},
  215:         )
  216: 
  217:     def getSearchField(self):
  218:         try:
  219:             return self.searchField
  220:         except:
  221:             return self.field
  222:         
  223:     def getWeight(self):
  224:         """get weight"""
  225:         if hasattr(self,'weight'):
  226:             return self.weight
  227:         else:
  228:             return 0
  229:         
  230:     def getcontentType(self):
  231:         """get weight"""
  232:         
  233:         if hasattr(self,'contentType'):
  234:             return self.contentType
  235:         else:
  236:             return 0
  237:         
  238: 
  239:     def changeECHO_sqlElementForm(self):
  240:         """change"""
  241:         
  242:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeECHO_sqlElement.zpt')).__of__(self)
  243:         return pt()
  244: 
  245:     def changeECHO_sqlElement(self,title,query,field,searchField,baseUrl,weight,contentType,RESPONSE=None):
  246:         """change"""
  247:         self.title=title
  248:         self.query=query
  249:         self.field=field
  250:         self.searchField=searchField
  251:         self.baseUrl=baseUrl
  252:         self.weight=weight
  253:         self.contentType=contentType
  254:         
  255:         if RESPONSE is not None:
  256:             RESPONSE.redirect('manage_main')
  257: 
  258:     def searchQuery(self,query=None,obj=None):
  259:         #presently a hack, tests if search is of the search method, if not look at the next level.
  260:         #
  261:         #return self.ZSQLsimpleSearch(var=self.query)
  262:         if not query:
  263:             query=self.query
  264:            
  265:         if self.search.meta_type=="Z SQL Method":
  266:             return self.search(var=self.query)
  267:         else:
  268:             if self.aq_parent.aq_parent.search.meta_type=="Z SQL Method":
  269:                 return self.aq_parent.aq_parent.search(var=self.query)
  270:             else:
  271:                 return []
  272:         
  273:         
  274:         
  275:     
  276:     def getNavList(self):
  277:         """ausgabe der treffer list für navigation"""
  278:         
  279:         records=self.searchQuery()
  280:       
  281:         
  282:         if not records:
  283:             return []
  284:         else:
  285:             ret=[]
  286:             for record in records:
  287:                 try:
  288:                     ret.append((getattr(record,self.field),self.baseUrl+urllib.quote(str(getattr(record,self.getSearchField())))))
  289:                 except:
  290:                     """notrhing"""
  291:                     
  292:             return ret
  293:     
  294: 
  295: def manage_addECHO_sqlElementForm(self):
  296:     """Form for adding"""
  297:     pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddECHO_sqlElement.zpt')).__of__(self)
  298:     return pt()
  299: 
  300: def manage_addECHO_sqlElement(self,id,title,query,field,searchField,baseUrl,weight,contentType,RESPONSE=None):
  301:     """Add an ECHO_sqlelement"""
  302:     self._setObject(id,ECHO_sqlElement(id,title,query,field,searchField,baseUrl,weight,contentType))
  303:     
  304:     if RESPONSE is not None:
  305:         RESPONSE.redirect('manage_main')
  306: 
  307: 
  308: class ECHO_pageTemplate(ZopePageTemplate):
  309:     """pageTemplate Objekt"""
  310:     meta_type="ECHO_pageTemplate"
  311: 
  312:     _default_content_fn = os.path.join(package_home(globals()),
  313:                                        'html/ECHO_pageTemplateDefault.html')
  314: 
  315:     manage_options=ZopePageTemplate.manage_options+(
  316:         {'label':'Main Config','action':'changeECHO_pageTemplateMainForm'},
  317:         )
  318: 
  319:     def content_html(self):
  320: 	"""content_html"""
  321: 	return content_html(self,'pageTemplate')
  322: 
  323:     def changeECHO_pageTemplateMainForm(self):
  324:         """change"""
  325:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ChangeECHO_pageTemplateMain.zpt')).__of__(self)
  326:         return pt()
  327: 
  328:     def changeECHO_pageTemplateMain(self,weight,contentType,label,description,RESPONSE=None,isAlwaysClickable=None,suffix=None,prefix=None):
  329:         """change"""
  330:         self.weight=weight
  331:         self.contentType=contentType
  332:         self.label=label
  333:         self.description=description
  334:         self.isAlwaysClickable=isAlwaysClickable
  335:         self.suffix=suffix
  336:         self.prefix=prefix
  337:         
  338:         if RESPONSE is not None:
  339:             RESPONSE.redirect('manage_main')
  340: 
  341:     def getLabel(self):
  342:         if hasattr(self,'label'):
  343:             return self.label.encode('utf-8')
  344:         
  345:         else:
  346:             return 0
  347:         
  348:     def getWeight(self):
  349:         """get weight"""
  350:         if hasattr(self,'weight'):
  351:             return self.weight
  352:         else:
  353:             return 0
  354:         
  355:     def getcontentType(self):
  356:         """get contentType"""
  357:         if hasattr(self,'contentType'):
  358:             return self.contentType
  359:         else:
  360:             return 0
  361: 
  362: 
  363: 
  364: 
  365:     ## def __init__(self, id, text=None, contentType=None):
  366: ##         self.id = str(id)
  367: ##         self.ZBindings_edit(self._default_bindings)
  368: ##         if text is None:
  369: ##             text = open(self._default_cont).read()
  370: ##         self.pt_edit(text, contentType)
  371: 
  372: def manage_addECHO_pageTemplateForm(self):
  373:     """Form for adding"""
  374:     pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','Products/ECHO_content/zpt/AddECHO_pageTemplate.zpt')).__of__(self)
  375:     return pt()
  376: 
  377: from urllib import quote
  378: 
  379: 
  380: def manage_addECHO_pageTemplate(self, id, label, weight= 0,contentType=0,title=None, text=None,
  381:                            REQUEST=None, submit=None):
  382:     "Add a Page Template with optional file content."
  383: 
  384:     
  385:     id = str(id)
  386:     if REQUEST is None:
  387:         self._setObject(id, ECHO_pageTemplate(id, text))
  388:         ob = getattr(self, id)
  389:         setattr(ob,'weight',weight)
  390:         setattr(ob,'label',label)
  391:         setattr(ob,'contentType',contentType)
  392:         if title:
  393:             ob.pt_setTitle(title)
  394:         return ob
  395:     else:
  396:         file = REQUEST.form.get('file')
  397:         headers = getattr(file, 'headers', None)
  398:         if headers is None or not file.filename:
  399:             zpt = ECHO_pageTemplate(id)
  400:         else:
  401:             zpt = ECHO_pageTemplate(id, file, headers.get('contentType'))
  402: 
  403:         self._setObject(id, zpt)
  404:         ob = getattr(self, id)
  405:         setattr(ob,'weight',weight)
  406:         setattr(ob,'label',label)
  407:         if title:
  408:             ob.pt_setTitle(title)
  409:         
  410:         try:
  411:             u = self.DestinationURL()
  412:         except AttributeError:
  413:             u = REQUEST['URL1']
  414: 
  415:         if submit == " Add and Edit ":
  416:             u = "%s/%s" % (u, quote(id))
  417:         REQUEST.RESPONSE.redirect(u+'/manage_main')
  418:     return ''
  419: 
  420: 
  421: class ECHO_navigation(Folder):
  422:     """Navigations Element"""
  423:     meta_type="ECHO_Navigation"
  424: 
  425:     def ECHOFormatListStr(self,list,search="\n",replace="<br>"):
  426:         """formatiert liste im str"""
  427: 	if list:
  428:         	return re.sub(search,replace,list)
  429:     	else:
  430: 		return 
  431: 
  432:     def ECHO_cacheManageForm(self):
  433: 	    """change form"""
  434: 	    pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ECHO_cacheManageForm')).__of__(self)
  435: 	    pt.content_type="text/html"
  436: 	    return pt()
  437: 
  438:     def ECHO_cacheManage(self,cacheManagerName=None,deleteCache=None, activateCache=None,RESPONSE=None):
  439: 	    """cachemanager"""
  440: 	    if cacheManagerName=="": chacheManagerName=None
  441: 	    
  442: 	    self.cacheManagerName=cacheManagerName
  443: 	    self.setCache(managerName=cacheManagerName)
  444: 	    
  445: 	    if deleteCache:
  446:                 try:
  447: 		    self.deleteCache()
  448:                 except:
  449:                     for roots in self.ZopeFind(self,obj_metatypes=['ECHO_root'],search_sub=1):
  450:                         roots[1].deleteCache()
  451:                     
  452: 
  453: 	    self.activateCache=activateCache
  454: 
  455: 	    if RESPONSE is not None:
  456: 		    RESPONSE.redirect('manage_main')
  457: 	
  458:     def setCache(self,obj=None,RESPONSE=None,managerName='CacheManager'):
  459:         """setze alle collections auf cache = CacheManager"""
  460: 
  461: 
  462:         if not obj:
  463:             obj = self
  464:             
  465:         entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_collection'],search_sub=1)
  466: 
  467:         for entry in entries:
  468:             #print entry[0]
  469:             entry[1].ZCacheable_setManagerId(managerName)
  470: 
  471:         
  472:         return "changed all CM in: "+self.title
  473: 
  474:     
  475: 
  476:     displayableMetaTypes=displayTypes
  477:     
  478:     def getImageViewers(self):
  479:         """images"""
  480:         viewers=self.ZopeFind(self.standardImageViewer,obj_metatypes=['OSAS_ViewerObject'])
  481:         return viewers
  482:     
  483:     def getR(self):
  484: 	"""re"""
  485: 	return self.REQUEST
  486: 
  487:     def __init__(self,id,title,pathToHierarchy):
  488:         """init"""
  489:         self.id=id
  490:         self.title=title
  491:         self.pathToHierarchy=pathToHierarchy
  492:         self.displayedMetaTypes=displayTypes
  493:         
  494:     manage_options = Folder.manage_options+(
  495:         {'label':'Main Config','action':'ECHO_navigationConfigForm'},
  496:         {'label':'Cache','action':'ECHO_cacheManageForm'},
  497: 
  498:         )
  499:     displayedMetaTypes=displayTypes
  500:     
  501:     def ECHO_navigationConfigForm(self):
  502:         """configForm"""
  503:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ChangeECHO_navigation.zpt')).__of__(self)
  504:         return pt()
  505:     
  506:     def ECHO_navigationConfig(self,title,pathToHierarchy,displayedMetaTypes=displayTypes,RESPONSE=None):
  507:         """config"""
  508:         self.title=title
  509:         self.pathToHierarchy=pathToHierarchy
  510:         self.displayedMetaTypes=toList(displayedMetaTypes)[0:]
  511: 
  512: 
  513:         if RESPONSE is not None:
  514:             RESPONSE.redirect('manage_main')
  515: 
  516: 
  517:     def getColls(self,obj,depth,checkOnly="no"):
  518:         nav={}
  519:         #print "HERE",obj.
  520:         for x_objs in obj.ZopeFind(obj,obj_metatypes=self.displayedMetaTypes):
  521:             x=x_objs[1]
  522:             if checkOnly=="yes":
  523:                 x = checkOnlyOneInGroup(x)
  524:             if depth>1:
  525:                 nav[x.getId()]=(self.getColls(x,depth-1),x)
  526:             else:
  527:                 nav[x.getId()]=(None,x)
  528:         return nav
  529:     
  530:     def createNavHash(self,depth,checkOnly="no"):
  531:         """Auslesen des Hierarchiebuames"""
  532:         temp=self.pathToHierarchy[0:]
  533:         temp=re.sub("/",".",temp)
  534:         temp="self.aq_parent"+temp
  535: 
  536:         
  537:         objtemp=eval(temp)
  538:         nav={}
  539:         
  540:         #check if cash is enabled and if already exists and if not empty
  541:         if getattr(self,'_v_hash',None) and getattr(self,'activateCache',None) and self._v_hash.get(str(depth),None):
  542:            
  543:            return self._v_hash[str(depth)]
  544: 
  545:         # if not generate new hash
  546:         obj=objtemp      
  547: 
  548:         for keys in obj.ZopeFind(obj,obj_metatypes=self.displayedMetaTypes):
  549:             x=keys[1]
  550:             if depth>1:
  551:                 nav[x.getId()]=(self.getColls(x,int(depth)-1,checkOnly),x)
  552:             else:
  553:                 nav[x.getId()]=(None,x)
  554:             
  555:         #store in cache if activated
  556:         if getattr(self,'activateCache',None):
  557:             
  558:             try:
  559:                 self._v_hash[str(depth)]={}
  560:             except:
  561:                 self._v_hash={}
  562:                 self._v_hash[str(depth)]={}
  563: 
  564:             for x in nav.keys():
  565:                 self._v_hash[str(depth)][x]=nav[x]
  566: 
  567:         return nav
  568: 
  569:     def barFromHash(self,hash,start=None,sortField=None,location=None):
  570:         """Erzeuge Navigations Element"""
  571:         #print "hash",hash
  572:         listNav=[]
  573:         if not start:
  574:             temp=hash
  575:             sortField="weight"
  576:         else: # liste mit pfad zum hash
  577:             temp=hash
  578:             #print "HI",sortField
  579:             if not sortField:
  580:                 tempObj=self.pathToHierarchy[0:]
  581:                 tempObj=re.sub("/",".",tempObj)
  582:                 tempObj="self.aq_parent"+tempObj
  583: 		#print tempObj
  584:                 objtemp=eval(tempObj)
  585: 
  586:                 obj=objtemp
  587: 
  588:                 for x in start:
  589:                     #print "OBJ",start,obj,obj.getId(),x
  590: 
  591:                     obj=getattr(obj,x)
  592: 
  593:                 if hasattr(obj,'sortfield'):
  594:                     sortField=obj.sortfield
  595:                 else:
  596:                     sortField='weight'
  597:             #print "START",start
  598:             for x in start:
  599:                 #print "N2",x,temp[x]
  600:                 try:
  601:                     temp=temp[x][0]
  602:                 except:
  603:                     """nothing"""
  604:                     return []
  605:             #print "TEMP",temp,self.tempSorted(temp, field=sortField)
  606: 
  607:         for x in self.tempSorted(temp, field=sortField):
  608:             
  609:             if not temp[x][1].title == "":
  610:                 
  611:                 if (temp[x][1].meta_type=="ECHO_sqlElement") or (temp[x][1].meta_type=="ECHO_ZCatalogElement"):
  612:             
  613:                     for z in temp[x][1].getNavList():
  614:                         listNav.append((z[0],z[1],None,'',''))
  615:             
  616:                 else:
  617:                     # add label falls existiert und nicht leer
  618:                     if hasattr(temp[x][1],'label'):
  619:                         
  620:                         if not temp[x][1].label=='':
  621:                             try:
  622:                                 label=temp[x][1].getLabel()
  623:                             except:
  624:                                 label=temp[x][1].label
  625:                         else:
  626:                             label=temp[x][1].title.encode('utf-8')
  627:                     else:
  628:                         label=temp[x][1].title.encode('utf-8')                            
  629: 
  630:                     if location:
  631:                         loc=getattr(temp[x][1],'location','top')
  632:                         if (loc==location):
  633:                             listNav.append((label,createPath(self.absolute_url(),temp[x][1].absolute_url()),temp[x][1],getattr(temp[x][1],'prefix',''),getattr(temp[x][1],'suffix','')))
  634:                     else:
  635:                         listNav.append((label,createPath(self.absolute_url(),temp[x][1].absolute_url()),temp[x][1],getattr(temp[x][1],'prefix',''),getattr(temp[x][1],'suffix','')))
  636: 
  637:         return listNav
  638: 
  639:     def tempSorted(self,hash,field="weight"):
  640:         ls=[]
  641: 
  642:         for x in hash.keys():
  643:             #print hash[x][1]
  644:             if hasattr(hash[x][1],field):
  645:                 weight=getattr(hash[x][1],field)
  646:                 #print weight
  647:             else:
  648:                 weight=0
  649: 
  650:             ls.append((x,weight))
  651: 
  652:         ls.sort(sortWeight)
  653:         
  654:         return [x[0] for x in ls]
  655: 
  656:     
  657:         
  658:             
  659:     def isSelectedPath(self,item):
  660:         """test is path is already selected"""
  661: 
  662:         testStr=re.sub("/index_html",'',self.REQUEST.get('URL',''))
  663: 
  664:         #falls exakte Übereinstimmung dann immer 1
  665:         if (testStr==item[1]) and (self.REQUEST.get('QUERY_STRING','')==''):
  666:             
  667:             return 1
  668:            
  669:         found=re.search("\?(.*)",item[1])
  670:         
  671:         if found:
  672:             temp=re.sub(" ","%20",found.group(0))
  673:           
  674:             #print temp+"::"+self.REQUEST['QUERY_STRING']
  675:             if ("?"+self.REQUEST['QUERY_STRING'])==temp:
  676:                 if getattr(item[2],'isAlwaysClickable',None): #immer auswaehlbar?
  677:                 
  678:                     return 2
  679:                 else:
  680:                     return 1
  681: 
  682:         if (getattr(item[2],'meta_type','')=="ECHO_pageTemplate") and (re.search(item[1],self.REQUEST['URL'])):
  683:             if getattr(item[2],'isAlwaysClickable',None): #immer auswaehlbar?
  684:                 
  685:                 return 2
  686:             else:
  687:                 return 1
  688: 
  689:         if re.search(item[1]+"/",self.REQUEST['URL']):
  690:             if getattr(item[2],'isAlwaysClickable',None): #immer auswaehlbar?
  691:                 
  692:                 return 2
  693:             else:
  694:                 return 1
  695:         else:
  696:             return 0
  697: 
  698:         
  699:         
  700:     
  701:     def buttonsFromHash(self,hash,start=None,orientation="horizontal"):
  702:         
  703:         """Generate Buttons"""
  704:         if orientation=="horizontal":
  705:             html="<table><tr>"
  706:             startTag="<td>"
  707:             endTag="</td>"
  708:             endHtml="</tr></table>"
  709: 
  710:         else:
  711:             html="<table>"
  712:             startTag="<tr><td>"
  713:             endTag="</td></tr>"
  714:             endHtml="</table>"
  715:             
  716:         if not start:
  717:             temp=hash
  718:         else:
  719:             temp=hash
  720:             for x in start:
  721:                 temp=temp[x][0]
  722:                 #print temp
  723:         
  724:         for key in self.tempSorted(temp):
  725:             
  726:             description=temp[x][1].title
  727:          
  728:             url=createPath(self.absolute_url(),temp[key][1].absolute_url())
  729: 
  730:             if (self.REQUEST['URL']==url) | (self.REQUEST['URL']==url+"/index_html"):
  731:                 html=html+startTag+"[%s]" % description+endTag
  732:             else:                
  733:                 html=html+startTag+"[<a href='%s'>%s</a>]" % (url,description)+endTag
  734:             
  735: 
  736:         html=html+endHtml
  737:         
  738:         return html
  739: 
  740:     def mainNavBar(self):
  741:         """print main navigation bar"""
  742:         keys=""
  743: 
  744:         try:
  745:             keys=self.buttonsFromHash(self.createNavHash(0))
  746:         except:
  747:             keys=""
  748:             
  749:         return keys
  750: 
  751:     def mainNavElements(self,location=None):
  752:         """print main navigation bar"""
  753:         keys=""
  754:         #print "NAVELEMENT",self.getId()
  755:         #try:
  756:         
  757:         keys=self.barFromHash(self.createNavHash(0),location=location)
  758:         
  759:         #except:
  760:         #    keys=""
  761:             
  762:         return keys
  763: 
  764:     def numberOfMainNavElements(self):
  765: 	"""number of main elements"""
  766: 
  767: 	return len(self.barFromHash(self.createNavHash(0))) 
  768: 
  769:     def startOfHierarchy(self,list):
  770:         splitted=self.pathToHierarchy.split("/")
  771:         last=splitted[len(splitted)-1]
  772:         #print last,list
  773:         try:
  774:             nr=list.index(last)
  775:         except:
  776:             nr=0
  777:         return nr+1
  778:     
  779:     def secondNavElements(self):
  780:         """Zweite Ordnung"""
  781:         
  782:         hash=self.createNavHash(2,checkOnly="no")
  783:         actual_url=self.REQUEST['URL']
  784:         
  785:         ult_temp=re.sub(self.absolute_url(),"",actual_url)
  786:         #print ult_temp
  787: 
  788:         splitted=ult_temp.split("/")
  789:         
  790: 	#print "AU",self.absolute_url(),splitted
  791: 	#start=[splitted[2]] #orig
  792:         startNr= self.startOfHierarchy(splitted)
  793:         
  794: 	start=[splitted[startNr]]
  795: 	
  796:         #print start
  797:        
  798:         keys=self.barFromHash(hash,start=start)
  799:         
  800:         
  801:         return keys
  802: 
  803:     def navElements(self,order):
  804:         """n-te Ordnung"""
  805:         
  806:         hash=self.createNavHash(order)
  807:         actual_url=self.REQUEST['URL']
  808:         
  809:         ult_temp=re.sub(self.absolute_url(),"",actual_url)
  810:         #print ult_temp
  811: 
  812:         splitted=ult_temp.split("/")
  813:         
  814: 
  815:         ## if splitted[len(splitted)-1]=="index_html":
  816: ##             start=[splitted[len(splitted)-2]]
  817: ##         else:
  818: ##             start=[splitted[len(splitted)-1]]
  819: 
  820:         #start=splitted[2:order+1] #orig
  821:         startNr= self.startOfHierarchy(splitted)
  822:         #print startNr
  823: 	start=splitted[startNr:order+startNr-1] 
  824:         #print start
  825:        
  826:         keys=self.barFromHash(hash,start=start)
  827:         
  828:         
  829:         return keys
  830: 
  831: 
  832:     def secondNavBar(self):
  833:         """Zweite Ordnung"""
  834: 
  835:         hash=self.createNavHash(2)
  836:         actual_url=self.REQUEST['URL']
  837:         
  838:         ult_temp=re.sub(self.absolute_url(),"",actual_url)
  839:         #print ult_temp
  840: 
  841:         splitted=ult_temp.split("/")
  842:         
  843: 
  844:         ## if splitted[len(splitted)-1]=="index_html":
  845: ##             start=[splitted[len(splitted)-2]]
  846: ##         else:
  847: ##             start=[splitted[len(splitted)-1]]
  848: 
  849:         start=[splitted[2]]
  850:         #print start
  851:         
  852:         keys=self.buttonsFromHash(hash,start=start,orientation="vertical")
  853:         
  854:         
  855:         return keys
  856: 
  857: def manage_addECHO_navigationForm(self):
  858:     """Form for adding"""
  859:     pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddECHO_navigation.zpt')).__of__(self)
  860:     return pt()
  861: 
  862: def manage_addECHO_navigation(self,id,title,pathToHierarchy,RESPONSE=None):
  863:     """Add an ECHO_root"""
  864:     self._setObject(id,ECHO_navigation(id,title,pathToHierarchy))
  865:     
  866:     if RESPONSE is not None:
  867:         RESPONSE.redirect('manage_main')
  868: 
  869: 
  870: #helpers
  871: 
  872: 
  873: 
  874: def createPath(url1,url2):
  875:     temp1=url1.split("/")
  876:     temp2=url2.split("/")
  877:     for test in temp1:
  878:         if temp2[0]==test:
  879:             del temp2[0]
  880: 
  881:     #print "CP:"+url1+"::"+url2+"::"+url1+"/"+string.join(temp2,"/")
  882:     return url1+"/"+string.join(temp2,"/")
  883: 
  884: def sortWeight(x,y):
  885:     #print x[1],y[1]
  886:     return cmp(x[1],y[1])
  887:     

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