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