File:  [Repository] / ECHO_content / ECHO_Nav.py
Revision 1.6: download - view: text, annotated - select for diffs - revision graph
Mon Feb 9 11:45:46 2004 UTC (20 years, 4 months ago) by dwinter
Branches: MAIN
CVS tags: HEAD
new structure

    1: # Objekte zur Erzeugung von Navigationselementen
    2: 
    3: 
    4: from OFS.Folder import Folder
    5: from OFS.SimpleItem import SimpleItem
    6: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
    7: from Products.PageTemplates.PageTemplate import PageTemplate
    8: import re
    9: import string
   10: from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
   11: import os.path
   12: from Globals import package_home
   13: import urllib
   14: 
   15: class ECHO_sqlElement(SimpleItem):
   16:     """Erzeuge navigation aus sql-abfrage"""
   17:     meta_type="ECHO_sqlElement"
   18:     baseUrl=""
   19:     
   20:     def __init__(self,id,title,query,field,baseUrl,weight,content_type):
   21:         """init"""
   22:         self.id=id
   23:         self.title=title
   24:         self.query=query
   25:         self.field=field
   26:         self.baseUrl=baseUrl
   27:         self.weight=weight
   28:         self.content=content_type
   29: 
   30:     manage_options= SimpleItem.manage_options+(
   31:         {'label':'Main Config','action':'changeECHO_sqlElementForm'},
   32:         )
   33: 
   34:     def getWeight(self):
   35:         """get weight"""
   36:         if hasattr(self,'weight'):
   37:             return self.weight
   38:         else:
   39:             return 0
   40:         
   41:     def getContent_type(self):
   42:         """get weight"""
   43:         
   44:         if hasattr(self,'content_type'):
   45:             return self.content_type
   46:         else:
   47:             return 0
   48:         
   49: 
   50:     def changeECHO_sqlElementForm(self):
   51:         """change"""
   52:         
   53:         pt=PageTemplateFile('Products/ECHO_content/zpt/changeECHO_sqlElement.zpt').__of__(self)
   54:         return pt()
   55: 
   56:     def changeECHO_sqlElement(self,title,query,field,baseUrl,weight,content_type,RESPONSE=None):
   57:         """change"""
   58:         self.title=title
   59:         self.query=query
   60:         self.field=field
   61:         self.baseUrl=baseUrl
   62:         self.weight=weight
   63:         self.content_type=content_type
   64:         
   65:         if RESPONSE is not None:
   66:             RESPONSE.redirect('manage_main')
   67: 
   68:     def searchQuery(self):
   69:         return self.search(var=self.query)
   70:     
   71:     def getNavList(self):
   72:         """ausgabe der treffer list für navigation"""
   73:         records=self.searchQuery()
   74:         if not records:
   75:             return []
   76:         else:
   77:             ret=[]
   78:             for record in records:
   79:                 ret.append((getattr(record,self.field),self.baseUrl+str(getattr(record,self.field))))
   80:             return ret
   81:     
   82: 
   83: def manage_addECHO_sqlElementForm(self):
   84:     """Form for adding"""
   85:     pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_sqlElement.zpt').__of__(self)
   86:     return pt()
   87: 
   88: def manage_addECHO_sqlElement(self,id,title,query,field,baseUrl,weight,content_type,RESPONSE=None):
   89:     """Add an ECHO_sqlelement"""
   90:     self._setObject(id,ECHO_sqlElement(id,title,query,field,baseUrl,weight,content_type))
   91:     
   92:     if RESPONSE is not None:
   93:         RESPONSE.redirect('manage_main')
   94: 
   95: 
   96: class ECHO_pageTemplate(ZopePageTemplate):
   97:     """pageTemplate Objekt"""
   98:     meta_type="ECHO_pageTemplate"
   99: 
  100:     _default_content_fn = os.path.join(package_home(globals()),
  101:                                        'html/ECHO_pageTemplateDefault.html')
  102: 
  103:     manage_options=ZopePageTemplate.manage_options+(
  104:         {'label':'Weight and Type','action':'changeECHO_pageTemplateWeightForm'},
  105:         )
  106: 
  107:     def changeECHO_pageTemplateWeightForm(self):
  108:         """change"""
  109:         pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_pageTemplateWeight.zpt').__of__(self)
  110:         return pt()
  111: 
  112:     def changeECHO_pageTemplateWeight(self,weight,content_type,RESPONSE=None):
  113:         """change"""
  114:         self.weight=weight
  115:         self.content_type=content_type
  116: 
  117:         if RESPONSE is not None:
  118:             RESPONSE.redirect('manage_main')
  119:         
  120:     def getWeight(self):
  121:         """get weight"""
  122:         if hasattr(self,'weight'):
  123:             return self.weight
  124:         else:
  125:             return 0
  126:         
  127:     def getContent_Type(self):
  128:         """get weight"""
  129:         if hasattr(self,'weight'):
  130:             return self.weight
  131:         else:
  132:             return 0
  133: 
  134: 
  135: 
  136: 
  137:     ## def __init__(self, id, text=None, content_type=None):
  138: ##         self.id = str(id)
  139: ##         self.ZBindings_edit(self._default_bindings)
  140: ##         if text is None:
  141: ##             text = open(self._default_cont).read()
  142: ##         self.pt_edit(text, content_type)
  143: 
  144: def manage_addECHO_pageTemplateForm(self):
  145:     """Form for adding"""
  146:     pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_pageTemplate.zpt').__of__(self)
  147:     return pt()
  148: 
  149: from urllib import quote
  150: 
  151: 
  152: def manage_addECHO_pageTemplate(self, id, weight= 0,content_type=0,title=None, text=None,
  153:                            REQUEST=None, submit=None):
  154:     "Add a Page Template with optional file content."
  155: 
  156:     
  157:     id = str(id)
  158:     if REQUEST is None:
  159:         self._setObject(id, ECHO_pageTemplate(id, text))
  160:         ob = getattr(self, id)
  161:         setattr(ob,'weight',weight)
  162:         setattr(ob,'content_type',content_type)
  163:         if title:
  164:             ob.pt_setTitle(title)
  165:         return ob
  166:     else:
  167:         file = REQUEST.form.get('file')
  168:         headers = getattr(file, 'headers', None)
  169:         if headers is None or not file.filename:
  170:             zpt = ECHO_pageTemplate(id)
  171:         else:
  172:             zpt = ECHO_pageTemplate(id, file, headers.get('content_type'))
  173: 
  174:         self._setObject(id, zpt)
  175:         ob = getattr(self, id)
  176:         setattr(ob,'weight',weight)
  177: 
  178:         try:
  179:             u = self.DestinationURL()
  180:         except AttributeError:
  181:             u = REQUEST['URL1']
  182: 
  183:         if submit == " Add and Edit ":
  184:             u = "%s/%s" % (u, quote(id))
  185:         REQUEST.RESPONSE.redirect(u+'/manage_main')
  186:     return ''
  187: 
  188: 
  189: class ECHO_navigation(Folder):
  190:     """Navigations Element"""
  191:     meta_type="ECHO_Navigation"
  192: 
  193:     displayedMetaTypes=['ECHO_collection','ECHO_pageTemplate','ZSQLExtendFolder','ECHO_sqlElement']
  194:     
  195:     def __init__(self,id,title,pathToHierarchy):
  196:         """init"""
  197:         self.id=id
  198:         self.title=title
  199:         self.pathToHierarchy=pathToHierarchy
  200: 
  201:     manage_options = Folder.manage_options+(
  202:         {'label':'Main Config','action':'ECHO_navigationConfigForm'},
  203:         )
  204: 
  205:     def ECHO_navigationConfigForm(self):
  206:         """configForm"""
  207:         pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_navigation.zpt').__of__(self)
  208:         return pt()
  209:     
  210:     def ECHO_navigationConfig(self,title,pathToHierarchy,RESPONSE=None):
  211:         """config"""
  212:         self.title=title
  213:         self.pathToHierarchy=pathToHierarchy
  214: 
  215:         if RESPONSE is not None:
  216:             RESPONSE.redirect('manage_main')
  217: 
  218: 
  219:     def getColls(self,obj,depth):
  220:         nav={}
  221:         #print "HERE",obj.
  222:         for keys in obj.__dict__.keys():
  223:             x=getattr(obj,keys)
  224:             if hasattr(x,"meta_type"):
  225:                 if x.meta_type in self.displayedMetaTypes:
  226:                     if depth>1:
  227:                         nav[x.getId()]=(self.getColls(x,depth-1),x)
  228:                     else:
  229:                         nav[x.getId()]=(None,x)
  230:         return nav
  231:     
  232:     def createNavHash(self,depth):
  233:         """Auslesen des Hierarchiebuames"""
  234:         temp=self.pathToHierarchy[0:]
  235:         temp=re.sub("/",".",temp)
  236:         temp="self.aq_parent"+temp
  237:         
  238:         objtemp=eval(temp)
  239:         nav={}
  240:         obj=objtemp
  241:         
  242:         #exec(obj)
  243: 
  244:         #objtemp = compile(temp,'<string>','single')
  245:         #obj=eval(objtemp)
  246:         #print obj 
  247:         
  248:         #print obj.__dict__.keys()
  249:         
  250:         for keys in obj.__dict__.keys():
  251:             x=getattr(obj,keys)
  252:             if hasattr(x,"meta_type"):
  253:                 #print x.meta_type
  254:                 if x.meta_type in self.displayedMetaTypes:
  255:                    
  256:                     if depth>1:
  257:                         nav[x.getId()]=(self.getColls(x,int(depth)-1),x)
  258:                     else:
  259:                         nav[x.getId()]=(None,x)
  260:                     
  261: 
  262:         #print nav
  263:         return nav
  264: 
  265:     def barFromHash(self,hash,start=None,sortField=None):
  266:         """Erzeuge Navigations Element"""
  267:         #print "hash",hash
  268:         listNav=[]
  269:         if not start:
  270:             temp=hash
  271:             sortField="weight"
  272:         else: # list mit pfad zum hash
  273:             temp=hash
  274:             print "HI",sortField
  275:             if not sortField:
  276:                 tempObj=self.pathToHierarchy[0:]
  277:                 tempObj=re.sub("/",".",tempObj)
  278:                 tempObj="self.aq_parent"+tempObj
  279: 
  280:                 objtemp=eval(tempObj)
  281: 
  282:                 obj=objtemp
  283: 
  284:                 for x in start:
  285: 
  286: 
  287:                     obj=getattr(obj,x)
  288: 
  289:                 if hasattr(obj,'sortfield'):
  290:                     sortField=obj.sortfield
  291:                 else:
  292:                     sortField='weight'
  293:             for x in start:
  294:                     temp=temp[x][0]
  295:         print "HELL",sortField
  296:         for x in self.tempSorted(temp, field=sortField):
  297:             if not temp[x][1].title == "":
  298:                 if temp[x][1].meta_type=="ECHO_sqlElement":
  299:                     for z in temp[x][1].getNavList():
  300:                         listNav.append((z[0],z[1]))
  301:                 else:
  302:                     listNav.append((temp[x][1].title,createPath(self.absolute_url(),temp[x][1].absolute_url())))
  303:                     
  304:         print self.getId(),start
  305:         print listNav
  306: 
  307:         #html=""
  308:         #for k in listNav:
  309:         #    print k
  310:         #    html=html+"<a href='%s'>%s</a>   "% (self.absolute_url()+createPath(k[1][1].absolute_url()),k[0])
  311: 
  312:         return listNav
  313: 
  314:     def tempSorted(self,hash,field="weight"):
  315:         ls=[]
  316:         print "SORT",field
  317:         for x in hash.keys():
  318:             #print hash[x][1]
  319:             if hasattr(hash[x][1],field):
  320:                 weight=getattr(hash[x][1],field)
  321:                 #print weight
  322:             else:
  323:                 weight=0
  324: 
  325:             ls.append((x,weight))
  326: 
  327:         ls.sort(sortWeight)
  328:         
  329:         return [x[0] for x in ls]
  330: 
  331:     
  332:         
  333:             
  334:     def isSelectedPath(self,item):
  335:         """test is path is already selected"""
  336:         found=re.search("\?(.*)",item[1])
  337:         if found:
  338:             temp=re.sub(" ","%20",found.group(0))
  339:             #print temp+"::"+self.REQUEST['QUERY_STRING']
  340:             if ("?"+self.REQUEST['QUERY_STRING'])==temp:
  341:                 return 1
  342: 
  343:         if re.search(item[1],self.REQUEST['URL']):
  344:             return 1
  345:         else:
  346:             return 0
  347:         
  348:     
  349:     def buttonsFromHash(self,hash,start=None,orientation="horizontal"):
  350:         
  351:         """Generate Buttons"""
  352:         if orientation=="horizontal":
  353:             html="<table><tr>"
  354:             startTag="<td>"
  355:             endTag="</td>"
  356:             endHtml="</tr></table>"
  357: 
  358:         else:
  359:             html="<table>"
  360:             startTag="<tr><td>"
  361:             endTag="</td></tr>"
  362:             endHtml="</table>"
  363:             
  364:         if not start:
  365:             temp=hash
  366:         else:
  367:             temp=hash
  368:             for x in start:
  369:                 temp=temp[x][0]
  370:                 #print temp
  371:         
  372:         for key in self.tempSorted(temp):
  373:             
  374:             description=temp[x][1].title
  375:          
  376:             url=createPath(self.absolute_url(),temp[key][1].absolute_url())
  377: 
  378:             if (self.REQUEST['URL']==url) | (self.REQUEST['URL']==url+"/index_html"):
  379:                 html=html+startTag+"[%s]" % description+endTag
  380:             else:                
  381:                 html=html+startTag+"[<a href='%s'>%s</a>]" % (url,description)+endTag
  382:             
  383: 
  384:         html=html+endHtml
  385:         
  386:         return html
  387: 
  388:     def mainNavBar(self):
  389:         """print main navigation bar"""
  390:         keys=""
  391:         print "NAVBAR",self.getId()
  392:         try:
  393:             keys=self.buttonsFromHash(self.createNavHash(0))
  394:         except:
  395:             keys=""
  396:             
  397:         return keys
  398: 
  399:     def mainNavElements(self):
  400:         """print main navigation bar"""
  401:         keys=""
  402:         print "NAVELEMENT",self.getId()
  403:         #try:
  404:       
  405:         keys=self.barFromHash(self.createNavHash(0))
  406: 
  407:         #except:
  408:         #    keys=""
  409:             
  410:         return keys
  411:     
  412:     def secondNavElements(self):
  413:         """Zweite Ordnung"""
  414:         
  415:         hash=self.createNavHash(2)
  416:         actual_url=self.REQUEST['URL']
  417:         
  418:         ult_temp=re.sub(self.absolute_url(),"",actual_url)
  419:         #print ult_temp
  420: 
  421:         splitted=ult_temp.split("/")
  422:         
  423: 
  424:         ## if splitted[len(splitted)-1]=="index_html":
  425: ##             start=[splitted[len(splitted)-2]]
  426: ##         else:
  427: ##             start=[splitted[len(splitted)-1]]
  428: 
  429:         start=[splitted[2]]
  430:         #print start
  431:        
  432:         keys=self.barFromHash(hash,start=start)
  433:         
  434:         
  435:         return keys
  436: 
  437: 
  438:     def secondNavBar(self):
  439:         """Zweite Ordnung"""
  440: 
  441:         hash=self.createNavHash(2)
  442:         actual_url=self.REQUEST['URL']
  443:         
  444:         ult_temp=re.sub(self.absolute_url(),"",actual_url)
  445:         #print ult_temp
  446: 
  447:         splitted=ult_temp.split("/")
  448:         
  449: 
  450:         ## if splitted[len(splitted)-1]=="index_html":
  451: ##             start=[splitted[len(splitted)-2]]
  452: ##         else:
  453: ##             start=[splitted[len(splitted)-1]]
  454: 
  455:         start=[splitted[2]]
  456:         #print start
  457:         
  458:         keys=self.buttonsFromHash(hash,start=start,orientation="vertical")
  459:         
  460:         
  461:         return keys
  462: 
  463: def manage_addECHO_navigationForm(self):
  464:     """Form for adding"""
  465:     pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_navigation.zpt').__of__(self)
  466:     return pt()
  467: 
  468: def manage_addECHO_navigation(self,id,title,pathToHierarchy,RESPONSE=None):
  469:     """Add an ECHO_root"""
  470:     self._setObject(id,ECHO_navigation(id,title,pathToHierarchy))
  471:     
  472:     if RESPONSE is not None:
  473:         RESPONSE.redirect('manage_main')
  474: 
  475: 
  476: #helpers
  477: 
  478: 
  479: 
  480: def createPath(url1,url2):
  481:     temp1=url1.split("/")
  482:     temp2=url2.split("/")
  483:     for test in temp1:
  484:         if temp2[0]==test:
  485:             del temp2[0]
  486: 
  487:     return url1+"/"+string.join(temp2,"/")
  488: 
  489: def sortWeight(x,y):
  490:     #print x[1],y[1]
  491:     return cmp(x[1],y[1])
  492:     

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