File:  [Repository] / ECHO_content / ECHO_Nav.py
Revision 1.4: download - view: text, annotated - select for diffs - revision graph
Tue Feb 3 17:31:16 2004 UTC (20 years, 5 months ago) by dwinter
Branches: MAIN
CVS tags: HEAD
weight added

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

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