Annotation of ECHO_content/ECHO_Nav.py, revision 1.4
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.3 dwinter 20: def __init__(self,id,title,query,field,baseUrl,weight):
1.1 dwinter 21: """init"""
22: self.id=id
23: self.title=title
24: self.query=query
25: self.field=field
26: self.baseUrl=baseUrl
1.3 dwinter 27: self.weight=weight
1.1 dwinter 28:
29: manage_options= SimpleItem.manage_options+(
30: {'label':'Main Config','action':'changeECHO_sqlElementForm'},
31: )
32:
1.3 dwinter 33: def getWeight(self):
1.4 ! dwinter 34: """get weight"""
! 35: if hasattr(self,'weight'):
! 36: return self.weight
1.3 dwinter 37: else:
38: return 0
39:
40:
41:
1.1 dwinter 42: def changeECHO_sqlElementForm(self):
43: """change"""
44: pt=PageTemplateFile('Products/ECHO_content/ChangeECHO_sqlElement.zpt').__of__(self)
45: return pt()
46:
1.3 dwinter 47: def changeECHO_sqlElement(self,title,query,field,baseUrl,weight,RESPONSE=None):
1.1 dwinter 48: """change"""
49: self.title=title
50: self.query=query
51: self.field=field
52: self.baseUrl=baseUrl
1.3 dwinter 53: self.weight=weight
1.1 dwinter 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:
1.3 dwinter 93: manage_options=ZopePageTemplate.manage_options+(
94: {'label':'Weight','action':'changeECHO_pageTemplateWeightForm'},
95: )
96:
97: def changeECHO_pageTemplateWeightForm(self):
1.4 ! dwinter 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
1.3 dwinter 105:
1.4 ! dwinter 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
1.3 dwinter 115:
116:
1.1 dwinter 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:
1.3 dwinter 133: def manage_AddECHO_pageTemplate(self, id, weight= 0,title=None, text=None,
1.1 dwinter 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)
1.3 dwinter 142: setattr(ob,'weight',weight)
1.1 dwinter 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)
1.3 dwinter 155: ob = getattr(self, id)
156: setattr(ob,'weight',weight)
1.1 dwinter 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)
1.4 ! dwinter 226: #print obj
1.1 dwinter 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]
1.4 ! dwinter 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:
1.1 dwinter 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:
1.4 ! dwinter 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:
1.1 dwinter 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
1.2 dwinter 333:
1.3 dwinter 334: url=createPath(self.absolute_url(),temp[key][1].absolute_url())
1.2 dwinter 335:
1.1 dwinter 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))
1.4 ! dwinter 362:
1.1 dwinter 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:
1.3 dwinter 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,"/")
1.4 ! dwinter 444:
! 445: def sortWeight(x,y):
! 446: #print x[1],y[1]
! 447: return cmp(x[1],y[1])
1.1 dwinter 448:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>