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>